From 264fbdf7c9c746011cae5d0dbdbcb72dc271455c Mon Sep 17 00:00:00 2001 From: morethanwords Date: Thu, 7 Oct 2021 18:49:50 +0400 Subject: [PATCH] Build --- .env | 4 ++-- public/0.acb684dc35d9188bd6be.chunk.js.map | 2 +- ...fb90001b6aa19.chunk.js => 1.8ebe82cad4450b8187c1.chunk.js} | 4 ++-- ...6aa19.chunk.js.map => 1.8ebe82cad4450b8187c1.chunk.js.map} | 2 +- public/15.04217e6c6e21ea0189db.chunk.js | 2 -- public/15.04217e6c6e21ea0189db.chunk.js.map | 1 - public/15.1a3e11966cccf1381885.chunk.js | 2 ++ public/15.1a3e11966cccf1381885.chunk.js.map | 1 + public/19.804c41f1066e7188e13a.chunk.js.map | 2 +- public/21.0d6505cd9495fe305ff6.chunk.js.map | 2 +- public/index.html | 2 +- ...84a7ec21.bundle.js => main.3f7a70559679af85e450.bundle.js} | 4 ++-- ....bundle.js.map => main.3f7a70559679af85e450.bundle.js.map} | 2 +- ...s => mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js} | 4 ++-- ... mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map} | 2 +- public/sw.js | 2 +- 16 files changed, 19 insertions(+), 19 deletions(-) rename public/{1.90adb57fb90001b6aa19.chunk.js => 1.8ebe82cad4450b8187c1.chunk.js} (99%) rename public/{1.90adb57fb90001b6aa19.chunk.js.map => 1.8ebe82cad4450b8187c1.chunk.js.map} (99%) delete mode 100644 public/15.04217e6c6e21ea0189db.chunk.js delete mode 100644 public/15.04217e6c6e21ea0189db.chunk.js.map create mode 100644 public/15.1a3e11966cccf1381885.chunk.js create mode 100644 public/15.1a3e11966cccf1381885.chunk.js.map rename public/{main.8169b7c35af184a7ec21.bundle.js => main.3f7a70559679af85e450.bundle.js} (96%) rename public/{main.8169b7c35af184a7ec21.bundle.js.map => main.3f7a70559679af85e450.bundle.js.map} (99%) rename public/{mtproto.worker.08024df6e720e6031331.bundle.worker.js => mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js} (99%) rename public/{mtproto.worker.08024df6e720e6031331.bundle.worker.js.map => mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map} (99%) diff --git a/.env b/.env index 965341a2..b9424597 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ API_ID=1025907 API_HASH=452b0359b988148995f22ff0f4229750 VERSION=0.8.6 -VERSION_FULL=0.8.6 (4) -BUILD=4 +VERSION_FULL=0.8.6 (6) +BUILD=6 diff --git a/public/0.acb684dc35d9188bd6be.chunk.js.map b/public/0.acb684dc35d9188bd6be.chunk.js.map index 2c612e4f..040dcf7f 100644 --- a/public/0.acb684dc35d9188bd6be.chunk.js.map +++ b/public/0.acb684dc35d9188bd6be.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/helpers/noop.ts","webpack:///./src/config/databases/state.ts","webpack:///./src/helpers/schedulers/throttle.ts","webpack:///./src/lib/rootScope.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/logger.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/localStorage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/helpers/random.ts","webpack:///./src/config/modes.ts","webpack:///./src/lib/stateStorage.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/lib/storage.ts"],"names":["noop","name","version","stores","throttle","fn","ms","shouldRunFirst","isPending","args","interval","_args","setInterval","clearInterval","RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","DEBUG","debug","MOUNT_CLASS_TO","self","copy","obj","Date","getTime","Array","isArray","map","el","clonedObj","constructor","prop","hasOwnProperty","deepEqual","x","y","ok","Object","keys","tx","length","every","key","defineNotNumerableProperties","names","props","writable","configurable","out","forEach","defineProperties","getObjectKeysAndSort","object","sort","ids","Map","i","a","b","safeReplaceObject","wasObject","newObject","safeReplaceArrayInObject","v","isObject","getDeepProperty","splitted","split","o","setDeepProperty","slice","join","pop","validateInitObject","initObject","currentObject","onReplace","previousKey","safeAssign","fromObject","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","_logTimer","now","dT","toFixed","logger","prefix","type","ignoreDebugReset","console","log","warn","info","error","trace","setPrefix","_prefix","setLevel","level","reduce","acc","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","callback","addNotifyListener","push","deferred","reject","catch","finally","cancel","assign","EventListenerBase","reuseResults","_constructor","listenerResults","options","once","findAndSplice","l","arr","listener","findIndex","removeEventListener","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","isWorker","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","then","postMessage","notifyWorker","notifySomeone","bind","cache","useStorage","test","useCache","localStorage","getItem","JSON","parse","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","delete","enabled","set","clear","taskId","tasks","STORAGES","storage","result","payload","prototype","call","apply","proxy","sessionStorage","appStorage","arrays","8","Uint8Array","16","Uint16Array","32","Uint32Array","nextRandomUint","bits","array","crypto","getRandomValues","randomLong","Modes","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker","stateStorage","readBlobAs","blob","method","reader","FileReader","target","readBlobAsText","readBlobAsDataURL","readBlobAsUint8Array","readBlobAsArrayBuffer","buffer","blobConstruct","blobParts","mimeType","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","openDatabase","preserve","onclose","close","createNew","openDbPromise","request","indexedDB","open","message","finished","setTimeout","onerror","onsuccess","event","calledNew","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","store","objectStoreNames","contains","os","createObjectStore","indexes","index","createIndex","indexName","keyPath","objectParameters","entryName","concat","getObjectStore","objectStore","idx","put","fileName","save","get","mode","perf","performance","clearTimeout","timeout","oncomplete","results","r","requests","getAll","getPromises","keysToSet","Set","saveDeferred","keysToDelete","deleteDeferred","saveThrottled","size","from","values","deleteThrottled","getThrottled","includes","getFromCache","p","setToCache","add"],"mappings":"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","file":"0.acb684dc35d9188bd6be.chunk.js","sourcesContent":["export default function noop() {}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '.';\r\n\r\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\r\n name: 'tweb',\r\n version: 7,\r\n stores: [{\r\n name: 'session'\r\n }, {\r\n name: 'stickerSets'\r\n }, {\r\n name: 'users'\r\n }, {\r\n name: 'chats'\r\n }, {\r\n name: 'dialogs'\r\n }, {\r\n name: 'messages'\r\n }]\r\n};\r\n\r\nexport default DATABASE_STATE;\r\n","// * Jolly Cobra's schedulers\r\n\r\nimport { AnyToVoidFunction } from \"../../types\";\r\n\r\nexport default function throttle(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n) {\r\n let interval: number | null = null;\r\n let isPending: boolean;\r\n let args: Parameters;\r\n\r\n return (..._args: Parameters) => {\r\n isPending = true;\r\n args = _args;\r\n\r\n if(!interval) {\r\n if(shouldRunFirst) {\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n interval = setInterval(() => {\r\n if (!isPending) {\r\n clearInterval(interval!);\r\n interval = null;\r\n return;\r\n }\r\n\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }, ms) as any;\r\n }\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: {[key: string]: any}, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = object instanceof Map ? [...object.keys()] : Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from \"../config/debug\";\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst _logTimer = Date.now();\nfunction dT() {\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\n}\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false) {\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n function Log(...args: any[]) {\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\n }\n \n Log.warn = function(...args: any[]) {\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\n };\n \n Log.info = function(...args: any[]) {\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\n };\n \n Log.error = function(...args: any[]) {\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\n };\n \n Log.trace = function(...args: any[]) {\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\n };\n\n /* Log.debug = function(...args: any[]) {\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\n }; */\n\n Log.debug = function(...args: any[]) {\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\n };\n\n Log.setPrefix = function(_prefix: string) {\n prefix = '[' + _prefix + ']:';\n };\n\n Log.setPrefix(prefix);\n\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n \n return Log;\n};\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' });\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { notifySomeone, isWorker } from '../helpers/context';\r\nimport { WorkerTaskTemplate } from '../types';\r\n//import { stringify } from '../helpers/json';\r\n\r\nclass LocalStorage> {\r\n private prefix = '';\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\r\n if(Modes.test) {\r\n this.prefix = 't_';\r\n }\r\n }\r\n\r\n public get(key: T, useCache = true): Storage[T] {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.cache[key];\r\n } else if(this.useStorage) {\r\n let value: Storage[T];\r\n try {\r\n value = localStorage.getItem(this.prefix + key as string) as any;\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n\r\n if(value !== null) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch(err) {\r\n //console.error(err);\r\n }\r\n } else {\r\n value = undefined;\r\n }\r\n\r\n return value;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.cache[key] = value;\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n const stringified = JSON.stringify(value);\r\n localStorage.setItem(this.prefix + key, stringified);\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n //if(this.useStorage) {\r\n try {\r\n localStorage.removeItem(this.prefix + key);\r\n } catch(err) {\r\n \r\n }\r\n //}\r\n }\r\n\r\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\r\n // if(this.useStorage) {\r\n try {\r\n let obj: Partial = {};\r\n if(preserveKeys) {\r\n preserveKeys.forEach(key => {\r\n const value = this.get(key);\r\n if(value !== undefined) {\r\n obj[key] = value;\r\n }\r\n });\r\n }\r\n \r\n localStorage.clear();\r\n\r\n if(preserveKeys) {\r\n this.set(obj);\r\n }\r\n } catch(err) {\r\n\r\n }\r\n // }\r\n } */\r\n\r\n public clear() {\r\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id'];\r\n for(let i = 1; i <= 5; ++i) {\r\n keys.push(`dc${i}_server_salt`);\r\n keys.push(`dc${i}_auth_key`);\r\n }\r\n\r\n for(let key of keys) {\r\n this.delete(key, true);\r\n }\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n this.useStorage = enabled;\r\n\r\n if(!enabled) {\r\n this.clear();\r\n } else {\r\n return this.set(this.cache);\r\n }\r\n }\r\n}\r\n\r\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\r\n args: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: any\r\n};\r\n\r\nexport default class LocalStorageController> {\r\n private static STORAGES: LocalStorageController[] = [];\r\n private taskId = 0;\r\n private tasks: {[taskID: number]: (result: any) => void} = {};\r\n //private log = (...args: any[]) => console.log('[SW LS]', ...args);\r\n //private log = (...args: any[]) => {};\r\n\r\n private storage: LocalStorage;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\r\n LocalStorageController.STORAGES.push(this);\r\n\r\n if(!isWorker) {\r\n this.storage = new LocalStorage(/* preserveKeys */);\r\n }\r\n }\r\n\r\n public finishTask(taskId: number, result: any) {\r\n //this.log('finishTask:', taskID, result, Object.keys(this.tasks));\r\n\r\n if(!this.tasks.hasOwnProperty(taskId)) {\r\n //this.log('no such task:', taskID, result);\r\n return;\r\n }\r\n\r\n this.tasks[taskId](result);\r\n delete this.tasks[taskId];\r\n }\r\n\r\n private proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']) {\r\n return new Promise((resolve, reject) => {\r\n if(isWorker) {\r\n const taskId = this.taskId++;\r\n\r\n this.tasks[taskId] = resolve;\r\n const task: LocalStorageProxyTask = {\r\n type: 'localStorageProxy', \r\n id: taskId,\r\n payload: {\r\n type,\r\n args\r\n }\r\n };\r\n\r\n notifySomeone(task);\r\n } else {\r\n args = Array.prototype.slice.call(args);\r\n\r\n // @ts-ignore\r\n const result: any = this.storage[type].apply(this.storage, args as any);\r\n resolve(result);\r\n }\r\n });\r\n }\r\n\r\n public get(key: T, useCache?: boolean) {\r\n return this.proxy('get', key, useCache);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal?: boolean) {\r\n return this.proxy('set', obj, onlyLocal);\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal?: boolean) {\r\n return this.proxy('delete', key, saveLocal);\r\n }\r\n\r\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\r\n return this.proxy('clear'/* , preserveKeys */);\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n return this.proxy('toggleStorage', enabled);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport type { DcId } from '../types';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport LocalStorageController from './localStorage';\r\n\r\nconst sessionStorage = new LocalStorageController<{\r\n dc: DcId,\r\n user_auth: UserAuth,\r\n state_id: number,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance,\r\n kz_version: 'K' | 'Z',\r\n tgme_sync: {\r\n canRedirect: boolean,\r\n ts: number\r\n }\r\n}>(/* ['kz_version'] */);\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1),\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { ChatSavedPosition } from './appManagers/appImManager';\r\nimport type { State } from './appManagers/appStateManager';\r\nimport type { AppDraftsManager } from './appManagers/appDraftsManager';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport { LangPackDifference } from '../layer';\r\nimport AppStorage from './storage';\r\nimport DATABASE_STATE from '../config/databases/state';\r\n\r\nconst stateStorage = new AppStorage<{\r\n chatPositions: {\r\n [peerId_threadId: string]: ChatSavedPosition\r\n },\r\n langPack: LangPackDifference,\r\n drafts: AppDraftsManager['drafts'],\r\n user_auth: any, // support old webk format\r\n} & State, typeof DATABASE_STATE>(DATABASE_STATE, 'session');\r\nMOUNT_CLASS_TO.stateStorage = stateStorage;\r\nexport default stateStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => resolve(e.target.result));\r\n reader[method](blob);\r\n });\r\n}\r\n\r\nexport function readBlobAsText(blob: Blob) {\r\n return readBlobAs(blob, 'readAsText');\r\n}\r\n\r\nexport function readBlobAsDataURL(blob: Blob) {\r\n return readBlobAs(blob, 'readAsDataURL');\r\n}\r\n\r\nexport function readBlobAsArrayBuffer(blob: Blob) {\r\n return readBlobAs(blob, 'readAsArrayBuffer');\r\n}\r\n\r\nexport function readBlobAsUint8Array(blob: Blob) {\r\n return readBlobAsArrayBuffer(blob).then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage> {\r\n private static STORAGES: IDBStorage>[] = [];\r\n private openDbPromise: Promise;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: T['stores'][0]['name'];\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases(preserve?: IDBStorage>) {\r\n this.STORAGES.forEach(storage => {\r\n if(preserve && preserve === storage) {\r\n return;\r\n }\r\n\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ! WARNING ! function requires at least one opened connection\r\n */\r\n /* public static clearObjectStores() {\r\n const storage = this.STORAGES[0];\r\n this.closeDatabases(storage);\r\n\r\n const names = Array.from(storage.db.objectStoreNames);\r\n const promises = names.map(name => storage.clear(name));\r\n return Promise.all(promises);\r\n } */\r\n\r\n /* public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n } */\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', (error as Error).message);\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public clear(storeName?: IDBStorage['storeName']) {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get(entryName: string[]): Promise;\r\n public get(entryName: string): Promise;\r\n public get(entryName: string | string[]): Promise | Promise {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string, storeName = this.storeName) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n /* if(mode === 'readwrite') {\r\n return;\r\n } */\r\n\r\n const transaction = db.transaction([storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll(): Promise {\r\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from \"../config/databases\";\r\n//import DATABASE_SESSION from \"../config/databases/session\";\r\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\r\nimport throttle from \"../helpers/schedulers/throttle\";\r\n//import { WorkerTaskTemplate } from \"../types\";\r\nimport IDBStorage from \"./idb\";\r\n\r\nfunction noop() {}\r\n\r\n/* export interface LocalStorageProxySetTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set',\r\n keys: string[],\r\n values: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'delete',\r\n keys: string[]\r\n }\r\n}; */\r\n\r\nexport default class AppStorage, T extends Database/* Storage extends {[name: string]: any} *//* Storage extends Record */> {\r\n private static STORAGES: AppStorage>[] = [];\r\n private storage: IDBStorage;//new CacheStorageController('session');\r\n\r\n //private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n private getPromises: Map> = new Map();\r\n private getThrottled: () => void;\r\n\r\n private keysToSet: Set = new Set();\r\n private saveThrottled: () => void;\r\n private saveDeferred = deferredPromise();\r\n\r\n private keysToDelete: Set = new Set();\r\n private deleteThrottled: () => void;\r\n private deleteDeferred = deferredPromise();\r\n\r\n constructor(private db: T, private storeName: typeof db['stores'][number]['name']) {\r\n this.storage = new IDBStorage(db, storeName);\r\n\r\n if(AppStorage.STORAGES.length) {\r\n this.useStorage = AppStorage.STORAGES[0].useStorage;\r\n }\r\n\r\n AppStorage.STORAGES.push(this);\r\n\r\n this.saveThrottled = throttle(async() => {\r\n const deferred = this.saveDeferred;\r\n this.saveDeferred = deferredPromise();\r\n\r\n const set = this.keysToSet;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n //console.log('setItem: will set', key/* , value */);\r\n //await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\r\n //await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\r\n\r\n const values = keys.map(key => this.cache[key]);\r\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'set',\r\n keys,\r\n values\r\n }\r\n } as LocalStorageProxySetTask);\r\n } */\r\n\r\n await this.storage.save(keys, values);\r\n //console.log('setItem: have set', key/* , value */);\r\n } catch(e) {\r\n //this.useCS = false;\r\n console.error('[AS]: set error:', e, keys/* , value */);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.saveThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.deleteThrottled = throttle(async() => {\r\n const deferred = this.deleteDeferred;\r\n this.deleteDeferred = deferredPromise();\r\n\r\n const set = this.keysToDelete;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'delete',\r\n keys\r\n }\r\n } as LocalStorageProxyDeleteTask);\r\n } */\r\n\r\n await this.storage.delete(keys);\r\n } catch(e) {\r\n console.error('[AS]: delete error:', e, keys);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.deleteThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.getThrottled = throttle(async() => {\r\n const keys = Array.from(this.getPromises.keys());\r\n\r\n this.storage.get(keys as string[]).then(values => {\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n // @ts-ignore\r\n deferred.resolve(this.cache[key] = values[i]);\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }, (error) => {\r\n if(!['NO_ENTRY_FOUND', 'STORAGE_OFFLINE'].includes(error)) {\r\n this.useStorage = false;\r\n console.error('[AS]: get error:', error, keys, storeName);\r\n }\r\n\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n //deferred.reject(error);\r\n deferred.resolve(undefined);\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }).finally(() => {\r\n if(this.getPromises.size) {\r\n this.getThrottled();\r\n }\r\n });\r\n }, 16, false);\r\n }\r\n\r\n public isAvailable() {\r\n return this.useStorage;\r\n }\r\n\r\n public getCache() {\r\n return this.cache;\r\n }\r\n\r\n public getFromCache(key: T) {\r\n return this.cache[key];\r\n }\r\n\r\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\r\n return this.cache[key] = value;\r\n }\r\n\r\n public async get(key: T, useCache = true): Promise {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.getFromCache(key);\r\n } else if(this.useStorage) {\r\n const r = this.getPromises.get(key);\r\n if(r) return r as any;\r\n\r\n const p = deferredPromise();\r\n this.getPromises.set(key, p as any);\r\n\r\n this.getThrottled();\r\n\r\n return p;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public getAll() {\r\n return this.storage.getAll().catch(() => []);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n //console.log('storageSetValue', obj, callback, arguments);\r\n\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.setToCache(key, value);\r\n\r\n // let perf = /* DEBUG */false ? performance.now() : 0;\r\n // value = JSON.stringify(value);\r\n\r\n // if(perf) {\r\n // let elapsedTime = performance.now() - perf;\r\n // if(elapsedTime > 10) {\r\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\r\n // }\r\n // }\r\n \r\n /* perf = performance.now();\r\n value = stringify(value);\r\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n this.keysToSet.add(key);\r\n this.keysToDelete.delete(key);\r\n this.saveThrottled();\r\n }\r\n }\r\n }\r\n\r\n return this.useStorage ? this.saveDeferred : Promise.resolve();\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n /* if(!this.cache.hasOwnProperty(key)) {\r\n return;\r\n } */\r\n\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n if(this.useStorage) {\r\n this.keysToSet.delete(key);\r\n this.keysToDelete.add(key);\r\n this.deleteThrottled();\r\n }\r\n\r\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\r\n }\r\n\r\n public clear(saveLocal = false) {\r\n if(!saveLocal) {\r\n for(const i in this.cache) {\r\n delete this.cache[i];\r\n }\r\n }\r\n\r\n return this.storage.clear().catch(noop);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n storage.keysToSet.clear();\r\n storage.keysToDelete.clear();\r\n storage.getPromises.forEach((deferred) => deferred.resolve(undefined));\r\n storage.getPromises.clear();\r\n return storage.clear(true);\r\n } else {\r\n return storage.set(storage.cache);\r\n }\r\n })).catch(noop);\r\n }\r\n\r\n /* public deleteDatabase() {\r\n return IDBStorage.deleteDatabase().catch(noop);\r\n } */\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/helpers/noop.ts","webpack:///./src/config/databases/state.ts","webpack:///./src/helpers/schedulers/throttle.ts","webpack:///./src/lib/rootScope.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/logger.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/localStorage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/helpers/random.ts","webpack:///./src/config/modes.ts","webpack:///./src/lib/stateStorage.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/lib/storage.ts"],"names":["noop","name","version","stores","throttle","fn","ms","shouldRunFirst","isPending","args","interval","_args","setInterval","clearInterval","RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","DEBUG","debug","MOUNT_CLASS_TO","self","copy","obj","Date","getTime","Array","isArray","map","el","clonedObj","constructor","prop","hasOwnProperty","deepEqual","x","y","ok","Object","keys","tx","length","every","key","defineNotNumerableProperties","names","props","writable","configurable","out","forEach","defineProperties","getObjectKeysAndSort","object","sort","ids","Map","i","a","b","safeReplaceObject","wasObject","newObject","safeReplaceArrayInObject","v","isObject","getDeepProperty","splitted","split","o","setDeepProperty","slice","join","pop","validateInitObject","initObject","currentObject","onReplace","previousKey","safeAssign","fromObject","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","_logTimer","now","dT","toFixed","logger","prefix","type","ignoreDebugReset","console","log","warn","info","error","trace","setPrefix","_prefix","setLevel","level","reduce","acc","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","callback","addNotifyListener","push","deferred","reject","catch","finally","cancel","assign","EventListenerBase","reuseResults","_constructor","listenerResults","options","once","findAndSplice","l","arr","listener","findIndex","removeEventListener","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","isWorker","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","then","postMessage","notifyWorker","notifySomeone","bind","cache","useStorage","test","useCache","localStorage","getItem","JSON","parse","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","delete","enabled","set","clear","taskId","tasks","STORAGES","storage","result","payload","prototype","call","apply","proxy","sessionStorage","appStorage","arrays","8","Uint8Array","16","Uint16Array","32","Uint32Array","nextRandomUint","bits","array","crypto","getRandomValues","randomLong","Modes","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker","stateStorage","readBlobAs","blob","method","reader","FileReader","target","readBlobAsText","readBlobAsDataURL","readBlobAsUint8Array","readBlobAsArrayBuffer","buffer","blobConstruct","blobParts","mimeType","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","openDatabase","preserve","onclose","close","createNew","openDbPromise","request","indexedDB","open","message","finished","setTimeout","onerror","onsuccess","event","calledNew","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","store","objectStoreNames","contains","os","createObjectStore","indexes","index","createIndex","indexName","keyPath","objectParameters","entryName","concat","getObjectStore","objectStore","idx","put","fileName","save","get","mode","perf","performance","clearTimeout","timeout","oncomplete","results","r","requests","getAll","getPromises","keysToSet","Set","saveDeferred","keysToDelete","deleteDeferred","saveThrottled","size","from","values","deleteThrottled","getThrottled","includes","getFromCache","p","setToCache","add"],"mappings":"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","file":"0.acb684dc35d9188bd6be.chunk.js","sourcesContent":["export default function noop() {}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '.';\r\n\r\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\r\n name: 'tweb',\r\n version: 7,\r\n stores: [{\r\n name: 'session'\r\n }, {\r\n name: 'stickerSets'\r\n }, {\r\n name: 'users'\r\n }, {\r\n name: 'chats'\r\n }, {\r\n name: 'dialogs'\r\n }, {\r\n name: 'messages'\r\n }]\r\n};\r\n\r\nexport default DATABASE_STATE;\r\n","// * Jolly Cobra's schedulers\r\n\r\nimport { AnyToVoidFunction } from \"../../types\";\r\n\r\nexport default function throttle(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n) {\r\n let interval: number | null = null;\r\n let isPending: boolean;\r\n let args: Parameters;\r\n\r\n return (..._args: Parameters) => {\r\n isPending = true;\r\n args = _args;\r\n\r\n if(!interval) {\r\n if(shouldRunFirst) {\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n interval = setInterval(() => {\r\n if (!isPending) {\r\n clearInterval(interval!);\r\n interval = null;\r\n return;\r\n }\r\n\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }, ms) as any;\r\n }\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n 'media_stop': void,\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: {[key: string]: any}, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = object instanceof Map ? [...object.keys()] : Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from \"../config/debug\";\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst _logTimer = Date.now();\nfunction dT() {\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\n}\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false) {\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n function Log(...args: any[]) {\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\n }\n \n Log.warn = function(...args: any[]) {\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\n };\n \n Log.info = function(...args: any[]) {\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\n };\n \n Log.error = function(...args: any[]) {\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\n };\n \n Log.trace = function(...args: any[]) {\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\n };\n\n /* Log.debug = function(...args: any[]) {\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\n }; */\n\n Log.debug = function(...args: any[]) {\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\n };\n\n Log.setPrefix = function(_prefix: string) {\n prefix = '[' + _prefix + ']:';\n };\n\n Log.setPrefix(prefix);\n\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n \n return Log;\n};\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' });\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { notifySomeone, isWorker } from '../helpers/context';\r\nimport { WorkerTaskTemplate } from '../types';\r\n//import { stringify } from '../helpers/json';\r\n\r\nclass LocalStorage> {\r\n private prefix = '';\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\r\n if(Modes.test) {\r\n this.prefix = 't_';\r\n }\r\n }\r\n\r\n public get(key: T, useCache = true): Storage[T] {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.cache[key];\r\n } else if(this.useStorage) {\r\n let value: Storage[T];\r\n try {\r\n value = localStorage.getItem(this.prefix + key as string) as any;\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n\r\n if(value !== null) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch(err) {\r\n //console.error(err);\r\n }\r\n } else {\r\n value = undefined;\r\n }\r\n\r\n return value;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.cache[key] = value;\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n const stringified = JSON.stringify(value);\r\n localStorage.setItem(this.prefix + key, stringified);\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n //if(this.useStorage) {\r\n try {\r\n localStorage.removeItem(this.prefix + key);\r\n } catch(err) {\r\n \r\n }\r\n //}\r\n }\r\n\r\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\r\n // if(this.useStorage) {\r\n try {\r\n let obj: Partial = {};\r\n if(preserveKeys) {\r\n preserveKeys.forEach(key => {\r\n const value = this.get(key);\r\n if(value !== undefined) {\r\n obj[key] = value;\r\n }\r\n });\r\n }\r\n \r\n localStorage.clear();\r\n\r\n if(preserveKeys) {\r\n this.set(obj);\r\n }\r\n } catch(err) {\r\n\r\n }\r\n // }\r\n } */\r\n\r\n public clear() {\r\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id'];\r\n for(let i = 1; i <= 5; ++i) {\r\n keys.push(`dc${i}_server_salt`);\r\n keys.push(`dc${i}_auth_key`);\r\n }\r\n\r\n for(let key of keys) {\r\n this.delete(key, true);\r\n }\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n this.useStorage = enabled;\r\n\r\n if(!enabled) {\r\n this.clear();\r\n } else {\r\n return this.set(this.cache);\r\n }\r\n }\r\n}\r\n\r\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\r\n args: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: any\r\n};\r\n\r\nexport default class LocalStorageController> {\r\n private static STORAGES: LocalStorageController[] = [];\r\n private taskId = 0;\r\n private tasks: {[taskID: number]: (result: any) => void} = {};\r\n //private log = (...args: any[]) => console.log('[SW LS]', ...args);\r\n //private log = (...args: any[]) => {};\r\n\r\n private storage: LocalStorage;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\r\n LocalStorageController.STORAGES.push(this);\r\n\r\n if(!isWorker) {\r\n this.storage = new LocalStorage(/* preserveKeys */);\r\n }\r\n }\r\n\r\n public finishTask(taskId: number, result: any) {\r\n //this.log('finishTask:', taskID, result, Object.keys(this.tasks));\r\n\r\n if(!this.tasks.hasOwnProperty(taskId)) {\r\n //this.log('no such task:', taskID, result);\r\n return;\r\n }\r\n\r\n this.tasks[taskId](result);\r\n delete this.tasks[taskId];\r\n }\r\n\r\n private proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']) {\r\n return new Promise((resolve, reject) => {\r\n if(isWorker) {\r\n const taskId = this.taskId++;\r\n\r\n this.tasks[taskId] = resolve;\r\n const task: LocalStorageProxyTask = {\r\n type: 'localStorageProxy', \r\n id: taskId,\r\n payload: {\r\n type,\r\n args\r\n }\r\n };\r\n\r\n notifySomeone(task);\r\n } else {\r\n args = Array.prototype.slice.call(args);\r\n\r\n // @ts-ignore\r\n const result: any = this.storage[type].apply(this.storage, args as any);\r\n resolve(result);\r\n }\r\n });\r\n }\r\n\r\n public get(key: T, useCache?: boolean) {\r\n return this.proxy('get', key, useCache);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal?: boolean) {\r\n return this.proxy('set', obj, onlyLocal);\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal?: boolean) {\r\n return this.proxy('delete', key, saveLocal);\r\n }\r\n\r\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\r\n return this.proxy('clear'/* , preserveKeys */);\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n return this.proxy('toggleStorage', enabled);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport type { DcId } from '../types';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport LocalStorageController from './localStorage';\r\n\r\nconst sessionStorage = new LocalStorageController<{\r\n dc: DcId,\r\n user_auth: UserAuth,\r\n state_id: number,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance,\r\n kz_version: 'K' | 'Z',\r\n tgme_sync: {\r\n canRedirect: boolean,\r\n ts: number\r\n }\r\n}>(/* ['kz_version'] */);\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1),\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { ChatSavedPosition } from './appManagers/appImManager';\r\nimport type { State } from './appManagers/appStateManager';\r\nimport type { AppDraftsManager } from './appManagers/appDraftsManager';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport { LangPackDifference } from '../layer';\r\nimport AppStorage from './storage';\r\nimport DATABASE_STATE from '../config/databases/state';\r\n\r\nconst stateStorage = new AppStorage<{\r\n chatPositions: {\r\n [peerId_threadId: string]: ChatSavedPosition\r\n },\r\n langPack: LangPackDifference,\r\n drafts: AppDraftsManager['drafts'],\r\n user_auth: any, // support old webk format\r\n} & State, typeof DATABASE_STATE>(DATABASE_STATE, 'session');\r\nMOUNT_CLASS_TO.stateStorage = stateStorage;\r\nexport default stateStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => resolve(e.target.result));\r\n reader[method](blob);\r\n });\r\n}\r\n\r\nexport function readBlobAsText(blob: Blob) {\r\n return readBlobAs(blob, 'readAsText');\r\n}\r\n\r\nexport function readBlobAsDataURL(blob: Blob) {\r\n return readBlobAs(blob, 'readAsDataURL');\r\n}\r\n\r\nexport function readBlobAsArrayBuffer(blob: Blob) {\r\n return readBlobAs(blob, 'readAsArrayBuffer');\r\n}\r\n\r\nexport function readBlobAsUint8Array(blob: Blob) {\r\n return readBlobAsArrayBuffer(blob).then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage> {\r\n private static STORAGES: IDBStorage>[] = [];\r\n private openDbPromise: Promise;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: T['stores'][0]['name'];\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases(preserve?: IDBStorage>) {\r\n this.STORAGES.forEach(storage => {\r\n if(preserve && preserve === storage) {\r\n return;\r\n }\r\n\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ! WARNING ! function requires at least one opened connection\r\n */\r\n /* public static clearObjectStores() {\r\n const storage = this.STORAGES[0];\r\n this.closeDatabases(storage);\r\n\r\n const names = Array.from(storage.db.objectStoreNames);\r\n const promises = names.map(name => storage.clear(name));\r\n return Promise.all(promises);\r\n } */\r\n\r\n /* public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n } */\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', (error as Error).message);\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public clear(storeName?: IDBStorage['storeName']) {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get(entryName: string[]): Promise;\r\n public get(entryName: string): Promise;\r\n public get(entryName: string | string[]): Promise | Promise {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string, storeName = this.storeName) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n /* if(mode === 'readwrite') {\r\n return;\r\n } */\r\n\r\n const transaction = db.transaction([storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll(): Promise {\r\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from \"../config/databases\";\r\n//import DATABASE_SESSION from \"../config/databases/session\";\r\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\r\nimport throttle from \"../helpers/schedulers/throttle\";\r\n//import { WorkerTaskTemplate } from \"../types\";\r\nimport IDBStorage from \"./idb\";\r\n\r\nfunction noop() {}\r\n\r\n/* export interface LocalStorageProxySetTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set',\r\n keys: string[],\r\n values: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'delete',\r\n keys: string[]\r\n }\r\n}; */\r\n\r\nexport default class AppStorage, T extends Database/* Storage extends {[name: string]: any} *//* Storage extends Record */> {\r\n private static STORAGES: AppStorage>[] = [];\r\n private storage: IDBStorage;//new CacheStorageController('session');\r\n\r\n //private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n private getPromises: Map> = new Map();\r\n private getThrottled: () => void;\r\n\r\n private keysToSet: Set = new Set();\r\n private saveThrottled: () => void;\r\n private saveDeferred = deferredPromise();\r\n\r\n private keysToDelete: Set = new Set();\r\n private deleteThrottled: () => void;\r\n private deleteDeferred = deferredPromise();\r\n\r\n constructor(private db: T, private storeName: typeof db['stores'][number]['name']) {\r\n this.storage = new IDBStorage(db, storeName);\r\n\r\n if(AppStorage.STORAGES.length) {\r\n this.useStorage = AppStorage.STORAGES[0].useStorage;\r\n }\r\n\r\n AppStorage.STORAGES.push(this);\r\n\r\n this.saveThrottled = throttle(async() => {\r\n const deferred = this.saveDeferred;\r\n this.saveDeferred = deferredPromise();\r\n\r\n const set = this.keysToSet;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n //console.log('setItem: will set', key/* , value */);\r\n //await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\r\n //await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\r\n\r\n const values = keys.map(key => this.cache[key]);\r\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'set',\r\n keys,\r\n values\r\n }\r\n } as LocalStorageProxySetTask);\r\n } */\r\n\r\n await this.storage.save(keys, values);\r\n //console.log('setItem: have set', key/* , value */);\r\n } catch(e) {\r\n //this.useCS = false;\r\n console.error('[AS]: set error:', e, keys/* , value */);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.saveThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.deleteThrottled = throttle(async() => {\r\n const deferred = this.deleteDeferred;\r\n this.deleteDeferred = deferredPromise();\r\n\r\n const set = this.keysToDelete;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'delete',\r\n keys\r\n }\r\n } as LocalStorageProxyDeleteTask);\r\n } */\r\n\r\n await this.storage.delete(keys);\r\n } catch(e) {\r\n console.error('[AS]: delete error:', e, keys);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.deleteThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.getThrottled = throttle(async() => {\r\n const keys = Array.from(this.getPromises.keys());\r\n\r\n this.storage.get(keys as string[]).then(values => {\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n // @ts-ignore\r\n deferred.resolve(this.cache[key] = values[i]);\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }, (error) => {\r\n if(!['NO_ENTRY_FOUND', 'STORAGE_OFFLINE'].includes(error)) {\r\n this.useStorage = false;\r\n console.error('[AS]: get error:', error, keys, storeName);\r\n }\r\n\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n //deferred.reject(error);\r\n deferred.resolve(undefined);\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }).finally(() => {\r\n if(this.getPromises.size) {\r\n this.getThrottled();\r\n }\r\n });\r\n }, 16, false);\r\n }\r\n\r\n public isAvailable() {\r\n return this.useStorage;\r\n }\r\n\r\n public getCache() {\r\n return this.cache;\r\n }\r\n\r\n public getFromCache(key: T) {\r\n return this.cache[key];\r\n }\r\n\r\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\r\n return this.cache[key] = value;\r\n }\r\n\r\n public async get(key: T, useCache = true): Promise {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.getFromCache(key);\r\n } else if(this.useStorage) {\r\n const r = this.getPromises.get(key);\r\n if(r) return r as any;\r\n\r\n const p = deferredPromise();\r\n this.getPromises.set(key, p as any);\r\n\r\n this.getThrottled();\r\n\r\n return p;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public getAll() {\r\n return this.storage.getAll().catch(() => []);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n //console.log('storageSetValue', obj, callback, arguments);\r\n\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.setToCache(key, value);\r\n\r\n // let perf = /* DEBUG */false ? performance.now() : 0;\r\n // value = JSON.stringify(value);\r\n\r\n // if(perf) {\r\n // let elapsedTime = performance.now() - perf;\r\n // if(elapsedTime > 10) {\r\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\r\n // }\r\n // }\r\n \r\n /* perf = performance.now();\r\n value = stringify(value);\r\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n this.keysToSet.add(key);\r\n this.keysToDelete.delete(key);\r\n this.saveThrottled();\r\n }\r\n }\r\n }\r\n\r\n return this.useStorage ? this.saveDeferred : Promise.resolve();\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n /* if(!this.cache.hasOwnProperty(key)) {\r\n return;\r\n } */\r\n\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n if(this.useStorage) {\r\n this.keysToSet.delete(key);\r\n this.keysToDelete.add(key);\r\n this.deleteThrottled();\r\n }\r\n\r\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\r\n }\r\n\r\n public clear(saveLocal = false) {\r\n if(!saveLocal) {\r\n for(const i in this.cache) {\r\n delete this.cache[i];\r\n }\r\n }\r\n\r\n return this.storage.clear().catch(noop);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n storage.keysToSet.clear();\r\n storage.keysToDelete.clear();\r\n storage.getPromises.forEach((deferred) => deferred.resolve(undefined));\r\n storage.getPromises.clear();\r\n return storage.clear(true);\r\n } else {\r\n return storage.set(storage.cache);\r\n }\r\n })).catch(noop);\r\n }\r\n\r\n /* public deleteDatabase() {\r\n return IDBStorage.deleteDatabase().catch(noop);\r\n } */\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/1.90adb57fb90001b6aa19.chunk.js b/public/1.8ebe82cad4450b8187c1.chunk.js similarity index 99% rename from public/1.90adb57fb90001b6aa19.chunk.js rename to public/1.8ebe82cad4450b8187c1.chunk.js index b59876bd..30111d12 100644 --- a/public/1.90adb57fb90001b6aa19.chunk.js +++ b/public/1.8ebe82cad4450b8187c1.chunk.js @@ -1,2 +1,2 @@ -(this.webpackJsonp=this.webpackJsonp||[]).push([[1],{113:function(f,e,d){"use strict";const t=document.createElement("canvas").toDataURL("image/webp").startsWith("data:image/webp");e.a=t},114:function(f,e,d){"use strict";d.d(e,"a",(function(){return a}));var t=d(37);function a(f,e,d,a,s=!0){if(fd/a?n=e*d/f|0:(c=f*a/e|0,c>d&&(n=n*d/c|0,c=d)),s&&c>=f&&n>=e&&(c=f,n=e),Object(t.c)(c,n)}d(27).a.calcImageInBox=a},125:function(f,e,d){"use strict";const t=new class{reload(){try{location.reload()}catch(f){}}close(){try{window.close()}catch(f){}}focus(){window.focus()}};e.a=t},126:function(f,e,d){"use strict";var t=d(27);const a={Emoji:{2049:62748,2122:62776,2139:62801,2194:62678,2195:62677,2196:62676,2197:62670,2198:62672,2199:62674,2328:61155,2600:4954,2601:4962,2602:4977,2603:4982,2604:4984,2611:62764,2614:4978,2615:3750,2618:2639,2620:196,2622:62667,2623:62668,2626:62697,2638:62694,2639:168,2648:62702,2649:62703,2650:62710,2651:62711,2652:62712,2653:62713,2660:51057,2663:51060,2665:51058,2666:51059,2668:4832,2692:61258,2693:4887,2694:61261,2696:61272,2697:61280,2699:61270,2702:61245,2705:62763,2708:4895,2709:61206,2712:61220,2714:62765,2716:62742,2721:62693,2728:5993,2733:62771,2734:62772,2744:4981,2747:62773,2753:62749,2754:62750,2755:62751,2757:62752,2763:1127,2764:1129,2795:62743,2796:62744,2797:62745,2934:62681,2935:62682,3030:62753,3297:62825,3299:62826,"0023-20e3":62777,"002a-20e3":62778,"0030-20e3":62779,"0031-20e3":62780,"0032-20e3":62781,"0033-20e3":62782,"0034-20e3":62783,"0035-20e3":62784,"0036-20e3":62785,"0037-20e3":62786,"0038-20e3":62787,"0039-20e3":62788,"00a9":62774,"00ae":62775,"1f004":51063,"1f0cf":51062,"1f170":62795,"1f171":62797,"1f17e":62806,"1f17f":62808,"1f18e":62796,"1f191":62798,"1f192":62799,"1f193":62800,"1f194":62802,"1f195":62804,"1f196":62805,"1f197":62807,"1f198":62809,"1f199":62810,"1f19a":62811,"1f1e6-1f1e8":71550,"1f1e6-1f1e9":71551,"1f1e6-1f1ea":71552,"1f1e6-1f1eb":71553,"1f1e6-1f1ec":71554,"1f1e6-1f1ee":71555,"1f1e6-1f1f1":71556,"1f1e6-1f1f2":71557,"1f1e6-1f1f4":71558,"1f1e6-1f1f6":71559,"1f1e6-1f1f7":71560,"1f1e6-1f1f8":71561,"1f1e6-1f1f9":71562,"1f1e6-1f1fa":71563,"1f1e6-1f1fc":71564,"1f1e6-1f1fd":71565,"1f1e6-1f1ff":71566,"1f1e7-1f1e6":71567,"1f1e7-1f1e7":71568,"1f1e7-1f1e9":71569,"1f1e7-1f1ea":71570,"1f1e7-1f1eb":71571,"1f1e7-1f1ec":71572,"1f1e7-1f1ed":71573,"1f1e7-1f1ee":71574,"1f1e7-1f1ef":71575,"1f1e7-1f1f1":71576,"1f1e7-1f1f2":71577,"1f1e7-1f1f3":71578,"1f1e7-1f1f4":71579,"1f1e7-1f1f6":71580,"1f1e7-1f1f7":71581,"1f1e7-1f1f8":71582,"1f1e7-1f1f9":71583,"1f1e7-1f1fb":71584,"1f1e7-1f1fc":71585,"1f1e7-1f1fe":71586,"1f1e7-1f1ff":71587,"1f1e8-1f1e6":71588,"1f1e8-1f1e8":71589,"1f1e8-1f1e9":71590,"1f1e8-1f1eb":71591,"1f1e8-1f1ec":71592,"1f1e8-1f1ed":71593,"1f1e8-1f1ee":71594,"1f1e8-1f1f0":71595,"1f1e8-1f1f1":71596,"1f1e8-1f1f2":71597,"1f1e8-1f1f3":71598,"1f1e8-1f1f4":71599,"1f1e8-1f1f5":71600,"1f1e8-1f1f7":71601,"1f1e8-1f1fa":71602,"1f1e8-1f1fb":71603,"1f1e8-1f1fc":71604,"1f1e8-1f1fd":71605,"1f1e8-1f1fe":71606,"1f1e8-1f1ff":71607,"1f1e9-1f1ea":71608,"1f1e9-1f1ec":71609,"1f1e9-1f1ef":71610,"1f1e9-1f1f0":71611,"1f1e9-1f1f2":71612,"1f1e9-1f1f4":71613,"1f1e9-1f1ff":71614,"1f1ea-1f1e6":71615,"1f1ea-1f1e8":71616,"1f1ea-1f1ea":71617,"1f1ea-1f1ec":71618,"1f1ea-1f1ed":71619,"1f1ea-1f1f7":71620,"1f1ea-1f1f8":71621,"1f1ea-1f1f9":71622,"1f1ea-1f1fa":71623,"1f1eb-1f1ee":71624,"1f1eb-1f1ef":71625,"1f1eb-1f1f0":71626,"1f1eb-1f1f2":71627,"1f1eb-1f1f4":71628,"1f1eb-1f1f7":71629,"1f1ec-1f1e6":71630,"1f1ec-1f1e7":71631,"1f1ec-1f1e9":71632,"1f1ec-1f1ea":71633,"1f1ec-1f1eb":71634,"1f1ec-1f1ec":71635,"1f1ec-1f1ed":71636,"1f1ec-1f1ee":71637,"1f1ec-1f1f1":71638,"1f1ec-1f1f2":71639,"1f1ec-1f1f3":71640,"1f1ec-1f1f5":71641,"1f1ec-1f1f6":71642,"1f1ec-1f1f7":71643,"1f1ec-1f1f8":71644,"1f1ec-1f1f9":71645,"1f1ec-1f1fa":71646,"1f1ec-1f1fc":71647,"1f1ec-1f1fe":71648,"1f1ed-1f1f0":71649,"1f1ed-1f1f2":71650,"1f1ed-1f1f3":71651,"1f1ed-1f1f7":71652,"1f1ed-1f1f9":71653,"1f1ed-1f1fa":71654,"1f1ee-1f1e8":71655,"1f1ee-1f1e9":71656,"1f1ee-1f1ea":71657,"1f1ee-1f1f1":71658,"1f1ee-1f1f2":71659,"1f1ee-1f1f3":71660,"1f1ee-1f1f4":71661,"1f1ee-1f1f6":71662,"1f1ee-1f1f7":71663,"1f1ee-1f1f8":71664,"1f1ee-1f1f9":71665,"1f1ef-1f1ea":71666,"1f1ef-1f1f2":71667,"1f1ef-1f1f4":71668,"1f1ef-1f1f5":71669,"1f1f0-1f1ea":71670,"1f1f0-1f1ec":71671,"1f1f0-1f1ed":71672,"1f1f0-1f1ee":71673,"1f1f0-1f1f2":71674,"1f1f0-1f1f3":71675,"1f1f0-1f1f5":71676,"1f1f0-1f1f7":71677,"1f1f0-1f1fc":71678,"1f1f0-1f1fe":71679,"1f1f0-1f1ff":71680,"1f1f1-1f1e6":71681,"1f1f1-1f1e7":71682,"1f1f1-1f1e8":71683,"1f1f1-1f1ee":71684,"1f1f1-1f1f0":71685,"1f1f1-1f1f7":71686,"1f1f1-1f1f8":71687,"1f1f1-1f1f9":71688,"1f1f1-1f1fa":71689,"1f1f1-1f1fb":71690,"1f1f1-1f1fe":71691,"1f1f2-1f1e6":71692,"1f1f2-1f1e8":71693,"1f1f2-1f1e9":71694,"1f1f2-1f1ea":71695,"1f1f2-1f1eb":71696,"1f1f2-1f1ec":71697,"1f1f2-1f1ed":71698,"1f1f2-1f1f0":71699,"1f1f2-1f1f1":71700,"1f1f2-1f1f2":71701,"1f1f2-1f1f3":71702,"1f1f2-1f1f4":71703,"1f1f2-1f1f5":71704,"1f1f2-1f1f6":71705,"1f1f2-1f1f7":71706,"1f1f2-1f1f8":71707,"1f1f2-1f1f9":71708,"1f1f2-1f1fa":71709,"1f1f2-1f1fb":71710,"1f1f2-1f1fc":71711,"1f1f2-1f1fd":71712,"1f1f2-1f1fe":71713,"1f1f2-1f1ff":71714,"1f1f3-1f1e6":71715,"1f1f3-1f1e8":71716,"1f1f3-1f1ea":71717,"1f1f3-1f1eb":71718,"1f1f3-1f1ec":71719,"1f1f3-1f1ee":71720,"1f1f3-1f1f1":71721,"1f1f3-1f1f4":71722,"1f1f3-1f1f5":71723,"1f1f3-1f1f7":71724,"1f1f3-1f1fa":71725,"1f1f3-1f1ff":71726,"1f1f4-1f1f2":71727,"1f1f5-1f1e6":71728,"1f1f5-1f1ea":71729,"1f1f5-1f1eb":71730,"1f1f5-1f1ec":71731,"1f1f5-1f1ed":71732,"1f1f5-1f1f0":71733,"1f1f5-1f1f1":71734,"1f1f5-1f1f2":71735,"1f1f5-1f1f3":71736,"1f1f5-1f1f7":71737,"1f1f5-1f1f8":71738,"1f1f5-1f1f9":71739,"1f1f5-1f1fc":71740,"1f1f5-1f1fe":71741,"1f1f6-1f1e6":71742,"1f1f7-1f1ea":71743,"1f1f7-1f1f4":71744,"1f1f7-1f1f8":71745,"1f1f7-1f1fa":71746,"1f1f7-1f1fc":71747,"1f1f8-1f1e6":71748,"1f1f8-1f1e7":71749,"1f1f8-1f1e8":71750,"1f1f8-1f1e9":71751,"1f1f8-1f1ea":71752,"1f1f8-1f1ec":71753,"1f1f8-1f1ed":71754,"1f1f8-1f1ee":71755,"1f1f8-1f1ef":71756,"1f1f8-1f1f0":71757,"1f1f8-1f1f1":71758,"1f1f8-1f1f2":71759,"1f1f8-1f1f3":71760,"1f1f8-1f1f4":71761,"1f1f8-1f1f7":71762,"1f1f8-1f1f8":71763,"1f1f8-1f1f9":71764,"1f1f8-1f1fb":71765,"1f1f8-1f1fd":71766,"1f1f8-1f1fe":71767,"1f1f8-1f1ff":71768,"1f1f9-1f1e6":71769,"1f1f9-1f1e8":71770,"1f1f9-1f1e9":71771,"1f1f9-1f1eb":71772,"1f1f9-1f1ec":71773,"1f1f9-1f1ed":71774,"1f1f9-1f1ef":71775,"1f1f9-1f1f0":71776,"1f1f9-1f1f1":71777,"1f1f9-1f1f2":71778,"1f1f9-1f1f3":71779,"1f1f9-1f1f4":71780,"1f1f9-1f1f7":71781,"1f1f9-1f1f9":71782,"1f1f9-1f1fb":71783,"1f1f9-1f1fc":71784,"1f1f9-1f1ff":71785,"1f1fa-1f1e6":71786,"1f1fa-1f1ec":71787,"1f1fa-1f1f2":71788,"1f1fa-1f1f3":71789,"1f1fa-1f1f8":71790,"1f1fa-1f1fe":71791,"1f1fa-1f1ff":71792,"1f1fb-1f1e6":71793,"1f1fb-1f1e8":71794,"1f1fb-1f1ea":71795,"1f1fb-1f1ec":71796,"1f1fb-1f1ee":71797,"1f1fb-1f1f3":71798,"1f1fb-1f1fa":71799,"1f1fc-1f1eb":71800,"1f1fc-1f1f8":71801,"1f1fd-1f1f0":71802,"1f1fe-1f1ea":71803,"1f1fe-1f1f9":71804,"1f1ff-1f1e6":71805,"1f1ff-1f1f2":71806,"1f1ff-1f1fc":71807,"1f201":62812,"1f202":62813,"1f21a":62819,"1f22f":62816,"1f232":62820,"1f233":62824,"1f234":62823,"1f235":62828,"1f236":62815,"1f237":62814,"1f238":62822,"1f239":62818,"1f23a":62827,"1f250":62817,"1f251":62821,"1f300":4974,"1f301":4824,"1f302":4976,"1f303":4825,"1f304":4827,"1f305":4828,"1f306":4829,"1f307":4830,"1f308":4975,"1f309":4831,"1f30a":4987,"1f30b":4782,"1f30c":4961,"1f30d":4773,"1f30e":4774,"1f30f":4775,"1f310":4776,"1f311":4941,"1f312":4942,"1f313":4943,"1f314":4944,"1f315":4945,"1f316":4946,"1f317":4947,"1f318":4948,"1f319":4949,"1f31a":4950,"1f31b":4951,"1f31c":4952,"1f31d":4955,"1f31e":4956,"1f31f":4959,"1f320":4960,"1f321":4953,"1f324":4965,"1f325":4966,"1f326":4967,"1f327":4968,"1f328":4969,"1f329":4970,"1f32a":4971,"1f32b":4972,"1f32c":4973,"1f32d":3694,"1f32e":3696,"1f32f":3697,"1f330":3677,"1f331":2631,"1f332":2633,"1f333":2634,"1f334":2635,"1f335":2636,"1f336":3668,"1f337":2630,"1f338":2622,"1f339":2625,"1f33a":2627,"1f33b":2628,"1f33c":2629,"1f33d":3667,"1f33e":2637,"1f33f":2638,"1f340":2640,"1f341":2641,"1f342":2642,"1f343":2643,"1f344":3675,"1f345":3660,"1f346":3664,"1f347":3644,"1f348":3645,"1f349":3646,"1f34a":3647,"1f34b":3648,"1f34c":3649,"1f34d":3650,"1f34e":3652,"1f34f":3653,"1f350":3654,"1f351":3655,"1f352":3656,"1f353":3657,"1f354":3691,"1f355":3693,"1f356":3687,"1f357":3688,"1f358":3713,"1f359":3714,"1f35a":3715,"1f35b":3716,"1f35c":3717,"1f35d":3718,"1f35e":3678,"1f35f":3692,"1f360":3719,"1f361":3725,"1f362":3720,"1f363":3721,"1f364":3722,"1f365":3723,"1f366":3734,"1f367":3735,"1f368":3736,"1f369":3737,"1f36a":3738,"1f36b":3743,"1f36c":3744,"1f36d":3745,"1f36e":3746,"1f36f":3747,"1f370":3740,"1f371":3712,"1f372":3704,"1f373":3702,"1f374":3769,"1f375":3752,"1f376":3753,"1f377":3755,"1f378":3756,"1f379":3757,"1f37a":3758,"1f37b":3759,"1f37c":3748,"1f37d":3768,"1f37e":3754,"1f37f":3708,"1f380":51004,"1f381":51005,"1f382":3739,"1f383":5988,"1f384":5989,"1f385":1490,"1f386":5990,"1f387":5991,"1f388":5994,"1f389":5995,"1f38a":5996,"1f38b":5997,"1f38c":71544,"1f38d":5998,"1f38e":5999,"1f38f":51e3,"1f390":51001,"1f391":51002,"1f392":61096,"1f393":61109,"1f396":51009,"1f397":51006,"1f399":61129,"1f39a":61130,"1f39b":61131,"1f39e":61164,"1f39f":51007,"1f3a0":4833,"1f3a1":4834,"1f3a2":4835,"1f3a3":51036,"1f3a4":61132,"1f3a5":61163,"1f3a6":62733,"1f3a7":61133,"1f3a8":51067,"1f3a9":61108,"1f3aa":4837,"1f3ab":51008,"1f3ac":61166,"1f3ad":51065,"1f3ae":51049,"1f3af":51042,"1f3b0":51051,"1f3b1":51045,"1f3b2":51052,"1f3b3":51024,"1f3b4":51064,"1f3b5":61127,"1f3b6":61128,"1f3b7":61135,"1f3b8":61137,"1f3b9":61138,"1f3ba":61139,"1f3bb":61140,"1f3bc":61126,"1f3bd":51038,"1f3be":51022,"1f3bf":51039,"1f3c0":51018,"1f3c1":71542,"1f3c2":1562,"1f3c3-200d-2640":1546,"1f3c3-200d-2642":1545,"1f3c3":1544,"1f3c4-200d-2640":1568,"1f3c4-200d-2642":1567,"1f3c4":1566,"1f3c5":51011,"1f3c6":51010,"1f3c7":1560,"1f3c8":51020,"1f3c9":51021,"1f3ca-200d-2640":1574,"1f3ca-200d-2642":1573,"1f3ca":1572,"1f3cb-200d-2640":1580,"1f3cb-200d-2642":1579,"1f3cb":1578,"1f3cc-200d-2640":1565,"1f3cc-200d-2642":1564,"1f3cc":1563,"1f3cd":4868,"1f3ce":4867,"1f3cf":51025,"1f3d0":51019,"1f3d1":51026,"1f3d2":51027,"1f3d3":51029,"1f3d4":4780,"1f3d5":4784,"1f3d6":4785,"1f3d7":4791,"1f3d8":4796,"1f3d9":4826,"1f3da":4797,"1f3db":4790,"1f3dc":4786,"1f3dd":4787,"1f3de":4788,"1f3df":4789,"1f3e0":4798,"1f3e1":4799,"1f3e2":4800,"1f3e3":4801,"1f3e4":4802,"1f3e5":4803,"1f3e6":4804,"1f3e7":62643,"1f3e8":4805,"1f3e9":4806,"1f3ea":4807,"1f3eb":4808,"1f3ec":4809,"1f3ed":4810,"1f3ee":61177,"1f3ef":4811,"1f3f0":4812,"1f3f3-200d-1f308":71547,"1f3f3-200d-26a7":71548,"1f3f3":71546,"1f3f4-200d-2620":71549,"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f":71808,"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f":71809,"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f":71810,"1f3f4":71545,"1f3f5":2624,"1f3f7":61195,"1f3f8":51030,"1f3f9":61264,"1f3fa":3772,"1f3fb":9499,"1f3fc":9500,"1f3fd":9501,"1f3fe":9502,"1f3ff":9503,"1f400":2550,"1f401":2549,"1f402":2530,"1f403":2531,"1f404":2532,"1f405":2521,"1f406":2522,"1f407":2553,"1f408-200d-2b1b":2518,"1f408":2517,"1f409":2592,"1f40a":2587,"1f40b":2596,"1f40c":2605,"1f40d":2590,"1f40e":2524,"1f40f":2537,"1f410":2539,"1f411":2538,"1f412":2505,"1f413":2570,"1f414":2569,"1f415-200d-1f9ba":2511,"1f415":2509,"1f416":2534,"1f417":2535,"1f418":2544,"1f419":2603,"1f41a":2604,"1f41b":2607,"1f41c":2608,"1f41d":2609,"1f41e":2611,"1f41f":2599,"1f420":2600,"1f421":2601,"1f422":2588,"1f423":2571,"1f424":2572,"1f425":2573,"1f426":2574,"1f427":2575,"1f428":2560,"1f429":2512,"1f42a":2540,"1f42b":2541,"1f42c":2597,"1f42d":2548,"1f42e":2529,"1f42f":2520,"1f430":2552,"1f431":2516,"1f432":2591,"1f433":2595,"1f434":2523,"1f435":2504,"1f436":2508,"1f437":2533,"1f438":2586,"1f439":2551,"1f43a":2513,"1f43b-200d-2744":2559,"1f43b":2558,"1f43c":2561,"1f43d":2536,"1f43e":2567,"1f43f":2554,"1f440":1350,"1f441-200d-1f5e8":1147,"1f441":1351,"1f442":1342,"1f443":1344,"1f444":1353,"1f445":1352,"1f446":1318,"1f447":1320,"1f448":1316,"1f449":1317,"1f44a":1325,"1f44b":1303,"1f44c":1308,"1f44d":1322,"1f44e":1323,"1f44f":1328,"1f450":1330,"1f451":61106,"1f452":61107,"1f453":61072,"1f454":61077,"1f455":61078,"1f456":61079,"1f457":61084,"1f458":61085,"1f459":61090,"1f45a":61091,"1f45b":61092,"1f45c":61093,"1f45d":61094,"1f45e":61098,"1f45f":61099,"1f460":61102,"1f461":61103,"1f462":61105,"1f463":1649,"1f464":1646,"1f465":1647,"1f466":1356,"1f467":1357,"1f468-200d-1f33e":1423,"1f468-200d-1f373":1426,"1f468-200d-1f37c":1487,"1f468-200d-1f393":1414,"1f468-200d-1f3a4":1444,"1f468-200d-1f3a8":1447,"1f468-200d-1f3eb":1417,"1f468-200d-1f3ed":1432,"1f468-200d-1f466-200d-1f466":1636,"1f468-200d-1f466":1635,"1f468-200d-1f467-200d-1f466":1638,"1f468-200d-1f467-200d-1f467":1639,"1f468-200d-1f467":1637,"1f468-200d-1f468-200d-1f466":1625,"1f468-200d-1f468-200d-1f466-200d-1f466":1628,"1f468-200d-1f468-200d-1f467":1626,"1f468-200d-1f468-200d-1f467-200d-1f466":1627,"1f468-200d-1f468-200d-1f467-200d-1f467":1629,"1f468-200d-1f469-200d-1f466":1620,"1f468-200d-1f469-200d-1f466-200d-1f466":1623,"1f468-200d-1f469-200d-1f467":1621,"1f468-200d-1f469-200d-1f467-200d-1f466":1622,"1f468-200d-1f469-200d-1f467-200d-1f467":1624,"1f468-200d-1f4bb":1441,"1f468-200d-1f4bc":1435,"1f468-200d-1f527":1429,"1f468-200d-1f52c":1438,"1f468-200d-1f680":1453,"1f468-200d-1f692":1456,"1f468-200d-1f9af":1536,"1f468-200d-1f9b0":1362,"1f468-200d-1f9b1":1363,"1f468-200d-1f9b2":1365,"1f468-200d-1f9b3":1364,"1f468-200d-1f9bc":1539,"1f468-200d-1f9bd":1542,"1f468-200d-2695":1411,"1f468-200d-2696":1420,"1f468-200d-2708":1450,"1f468-200d-2764-200d-1f468":1617,"1f468-200d-2764-200d-1f48b-200d-1f468":1613,"1f468":1360,"1f469-200d-1f33e":1424,"1f469-200d-1f373":1427,"1f469-200d-1f37c":1486,"1f469-200d-1f393":1415,"1f469-200d-1f3a4":1445,"1f469-200d-1f3a8":1448,"1f469-200d-1f3eb":1418,"1f469-200d-1f3ed":1433,"1f469-200d-1f466-200d-1f466":1641,"1f469-200d-1f466":1640,"1f469-200d-1f467-200d-1f466":1643,"1f469-200d-1f467-200d-1f467":1644,"1f469-200d-1f467":1642,"1f469-200d-1f469-200d-1f466":1630,"1f469-200d-1f469-200d-1f466-200d-1f466":1633,"1f469-200d-1f469-200d-1f467":1631,"1f469-200d-1f469-200d-1f467-200d-1f466":1632,"1f469-200d-1f469-200d-1f467-200d-1f467":1634,"1f469-200d-1f4bb":1442,"1f469-200d-1f4bc":1436,"1f469-200d-1f527":1430,"1f469-200d-1f52c":1439,"1f469-200d-1f680":1454,"1f469-200d-1f692":1457,"1f469-200d-1f9af":1537,"1f469-200d-1f9b0":1367,"1f469-200d-1f9b1":1369,"1f469-200d-1f9b2":1373,"1f469-200d-1f9b3":1371,"1f469-200d-1f9bc":1540,"1f469-200d-1f9bd":1543,"1f469-200d-2695":1412,"1f469-200d-2696":1421,"1f469-200d-2708":1451,"1f469-200d-2764-200d-1f468":1616,"1f469-200d-2764-200d-1f469":1618,"1f469-200d-2764-200d-1f48b-200d-1f468":1612,"1f469-200d-2764-200d-1f48b-200d-1f469":1614,"1f469":1366,"1f46a":1619,"1f46b":1609,"1f46c":1610,"1f46d":1608,"1f46e-200d-2640":1460,"1f46e-200d-2642":1459,"1f46e":1458,"1f46f-200d-2640":1552,"1f46f-200d-2642":1551,"1f46f":1550,"1f470-200d-2640":1483,"1f470-200d-2642":1482,"1f470":1481,"1f471-200d-2640":1375,"1f471-200d-2642":1376,"1f471":1359,"1f472":1476,"1f473-200d-2640":1475,"1f473-200d-2642":1474,"1f473":1473,"1f474":1378,"1f475":1379,"1f476":1354,"1f477-200d-2640":1470,"1f477-200d-2642":1469,"1f477":1468,"1f478":1472,"1f479":199,"1f47a":1100,"1f47b":1101,"1f47c":1489,"1f47d":1102,"1f47e":1103,"1f47f":194,"1f480":195,"1f481-200d-2640":1394,"1f481-200d-2642":1393,"1f481":1392,"1f482-200d-2640":1466,"1f482-200d-2642":1465,"1f482":1464,"1f483":1547,"1f484":61114,"1f485":1335,"1f486-200d-2640":1522,"1f486-200d-2642":1521,"1f486":1520,"1f487-200d-2640":1525,"1f487-200d-2642":1524,"1f487":1523,"1f488":4836,"1f489":61287,"1f48a":61289,"1f48b":1117,"1f48c":1118,"1f48d":61115,"1f48e":61116,"1f48f":1611,"1f490":2621,"1f491":1615,"1f492":4813,"1f493":1123,"1f494":1128,"1f495":1125,"1f496":1121,"1f497":1122,"1f498":1119,"1f499":1133,"1f49a":1132,"1f49b":1131,"1f49c":1134,"1f49d":1120,"1f49e":1124,"1f49f":1126,"1f4a0":62859,"1f4a1":61175,"1f4a2":1139,"1f4a3":1145,"1f4a4":1151,"1f4a5":1140,"1f4a6":1142,"1f4a7":4986,"1f4a8":1143,"1f4a9":197,"1f4aa":1337,"1f4ab":1141,"1f4ac":1146,"1f4ad":1150,"1f4ae":2623,"1f4af":1138,"1f4b0":61196,"1f4b1":62754,"1f4b2":62755,"1f4b3":61203,"1f4b4":61198,"1f4b5":61199,"1f4b6":61200,"1f4b7":61201,"1f4b8":61202,"1f4b9":61205,"1f4ba":4900,"1f4bb":61152,"1f4bc":61226,"1f4bd":61158,"1f4be":61159,"1f4bf":61160,"1f4c0":61161,"1f4c1":61227,"1f4c2":61228,"1f4c3":61188,"1f4c4":61190,"1f4c5":61230,"1f4c6":61231,"1f4c7":61234,"1f4c8":61235,"1f4c9":61236,"1f4ca":61237,"1f4cb":61238,"1f4cc":61239,"1f4cd":61240,"1f4ce":61241,"1f4cf":61243,"1f4d0":61244,"1f4d1":61193,"1f4d2":61187,"1f4d3":61186,"1f4d4":61179,"1f4d5":61180,"1f4d6":61181,"1f4d7":61182,"1f4d8":61183,"1f4d9":61184,"1f4da":61185,"1f4db":62760,"1f4dc":61189,"1f4dd":61225,"1f4de":61147,"1f4df":61148,"1f4e0":61149,"1f4e1":61286,"1f4e2":61121,"1f4e3":61122,"1f4e4":61210,"1f4e5":61211,"1f4e6":61212,"1f4e7":61207,"1f4e8":61208,"1f4e9":61209,"1f4ea":61214,"1f4eb":61213,"1f4ec":61215,"1f4ed":61216,"1f4ee":61217,"1f4ef":61123,"1f4f0":61191,"1f4f1":61144,"1f4f2":61145,"1f4f3":62737,"1f4f4":62738,"1f4f5":62665,"1f4f6":62736,"1f4f7":61168,"1f4f8":61169,"1f4f9":61170,"1f4fa":61167,"1f4fb":61134,"1f4fc":61171,"1f4fd":61165,"1f4ff":61113,"1f500":62715,"1f501":62716,"1f502":62717,"1f503":62683,"1f504":62684,"1f505":62734,"1f506":62735,"1f507":61117,"1f508":61118,"1f509":61119,"1f50a":61120,"1f50b":61150,"1f50c":61151,"1f50d":61172,"1f50e":61173,"1f50f":61251,"1f510":61252,"1f511":61253,"1f512":61249,"1f513":61250,"1f514":61124,"1f515":61125,"1f516":61194,"1f517":61274,"1f518":62860,"1f519":62685,"1f51a":62686,"1f51b":62687,"1f51c":62688,"1f51d":62689,"1f51e":62666,"1f51f":62789,"1f520":62790,"1f521":62791,"1f522":62792,"1f523":62793,"1f524":62794,"1f525":4985,"1f526":61176,"1f527":61267,"1f528":61255,"1f529":61269,"1f52a":3771,"1f52b":61262,"1f52c":61284,"1f52d":61285,"1f52e":51046,"1f52f":62701,"1f530":62761,"1f531":62759,"1f532":62862,"1f533":62861,"1f534":62829,"1f535":62833,"1f536":62853,"1f537":62854,"1f538":62855,"1f539":62856,"1f53a":62857,"1f53b":62858,"1f53c":62725,"1f53d":62727,"1f549":62692,"1f54a":2576,"1f54b":4821,"1f54c":4817,"1f54d":4819,"1f54e":62700,"1f550":4919,"1f551":4921,"1f552":4923,"1f553":4925,"1f554":4927,"1f555":4929,"1f556":4931,"1f557":4933,"1f558":4935,"1f559":4937,"1f55a":4939,"1f55b":4917,"1f55c":4920,"1f55d":4922,"1f55e":4924,"1f55f":4926,"1f560":4928,"1f561":4930,"1f562":4932,"1f563":4934,"1f564":4936,"1f565":4938,"1f566":4940,"1f567":4918,"1f56f":61174,"1f570":4916,"1f573":1144,"1f574":1549,"1f575-200d-2640":1463,"1f575-200d-2642":1462,"1f575":1461,"1f576":61073,"1f577":2614,"1f578":2615,"1f579":51050,"1f57a":1548,"1f587":61242,"1f58a":61222,"1f58b":61221,"1f58c":61223,"1f58d":61224,"1f590":1305,"1f595":1319,"1f596":1307,"1f5a4":1136,"1f5a5":61153,"1f5a8":61154,"1f5b1":61156,"1f5b2":61157,"1f5bc":51066,"1f5c2":61229,"1f5c3":61246,"1f5c4":61247,"1f5d1":61248,"1f5d2":61232,"1f5d3":61233,"1f5dc":61271,"1f5dd":61254,"1f5de":61192,"1f5e1":61260,"1f5e3":1645,"1f5e8":1148,"1f5ef":1149,"1f5f3":61218,"1f5fa":4777,"1f5fb":4783,"1f5fc":4814,"1f5fd":4815,"1f5fe":4778,"1f5ff":61320,"1f600":11,"1f601":14,"1f602":18,"1f603":12,"1f604":13,"1f605":16,"1f606":15,"1f607":113,"1f608":193,"1f609":111,"1f60a":112,"1f60b":123,"1f60c":143,"1f60d":115,"1f60e":162,"1f60f":138,"1f610":135,"1f611":136,"1f612":139,"1f613":185,"1f614":144,"1f615":165,"1f616":182,"1f617":118,"1f618":117,"1f619":121,"1f61a":120,"1f61b":124,"1f61c":125,"1f61d":127,"1f61e":184,"1f61f":166,"1f620":191,"1f621":190,"1f622":179,"1f623":183,"1f624":189,"1f625":178,"1f626":174,"1f627":175,"1f628":176,"1f629":186,"1f62a":145,"1f62b":187,"1f62c":141,"1f62d":180,"1f62e":169,"1f62f":170,"1f630":177,"1f631":181,"1f632":171,"1f633":172,"1f634":147,"1f635":157,"1f636":137,"1f637":148,"1f638":1106,"1f639":1107,"1f63a":1105,"1f63b":1108,"1f63c":1109,"1f63d":1110,"1f63e":1113,"1f63f":1112,"1f640":1111,"1f641":167,"1f642":19,"1f643":110,"1f644":140,"1f645-200d-2640":1388,"1f645-200d-2642":1387,"1f645":1386,"1f646-200d-2640":1391,"1f646-200d-2642":1390,"1f646":1389,"1f647-200d-2640":1403,"1f647-200d-2642":1402,"1f647":1401,"1f648":1114,"1f649":1115,"1f64a":1116,"1f64b-200d-2640":1397,"1f64b-200d-2642":1396,"1f64b":1395,"1f64c":1329,"1f64d-200d-2640":1382,"1f64d-200d-2642":1381,"1f64d":1380,"1f64e-200d-2640":1385,"1f64e-200d-2642":1384,"1f64e":1383,"1f64f":1333,"1f680":4906,"1f681":4901,"1f682":4838,"1f683":4839,"1f684":4840,"1f685":4841,"1f686":4842,"1f687":4843,"1f688":4844,"1f689":4845,"1f68a":4846,"1f68b":4849,"1f68c":4850,"1f68d":4851,"1f68e":4852,"1f68f":4877,"1f690":4853,"1f691":4854,"1f692":4855,"1f693":4856,"1f694":4857,"1f695":4858,"1f696":4859,"1f697":4860,"1f698":4861,"1f699":4862,"1f69a":4864,"1f69b":4865,"1f69c":4866,"1f69d":4847,"1f69e":4848,"1f69f":4902,"1f6a0":4903,"1f6a1":4904,"1f6a2":4894,"1f6a3-200d-2640":1571,"1f6a3-200d-2642":1570,"1f6a3":1569,"1f6a4":4890,"1f6a5":4883,"1f6a6":4884,"1f6a7":4886,"1f6a8":4882,"1f6a9":71543,"1f6aa":61292,"1f6ab":62659,"1f6ac":61316,"1f6ad":62661,"1f6ae":62644,"1f6af":62662,"1f6b0":62645,"1f6b1":62663,"1f6b2":4873,"1f6b3":62660,"1f6b4-200d-2640":1583,"1f6b4-200d-2642":1582,"1f6b4":1581,"1f6b5-200d-2640":1586,"1f6b5-200d-2642":1585,"1f6b5":1584,"1f6b6-200d-2640":1528,"1f6b6-200d-2642":1527,"1f6b6":1526,"1f6b7":62664,"1f6b8":62657,"1f6b9":62647,"1f6ba":62648,"1f6bb":62649,"1f6bc":62650,"1f6bd":61299,"1f6be":62651,"1f6bf":61301,"1f6c0":1605,"1f6c1":61302,"1f6c2":62652,"1f6c3":62653,"1f6c4":62654,"1f6c5":62655,"1f6cb":61297,"1f6cc":1606,"1f6cd":61095,"1f6ce":4908,"1f6cf":61296,"1f6d0":62690,"1f6d1":4885,"1f6d2":61315,"1f6d5":4818,"1f6d6":4795,"1f6d7":61293,"1f6e0":61259,"1f6e1":61265,"1f6e2":4880,"1f6e3":4878,"1f6e4":4879,"1f6e5":4893,"1f6e9":4896,"1f6eb":4897,"1f6ec":4898,"1f6f0":4905,"1f6f3":4891,"1f6f4":4874,"1f6f5":4869,"1f6f6":4889,"1f6f7":51040,"1f6f8":4907,"1f6f9":4875,"1f6fa":4872,"1f6fb":4863,"1f6fc":4876,"1f7e0":62830,"1f7e1":62831,"1f7e2":62832,"1f7e3":62834,"1f7e4":62835,"1f7e5":62838,"1f7e6":62842,"1f7e7":62839,"1f7e8":62840,"1f7e9":62841,"1f7ea":62843,"1f7eb":62844,"1f90c":1309,"1f90d":1137,"1f90e":1135,"1f90f":1310,"1f910":133,"1f911":128,"1f912":149,"1f913":163,"1f914":132,"1f915":150,"1f916":1104,"1f917":129,"1f918":1314,"1f919":1315,"1f91a":1304,"1f91b":1326,"1f91c":1327,"1f91d":1332,"1f91e":1312,"1f91f":1313,"1f920":159,"1f921":198,"1f922":151,"1f923":17,"1f924":146,"1f925":142,"1f926-200d-2640":1406,"1f926-200d-2642":1405,"1f926":1404,"1f927":153,"1f928":134,"1f929":116,"1f92a":126,"1f92b":131,"1f92c":192,"1f92d":130,"1f92e":152,"1f92f":158,"1f930":1484,"1f931":1485,"1f932":1331,"1f933":1336,"1f934":1471,"1f935-200d-2640":1480,"1f935-200d-2642":1479,"1f935":1478,"1f936":1491,"1f937-200d-2640":1409,"1f937-200d-2642":1408,"1f937":1407,"1f938-200d-2640":1589,"1f938-200d-2642":1588,"1f938":1587,"1f939-200d-2640":1601,"1f939-200d-2642":1600,"1f939":1599,"1f93a":1559,"1f93c-200d-2640":1592,"1f93c-200d-2642":1591,"1f93c":1590,"1f93d-200d-2640":1595,"1f93d-200d-2642":1594,"1f93d":1593,"1f93e-200d-2640":1598,"1f93e-200d-2642":1597,"1f93e":1596,"1f93f":51037,"1f940":2626,"1f941":61142,"1f942":3760,"1f943":3761,"1f944":3770,"1f945":51033,"1f947":51012,"1f948":51013,"1f949":51014,"1f94a":51031,"1f94b":51032,"1f94c":51041,"1f94d":51028,"1f94e":51017,"1f94f":51023,"1f950":3679,"1f951":3663,"1f952":3670,"1f953":3690,"1f954":3665,"1f955":3666,"1f956":3680,"1f957":3707,"1f958":3703,"1f959":3699,"1f95a":3701,"1f95b":3749,"1f95c":3676,"1f95d":3659,"1f95e":3684,"1f95f":3726,"1f960":3727,"1f961":3728,"1f962":3767,"1f963":3706,"1f964":3762,"1f965":3662,"1f966":3672,"1f967":3742,"1f968":3682,"1f969":3689,"1f96a":3695,"1f96b":3711,"1f96c":3671,"1f96d":3651,"1f96e":3724,"1f96f":3683,"1f970":114,"1f971":188,"1f972":122,"1f973":160,"1f974":156,"1f975":154,"1f976":155,"1f977":1467,"1f978":161,"1f97a":173,"1f97b":61086,"1f97c":61075,"1f97d":61074,"1f97e":61100,"1f97f":61101,"1f980":3729,"1f981":2519,"1f982":2616,"1f983":2568,"1f984":2525,"1f985":2577,"1f986":2578,"1f987":2557,"1f988":2602,"1f989":2580,"1f98a":2514,"1f98b":2606,"1f98c":2527,"1f98d":2506,"1f98e":2589,"1f98f":2546,"1f990":3731,"1f991":3732,"1f992":2543,"1f993":2526,"1f994":2556,"1f995":2593,"1f996":2594,"1f997":2612,"1f998":2565,"1f999":2542,"1f99a":2584,"1f99b":2547,"1f99c":2585,"1f99d":2515,"1f99e":3730,"1f99f":2617,"1f9a0":2620,"1f9a1":2566,"1f9a2":2579,"1f9a3":2545,"1f9a4":2581,"1f9a5":2562,"1f9a6":2563,"1f9a7":2507,"1f9a8":2564,"1f9a9":2583,"1f9aa":3733,"1f9ab":2555,"1f9ac":2528,"1f9ad":2598,"1f9ae":2510,"1f9af":61273,"1f9b4":1349,"1f9b5":1340,"1f9b6":1341,"1f9b7":1348,"1f9b8-200d-2640":1495,"1f9b8-200d-2642":1494,"1f9b8":1493,"1f9b9-200d-2640":1498,"1f9b9-200d-2642":1497,"1f9b9":1496,"1f9ba":61076,"1f9bb":1343,"1f9bc":4871,"1f9bd":4870,"1f9be":1338,"1f9bf":1339,"1f9c0":3686,"1f9c1":3741,"1f9c2":3710,"1f9c3":3764,"1f9c4":3673,"1f9c5":3674,"1f9c6":3700,"1f9c7":3685,"1f9c8":3709,"1f9c9":3765,"1f9ca":3766,"1f9cb":3763,"1f9cd-200d-2640":1531,"1f9cd-200d-2642":1530,"1f9cd":1529,"1f9ce-200d-2640":1534,"1f9ce-200d-2642":1533,"1f9ce":1532,"1f9cf-200d-2640":1400,"1f9cf-200d-2642":1399,"1f9cf":1398,"1f9d0":164,"1f9d1-200d-1f33e":1422,"1f9d1-200d-1f373":1425,"1f9d1-200d-1f37c":1488,"1f9d1-200d-1f384":1492,"1f9d1-200d-1f393":1413,"1f9d1-200d-1f3a4":1443,"1f9d1-200d-1f3a8":1446,"1f9d1-200d-1f3eb":1416,"1f9d1-200d-1f3ed":1431,"1f9d1-200d-1f4bb":1440,"1f9d1-200d-1f4bc":1434,"1f9d1-200d-1f527":1428,"1f9d1-200d-1f52c":1437,"1f9d1-200d-1f680":1452,"1f9d1-200d-1f692":1455,"1f9d1-200d-1f91d-200d-1f9d1":1607,"1f9d1-200d-1f9af":1535,"1f9d1-200d-1f9b0":1368,"1f9d1-200d-1f9b1":1370,"1f9d1-200d-1f9b2":1374,"1f9d1-200d-1f9b3":1372,"1f9d1-200d-1f9bc":1538,"1f9d1-200d-1f9bd":1541,"1f9d1-200d-2695":1410,"1f9d1-200d-2696":1419,"1f9d1-200d-2708":1449,"1f9d1":1358,"1f9d2":1355,"1f9d3":1377,"1f9d4":1361,"1f9d5":1477,"1f9d6-200d-2640":1555,"1f9d6-200d-2642":1554,"1f9d6":1553,"1f9d7-200d-2640":1558,"1f9d7-200d-2642":1557,"1f9d7":1556,"1f9d8-200d-2640":1604,"1f9d8-200d-2642":1603,"1f9d8":1602,"1f9d9-200d-2640":1501,"1f9d9-200d-2642":1500,"1f9d9":1499,"1f9da-200d-2640":1504,"1f9da-200d-2642":1503,"1f9da":1502,"1f9db-200d-2640":1507,"1f9db-200d-2642":1506,"1f9db":1505,"1f9dc-200d-2640":1510,"1f9dc-200d-2642":1509,"1f9dc":1508,"1f9dd-200d-2640":1513,"1f9dd-200d-2642":1512,"1f9dd":1511,"1f9de-200d-2640":1516,"1f9de-200d-2642":1515,"1f9de":1514,"1f9df-200d-2640":1519,"1f9df-200d-2642":1518,"1f9df":1517,"1f9e0":1345,"1f9e1":1130,"1f9e2":61110,"1f9e3":61080,"1f9e4":61081,"1f9e5":61082,"1f9e6":61083,"1f9e7":51003,"1f9e8":5992,"1f9e9":51053,"1f9ea":61281,"1f9eb":61282,"1f9ec":61283,"1f9ed":4779,"1f9ee":61162,"1f9ef":61314,"1f9f0":61277,"1f9f1":4792,"1f9f2":61278,"1f9f3":4909,"1f9f4":61305,"1f9f5":51068,"1f9f6":51070,"1f9f7":61306,"1f9f8":51054,"1f9f9":61307,"1f9fa":61308,"1f9fb":61309,"1f9fc":61311,"1f9fd":61313,"1f9fe":61204,"1f9ff":51048,"1fa70":61104,"1fa71":61087,"1fa72":61088,"1fa73":61089,"1fa74":61097,"1fa78":61288,"1fa79":61290,"1fa7a":61291,"1fa80":51043,"1fa81":51044,"1fa82":4899,"1fa83":61263,"1fa84":51047,"1fa85":51055,"1fa86":51056,"1fa90":4957,"1fa91":61298,"1fa92":61304,"1fa93":61256,"1fa94":61178,"1fa95":61141,"1fa96":61111,"1fa97":61136,"1fa98":61143,"1fa99":61197,"1fa9a":61266,"1fa9b":61268,"1fa9c":61279,"1fa9d":61276,"1fa9e":61294,"1fa9f":61295,"1faa0":61300,"1faa1":51069,"1faa2":51071,"1faa3":61310,"1faa4":61303,"1faa5":61312,"1faa6":61318,"1faa7":61321,"1faa8":4793,"1fab0":2618,"1fab1":2619,"1fab2":2610,"1fab3":2613,"1fab4":2632,"1fab5":4794,"1fab6":2582,"1fac0":1346,"1fac1":1347,"1fac2":1648,"1fad0":3658,"1fad1":3669,"1fad2":3661,"1fad3":3681,"1fad4":3698,"1fad5":3705,"1fad6":3751,"203c":62747,"21a9":62679,"21aa":62680,"231a":4912,"231b":4910,"23cf":62732,"23e9":62719,"23ea":62723,"23eb":62726,"23ec":62728,"23ed":62720,"23ee":62724,"23ef":62721,"23f0":4913,"23f1":4914,"23f2":4915,"23f3":4911,"23f8":62729,"23f9":62730,"23fa":62731,"24c2":62803,"25aa":62851,"25ab":62852,"25b6":62718,"25c0":62722,"25fb":62848,"25fc":62847,"25fd":62850,"25fe":62849,"260e":61146,"261d":1321,"262a":62698,"262e":62699,"262f":62695,"263a":119,"264a":62704,"264b":62705,"264c":62706,"264d":62707,"264e":62708,"264f":62709,"265f":51061,"267b":62757,"267e":62746,"267f":62646,"269b":62691,"269c":62758,"26a0":62656,"26a1":4980,"26a7":62741,"26aa":62837,"26ab":62836,"26b0":61317,"26b1":61319,"26bd":51015,"26be":51016,"26c4":4983,"26c5":4963,"26c8":4964,"26ce":62714,"26cf":61257,"26d1":61112,"26d3":61275,"26d4":62658,"26e9":4820,"26ea":4816,"26f0":4781,"26f1":4979,"26f2":4822,"26f3":51034,"26f4":4892,"26f5":4888,"26f7":1561,"26f8":51035,"26f9-200d-2640":1577,"26f9-200d-2642":1576,"26f9":1575,"26fa":4823,"26fd":4881,"270a":1324,"270b":1306,"270c":1311,"270d":1334,"270f":61219,"271d":62696,"274c":62766,"274e":62767,"27a1":62671,"27b0":62768,"27bf":62769,"2b05":62675,"2b06":62669,"2b07":62673,"2b1b":62845,"2b1c":62846,"2b50":4958,"2b55":62762,"303d":62770,"1f385-1f3fb":0,"1f385-1f3fc":0,"1f385-1f3fd":0,"1f385-1f3fe":0,"1f385-1f3ff":0,"1f3c2-1f3fb":0,"1f3c2-1f3fc":0,"1f3c2-1f3fd":0,"1f3c2-1f3fe":0,"1f3c2-1f3ff":0,"1f3c3-1f3fb-200d-2640":0,"1f3c3-1f3fc-200d-2640":0,"1f3c3-1f3fd-200d-2640":0,"1f3c3-1f3fe-200d-2640":0,"1f3c3-1f3ff-200d-2640":0,"1f3c3-1f3fb-200d-2642":0,"1f3c3-1f3fc-200d-2642":0,"1f3c3-1f3fd-200d-2642":0,"1f3c3-1f3fe-200d-2642":0,"1f3c3-1f3ff-200d-2642":0,"1f3c3-1f3fb":0,"1f3c3-1f3fc":0,"1f3c3-1f3fd":0,"1f3c3-1f3fe":0,"1f3c3-1f3ff":0,"1f3c4-1f3fb-200d-2640":0,"1f3c4-1f3fc-200d-2640":0,"1f3c4-1f3fd-200d-2640":0,"1f3c4-1f3fe-200d-2640":0,"1f3c4-1f3ff-200d-2640":0,"1f3c4-1f3fb-200d-2642":0,"1f3c4-1f3fc-200d-2642":0,"1f3c4-1f3fd-200d-2642":0,"1f3c4-1f3fe-200d-2642":0,"1f3c4-1f3ff-200d-2642":0,"1f3c4-1f3fb":0,"1f3c4-1f3fc":0,"1f3c4-1f3fd":0,"1f3c4-1f3fe":0,"1f3c4-1f3ff":0,"1f3c7-1f3fb":0,"1f3c7-1f3fc":0,"1f3c7-1f3fd":0,"1f3c7-1f3fe":0,"1f3c7-1f3ff":0,"1f3ca-1f3fb-200d-2640":0,"1f3ca-1f3fc-200d-2640":0,"1f3ca-1f3fd-200d-2640":0,"1f3ca-1f3fe-200d-2640":0,"1f3ca-1f3ff-200d-2640":0,"1f3ca-1f3fb-200d-2642":0,"1f3ca-1f3fc-200d-2642":0,"1f3ca-1f3fd-200d-2642":0,"1f3ca-1f3fe-200d-2642":0,"1f3ca-1f3ff-200d-2642":0,"1f3ca-1f3fb":0,"1f3ca-1f3fc":0,"1f3ca-1f3fd":0,"1f3ca-1f3fe":0,"1f3ca-1f3ff":0,"1f3cb-1f3fb-200d-2640":0,"1f3cb-1f3fc-200d-2640":0,"1f3cb-1f3fd-200d-2640":0,"1f3cb-1f3fe-200d-2640":0,"1f3cb-1f3ff-200d-2640":0,"1f3cb-1f3fb-200d-2642":0,"1f3cb-1f3fc-200d-2642":0,"1f3cb-1f3fd-200d-2642":0,"1f3cb-1f3fe-200d-2642":0,"1f3cb-1f3ff-200d-2642":0,"1f3cb-1f3fb":0,"1f3cb-1f3fc":0,"1f3cb-1f3fd":0,"1f3cb-1f3fe":0,"1f3cb-1f3ff":0,"1f3cc-1f3fb-200d-2640":0,"1f3cc-1f3fc-200d-2640":0,"1f3cc-1f3fd-200d-2640":0,"1f3cc-1f3fe-200d-2640":0,"1f3cc-1f3ff-200d-2640":0,"1f3cc-1f3fb-200d-2642":0,"1f3cc-1f3fc-200d-2642":0,"1f3cc-1f3fd-200d-2642":0,"1f3cc-1f3fe-200d-2642":0,"1f3cc-1f3ff-200d-2642":0,"1f3cc-1f3fb":0,"1f3cc-1f3fc":0,"1f3cc-1f3fd":0,"1f3cc-1f3fe":0,"1f3cc-1f3ff":0,"1f442-1f3fb":0,"1f442-1f3fc":0,"1f442-1f3fd":0,"1f442-1f3fe":0,"1f442-1f3ff":0,"1f443-1f3fb":0,"1f443-1f3fc":0,"1f443-1f3fd":0,"1f443-1f3fe":0,"1f443-1f3ff":0,"1f446-1f3fb":0,"1f446-1f3fc":0,"1f446-1f3fd":0,"1f446-1f3fe":0,"1f446-1f3ff":0,"1f447-1f3fb":0,"1f447-1f3fc":0,"1f447-1f3fd":0,"1f447-1f3fe":0,"1f447-1f3ff":0,"1f448-1f3fb":0,"1f448-1f3fc":0,"1f448-1f3fd":0,"1f448-1f3fe":0,"1f448-1f3ff":0,"1f449-1f3fb":0,"1f449-1f3fc":0,"1f449-1f3fd":0,"1f449-1f3fe":0,"1f449-1f3ff":0,"1f44a-1f3fb":0,"1f44a-1f3fc":0,"1f44a-1f3fd":0,"1f44a-1f3fe":0,"1f44a-1f3ff":0,"1f44b-1f3fb":0,"1f44b-1f3fc":0,"1f44b-1f3fd":0,"1f44b-1f3fe":0,"1f44b-1f3ff":0,"1f44c-1f3fb":0,"1f44c-1f3fc":0,"1f44c-1f3fd":0,"1f44c-1f3fe":0,"1f44c-1f3ff":0,"1f44d-1f3fb":0,"1f44d-1f3fc":0,"1f44d-1f3fd":0,"1f44d-1f3fe":0,"1f44d-1f3ff":0,"1f44e-1f3fb":0,"1f44e-1f3fc":0,"1f44e-1f3fd":0,"1f44e-1f3fe":0,"1f44e-1f3ff":0,"1f44f-1f3fb":0,"1f44f-1f3fc":0,"1f44f-1f3fd":0,"1f44f-1f3fe":0,"1f44f-1f3ff":0,"1f450-1f3fb":0,"1f450-1f3fc":0,"1f450-1f3fd":0,"1f450-1f3fe":0,"1f450-1f3ff":0,"1f466-1f3fb":0,"1f466-1f3fc":0,"1f466-1f3fd":0,"1f466-1f3fe":0,"1f466-1f3ff":0,"1f467-1f3fb":0,"1f467-1f3fc":0,"1f467-1f3fd":0,"1f467-1f3fe":0,"1f467-1f3ff":0,"1f468-1f3fb-200d-1f33e":0,"1f468-1f3fc-200d-1f33e":0,"1f468-1f3fd-200d-1f33e":0,"1f468-1f3fe-200d-1f33e":0,"1f468-1f3ff-200d-1f33e":0,"1f468-1f3fb-200d-1f373":0,"1f468-1f3fc-200d-1f373":0,"1f468-1f3fd-200d-1f373":0,"1f468-1f3fe-200d-1f373":0,"1f468-1f3ff-200d-1f373":0,"1f468-1f3fb-200d-1f37c":0,"1f468-1f3fc-200d-1f37c":0,"1f468-1f3fd-200d-1f37c":0,"1f468-1f3fe-200d-1f37c":0,"1f468-1f3ff-200d-1f37c":0,"1f468-1f3fb-200d-1f393":0,"1f468-1f3fc-200d-1f393":0,"1f468-1f3fd-200d-1f393":0,"1f468-1f3fe-200d-1f393":0,"1f468-1f3ff-200d-1f393":0,"1f468-1f3fb-200d-1f3a4":0,"1f468-1f3fc-200d-1f3a4":0,"1f468-1f3fd-200d-1f3a4":0,"1f468-1f3fe-200d-1f3a4":0,"1f468-1f3ff-200d-1f3a4":0,"1f468-1f3fb-200d-1f3a8":0,"1f468-1f3fc-200d-1f3a8":0,"1f468-1f3fd-200d-1f3a8":0,"1f468-1f3fe-200d-1f3a8":0,"1f468-1f3ff-200d-1f3a8":0,"1f468-1f3fb-200d-1f3eb":0,"1f468-1f3fc-200d-1f3eb":0,"1f468-1f3fd-200d-1f3eb":0,"1f468-1f3fe-200d-1f3eb":0,"1f468-1f3ff-200d-1f3eb":0,"1f468-1f3fb-200d-1f3ed":0,"1f468-1f3fc-200d-1f3ed":0,"1f468-1f3fd-200d-1f3ed":0,"1f468-1f3fe-200d-1f3ed":0,"1f468-1f3ff-200d-1f3ed":0,"1f468-1f3fb-200d-1f4bb":0,"1f468-1f3fc-200d-1f4bb":0,"1f468-1f3fd-200d-1f4bb":0,"1f468-1f3fe-200d-1f4bb":0,"1f468-1f3ff-200d-1f4bb":0,"1f468-1f3fb-200d-1f4bc":0,"1f468-1f3fc-200d-1f4bc":0,"1f468-1f3fd-200d-1f4bc":0,"1f468-1f3fe-200d-1f4bc":0,"1f468-1f3ff-200d-1f4bc":0,"1f468-1f3fb-200d-1f527":0,"1f468-1f3fc-200d-1f527":0,"1f468-1f3fd-200d-1f527":0,"1f468-1f3fe-200d-1f527":0,"1f468-1f3ff-200d-1f527":0,"1f468-1f3fb-200d-1f52c":0,"1f468-1f3fc-200d-1f52c":0,"1f468-1f3fd-200d-1f52c":0,"1f468-1f3fe-200d-1f52c":0,"1f468-1f3ff-200d-1f52c":0,"1f468-1f3fb-200d-1f680":0,"1f468-1f3fc-200d-1f680":0,"1f468-1f3fd-200d-1f680":0,"1f468-1f3fe-200d-1f680":0,"1f468-1f3ff-200d-1f680":0,"1f468-1f3fb-200d-1f692":0,"1f468-1f3fc-200d-1f692":0,"1f468-1f3fd-200d-1f692":0,"1f468-1f3fe-200d-1f692":0,"1f468-1f3ff-200d-1f692":0,"1f468-1f3fb-200d-1f9af":0,"1f468-1f3fc-200d-1f9af":0,"1f468-1f3fd-200d-1f9af":0,"1f468-1f3fe-200d-1f9af":0,"1f468-1f3ff-200d-1f9af":0,"1f468-1f3fb-200d-1f9b0":0,"1f468-1f3fc-200d-1f9b0":0,"1f468-1f3fd-200d-1f9b0":0,"1f468-1f3fe-200d-1f9b0":0,"1f468-1f3ff-200d-1f9b0":0,"1f468-1f3fb-200d-1f9b1":0,"1f468-1f3fc-200d-1f9b1":0,"1f468-1f3fd-200d-1f9b1":0,"1f468-1f3fe-200d-1f9b1":0,"1f468-1f3ff-200d-1f9b1":0,"1f468-1f3fb-200d-1f9b2":0,"1f468-1f3fc-200d-1f9b2":0,"1f468-1f3fd-200d-1f9b2":0,"1f468-1f3fe-200d-1f9b2":0,"1f468-1f3ff-200d-1f9b2":0,"1f468-1f3fb-200d-1f9b3":0,"1f468-1f3fc-200d-1f9b3":0,"1f468-1f3fd-200d-1f9b3":0,"1f468-1f3fe-200d-1f9b3":0,"1f468-1f3ff-200d-1f9b3":0,"1f468-1f3fb-200d-1f9bc":0,"1f468-1f3fc-200d-1f9bc":0,"1f468-1f3fd-200d-1f9bc":0,"1f468-1f3fe-200d-1f9bc":0,"1f468-1f3ff-200d-1f9bc":0,"1f468-1f3fb-200d-1f9bd":0,"1f468-1f3fc-200d-1f9bd":0,"1f468-1f3fd-200d-1f9bd":0,"1f468-1f3fe-200d-1f9bd":0,"1f468-1f3ff-200d-1f9bd":0,"1f468-1f3fb-200d-2695":0,"1f468-1f3fc-200d-2695":0,"1f468-1f3fd-200d-2695":0,"1f468-1f3fe-200d-2695":0,"1f468-1f3ff-200d-2695":0,"1f468-1f3fb-200d-2696":0,"1f468-1f3fc-200d-2696":0,"1f468-1f3fd-200d-2696":0,"1f468-1f3fe-200d-2696":0,"1f468-1f3ff-200d-2696":0,"1f468-1f3fb-200d-2708":0,"1f468-1f3fc-200d-2708":0,"1f468-1f3fd-200d-2708":0,"1f468-1f3fe-200d-2708":0,"1f468-1f3ff-200d-2708":0,"1f468-1f3fb":0,"1f468-1f3fc":0,"1f468-1f3fd":0,"1f468-1f3fe":0,"1f468-1f3ff":0,"1f469-1f3fb-200d-1f33e":0,"1f469-1f3fc-200d-1f33e":0,"1f469-1f3fd-200d-1f33e":0,"1f469-1f3fe-200d-1f33e":0,"1f469-1f3ff-200d-1f33e":0,"1f469-1f3fb-200d-1f373":0,"1f469-1f3fc-200d-1f373":0,"1f469-1f3fd-200d-1f373":0,"1f469-1f3fe-200d-1f373":0,"1f469-1f3ff-200d-1f373":0,"1f469-1f3fb-200d-1f37c":0,"1f469-1f3fc-200d-1f37c":0,"1f469-1f3fd-200d-1f37c":0,"1f469-1f3fe-200d-1f37c":0,"1f469-1f3ff-200d-1f37c":0,"1f469-1f3fb-200d-1f393":0,"1f469-1f3fc-200d-1f393":0,"1f469-1f3fd-200d-1f393":0,"1f469-1f3fe-200d-1f393":0,"1f469-1f3ff-200d-1f393":0,"1f469-1f3fb-200d-1f3a4":0,"1f469-1f3fc-200d-1f3a4":0,"1f469-1f3fd-200d-1f3a4":0,"1f469-1f3fe-200d-1f3a4":0,"1f469-1f3ff-200d-1f3a4":0,"1f469-1f3fb-200d-1f3a8":0,"1f469-1f3fc-200d-1f3a8":0,"1f469-1f3fd-200d-1f3a8":0,"1f469-1f3fe-200d-1f3a8":0,"1f469-1f3ff-200d-1f3a8":0,"1f469-1f3fb-200d-1f3eb":0,"1f469-1f3fc-200d-1f3eb":0,"1f469-1f3fd-200d-1f3eb":0,"1f469-1f3fe-200d-1f3eb":0,"1f469-1f3ff-200d-1f3eb":0,"1f469-1f3fb-200d-1f3ed":0,"1f469-1f3fc-200d-1f3ed":0,"1f469-1f3fd-200d-1f3ed":0,"1f469-1f3fe-200d-1f3ed":0,"1f469-1f3ff-200d-1f3ed":0,"1f469-1f3fb-200d-1f4bb":0,"1f469-1f3fc-200d-1f4bb":0,"1f469-1f3fd-200d-1f4bb":0,"1f469-1f3fe-200d-1f4bb":0,"1f469-1f3ff-200d-1f4bb":0,"1f469-1f3fb-200d-1f4bc":0,"1f469-1f3fc-200d-1f4bc":0,"1f469-1f3fd-200d-1f4bc":0,"1f469-1f3fe-200d-1f4bc":0,"1f469-1f3ff-200d-1f4bc":0,"1f469-1f3fb-200d-1f527":0,"1f469-1f3fc-200d-1f527":0,"1f469-1f3fd-200d-1f527":0,"1f469-1f3fe-200d-1f527":0,"1f469-1f3ff-200d-1f527":0,"1f469-1f3fb-200d-1f52c":0,"1f469-1f3fc-200d-1f52c":0,"1f469-1f3fd-200d-1f52c":0,"1f469-1f3fe-200d-1f52c":0,"1f469-1f3ff-200d-1f52c":0,"1f469-1f3fb-200d-1f680":0,"1f469-1f3fc-200d-1f680":0,"1f469-1f3fd-200d-1f680":0,"1f469-1f3fe-200d-1f680":0,"1f469-1f3ff-200d-1f680":0,"1f469-1f3fb-200d-1f692":0,"1f469-1f3fc-200d-1f692":0,"1f469-1f3fd-200d-1f692":0,"1f469-1f3fe-200d-1f692":0,"1f469-1f3ff-200d-1f692":0,"1f469-1f3fb-200d-1f9af":0,"1f469-1f3fc-200d-1f9af":0,"1f469-1f3fd-200d-1f9af":0,"1f469-1f3fe-200d-1f9af":0,"1f469-1f3ff-200d-1f9af":0,"1f469-1f3fb-200d-1f9b0":0,"1f469-1f3fc-200d-1f9b0":0,"1f469-1f3fd-200d-1f9b0":0,"1f469-1f3fe-200d-1f9b0":0,"1f469-1f3ff-200d-1f9b0":0,"1f469-1f3fb-200d-1f9b1":0,"1f469-1f3fc-200d-1f9b1":0,"1f469-1f3fd-200d-1f9b1":0,"1f469-1f3fe-200d-1f9b1":0,"1f469-1f3ff-200d-1f9b1":0,"1f469-1f3fb-200d-1f9b2":0,"1f469-1f3fc-200d-1f9b2":0,"1f469-1f3fd-200d-1f9b2":0,"1f469-1f3fe-200d-1f9b2":0,"1f469-1f3ff-200d-1f9b2":0,"1f469-1f3fb-200d-1f9b3":0,"1f469-1f3fc-200d-1f9b3":0,"1f469-1f3fd-200d-1f9b3":0,"1f469-1f3fe-200d-1f9b3":0,"1f469-1f3ff-200d-1f9b3":0,"1f469-1f3fb-200d-1f9bc":0,"1f469-1f3fc-200d-1f9bc":0,"1f469-1f3fd-200d-1f9bc":0,"1f469-1f3fe-200d-1f9bc":0,"1f469-1f3ff-200d-1f9bc":0,"1f469-1f3fb-200d-1f9bd":0,"1f469-1f3fc-200d-1f9bd":0,"1f469-1f3fd-200d-1f9bd":0,"1f469-1f3fe-200d-1f9bd":0,"1f469-1f3ff-200d-1f9bd":0,"1f469-1f3fb-200d-2695":0,"1f469-1f3fc-200d-2695":0,"1f469-1f3fd-200d-2695":0,"1f469-1f3fe-200d-2695":0,"1f469-1f3ff-200d-2695":0,"1f469-1f3fb-200d-2696":0,"1f469-1f3fc-200d-2696":0,"1f469-1f3fd-200d-2696":0,"1f469-1f3fe-200d-2696":0,"1f469-1f3ff-200d-2696":0,"1f469-1f3fb-200d-2708":0,"1f469-1f3fc-200d-2708":0,"1f469-1f3fd-200d-2708":0,"1f469-1f3fe-200d-2708":0,"1f469-1f3ff-200d-2708":0,"1f469-1f3fb":0,"1f469-1f3fc":0,"1f469-1f3fd":0,"1f469-1f3fe":0,"1f469-1f3ff":0,"1f46b-1f3fb":0,"1f46b-1f3fc":0,"1f46b-1f3fd":0,"1f46b-1f3fe":0,"1f46b-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46c-1f3fb":0,"1f46c-1f3fc":0,"1f46c-1f3fd":0,"1f46c-1f3fe":0,"1f46c-1f3ff":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46d-1f3fb":0,"1f46d-1f3fc":0,"1f46d-1f3fd":0,"1f46d-1f3fe":0,"1f46d-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe":0,"1f46e-1f3fb-200d-2640":0,"1f46e-1f3fc-200d-2640":0,"1f46e-1f3fd-200d-2640":0,"1f46e-1f3fe-200d-2640":0,"1f46e-1f3ff-200d-2640":0,"1f46e-1f3fb-200d-2642":0,"1f46e-1f3fc-200d-2642":0,"1f46e-1f3fd-200d-2642":0,"1f46e-1f3fe-200d-2642":0,"1f46e-1f3ff-200d-2642":0,"1f46e-1f3fb":0,"1f46e-1f3fc":0,"1f46e-1f3fd":0,"1f46e-1f3fe":0,"1f46e-1f3ff":0,"1f470-1f3fb-200d-2640":0,"1f470-1f3fc-200d-2640":0,"1f470-1f3fd-200d-2640":0,"1f470-1f3fe-200d-2640":0,"1f470-1f3ff-200d-2640":0,"1f470-1f3fb-200d-2642":0,"1f470-1f3fc-200d-2642":0,"1f470-1f3fd-200d-2642":0,"1f470-1f3fe-200d-2642":0,"1f470-1f3ff-200d-2642":0,"1f470-1f3fb":0,"1f470-1f3fc":0,"1f470-1f3fd":0,"1f470-1f3fe":0,"1f470-1f3ff":0,"1f471-1f3fb-200d-2640":0,"1f471-1f3fc-200d-2640":0,"1f471-1f3fd-200d-2640":0,"1f471-1f3fe-200d-2640":0,"1f471-1f3ff-200d-2640":0,"1f471-1f3fb-200d-2642":0,"1f471-1f3fc-200d-2642":0,"1f471-1f3fd-200d-2642":0,"1f471-1f3fe-200d-2642":0,"1f471-1f3ff-200d-2642":0,"1f471-1f3fb":0,"1f471-1f3fc":0,"1f471-1f3fd":0,"1f471-1f3fe":0,"1f471-1f3ff":0,"1f472-1f3fb":0,"1f472-1f3fc":0,"1f472-1f3fd":0,"1f472-1f3fe":0,"1f472-1f3ff":0,"1f473-1f3fb-200d-2640":0,"1f473-1f3fc-200d-2640":0,"1f473-1f3fd-200d-2640":0,"1f473-1f3fe-200d-2640":0,"1f473-1f3ff-200d-2640":0,"1f473-1f3fb-200d-2642":0,"1f473-1f3fc-200d-2642":0,"1f473-1f3fd-200d-2642":0,"1f473-1f3fe-200d-2642":0,"1f473-1f3ff-200d-2642":0,"1f473-1f3fb":0,"1f473-1f3fc":0,"1f473-1f3fd":0,"1f473-1f3fe":0,"1f473-1f3ff":0,"1f474-1f3fb":0,"1f474-1f3fc":0,"1f474-1f3fd":0,"1f474-1f3fe":0,"1f474-1f3ff":0,"1f475-1f3fb":0,"1f475-1f3fc":0,"1f475-1f3fd":0,"1f475-1f3fe":0,"1f475-1f3ff":0,"1f476-1f3fb":0,"1f476-1f3fc":0,"1f476-1f3fd":0,"1f476-1f3fe":0,"1f476-1f3ff":0,"1f477-1f3fb-200d-2640":0,"1f477-1f3fc-200d-2640":0,"1f477-1f3fd-200d-2640":0,"1f477-1f3fe-200d-2640":0,"1f477-1f3ff-200d-2640":0,"1f477-1f3fb-200d-2642":0,"1f477-1f3fc-200d-2642":0,"1f477-1f3fd-200d-2642":0,"1f477-1f3fe-200d-2642":0,"1f477-1f3ff-200d-2642":0,"1f477-1f3fb":0,"1f477-1f3fc":0,"1f477-1f3fd":0,"1f477-1f3fe":0,"1f477-1f3ff":0,"1f478-1f3fb":0,"1f478-1f3fc":0,"1f478-1f3fd":0,"1f478-1f3fe":0,"1f478-1f3ff":0,"1f47c-1f3fb":0,"1f47c-1f3fc":0,"1f47c-1f3fd":0,"1f47c-1f3fe":0,"1f47c-1f3ff":0,"1f481-1f3fb-200d-2640":0,"1f481-1f3fc-200d-2640":0,"1f481-1f3fd-200d-2640":0,"1f481-1f3fe-200d-2640":0,"1f481-1f3ff-200d-2640":0,"1f481-1f3fb-200d-2642":0,"1f481-1f3fc-200d-2642":0,"1f481-1f3fd-200d-2642":0,"1f481-1f3fe-200d-2642":0,"1f481-1f3ff-200d-2642":0,"1f481-1f3fb":0,"1f481-1f3fc":0,"1f481-1f3fd":0,"1f481-1f3fe":0,"1f481-1f3ff":0,"1f482-1f3fb-200d-2640":0,"1f482-1f3fc-200d-2640":0,"1f482-1f3fd-200d-2640":0,"1f482-1f3fe-200d-2640":0,"1f482-1f3ff-200d-2640":0,"1f482-1f3fb-200d-2642":0,"1f482-1f3fc-200d-2642":0,"1f482-1f3fd-200d-2642":0,"1f482-1f3fe-200d-2642":0,"1f482-1f3ff-200d-2642":0,"1f482-1f3fb":0,"1f482-1f3fc":0,"1f482-1f3fd":0,"1f482-1f3fe":0,"1f482-1f3ff":0,"1f483-1f3fb":0,"1f483-1f3fc":0,"1f483-1f3fd":0,"1f483-1f3fe":0,"1f483-1f3ff":0,"1f485-1f3fb":0,"1f485-1f3fc":0,"1f485-1f3fd":0,"1f485-1f3fe":0,"1f485-1f3ff":0,"1f486-1f3fb-200d-2640":0,"1f486-1f3fc-200d-2640":0,"1f486-1f3fd-200d-2640":0,"1f486-1f3fe-200d-2640":0,"1f486-1f3ff-200d-2640":0,"1f486-1f3fb-200d-2642":0,"1f486-1f3fc-200d-2642":0,"1f486-1f3fd-200d-2642":0,"1f486-1f3fe-200d-2642":0,"1f486-1f3ff-200d-2642":0,"1f486-1f3fb":0,"1f486-1f3fc":0,"1f486-1f3fd":0,"1f486-1f3fe":0,"1f486-1f3ff":0,"1f487-1f3fb-200d-2640":0,"1f487-1f3fc-200d-2640":0,"1f487-1f3fd-200d-2640":0,"1f487-1f3fe-200d-2640":0,"1f487-1f3ff-200d-2640":0,"1f487-1f3fb-200d-2642":0,"1f487-1f3fc-200d-2642":0,"1f487-1f3fd-200d-2642":0,"1f487-1f3fe-200d-2642":0,"1f487-1f3ff-200d-2642":0,"1f487-1f3fb":0,"1f487-1f3fc":0,"1f487-1f3fd":0,"1f487-1f3fe":0,"1f487-1f3ff":0,"1f4aa-1f3fb":0,"1f4aa-1f3fc":0,"1f4aa-1f3fd":0,"1f4aa-1f3fe":0,"1f4aa-1f3ff":0,"1f574-1f3fb":0,"1f574-1f3fc":0,"1f574-1f3fd":0,"1f574-1f3fe":0,"1f574-1f3ff":0,"1f575-1f3fb-200d-2640":0,"1f575-1f3fc-200d-2640":0,"1f575-1f3fd-200d-2640":0,"1f575-1f3fe-200d-2640":0,"1f575-1f3ff-200d-2640":0,"1f575-1f3fb-200d-2642":0,"1f575-1f3fc-200d-2642":0,"1f575-1f3fd-200d-2642":0,"1f575-1f3fe-200d-2642":0,"1f575-1f3ff-200d-2642":0,"1f575-1f3fb":0,"1f575-1f3fc":0,"1f575-1f3fd":0,"1f575-1f3fe":0,"1f575-1f3ff":0,"1f57a-1f3fb":0,"1f57a-1f3fc":0,"1f57a-1f3fd":0,"1f57a-1f3fe":0,"1f57a-1f3ff":0,"1f590-1f3fb":0,"1f590-1f3fc":0,"1f590-1f3fd":0,"1f590-1f3fe":0,"1f590-1f3ff":0,"1f595-1f3fb":0,"1f595-1f3fc":0,"1f595-1f3fd":0,"1f595-1f3fe":0,"1f595-1f3ff":0,"1f596-1f3fb":0,"1f596-1f3fc":0,"1f596-1f3fd":0,"1f596-1f3fe":0,"1f596-1f3ff":0,"1f645-1f3fb-200d-2640":0,"1f645-1f3fc-200d-2640":0,"1f645-1f3fd-200d-2640":0,"1f645-1f3fe-200d-2640":0,"1f645-1f3ff-200d-2640":0,"1f645-1f3fb-200d-2642":0,"1f645-1f3fc-200d-2642":0,"1f645-1f3fd-200d-2642":0,"1f645-1f3fe-200d-2642":0,"1f645-1f3ff-200d-2642":0,"1f645-1f3fb":0,"1f645-1f3fc":0,"1f645-1f3fd":0,"1f645-1f3fe":0,"1f645-1f3ff":0,"1f646-1f3fb-200d-2640":0,"1f646-1f3fc-200d-2640":0,"1f646-1f3fd-200d-2640":0,"1f646-1f3fe-200d-2640":0,"1f646-1f3ff-200d-2640":0,"1f646-1f3fb-200d-2642":0,"1f646-1f3fc-200d-2642":0,"1f646-1f3fd-200d-2642":0,"1f646-1f3fe-200d-2642":0,"1f646-1f3ff-200d-2642":0,"1f646-1f3fb":0,"1f646-1f3fc":0,"1f646-1f3fd":0,"1f646-1f3fe":0,"1f646-1f3ff":0,"1f647-1f3fb-200d-2640":0,"1f647-1f3fc-200d-2640":0,"1f647-1f3fd-200d-2640":0,"1f647-1f3fe-200d-2640":0,"1f647-1f3ff-200d-2640":0,"1f647-1f3fb-200d-2642":0,"1f647-1f3fc-200d-2642":0,"1f647-1f3fd-200d-2642":0,"1f647-1f3fe-200d-2642":0,"1f647-1f3ff-200d-2642":0,"1f647-1f3fb":0,"1f647-1f3fc":0,"1f647-1f3fd":0,"1f647-1f3fe":0,"1f647-1f3ff":0,"1f64b-1f3fb-200d-2640":0,"1f64b-1f3fc-200d-2640":0,"1f64b-1f3fd-200d-2640":0,"1f64b-1f3fe-200d-2640":0,"1f64b-1f3ff-200d-2640":0,"1f64b-1f3fb-200d-2642":0,"1f64b-1f3fc-200d-2642":0,"1f64b-1f3fd-200d-2642":0,"1f64b-1f3fe-200d-2642":0,"1f64b-1f3ff-200d-2642":0,"1f64b-1f3fb":0,"1f64b-1f3fc":0,"1f64b-1f3fd":0,"1f64b-1f3fe":0,"1f64b-1f3ff":0,"1f64c-1f3fb":0,"1f64c-1f3fc":0,"1f64c-1f3fd":0,"1f64c-1f3fe":0,"1f64c-1f3ff":0,"1f64d-1f3fb-200d-2640":0,"1f64d-1f3fc-200d-2640":0,"1f64d-1f3fd-200d-2640":0,"1f64d-1f3fe-200d-2640":0,"1f64d-1f3ff-200d-2640":0,"1f64d-1f3fb-200d-2642":0,"1f64d-1f3fc-200d-2642":0,"1f64d-1f3fd-200d-2642":0,"1f64d-1f3fe-200d-2642":0,"1f64d-1f3ff-200d-2642":0,"1f64d-1f3fb":0,"1f64d-1f3fc":0,"1f64d-1f3fd":0,"1f64d-1f3fe":0,"1f64d-1f3ff":0,"1f64e-1f3fb-200d-2640":0,"1f64e-1f3fc-200d-2640":0,"1f64e-1f3fd-200d-2640":0,"1f64e-1f3fe-200d-2640":0,"1f64e-1f3ff-200d-2640":0,"1f64e-1f3fb-200d-2642":0,"1f64e-1f3fc-200d-2642":0,"1f64e-1f3fd-200d-2642":0,"1f64e-1f3fe-200d-2642":0,"1f64e-1f3ff-200d-2642":0,"1f64e-1f3fb":0,"1f64e-1f3fc":0,"1f64e-1f3fd":0,"1f64e-1f3fe":0,"1f64e-1f3ff":0,"1f64f-1f3fb":0,"1f64f-1f3fc":0,"1f64f-1f3fd":0,"1f64f-1f3fe":0,"1f64f-1f3ff":0,"1f6a3-1f3fb-200d-2640":0,"1f6a3-1f3fc-200d-2640":0,"1f6a3-1f3fd-200d-2640":0,"1f6a3-1f3fe-200d-2640":0,"1f6a3-1f3ff-200d-2640":0,"1f6a3-1f3fb-200d-2642":0,"1f6a3-1f3fc-200d-2642":0,"1f6a3-1f3fd-200d-2642":0,"1f6a3-1f3fe-200d-2642":0,"1f6a3-1f3ff-200d-2642":0,"1f6a3-1f3fb":0,"1f6a3-1f3fc":0,"1f6a3-1f3fd":0,"1f6a3-1f3fe":0,"1f6a3-1f3ff":0,"1f6b4-1f3fb-200d-2640":0,"1f6b4-1f3fc-200d-2640":0,"1f6b4-1f3fd-200d-2640":0,"1f6b4-1f3fe-200d-2640":0,"1f6b4-1f3ff-200d-2640":0,"1f6b4-1f3fb-200d-2642":0,"1f6b4-1f3fc-200d-2642":0,"1f6b4-1f3fd-200d-2642":0,"1f6b4-1f3fe-200d-2642":0,"1f6b4-1f3ff-200d-2642":0,"1f6b4-1f3fb":0,"1f6b4-1f3fc":0,"1f6b4-1f3fd":0,"1f6b4-1f3fe":0,"1f6b4-1f3ff":0,"1f6b5-1f3fb-200d-2640":0,"1f6b5-1f3fc-200d-2640":0,"1f6b5-1f3fd-200d-2640":0,"1f6b5-1f3fe-200d-2640":0,"1f6b5-1f3ff-200d-2640":0,"1f6b5-1f3fb-200d-2642":0,"1f6b5-1f3fc-200d-2642":0,"1f6b5-1f3fd-200d-2642":0,"1f6b5-1f3fe-200d-2642":0,"1f6b5-1f3ff-200d-2642":0,"1f6b5-1f3fb":0,"1f6b5-1f3fc":0,"1f6b5-1f3fd":0,"1f6b5-1f3fe":0,"1f6b5-1f3ff":0,"1f6b6-1f3fb-200d-2640":0,"1f6b6-1f3fc-200d-2640":0,"1f6b6-1f3fd-200d-2640":0,"1f6b6-1f3fe-200d-2640":0,"1f6b6-1f3ff-200d-2640":0,"1f6b6-1f3fb-200d-2642":0,"1f6b6-1f3fc-200d-2642":0,"1f6b6-1f3fd-200d-2642":0,"1f6b6-1f3fe-200d-2642":0,"1f6b6-1f3ff-200d-2642":0,"1f6b6-1f3fb":0,"1f6b6-1f3fc":0,"1f6b6-1f3fd":0,"1f6b6-1f3fe":0,"1f6b6-1f3ff":0,"1f6c0-1f3fb":0,"1f6c0-1f3fc":0,"1f6c0-1f3fd":0,"1f6c0-1f3fe":0,"1f6c0-1f3ff":0,"1f6cc-1f3fb":0,"1f6cc-1f3fc":0,"1f6cc-1f3fd":0,"1f6cc-1f3fe":0,"1f6cc-1f3ff":0,"1f90c-1f3fb":0,"1f90c-1f3fc":0,"1f90c-1f3fd":0,"1f90c-1f3fe":0,"1f90c-1f3ff":0,"1f90f-1f3fb":0,"1f90f-1f3fc":0,"1f90f-1f3fd":0,"1f90f-1f3fe":0,"1f90f-1f3ff":0,"1f918-1f3fb":0,"1f918-1f3fc":0,"1f918-1f3fd":0,"1f918-1f3fe":0,"1f918-1f3ff":0,"1f919-1f3fb":0,"1f919-1f3fc":0,"1f919-1f3fd":0,"1f919-1f3fe":0,"1f919-1f3ff":0,"1f91a-1f3fb":0,"1f91a-1f3fc":0,"1f91a-1f3fd":0,"1f91a-1f3fe":0,"1f91a-1f3ff":0,"1f91b-1f3fb":0,"1f91b-1f3fc":0,"1f91b-1f3fd":0,"1f91b-1f3fe":0,"1f91b-1f3ff":0,"1f91c-1f3fb":0,"1f91c-1f3fc":0,"1f91c-1f3fd":0,"1f91c-1f3fe":0,"1f91c-1f3ff":0,"1f91e-1f3fb":0,"1f91e-1f3fc":0,"1f91e-1f3fd":0,"1f91e-1f3fe":0,"1f91e-1f3ff":0,"1f91f-1f3fb":0,"1f91f-1f3fc":0,"1f91f-1f3fd":0,"1f91f-1f3fe":0,"1f91f-1f3ff":0,"1f926-1f3fb-200d-2640":0,"1f926-1f3fc-200d-2640":0,"1f926-1f3fd-200d-2640":0,"1f926-1f3fe-200d-2640":0,"1f926-1f3ff-200d-2640":0,"1f926-1f3fb-200d-2642":0,"1f926-1f3fc-200d-2642":0,"1f926-1f3fd-200d-2642":0,"1f926-1f3fe-200d-2642":0,"1f926-1f3ff-200d-2642":0,"1f926-1f3fb":0,"1f926-1f3fc":0,"1f926-1f3fd":0,"1f926-1f3fe":0,"1f926-1f3ff":0,"1f930-1f3fb":0,"1f930-1f3fc":0,"1f930-1f3fd":0,"1f930-1f3fe":0,"1f930-1f3ff":0,"1f931-1f3fb":0,"1f931-1f3fc":0,"1f931-1f3fd":0,"1f931-1f3fe":0,"1f931-1f3ff":0,"1f932-1f3fb":0,"1f932-1f3fc":0,"1f932-1f3fd":0,"1f932-1f3fe":0,"1f932-1f3ff":0,"1f933-1f3fb":0,"1f933-1f3fc":0,"1f933-1f3fd":0,"1f933-1f3fe":0,"1f933-1f3ff":0,"1f934-1f3fb":0,"1f934-1f3fc":0,"1f934-1f3fd":0,"1f934-1f3fe":0,"1f934-1f3ff":0,"1f935-1f3fb-200d-2640":0,"1f935-1f3fc-200d-2640":0,"1f935-1f3fd-200d-2640":0,"1f935-1f3fe-200d-2640":0,"1f935-1f3ff-200d-2640":0,"1f935-1f3fb-200d-2642":0,"1f935-1f3fc-200d-2642":0,"1f935-1f3fd-200d-2642":0,"1f935-1f3fe-200d-2642":0,"1f935-1f3ff-200d-2642":0,"1f935-1f3fb":0,"1f935-1f3fc":0,"1f935-1f3fd":0,"1f935-1f3fe":0,"1f935-1f3ff":0,"1f936-1f3fb":0,"1f936-1f3fc":0,"1f936-1f3fd":0,"1f936-1f3fe":0,"1f936-1f3ff":0,"1f937-1f3fb-200d-2640":0,"1f937-1f3fc-200d-2640":0,"1f937-1f3fd-200d-2640":0,"1f937-1f3fe-200d-2640":0,"1f937-1f3ff-200d-2640":0,"1f937-1f3fb-200d-2642":0,"1f937-1f3fc-200d-2642":0,"1f937-1f3fd-200d-2642":0,"1f937-1f3fe-200d-2642":0,"1f937-1f3ff-200d-2642":0,"1f937-1f3fb":0,"1f937-1f3fc":0,"1f937-1f3fd":0,"1f937-1f3fe":0,"1f937-1f3ff":0,"1f938-1f3fb-200d-2640":0,"1f938-1f3fc-200d-2640":0,"1f938-1f3fd-200d-2640":0,"1f938-1f3fe-200d-2640":0,"1f938-1f3ff-200d-2640":0,"1f938-1f3fb-200d-2642":0,"1f938-1f3fc-200d-2642":0,"1f938-1f3fd-200d-2642":0,"1f938-1f3fe-200d-2642":0,"1f938-1f3ff-200d-2642":0,"1f938-1f3fb":0,"1f938-1f3fc":0,"1f938-1f3fd":0,"1f938-1f3fe":0,"1f938-1f3ff":0,"1f939-1f3fb-200d-2640":0,"1f939-1f3fc-200d-2640":0,"1f939-1f3fd-200d-2640":0,"1f939-1f3fe-200d-2640":0,"1f939-1f3ff-200d-2640":0,"1f939-1f3fb-200d-2642":0,"1f939-1f3fc-200d-2642":0,"1f939-1f3fd-200d-2642":0,"1f939-1f3fe-200d-2642":0,"1f939-1f3ff-200d-2642":0,"1f939-1f3fb":0,"1f939-1f3fc":0,"1f939-1f3fd":0,"1f939-1f3fe":0,"1f939-1f3ff":0,"1f93d-1f3fb-200d-2640":0,"1f93d-1f3fc-200d-2640":0,"1f93d-1f3fd-200d-2640":0,"1f93d-1f3fe-200d-2640":0,"1f93d-1f3ff-200d-2640":0,"1f93d-1f3fb-200d-2642":0,"1f93d-1f3fc-200d-2642":0,"1f93d-1f3fd-200d-2642":0,"1f93d-1f3fe-200d-2642":0,"1f93d-1f3ff-200d-2642":0,"1f93d-1f3fb":0,"1f93d-1f3fc":0,"1f93d-1f3fd":0,"1f93d-1f3fe":0,"1f93d-1f3ff":0,"1f93e-1f3fb-200d-2640":0,"1f93e-1f3fc-200d-2640":0,"1f93e-1f3fd-200d-2640":0,"1f93e-1f3fe-200d-2640":0,"1f93e-1f3ff-200d-2640":0,"1f93e-1f3fb-200d-2642":0,"1f93e-1f3fc-200d-2642":0,"1f93e-1f3fd-200d-2642":0,"1f93e-1f3fe-200d-2642":0,"1f93e-1f3ff-200d-2642":0,"1f93e-1f3fb":0,"1f93e-1f3fc":0,"1f93e-1f3fd":0,"1f93e-1f3fe":0,"1f93e-1f3ff":0,"1f977-1f3fb":0,"1f977-1f3fc":0,"1f977-1f3fd":0,"1f977-1f3fe":0,"1f977-1f3ff":0,"1f9b5-1f3fb":0,"1f9b5-1f3fc":0,"1f9b5-1f3fd":0,"1f9b5-1f3fe":0,"1f9b5-1f3ff":0,"1f9b6-1f3fb":0,"1f9b6-1f3fc":0,"1f9b6-1f3fd":0,"1f9b6-1f3fe":0,"1f9b6-1f3ff":0,"1f9b8-1f3fb-200d-2640":0,"1f9b8-1f3fc-200d-2640":0,"1f9b8-1f3fd-200d-2640":0,"1f9b8-1f3fe-200d-2640":0,"1f9b8-1f3ff-200d-2640":0,"1f9b8-1f3fb-200d-2642":0,"1f9b8-1f3fc-200d-2642":0,"1f9b8-1f3fd-200d-2642":0,"1f9b8-1f3fe-200d-2642":0,"1f9b8-1f3ff-200d-2642":0,"1f9b8-1f3fb":0,"1f9b8-1f3fc":0,"1f9b8-1f3fd":0,"1f9b8-1f3fe":0,"1f9b8-1f3ff":0,"1f9b9-1f3fb-200d-2640":0,"1f9b9-1f3fc-200d-2640":0,"1f9b9-1f3fd-200d-2640":0,"1f9b9-1f3fe-200d-2640":0,"1f9b9-1f3ff-200d-2640":0,"1f9b9-1f3fb-200d-2642":0,"1f9b9-1f3fc-200d-2642":0,"1f9b9-1f3fd-200d-2642":0,"1f9b9-1f3fe-200d-2642":0,"1f9b9-1f3ff-200d-2642":0,"1f9b9-1f3fb":0,"1f9b9-1f3fc":0,"1f9b9-1f3fd":0,"1f9b9-1f3fe":0,"1f9b9-1f3ff":0,"1f9bb-1f3fb":0,"1f9bb-1f3fc":0,"1f9bb-1f3fd":0,"1f9bb-1f3fe":0,"1f9bb-1f3ff":0,"1f9cd-1f3fb-200d-2640":0,"1f9cd-1f3fc-200d-2640":0,"1f9cd-1f3fd-200d-2640":0,"1f9cd-1f3fe-200d-2640":0,"1f9cd-1f3ff-200d-2640":0,"1f9cd-1f3fb-200d-2642":0,"1f9cd-1f3fc-200d-2642":0,"1f9cd-1f3fd-200d-2642":0,"1f9cd-1f3fe-200d-2642":0,"1f9cd-1f3ff-200d-2642":0,"1f9cd-1f3fb":0,"1f9cd-1f3fc":0,"1f9cd-1f3fd":0,"1f9cd-1f3fe":0,"1f9cd-1f3ff":0,"1f9ce-1f3fb-200d-2640":0,"1f9ce-1f3fc-200d-2640":0,"1f9ce-1f3fd-200d-2640":0,"1f9ce-1f3fe-200d-2640":0,"1f9ce-1f3ff-200d-2640":0,"1f9ce-1f3fb-200d-2642":0,"1f9ce-1f3fc-200d-2642":0,"1f9ce-1f3fd-200d-2642":0,"1f9ce-1f3fe-200d-2642":0,"1f9ce-1f3ff-200d-2642":0,"1f9ce-1f3fb":0,"1f9ce-1f3fc":0,"1f9ce-1f3fd":0,"1f9ce-1f3fe":0,"1f9ce-1f3ff":0,"1f9cf-1f3fb-200d-2640":0,"1f9cf-1f3fc-200d-2640":0,"1f9cf-1f3fd-200d-2640":0,"1f9cf-1f3fe-200d-2640":0,"1f9cf-1f3ff-200d-2640":0,"1f9cf-1f3fb-200d-2642":0,"1f9cf-1f3fc-200d-2642":0,"1f9cf-1f3fd-200d-2642":0,"1f9cf-1f3fe-200d-2642":0,"1f9cf-1f3ff-200d-2642":0,"1f9cf-1f3fb":0,"1f9cf-1f3fc":0,"1f9cf-1f3fd":0,"1f9cf-1f3fe":0,"1f9cf-1f3ff":0,"1f9d1-1f3fb-200d-1f33e":0,"1f9d1-1f3fc-200d-1f33e":0,"1f9d1-1f3fd-200d-1f33e":0,"1f9d1-1f3fe-200d-1f33e":0,"1f9d1-1f3ff-200d-1f33e":0,"1f9d1-1f3fb-200d-1f373":0,"1f9d1-1f3fc-200d-1f373":0,"1f9d1-1f3fd-200d-1f373":0,"1f9d1-1f3fe-200d-1f373":0,"1f9d1-1f3ff-200d-1f373":0,"1f9d1-1f3fb-200d-1f37c":0,"1f9d1-1f3fc-200d-1f37c":0,"1f9d1-1f3fd-200d-1f37c":0,"1f9d1-1f3fe-200d-1f37c":0,"1f9d1-1f3ff-200d-1f37c":0,"1f9d1-1f3fb-200d-1f384":0,"1f9d1-1f3fc-200d-1f384":0,"1f9d1-1f3fd-200d-1f384":0,"1f9d1-1f3fe-200d-1f384":0,"1f9d1-1f3ff-200d-1f384":0,"1f9d1-1f3fb-200d-1f393":0,"1f9d1-1f3fc-200d-1f393":0,"1f9d1-1f3fd-200d-1f393":0,"1f9d1-1f3fe-200d-1f393":0,"1f9d1-1f3ff-200d-1f393":0,"1f9d1-1f3fb-200d-1f3a4":0,"1f9d1-1f3fc-200d-1f3a4":0,"1f9d1-1f3fd-200d-1f3a4":0,"1f9d1-1f3fe-200d-1f3a4":0,"1f9d1-1f3ff-200d-1f3a4":0,"1f9d1-1f3fb-200d-1f3a8":0,"1f9d1-1f3fc-200d-1f3a8":0,"1f9d1-1f3fd-200d-1f3a8":0,"1f9d1-1f3fe-200d-1f3a8":0,"1f9d1-1f3ff-200d-1f3a8":0,"1f9d1-1f3fb-200d-1f3eb":0,"1f9d1-1f3fc-200d-1f3eb":0,"1f9d1-1f3fd-200d-1f3eb":0,"1f9d1-1f3fe-200d-1f3eb":0,"1f9d1-1f3ff-200d-1f3eb":0,"1f9d1-1f3fb-200d-1f3ed":0,"1f9d1-1f3fc-200d-1f3ed":0,"1f9d1-1f3fd-200d-1f3ed":0,"1f9d1-1f3fe-200d-1f3ed":0,"1f9d1-1f3ff-200d-1f3ed":0,"1f9d1-1f3fb-200d-1f4bb":0,"1f9d1-1f3fc-200d-1f4bb":0,"1f9d1-1f3fd-200d-1f4bb":0,"1f9d1-1f3fe-200d-1f4bb":0,"1f9d1-1f3ff-200d-1f4bb":0,"1f9d1-1f3fb-200d-1f4bc":0,"1f9d1-1f3fc-200d-1f4bc":0,"1f9d1-1f3fd-200d-1f4bc":0,"1f9d1-1f3fe-200d-1f4bc":0,"1f9d1-1f3ff-200d-1f4bc":0,"1f9d1-1f3fb-200d-1f527":0,"1f9d1-1f3fc-200d-1f527":0,"1f9d1-1f3fd-200d-1f527":0,"1f9d1-1f3fe-200d-1f527":0,"1f9d1-1f3ff-200d-1f527":0,"1f9d1-1f3fb-200d-1f52c":0,"1f9d1-1f3fc-200d-1f52c":0,"1f9d1-1f3fd-200d-1f52c":0,"1f9d1-1f3fe-200d-1f52c":0,"1f9d1-1f3ff-200d-1f52c":0,"1f9d1-1f3fb-200d-1f680":0,"1f9d1-1f3fc-200d-1f680":0,"1f9d1-1f3fd-200d-1f680":0,"1f9d1-1f3fe-200d-1f680":0,"1f9d1-1f3ff-200d-1f680":0,"1f9d1-1f3fb-200d-1f692":0,"1f9d1-1f3fc-200d-1f692":0,"1f9d1-1f3fd-200d-1f692":0,"1f9d1-1f3fe-200d-1f692":0,"1f9d1-1f3ff-200d-1f692":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fb-200d-1f9af":0,"1f9d1-1f3fc-200d-1f9af":0,"1f9d1-1f3fd-200d-1f9af":0,"1f9d1-1f3fe-200d-1f9af":0,"1f9d1-1f3ff-200d-1f9af":0,"1f9d1-1f3fb-200d-1f9b0":0,"1f9d1-1f3fc-200d-1f9b0":0,"1f9d1-1f3fd-200d-1f9b0":0,"1f9d1-1f3fe-200d-1f9b0":0,"1f9d1-1f3ff-200d-1f9b0":0,"1f9d1-1f3fb-200d-1f9b1":0,"1f9d1-1f3fc-200d-1f9b1":0,"1f9d1-1f3fd-200d-1f9b1":0,"1f9d1-1f3fe-200d-1f9b1":0,"1f9d1-1f3ff-200d-1f9b1":0,"1f9d1-1f3fb-200d-1f9b2":0,"1f9d1-1f3fc-200d-1f9b2":0,"1f9d1-1f3fd-200d-1f9b2":0,"1f9d1-1f3fe-200d-1f9b2":0,"1f9d1-1f3ff-200d-1f9b2":0,"1f9d1-1f3fb-200d-1f9b3":0,"1f9d1-1f3fc-200d-1f9b3":0,"1f9d1-1f3fd-200d-1f9b3":0,"1f9d1-1f3fe-200d-1f9b3":0,"1f9d1-1f3ff-200d-1f9b3":0,"1f9d1-1f3fb-200d-1f9bc":0,"1f9d1-1f3fc-200d-1f9bc":0,"1f9d1-1f3fd-200d-1f9bc":0,"1f9d1-1f3fe-200d-1f9bc":0,"1f9d1-1f3ff-200d-1f9bc":0,"1f9d1-1f3fb-200d-1f9bd":0,"1f9d1-1f3fc-200d-1f9bd":0,"1f9d1-1f3fd-200d-1f9bd":0,"1f9d1-1f3fe-200d-1f9bd":0,"1f9d1-1f3ff-200d-1f9bd":0,"1f9d1-1f3fb-200d-2695":0,"1f9d1-1f3fc-200d-2695":0,"1f9d1-1f3fd-200d-2695":0,"1f9d1-1f3fe-200d-2695":0,"1f9d1-1f3ff-200d-2695":0,"1f9d1-1f3fb-200d-2696":0,"1f9d1-1f3fc-200d-2696":0,"1f9d1-1f3fd-200d-2696":0,"1f9d1-1f3fe-200d-2696":0,"1f9d1-1f3ff-200d-2696":0,"1f9d1-1f3fb-200d-2708":0,"1f9d1-1f3fc-200d-2708":0,"1f9d1-1f3fd-200d-2708":0,"1f9d1-1f3fe-200d-2708":0,"1f9d1-1f3ff-200d-2708":0,"1f9d1-1f3fb":0,"1f9d1-1f3fc":0,"1f9d1-1f3fd":0,"1f9d1-1f3fe":0,"1f9d1-1f3ff":0,"1f9d2-1f3fb":0,"1f9d2-1f3fc":0,"1f9d2-1f3fd":0,"1f9d2-1f3fe":0,"1f9d2-1f3ff":0,"1f9d3-1f3fb":0,"1f9d3-1f3fc":0,"1f9d3-1f3fd":0,"1f9d3-1f3fe":0,"1f9d3-1f3ff":0,"1f9d4-1f3fb":0,"1f9d4-1f3fc":0,"1f9d4-1f3fd":0,"1f9d4-1f3fe":0,"1f9d4-1f3ff":0,"1f9d5-1f3fb":0,"1f9d5-1f3fc":0,"1f9d5-1f3fd":0,"1f9d5-1f3fe":0,"1f9d5-1f3ff":0,"1f9d6-1f3fb-200d-2640":0,"1f9d6-1f3fc-200d-2640":0,"1f9d6-1f3fd-200d-2640":0,"1f9d6-1f3fe-200d-2640":0,"1f9d6-1f3ff-200d-2640":0,"1f9d6-1f3fb-200d-2642":0,"1f9d6-1f3fc-200d-2642":0,"1f9d6-1f3fd-200d-2642":0,"1f9d6-1f3fe-200d-2642":0,"1f9d6-1f3ff-200d-2642":0,"1f9d6-1f3fb":0,"1f9d6-1f3fc":0,"1f9d6-1f3fd":0,"1f9d6-1f3fe":0,"1f9d6-1f3ff":0,"1f9d7-1f3fb-200d-2640":0,"1f9d7-1f3fc-200d-2640":0,"1f9d7-1f3fd-200d-2640":0,"1f9d7-1f3fe-200d-2640":0,"1f9d7-1f3ff-200d-2640":0,"1f9d7-1f3fb-200d-2642":0,"1f9d7-1f3fc-200d-2642":0,"1f9d7-1f3fd-200d-2642":0,"1f9d7-1f3fe-200d-2642":0,"1f9d7-1f3ff-200d-2642":0,"1f9d7-1f3fb":0,"1f9d7-1f3fc":0,"1f9d7-1f3fd":0,"1f9d7-1f3fe":0,"1f9d7-1f3ff":0,"1f9d8-1f3fb-200d-2640":0,"1f9d8-1f3fc-200d-2640":0,"1f9d8-1f3fd-200d-2640":0,"1f9d8-1f3fe-200d-2640":0,"1f9d8-1f3ff-200d-2640":0,"1f9d8-1f3fb-200d-2642":0,"1f9d8-1f3fc-200d-2642":0,"1f9d8-1f3fd-200d-2642":0,"1f9d8-1f3fe-200d-2642":0,"1f9d8-1f3ff-200d-2642":0,"1f9d8-1f3fb":0,"1f9d8-1f3fc":0,"1f9d8-1f3fd":0,"1f9d8-1f3fe":0,"1f9d8-1f3ff":0,"1f9d9-1f3fb-200d-2640":0,"1f9d9-1f3fc-200d-2640":0,"1f9d9-1f3fd-200d-2640":0,"1f9d9-1f3fe-200d-2640":0,"1f9d9-1f3ff-200d-2640":0,"1f9d9-1f3fb-200d-2642":0,"1f9d9-1f3fc-200d-2642":0,"1f9d9-1f3fd-200d-2642":0,"1f9d9-1f3fe-200d-2642":0,"1f9d9-1f3ff-200d-2642":0,"1f9d9-1f3fb":0,"1f9d9-1f3fc":0,"1f9d9-1f3fd":0,"1f9d9-1f3fe":0,"1f9d9-1f3ff":0,"1f9da-1f3fb-200d-2640":0,"1f9da-1f3fc-200d-2640":0,"1f9da-1f3fd-200d-2640":0,"1f9da-1f3fe-200d-2640":0,"1f9da-1f3ff-200d-2640":0,"1f9da-1f3fb-200d-2642":0,"1f9da-1f3fc-200d-2642":0,"1f9da-1f3fd-200d-2642":0,"1f9da-1f3fe-200d-2642":0,"1f9da-1f3ff-200d-2642":0,"1f9da-1f3fb":0,"1f9da-1f3fc":0,"1f9da-1f3fd":0,"1f9da-1f3fe":0,"1f9da-1f3ff":0,"1f9db-1f3fb-200d-2640":0,"1f9db-1f3fc-200d-2640":0,"1f9db-1f3fd-200d-2640":0,"1f9db-1f3fe-200d-2640":0,"1f9db-1f3ff-200d-2640":0,"1f9db-1f3fb-200d-2642":0,"1f9db-1f3fc-200d-2642":0,"1f9db-1f3fd-200d-2642":0,"1f9db-1f3fe-200d-2642":0,"1f9db-1f3ff-200d-2642":0,"1f9db-1f3fb":0,"1f9db-1f3fc":0,"1f9db-1f3fd":0,"1f9db-1f3fe":0,"1f9db-1f3ff":0,"1f9dc-1f3fb-200d-2640":0,"1f9dc-1f3fc-200d-2640":0,"1f9dc-1f3fd-200d-2640":0,"1f9dc-1f3fe-200d-2640":0,"1f9dc-1f3ff-200d-2640":0,"1f9dc-1f3fb-200d-2642":0,"1f9dc-1f3fc-200d-2642":0,"1f9dc-1f3fd-200d-2642":0,"1f9dc-1f3fe-200d-2642":0,"1f9dc-1f3ff-200d-2642":0,"1f9dc-1f3fb":0,"1f9dc-1f3fc":0,"1f9dc-1f3fd":0,"1f9dc-1f3fe":0,"1f9dc-1f3ff":0,"1f9dd-1f3fb-200d-2640":0,"1f9dd-1f3fc-200d-2640":0,"1f9dd-1f3fd-200d-2640":0,"1f9dd-1f3fe-200d-2640":0,"1f9dd-1f3ff-200d-2640":0,"1f9dd-1f3fb-200d-2642":0,"1f9dd-1f3fc-200d-2642":0,"1f9dd-1f3fd-200d-2642":0,"1f9dd-1f3fe-200d-2642":0,"1f9dd-1f3ff-200d-2642":0,"1f9dd-1f3fb":0,"1f9dd-1f3fc":0,"1f9dd-1f3fd":0,"1f9dd-1f3fe":0,"1f9dd-1f3ff":0,"261d-1f3fb":0,"261d-1f3fc":0,"261d-1f3fd":0,"261d-1f3fe":0,"261d-1f3ff":0,"26f9-1f3fb-200d-2640":0,"26f9-1f3fc-200d-2640":0,"26f9-1f3fd-200d-2640":0,"26f9-1f3fe-200d-2640":0,"26f9-1f3ff-200d-2640":0,"26f9-1f3fb-200d-2642":0,"26f9-1f3fc-200d-2642":0,"26f9-1f3fd-200d-2642":0,"26f9-1f3fe-200d-2642":0,"26f9-1f3ff-200d-2642":0,"26f9-1f3fb":0,"26f9-1f3fc":0,"26f9-1f3fd":0,"26f9-1f3fe":0,"26f9-1f3ff":0,"270a-1f3fb":0,"270a-1f3fc":0,"270a-1f3fd":0,"270a-1f3fe":0,"270a-1f3ff":0,"270b-1f3fb":0,"270b-1f3fc":0,"270b-1f3fd":0,"270b-1f3fe":0,"270b-1f3ff":0,"270c-1f3fb":0,"270c-1f3fc":0,"270c-1f3fd":0,"270c-1f3fe":0,"270c-1f3ff":0,"270d-1f3fb":0,"270d-1f3fc":0,"270d-1f3fd":0,"270d-1f3fe":0,"270d-1f3ff":0},LatinizeMap:{"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","ẞ":"SS","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ß":"ss","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x","Ё":"YO","Й":"I","Ц":"TS","У":"U","К":"K","Е":"E","Н":"N","Г":"G","Ш":"SH","Щ":"SCH","З":"Z","Х":"H","Ъ":"","ё":"yo","й":"i","ц":"ts","у":"u","к":"k","е":"e","н":"n","г":"g","ш":"sh","щ":"sch","з":"z","х":"h","ъ":"","Ф":"F","Ы":"I","В":"V","А":"A","П":"P","Р":"R","О":"O","Л":"L","Д":"D","Ж":"ZH","Э":"E","ф":"f","ы":"i","в":"v","а":"a","п":"p","р":"r","о":"o","л":"l","д":"d","ж":"zh","э":"e","Я":"Ya","Ч":"CH","С":"S","М":"M","И":"I","Т":"T","Ь":"","Б":"B","Ю":"YU","я":"ya","ч":"ch","с":"s","м":"m","и":"i","т":"t","ь":"","б":"b","ю":"yu"},TLD:["abogado","ac","academy","accountants","active","actor","ad","adult","ae","aero","af","ag","agency","ai","airforce","al","allfinanz","alsace","am","amsterdam","an","android","ao","apartments","aq","aquarelle","ar","archi","army","arpa","as","asia","associates","at","attorney","au","auction","audio","autos","aw","ax","axa","az","ba","band","bank","bar","barclaycard","barclays","bargains","bayern","bb","bd","be","beer","berlin","best","bf","bg","bh","bi","bid","bike","bingo","bio","biz","bj","black","blackfriday","bloomberg","blue","bm","bmw","bn","bnpparibas","bo","boo","boutique","br","brussels","bs","bt","budapest","build","builders","business","buzz","bv","bw","by","bz","bzh","ca","cab","cal","camera","camp","cancerresearch","canon","capetown","capital","caravan","cards","care","career","careers","cartier","casa","cash","cat","catering","cc","cd","center","ceo","cern","cf","cg","ch","channel","chat","cheap","christmas","chrome","church","ci","citic","city","ck","cl","claims","cleaning","click","clinic","clothing","club","cm","cn","co","coach","codes","coffee","college","cologne","com","community","company","computer","condos","construction","consulting","contractors","cooking","cool","coop","country","cr","credit","creditcard","cricket","crs","cruises","cu","cuisinella","cv","cw","cx","cy","cymru","cz","dabur","dad","dance","dating","day","dclk","de","deals","degree","delivery","democrat","dental","dentist","desi","design","dev","diamonds","diet","digital","direct","directory","discount","dj","dk","dm","dnp","do","docs","domains","doosan","durban","dvag","dz","eat","ec","edu","education","ee","eg","email","emerck","energy","engineer","engineering","enterprises","equipment","er","es","esq","estate","et","eu","eurovision","eus","events","everbank","exchange","expert","exposed","fail","farm","fashion","feedback","fi","finance","financial","firmdale","fish","fishing","fit","fitness","fj","fk","flights","florist","flowers","flsmidth","fly","fm","fo","foo","forsale","foundation","fr","frl","frogans","fund","furniture","futbol","ga","gal","gallery","garden","gb","gbiz","gd","ge","gent","gf","gg","ggee","gh","gi","gift","gifts","gives","gl","glass","gle","global","globo","gm","gmail","gmo","gmx","gn","goog","google","gop","gov","gp","gq","gr","graphics","gratis","green","gripe","gs","gt","gu","guide","guitars","guru","gw","gy","hamburg","hangout","haus","healthcare","help","here","hermes","hiphop","hiv","hk","hm","hn","holdings","holiday","homes","horse","host","hosting","house","how","hr","ht","hu","ibm","id","ie","ifm","il","im","immo","immobilien","in","industries","info","ing","ink","institute","insure","int","international","investments","io","iq","ir","irish","is","it","iwc","jcb","je","jetzt","jm","jo","jobs","joburg","jp","juegos","kaufen","kddi","ke","kg","kh","ki","kim","kitchen","kiwi","km","kn","koeln","kp","kr","krd","kred","kw","ky","kyoto","kz","la","lacaixa","land","lat","latrobe","lawyer","lb","lc","lds","lease","legal","lgbt","li","lidl","life","lighting","limited","limo","link","lk","loans","london","lotte","lotto","lr","ls","lt","ltda","lu","luxe","luxury","lv","ly","ma","madrid","maison","management","mango","market","marketing","marriott","mc","md","me","media","meet","melbourne","meme","memorial","menu","mg","mh","miami","mil","mini","mk","ml","mm","mn","mo","mobi","moda","moe","monash","money","mormon","mortgage","moscow","motorcycles","mov","mp","mq","mr","ms","mt","mu","museum","mv","mw","mx","my","mz","na","nagoya","name","navy","nc","ne","net","network","neustar","new","nexus","nf","ng","ngo","nhk","ni","nico","ninja","nl","no","np","nr","nra","nrw","ntt","nu","nyc","nz","okinawa","om","one","ong","onl","ooo","org","organic","osaka","otsuka","ovh","pa","paris","partners","parts","party","pe","pf","pg","ph","pharmacy","photo","photography","photos","physio","pics","pictures","pink","pizza","pk","pl","place","plumbing","pm","pn","pohl","poker","porn","post","pr","praxi","press","pro","prod","productions","prof","properties","property","ps","pt","pub","pw","py","qa","qpon","quebec","re","realtor","recipes","red","rehab","reise","reisen","reit","ren","rentals","repair","report","republican","rest","restaurant","reviews","rich","rio","rip","ro","rocks","rodeo","rs","rsvp","ru","ruhr","rw","ryukyu","sa","saarland","sale","samsung","sarl","saxo","sb","sc","sca","scb","schmidt","schule","schwarz","science","scot","sd","se","services","sew","sexy","sg","sh","shiksha","shoes","shriram","si","singles","sj","sk","sky","sl","sm","sn","so","social","software","sohu","solar","solutions","soy","space","spiegel","sr","st","style","su","supplies","supply","support","surf","surgery","suzuki","sv","sx","sy","sydney","systems","sz","taipei","tatar","tattoo","tax","tc","td","technology","tel","temasek","tennis","tf","tg","th","tienda","tips","tires","tirol","tj","tk","tl","tm","tn","to","today","tokyo","tools","top","toshiba","town","toys","tp","tr","trade","training","travel","trust","tt","tui","tv","tw","tz","ua","ug","uk","university","uno","uol","us","uy","uz","va","vacations","vc","ve","vegas","ventures","versicherung","vet","vg","vi","viajes","video","villas","vision","vlaanderen","vn","vodka","vote","voting","voto","voyage","vu","wales","wang","watch","webcam","website","wed","wedding","wf","whoswho","wien","wiki","williamhill","wme","work","works","world","ws","wtc","wtf","佛山","集团","在线","한국","ভারত","八卦","موقع","公益","公司","移动","我爱你","москва","қаз","онлайн","сайт","срб","淡马锡","орг","삼성","சிங்கப்பூர்","商标","商店","商城","дети","мкд","中文网","中信","中国","中國","谷歌","భారత్","ලංකා","ભારત","भारत","网店","संगठन","网络","укр","香港","台湾","台灣","手机","мон","الجزائر","عمان","ایران","امارات","بازار","الاردن","بھارت","المغرب","السعودية","مليسيا","شبكة","გე","机构","组织机构","ไทย","سورية","рус","рф","تونس","みんな","グーグル","世界","ਭਾਰਤ","网址","游戏","vermögensberater","vermögensberatung","企业","مصر","قطر","广东","இலங்கை","இந்தியா","新加坡","فلسطين","政务","xxx","xyz","yachts","yandex","ye","yoga","yokohama","youtube","yt","za","zip","zm","zone","zuerich","zw"],MediaSizes:d(37).b};t.a.Config=a,e.a=a},132:function(f,e,d){"use strict";var t=d(27),a=d(62),s=d(40),c=d(15),n=d(57),i=d(30);const u=new class{constructor(){this.log=Object(s.b)("INSTANCE"),this.clearInstance=()=>{this.masterInstance&&!this.deactivated&&(this.log.warn("clear master instance"),n.a.delete("xt_instance"))},this.deactivateInstance=()=>{if(this.masterInstance||this.deactivated)return!1;this.log("deactivate"),this.deactivateTimeout=0,this.deactivated=!0,this.clearInstance(),c.default.idle.deactivated=!0,c.default.dispatchEvent("instance_deactivated")},this.checkInstance=(f=c.default.idle&&c.default.idle.isIDLE)=>{if(this.deactivated)return!1;const e=Date.now(),d={id:this.instanceID,idle:f,time:e};n.a.get("xt_instance",!1).then(t=>{!f||!t||t.id===this.instanceID||t.time{const e=f.data.payload;if(0===e.fileName.indexOf("main-")){const f=this.convertPromises[e.fileName];f&&(e.bytes?f.resolve(e.bytes):f.reject(),delete this.convertPromises[e.fileName])}else c.a.postMessage(f.data)})}postMessage(f){this.init&&(this.init(),this.init=null),this.worker.postMessage(f)}convert(f,e){if(f="main-"+f,this.convertPromises.hasOwnProperty(f))return this.convertPromises[f];const d=Object(s.a)();return this.postMessage({type:"convertWebp",payload:{fileName:f,bytes:e}}),this.convertPromises[f]=d}};a.a.webpWorkerController=n;e.a=n},14:function(f,e,d){"use strict";d.r(e),d.d(e,"langPack",(function(){return o})),d.d(e,"I18n",(function(){return b})),d.d(e,"i18n",(function(){return l})),d.d(e,"i18n_",(function(){return h})),d.d(e,"_i18n",(function(){return g})),d.d(e,"joinElementsWith",(function(){return p})),d.d(e,"join",(function(){return m}));var t=d(27),a=d(32),s=d(73),c=d(30),n=d(75),i=d(7),u=d(15),r=d(29);const o={messageActionChatCreate:"ActionCreateGroup",messageActionChatCreateYou:"ActionYouCreateGroup",messageActionChatEditTitle:"ActionChangedTitle",messageActionChatEditPhoto:"ActionChangedPhoto",messageActionChatEditVideo:"ActionChangedVideo",messageActionChatDeletePhoto:"ActionRemovedPhoto",messageActionChatReturn:"ActionAddUserSelf",messageActionChatReturnYou:"ActionAddUserSelfYou",messageActionChatJoined:"ActionAddUserSelfMega",messageActionChatJoinedYou:"ChannelMegaJoined",messageActionChatAddUser:"ActionAddUser",messageActionChatAddUsers:"ActionAddUser",messageActionChatLeave:"ActionLeftUser",messageActionChatLeaveYou:"YouLeft",messageActionChatDeleteUser:"ActionKickUser",messageActionChatJoinedByLink:"ActionInviteUser",messageActionPinMessage:"ActionPinnedNoText",messageActionContactSignUp:"Chat.Service.PeerJoinedTelegram",messageActionChannelCreate:"ActionCreateChannel",messageActionChannelEditTitle:"Chat.Service.Channel.UpdatedTitle",messageActionChannelEditPhoto:"Chat.Service.Channel.UpdatedPhoto",messageActionChannelEditVideo:"Chat.Service.Channel.UpdatedVideo",messageActionChannelDeletePhoto:"Chat.Service.Channel.RemovedPhoto",messageActionHistoryClear:"HistoryCleared",messageActionDiscussionStarted:"DiscussionStarted",messageActionChannelMigrateFrom:"ActionMigrateFromGroup","messageActionPhoneCall.in_ok":"ChatList.Service.Call.incoming","messageActionPhoneCall.out_ok":"ChatList.Service.Call.outgoing","messageActionPhoneCall.in_missed":"ChatList.Service.Call.Missed","messageActionPhoneCall.out_missed":"ChatList.Service.Call.Cancelled","messageActionGroupCall.started":"ActionGroupCallJustStarted","messageActionGroupCall.started_by":"ActionGroupCallStarted","messageActionGroupCall.started_byYou":"ActionGroupCallStartedByYou","messageActionGroupCall.ended":"ActionGroupCallEnded","messageActionGroupCall.ended_by":"Chat.Service.VoiceChatFinished","messageActionGroupCall.ended_byYou":"Chat.Service.VoiceChatFinishedYou",messageActionBotAllowed:"Chat.Service.BotPermissionAllowed"};var b;!function(f){let e,o;function b(){const e=i.a.langPackCode;return f.lastRequestedLangCode=e,Promise.all([d.e(8).then(d.bind(null,134)),d.e(9).then(d.bind(null,135)),d.e(25).then(d.bind(null,141))]).then(([f,d,t])=>{const a=[];h(f.default,a),h(d.default,a);return p({_:"langPackDifference",from_version:0,lang_code:e,strings:a,version:0,local:!0,countries:t.default})})}function l(e){return f.requestedServerLanguage=!0,Promise.all([c.a.invokeApiCacheable("langpack.getLangPack",{lang_code:e,lang_pack:i.a.langPack}),c.a.invokeApiCacheable("langpack.getLangPack",{lang_code:e,lang_pack:"android"}),d.e(8).then(d.bind(null,134)),d.e(9).then(d.bind(null,135)),c.a.invokeApiCacheable("help.getCountriesList",{lang_code:e,hash:0}),f.polyfillPromise])}function h(f,e=[]){for(const d in f){const t=f[d];"string"==typeof t?e.push({_:"langPackString",key:d,value:t}):e.push(Object.assign({_:"langPackStringPluralized",key:d},t))}return e}function g(e){return f.lastRequestedLangCode=e,l(e).then(([f,e,d,t,a,s])=>{let c=[];[d,t].forEach(f=>{h(f.default,c)}),c=c.concat(f.strings);for(const f of e.strings)c.push(f);return f.strings=c,f.countries=a,p(f)})}function p(f){return f.appVersion=i.a.langPackVersion,n.a.set({langPack:f}).then(()=>(m(f),f))}function m(d){if(d.lang_code!==f.lastRequestedLangCode)return;try{e=new Intl.PluralRules(d.lang_code)}catch(f){console.error("pluralRules error",f),e=new Intl.PluralRules(d.lang_code.split("-",1)[0])}f.strings.clear();for(const e of d.strings)f.strings.set(e.key,e);d.countries&&(f.countriesList.length=0,f.countriesList.push(...d.countries.countries),d.countries.countries.forEach(e=>{if(e.name){const d=e.default_name;f.strings.set(d,{_:"langPackString",key:d,value:e.name})}})),f.lastAppliedLangCode!==d.lang_code&&(u.default.dispatchEvent("language_change",d.lang_code),f.lastAppliedLangCode=d.lang_code);Array.from(document.querySelectorAll(".i18n")).forEach(e=>{const d=f.weakMap.get(e);d&&d.update()})}function k(f,e,d={i:0}){let t=[];let a=0;return f.replace(/(\*\*)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,(f,s,c,n,i,u,o)=>{if(t.push(o.slice(a,u)),s)switch(s){case"**":{const f=document.createElement("b");f.append(...k(c,e,d)),t.push(f);break}}else if(n)t.push(document.createElement("br"));else if(i){const f=document.createElement("a"),a=i.lastIndexOf("]"),s=i.slice(1,a);f.append(...k(s,e,d));const c=i.slice(a+2,i.length-1);if(c){const e=r.b.wrapUrl(c);f.href=e.url,e.onclick&&f.setAttribute("onclick",e.onclick),f.target="_blank"}t.push(f)}else e&&t.push(e[d.i++]);return a=u+f.length,""}),a!==f.length&&t.push(f.slice(a)),t}function y(d,t=!1,a){const s=f.strings.get(d);let c;if(s)if("langPackStringPluralized"===s._&&(null==a?void 0:a.length)){let f=a[0];"string"==typeof f&&(f=+f.replace(/\D/g,""));c=s[e.select(f)+"_value"]||s.other_value}else c="langPackString"===s._?s.value:d;else c=d;if(t){if(null==a?void 0:a.length){const f=/un\d|%\d\$.|%./g;let e=0;c=c.replace(f,(f,d,t)=>""+a[e++])}return c}return k(c,a)}f.strings=new Map,f.countriesList=[],f.requestedServerLanguage=!1,f.getCacheLangPack=function(){return o||(o=Promise.all([n.a.get("langPack"),f.polyfillPromise]).then(([e])=>e?(t.b,f.lastRequestedLangCode||(f.lastRequestedLangCode=e.lang_code),m(e),e):b()).finally(()=>{o=void 0}))},f.loadLocalLangPack=b,f.loadLangPack=l,f.getStrings=function(f,e){return c.a.invokeApi("langpack.getStrings",{lang_pack:i.a.langPack,lang_code:f,keys:e})},f.formatLocalStrings=h,f.getLangPack=g,f.saveLangPack=p,f.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():d.e(28).then(d.bind(null,142)).then(f=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},f.default)}),f.applyLangPack=m,f.superFormatter=k,f.format=y,f.weakMap=new WeakMap;class v{constructor(e){this.property="innerHTML",this.element=e.element||document.createElement("span"),this.element.classList.add("i18n"),this.update(e),f.weakMap.set(this.element,this)}}class w extends v{update(f){if(Object(a.g)(this,f),"innerHTML"===this.property)this.element.textContent="",this.element.append(...y(this.key,!1,this.args));else{const f=this.element[this.property],e=y(this.key,!0,this.args);void 0===f?this.element.dataset[this.property]=e:this.element[this.property]=e}}}f.IntlElement=w;f.IntlDateElement=class extends v{update(e){Object(a.g)(this,e);const d=new Intl.DateTimeFormat(f.lastRequestedLangCode+"-u-hc-h23",this.options);this.element[this.property]=Object(s.a)(d.format(this.date))}},f.i18n=function(f,e){return new w({key:f,args:e}).element},f.i18n_=function(f){return new w(f).element},f._i18n=function(f,e,d,t){return new w({element:f,key:e,args:d,property:t}).element}}(b||(b={})),e.default=b;const l=b.i18n,h=b.i18n_,g=b._i18n;function p(f,e){const d=f.slice(0,1);for(let t=1;tl(f&&e?"WordDelimiterLast":"WordDelimiter"))}t.a.I18n=b},24:function(f,e,d){"use strict";d.r(e),d.d(e,"WebPushApiManager",(function(){return o}));var t=d(27),a=d(32),s=d(40),c=d(15),n=d(30),i=d(14),u=d(0),r=d(125);class o{constructor(){this.isAvailable=!0,this.isPushEnabled=!1,this.localNotificationsAvailable=!0,this.started=!1,this.settings={},this.isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,this.userVisibleOnly=!this.isFirefox,this.log=Object(s.b)("PM"),this.subscribe=()=>{this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.subscribe({userVisibleOnly:this.userVisibleOnly}).then(f=>{this.isPushEnabled=!0,this.pushSubscriptionNotify("subscribe",f)}).catch(f=>{"denied"===Notification.permission?this.log("Permission for Notifications was denied"):(this.log("Unable to subscribe to push.",f),this.userVisibleOnly||(this.userVisibleOnly=!0,setTimeout(this.subscribe,0)))})})},this.isAliveNotify=()=>{if(!this.isAvailable||c.default.idle&&c.default.idle.deactivated)return;this.settings.baseUrl=(location.href||"").replace(/#.*$/,"")+"#/im";const f={},e={push_action_mute1d:u.IS_MOBILE?"PushNotification.Action.Mute1d.Mobile":"PushNotification.Action.Mute1d",push_action_settings:u.IS_MOBILE?"PushNotification.Action.Settings.Mobile":"PushNotification.Action.Settings",push_message_nopreview:"PushNotification.Message.NoPreview"};for(const d in e)f[d]=i.default.format(e[d],!0);const d={type:"ping",payload:{localNotifications:this.localNotificationsAvailable,lang:f,settings:this.settings}};n.a.postSWMessage(d),this.isAliveTO=setTimeout(this.isAliveNotify,1e4)},"PushManager"in window&&"Notification"in window&&"serviceWorker"in navigator||(this.log.warn("Push messaging is not supported."),this.isAvailable=!1,this.localNotificationsAvailable=!1),this.isAvailable&&"denied"===Notification.permission&&this.log.warn("The user has blocked notifications.")}start(){this.started||(this.started=!0,this.getSubscription(),this.setUpServiceWorkerChannel())}setLocalNotificationsDisabled(){this.localNotificationsAvailable=!1}getSubscription(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.isPushEnabled=!!f,this.pushSubscriptionNotify("init",f)}).catch(f=>{this.log.error("Error during getSubscription()",f)})})}unsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.isPushEnabled=!1,f&&(this.pushSubscriptionNotify("unsubscribe",f),setTimeout(()=>{f.unsubscribe().then(f=>{this.isPushEnabled=!1}).catch(f=>{this.log.error("Unsubscription error: ",f)})},3e3))}).catch(f=>{this.log.error("Error thrown while unsubscribing from push messaging.",f)})})}forceUnsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.log.warn("force unsubscribe",f),f&&f.unsubscribe().then(f=>{this.log.warn("force unsubscribe successful",f),this.isPushEnabled=!1}).catch(f=>{this.log.error("Unsubscription error: ",f)})}).catch(f=>{this.log.error("Error thrown while unsubscribing from push messaging.",f)})})}setSettings(f){this.settings=Object(a.a)(f),clearTimeout(this.isAliveTO),this.isAliveNotify()}hidePushNotifications(){if(!this.isAvailable)return;n.a.postSWMessage({type:"notifications_clear"})}setUpServiceWorkerChannel(){this.isAvailable&&(n.a.addServiceWorkerTaskListener("push_click",f=>{c.default.idle&&c.default.idle.deactivated?r.a.reload():c.default.dispatchEvent("push_notification_click",f.payload)}),navigator.serviceWorker.ready.then(this.isAliveNotify))}pushSubscriptionNotify(f,e){if(e){const d=e.toJSON();if(!(d&&d.endpoint&&d.keys&&d.keys.p256dh&&d.keys.auth))return this.log.warn("Invalid push subscription",d),this.unsubscribe(),this.isAvailable=!1,void this.pushSubscriptionNotify(f);this.log.warn("Push",f,d),c.default.dispatchEvent("push_"+f,{tokenType:10,tokenValue:JSON.stringify(d)})}else this.log.warn("Push",f,!1),c.default.dispatchEvent("push_"+f,!1)}}const b=new o;t.a&&(t.a.webPushApiManager=b),e.default=b},25:function(f,e,d){"use strict";d.r(e),d.d(e,"TelegramMeWebManager",(function(){return i}));var t=d(7),a=d(27),s=d(72),c=d(51),n=d(57);class i{constructor(){this.disabled=s.a.test||-1===t.a.domains.indexOf(location.hostname)}setAuthorized(f){if(!this.disabled)return n.a.get("tgme_sync").then(e=>{const d=Object(c.f)(!0);if(f&&e&&e.canRedirect===f&&e.ts+86400>d)return;n.a.set({tgme_sync:{canRedirect:f,ts:d}});const a=`_websync_?authed=${f?"1":"0"}&version=${encodeURIComponent(t.a.version+" "+t.a.suffix)}`,s=["//telegram.me/"+a,"//t.me/"+a].map(f=>{const e=document.createElement("script"),d=new Promise(f=>{e.onload=e.onerror=()=>{e.remove(),f()}});return e.src=f,document.body.appendChild(e),d});return Promise.all(s)})}}const u=new i;a.a&&(a.a.telegramMeWebManager=u),e.default=u},29:function(f,e,d){"use strict";d.d(e,"a",(function(){return w}));var t=d(126);var a=d(94),s=d(73),c=d(0),n=d(27),i=d(9);const u={emojiMap:f=>f,shortcuts:[],emojis:[]},r=t.a.Emoji,o="a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc",b="["+o+"0-9]",l="((?:https?|ftp)://|mailto:)?(?:"+b+"{1,64}(?::"+b+"{0,64})?@)?(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}|"+b+"["+o+"·0-9-]{0,64}(?:\\."+b+"["+o+"·0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+o+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",h=(new RegExp("^"+"((?:https?|ftp)://|mailto:)?".slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),g=new RegExp("(^| )(@)([a-zA-Z\\d_]{5,32})|("+l+")|(\\n)|(((?:👨🏻‍🤝‍👨\ud83c[\udffc-\udfff]|👨🏼‍🤝‍👨\ud83c[\udffb\udffd-\udfff]|👨🏽‍🤝‍👨\ud83c[\udffb\udffc\udffe\udfff]|👨🏾‍🤝‍👨\ud83c[\udffb-\udffd\udfff]|👨🏿‍🤝‍👨\ud83c[\udffb-\udffe]|👩🏻‍🤝‍👨\ud83c[\udffc-\udfff]|👩🏻‍🤝‍👩\ud83c[\udffc-\udfff]|👩🏼‍🤝‍👨\ud83c[\udffb\udffd-\udfff]|👩🏼‍🤝‍👩\ud83c[\udffb\udffd-\udfff]|👩🏽‍🤝‍👨\ud83c[\udffb\udffc\udffe\udfff]|👩🏽‍🤝‍👩\ud83c[\udffb\udffc\udffe\udfff]|👩🏾‍🤝‍👨\ud83c[\udffb-\udffd\udfff]|👩🏾‍🤝‍👩\ud83c[\udffb-\udffd\udfff]|👩🏿‍🤝‍👨\ud83c[\udffb-\udffe]|👩🏿‍🤝‍👩\ud83c[\udffb-\udffe]|🧑🏻‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏼‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏽‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏾‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏿‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑‍🤝‍🧑|👫\ud83c[\udffb-\udfff]|👬\ud83c[\udffb-\udfff]|👭\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|🧑)(?:\ud83c[\udffb-\udfff])?‍(?:⚕️?|⚖️?|✈️?|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|⛹)(?:(?:\ud83c[\udffb-\udfff]|️?)‍[♀♂]️?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?‍[♀♂]️?|(?:👨‍❤️?‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍\ud83d[\udc66\udc67]|👨‍👩‍👦‍👦|👨‍👩‍👧‍\ud83d[\udc66\udc67]|👩‍❤️?‍💋‍\ud83d[\udc68\udc69]|👩‍👩‍👦‍👦|👩‍👩‍👧‍\ud83d[\udc66\udc67]|👨‍❤️?‍👨|👨‍👦‍👦|👨‍👧‍\ud83d[\udc66\udc67]|👨‍👨‍\ud83d[\udc66\udc67]|👨‍👩‍\ud83d[\udc66\udc67]|👩‍❤️?‍\ud83d[\udc68\udc69]|👩‍👦‍👦|👩‍👧‍\ud83d[\udc66\udc67]|👩‍👩‍\ud83d[\udc66\udc67]|🏳️?‍⚧️?|🏳️?‍🌈|🏴‍☠️?|🐕‍🦺|🐻‍❄️?|👁‍🗨|👨‍\ud83d[\udc66\udc67]|👩‍\ud83d[\udc66\udc67]|👯‍♀️?|👯‍♂️?|🤼‍♀️?|🤼‍♂️?|🧞‍♀️?|🧞‍♂️?|🧟‍♀️?|🧟‍♂️?|🐈‍⬛)|[#*0-9]️?⃣|(?:[©®™♟]️?)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[‼⁉ℹ↔-↙↩↪⌚⌛⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻-◾☀-☄☎☑☔☕☘☠☢☣☦☪☮☯☸-☺♀♂♈-♓♠♣♥♦♨♻♿⚒-⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱⚽⚾⛄⛅⛈⛏⛑⛓⛔⛩⛪⛰-⛵⛸⛺⛽✂✈✉✏✒✔✖✝✡✳✴❄❇❗❣❤➡⤴⤵⬅-⬇⬛⬜⭐⭕〰〽㊗㊙])(?:️?|(?!︎))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[☝⛷⛹✌✍])(?:️?|(?!︎))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[✊✋]))(?:\ud83c[\udffb-\udfff])?|(?:🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|🇦\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|🇧\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|🇨\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|🇩\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|🇪\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|🇫\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|🇬\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|🇭\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|🇮\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|🇯\ud83c[\uddea\uddf2\uddf4\uddf5]|🇰\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|🇱\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|🇲\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|🇳\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|🇴🇲|🇵\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|🇶🇦|🇷\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|🇸\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|🇹\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|🇺\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|🇻\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|🇼\ud83c[\uddeb\uddf8]|🇽🇰|🇾\ud83c[\uddea\uddf9]|🇿\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[⏩-⏬⏰⏳♾⛎✅✨❌❎❓-❕➕-➗➰➿])|️))|(^|[\\s\\(\\]])(#[0-9_a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc]{2,64})|(^|\\s)\\/([a-zA-Z\\d_]{1,32})(?:@([a-zA-Z\\d_]{5,32}))?(\\b|$)","i"),p=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,m=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,k={Telegram:"tg://search_hashtag?hashtag={1}",Twitter:"https://twitter.com/hashtag/{1}",Instagram:"https://instagram.com/explore/tags/{1}/","Google Plus":"https://plus.google.com/explore/{1}"},y={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline"},v=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(let f in y)v.add(y[f]);var w;!function(f){function e(f){let e=Object(a.b)(f).replace(/-?fe0f/g,"");return r.hasOwnProperty(e)?e:null}function d(f){let d,a=f;const s=[];let c,n=0;for(g.lastIndex=0;d=a.match(g);){if(c=n+d.index,d[3])s.push({_:"messageEntityMention",offset:c+d[1].length,length:d[2].length+d[3].length});else if(d[4])if(p.test(d[4]))s.push({_:"messageEntityEmail",offset:c,length:d[4].length});else{let f,e=d[5];const a=d[6];if(a){if(e||"xn--"!==a.substr(0,4)&&-1===t.a.TLD.indexOf(a.toLowerCase())||(e="http://"),e){const t=A(d[4]);t.length!==d[4].length&&(d[4]=t),f=(d[5]?"":e)+d[4]}}else f=(d[5]?"":"http://")+d[4];f&&s.push({_:"messageEntityUrl",offset:c,length:d[4].length})}else if(d[7])s.push({_:"messageEntityLinebreak",offset:c,length:1});else if(d[8]){const f=e(d[8]);f&&s.push({_:"messageEntityEmoji",offset:c,length:d[8].length,unicode:f})}else d[11]?s.push({_:"messageEntityHashtag",offset:c+(d[10]?d[10].length:0),length:d[11].length}):d[13]&&s.push({_:"messageEntityBotCommand",offset:c+(d[11]?d[11].length:0)+(d[12]?d[12].length:0),length:1+d[13].length+(d[14]?1+d[14].length:0),unsafe:!0});a=a.substr(d.index+d[0].length),n+=d.index+d[0].length}return s}function n(f,e){return f.find(f=>{if(!(e._===f._||!v.has(e._)&&!v.has(f._)))return!1;return e.offset>=f.offset&&e.length+e.offset<=f.length+f.offset})}function o(f,e){const d=e.filter(e=>!n(f,e));if(f.push(...d),f.sort((f,e)=>f.offset-e.offset),!i.a)for(let e=0;et!==e&&f._===d._&&f.offset-d.length===d.offset),-1!==t){const e=f[t];d.length+=e.length,f.splice(t,1)}}while(-1!==t)}}function w(f,e={}){if(!f)return"";const t=[],a=e.entities||d(f),n=e.passEntities||{},u=e.contextSite||"Telegram",r="Telegram"!==u,o=(f,e,d)=>{t.push({part:e,offset:f.offset}),d&&t.unshift({part:d,offset:f.offset+f.length})};for(let d=0,t=a.length;d',""):o(t,"",""));break;case"messageEntityItalic":e.noTextFormat||(e.wrappingDraft?o(t,'',""):o(t,"",""));break;case"messageEntityStrike":if(e.wrappingDraft){o(t,``,"")}else o(t,"","");break;case"messageEntityUnderline":if(e.wrappingDraft){o(t,``,"")}else o(t,"","");break;case"messageEntityCode":e.wrappingDraft?o(t,'',""):o(t,"","");break;case"messageEntityPre":e.noTextFormat||o(t,`
`,"
");break;case"messageEntityHighlight":o(t,'',"");break;case"messageEntityBotCommand":if(!e.noLinks&&n[t._]){let d,a,c=f.substr(t.offset,t.length).substr(1);-1!==(a=c.indexOf("@"))?(d=c.substr(a+1),c=c.substr(0,a)):d=e.fromBot,o(t,``,"")}break;case"messageEntityEmoji":i.a?e.wrappingDraft?c.IS_SAFARI||o(t,'',""):o(t,'',""):o(t,``,'');break;case"messageEntityCaret":o(t,'');break;case"messageEntityUrl":case"messageEntityTextUrl":if(!e.noLinks||n[t._]){const c=f.substr(t.offset,t.length);let n,i=t.url||c,u=!1;const r=C(i,!0);if(i=r.url,n=r.onclick,"messageEntityTextUrl"===t._){const f=a[d+1];"messageEntityUrl"===(null==f?void 0:f._)&&f.length===t.length&&f.offset===t.offset&&d++,i!==c&&(u=!0)}const b=!!n;n||!u||b||(n="showMaskedAlert"),e.wrappingDraft&&(n=void 0);o(t,``,"")}break;case"messageEntityEmail":if(!e.noLinks){const e=f.substr(t.offset,t.length);o(t,``,"")}break;case"messageEntityHashtag":{const d=!e.noLinks&&k[u];if(d){const e=f.substr(t.offset,t.length).substr(1);o(t,``,"")}break}case"messageEntityMentionName":e.noLinks&&!n[t._]||o(t,`");break;case"messageEntityMention":if(!e.noLinks){const e=f.substr(t.offset,t.length).substr(1),{url:d,onclick:a}=C("t.me/"+e);o(t,``,"")}}}t.sort((f,e)=>f.offset-e.offset);const b=[];let l=0;for(const{part:e,offset:d}of t)d>l&&(b.push(Object(s.d)(f.slice(l,d))),l=d),b.push(e);return ld&&")"===f.charAt(e-1);)f=f.substr(0,e-1),t--,e--;return d>t&&(f=f.replace(/\)+$/,"")),f}function E(f,e=!1){if(!f)return"";return w(f,{entities:d(f).filter(f=>"messageEntityEmoji"===f._),wrappingDraft:e})}function C(f,e){let d,t,a,s;if(S(f)||(f="https://"+f),d=f.match(/^(?:https?:\/\/)?t(?:elegram)?\.me\/(.+)/)){const f=d[1].split("/");switch(f[0]){case"joinchat":case"addstickers":s=f[0];break;default:if(f[1]&&f[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===f.length){s="im";break}}}else(t=f.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?s="im":(a=f.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(s="tg_"+a[1],window[s]||(s=void 0));return{url:f,onclick:s}}function S(f){return f?f.match(h):null}function T(f){return{_:"messageEntityEmoji",offset:0,length:f.length,unicode:Object(a.e)(f).join("-").replace(/-?fe0f/g,"")}}f.getEmojiSpritesheetCoords=e,f.parseEntities=d,f.parseMarkdown=function(f,e,d){const t=[];let a=!1;const s=f=>n(e,f)?a=!1:(t.push(f),a=!0),c=[];let i,u=0;for(;i=f.match(m);){const e=u+i.index;c.push(f.substr(0,i.index));const d=i[3]||i[8]||i[11]||i[13];let t;if(u-=d.length,u+=d.length,a=!1,d.match(/^`*$/))c.push(i[0]);else if(i[3])t={_:"messageEntityPre",language:"",offset:e+i[1].length,length:d.length},s(t)&&("\n"===i[5]&&(i[5]="",u-=1),c.push(i[1]+d+i[5]),u-=i[2].length+i[4].length);else if(i[7]){const f=""===i[6];t={_:y[i[7]],offset:e+(f?0:i[6].length),length:d.length},s(t)&&(f?c.push(d):c.push(i[6]+d+i[9]),u-=2*i[7].length+(f?2:0))}else i[11]?(t={_:"messageEntityMentionName",user_id:+i[10],offset:e,length:d.length},s(t)&&(c.push(d),u-=i[0].length-d.length)):i[12]&&(t={_:"messageEntityTextUrl",url:i[14],offset:e,length:d.length},s(t)&&(c.push(d),u-=i[12].length-d.length));a||c.push(i[0]),f=f.substr(i.index+i[0].length),u+=i.index+i[0].length}c.push(f);let r=c.join("");r.replace(/\s+/g,"").length||(r=f,t.splice(0,t.length)),t.length||d||(r=r.trim()),o(e,t),b(e);let l=r.length;if(!d){r=r.replace(/^\s*/,"");let f=l-r.length;f&&e.forEach(e=>{e.offset=Math.max(0,e.offset-f)}),r=r.replace(/\s*$/,""),f=l-r.length,l=r.length,f&&e.forEach(f=>{f.offset+f.length>l&&(f.length=l-f.offset)})}return r},f.findConflictingEntity=n,f.mergeEntities=o,f.combineSameEntities=b,f.wrapRichText=w,f.fixEmoji=function(f,e){return f=f.replace(/[\u2640\u2642\u2764](?!\ufe0f)/g,(f,d,t)=>{if(e){const t=f.length;d+=t,e.forEach(f=>{const e=f.offset+f.length;e===d?f.length+=t:e>d&&(f.offset+=t)})}return f+"️"})},f.wrapDraftText=function(f,e={}){return f?w(f,{entities:e.entities,noLinks:!0,wrappingDraft:!0,passEntities:{messageEntityTextUrl:!0,messageEntityMentionName:!0}}):""},f.checkBrackets=A,f.replaceUrlEncodings=function(f){return f.replace(/(%[A-Z\d]{2})+/g,f=>{try{return decodeURIComponent(f)}catch(e){return f}})},f.wrapPlainText=function(f){if(i.a)return f;if(!f||!f.length)return"";var e,d=f=f.replace(/\ufe0f/g,"");const t=[];let a;for(g.lastIndex=0;e=d.match(g);){if(t.push(d.substr(0,e.index)),e[8]){const f=u.emojiMap[e[8]];f&&(a=r[f][1][0])?t.push(":"+a+":"):t.push(e[0])}else t.push(e[0]);d=d.substr(e.index+e[0].length)}return t.push(d),t.join("")},f.wrapEmojiText=E,f.wrapUrl=C,f.matchUrlProtocol=S,f.matchUrl=function(f){return f?f.match(l):null},f.matchEmail=function(f){return f?f.match(p):null},f.getAbbreviation=function(f,e=!1){const d=f.trim().split(" ");if(!d[0])return"";const t=[...d[0]][0];return e||1===d.length?E(t):E(t+[...d[d.length-1]][0])},f.isUsernameValid=function(f){return(f.length>=5&&f.length<=32||!f.length)&&/^[a-zA-Z0-9_]*$/.test(f)},f.getEmojiEntityFromEmoji=T,f.wrapSingleEmoji=function(f){return w(f,{entities:[T(f)]})}}(w||(w={})),n.a.RichTextProcessor=w;e.b=w},30:function(f,e,d){"use strict";function t(){return new Worker(d.p+"mtproto.worker.08024df6e720e6031331.bundle.worker.js")}var a=d(32);var s=d(40),c=d(15),n=d(139),i=d(27),u=d(72),r=d(52);class o extends r.a{constructor(f,e,d){super(),this.dcId=f,this.url=e,this.debug=u.a.debug&&!1,this.handleOpen=()=>{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=f=>{this.log.error("handleError",f),this.close()},this.handleClose=()=>{this.log("closed"),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=f=>{this.debug&&this.log.debug("<-","handleMessage",f.data.byteLength),this.dispatchEvent("message",f.data)},this.send=f=>{this.debug&&this.log.debug("-> body length to send:",f.length),this.ws.send(f)};let t=s.a.Error|s.a.Log;return this.debug&&(t|=s.a.Debug),this.log=Object(s.b)("WS-"+f+d,t),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(f){}this.handleClose()}}}var b=d(132),l=d(57),h=d(24),g=d(93),p=d(125),m=d(25),k=d(76),y=d(113);const v=new class extends class{invokeCrypto(f,...e){return this.performTaskWorker(f,...e)}}{constructor(){super(),this.afterMessageIdTemp=0,this.taskId=0,this.awaiting={},this.pending=[],this.updatesProcessor=null,this.log=Object(s.b)("API-PROXY"),this.hashes={},this.apiPromisesSingle={},this.apiPromisesCacheable={},this.isSWRegistered=!0,this.debug=i.b,this.sockets=new Map,this.taskListeners={},this.taskListenersSW={},this.postMessagesWaiting=[],this.onWorkerMessage=f=>{const e=f.data;if(!Object(a.f)(e))return;const d=this.taskListeners[e.type];d?d(e):e.update?this.updatesProcessor&&this.updatesProcessor(e.update):e.progress?c.default.dispatchEvent("download_progress",e.progress):(e.hasOwnProperty("result")||e.hasOwnProperty("error"))&&this.finalizeTask(e.taskId,e.result,e.error)},this.log("constructor"),b.a.start(),this.registerServiceWorker(),this.addTaskListener("clear",()=>{Promise.all([g.a.toggleStorage(!1),l.a.clear(),Promise.race([m.default.setAuthorized(!1),Object(k.a)(3e3)]),h.default.forceUnsubscribe(),Promise.all(["cachedFiles","cachedStreamChunks"].map(f=>caches.delete(f)))]).finally(()=>{p.a.reload()})}),this.addTaskListener("connectionStatusChange",f=>{c.default.dispatchEvent("connection_status_change",f.payload)}),this.addTaskListener("convertWebp",f=>{n.a.postMessage(f)}),this.addTaskListener("socketProxy",f=>{const e=f.payload,d=e.id;if("send"===e.type){this.sockets.get(d).send(e.payload)}else if("close"===e.type){this.sockets.get(d).close()}else if("setup"===e.type){const f=new o(e.payload.dcId,e.payload.url,e.payload.logSuffix),t=()=>{this.postMessage({type:"socketProxy",payload:{type:"open",id:d}})},a=()=>{this.postMessage({type:"socketProxy",payload:{type:"close",id:d}}),f.removeEventListener("open",t),f.removeEventListener("close",a),f.removeEventListener("message",s),this.sockets.delete(d)},s=f=>{this.postMessage({type:"socketProxy",payload:{type:"message",id:d,payload:f}})};f.addEventListener("open",t),f.addEventListener("close",a),f.addEventListener("message",s),this.sockets.set(d,f)}}),this.addTaskListener("localStorageProxy",f=>{const e=f.payload;l.a[e.type](...e.args).then(e=>{this.postMessage({type:"localStorageProxy",id:f.id,payload:e})})}),c.default.addEventListener("language_change",f=>{this.performTaskWorkerVoid("setLanguage",f)}),window.addEventListener("online",f=>{this.forceReconnectTimeout()}),this.registerWorker(),setTimeout(()=>{this.getConfig()},5e3)}isServiceWorkerOnline(){return this.isSWRegistered}registerServiceWorker(){if(!("serviceWorker"in navigator))return;const f=navigator.serviceWorker;f.register("./sw.js",{scope:"./"}).then(f=>{this.log("SW registered",f),this.isSWRegistered=!0;(f.installing||f.waiting||f.active).addEventListener("statechange",f=>{this.log("SW statechange",f)})},f=>{this.isSWRegistered=!1,this.log.error("SW registration failed!",f),this.onServiceWorkerFail&&this.onServiceWorkerFail()}),f.addEventListener("controllerchange",()=>{this.log.warn("controllerchange"),this.releasePending(),f.controller.addEventListener("error",f=>{this.log.error("controller error:",f)})}),f.addEventListener("message",f=>{const e=f.data;if(!Object(a.f)(e))return;const d=this.taskListenersSW[e.type];d&&d(e)}),this.addServiceWorkerTaskListener("requestFilePart",f=>{const e={type:f.type,id:f.id};this.performTaskWorker("requestFilePart",...f.payload).then(f=>{e.payload=f,this.postSWMessage(e)},d=>{e.originalPayload=f.payload,e.error=d,this.postSWMessage(e)})}),f.addEventListener("messageerror",f=>{this.log.error("SW messageerror:",f)})}postMessage(...f){this.postMessagesWaiting.push(f)}postSWMessage(f){navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage(f)}onWorkerFirstMessage(f){if(!this.worker){this.worker=f,this.log("set webWorker"),this.postMessage=this.worker.postMessage.bind(this.worker),this.postMessagesWaiting.forEach(f=>this.postMessage(...f)),this.postMessagesWaiting.length=0;const e=y.a;this.log("WebP supported:",e),this.postMessage({type:"webpSupport",payload:e}),this.postMessage({type:"userAgent",payload:navigator.userAgent}),this.releasePending()}}addTaskListener(f,e){this.taskListeners[f]=e}addServiceWorkerTaskListener(f,e){this.taskListenersSW[f]=e}registerWorker(){const f=new t;f.addEventListener("message",this.onWorkerFirstMessage.bind(this,f),{once:!0}),f.addEventListener("message",this.onWorkerMessage),f.addEventListener("error",f=>{this.log.error("WORKER ERROR",f)})}finalizeTask(f,e,d){const t=this.awaiting[f];void 0!==t&&(this.debug&&this.log.debug("done",t.taskName,e,d),d?t.reject(d):t.resolve(e),delete this.awaiting[f])}performTaskWorkerVoid(f,...e){const d={task:f,taskId:this.taskId,args:e};this.pending.push(d),this.releasePending(),this.taskId++}performTaskWorker(f,...e){return this.debug&&this.log.debug("start",f,e),new Promise((d,t)=>{this.awaiting[this.taskId]={resolve:d,reject:t,taskName:f},this.performTaskWorkerVoid(f,...e)})}releasePending(){this.postMessage&&(this.debug&&this.log.debug("releasing tasks, length:",this.pending.length),this.pending.forEach(f=>{this.postMessage(f)}),this.debug&&this.log.debug("released tasks"),this.pending.length=0)}setUpdatesProcessor(f){this.updatesProcessor=f}invokeApi(f,e={},d={}){return this.performTaskWorker("invokeApi",f,e,d)}invokeApiAfter(f,e={},d={}){let t=d;return t.prepareTempMessageId=""+ ++this.afterMessageIdTemp,t=Object.assign({},d),d.messageId=t.prepareTempMessageId,this.invokeApi(f,e,t)}invokeApiHashable(f,e={},d={}){const t=JSON.stringify(e);let a;return this.hashes[f]&&(a=this.hashes[f][t],a&&(e.hash=a.hash)),this.invokeApi(f,e,d).then(e=>{if(e._.includes("NotModified"))return this.debug&&this.log.warn("NotModified saved!",f,t),a.result;if(e.hash){const d=e.hash;this.hashes[f]||(this.hashes[f]={}),this.hashes[f][t]={hash:d,result:e}}return e})}invokeApiSingle(f,e={},d={}){const t=f+"-"+JSON.stringify(e);return this.apiPromisesSingle[t]?this.apiPromisesSingle[t]:this.apiPromisesSingle[t]=this.invokeApi(f,e,d).finally(()=>{delete this.apiPromisesSingle[t]})}invokeApiCacheable(f,e={},d={}){var t;const a=null!==(t=this.apiPromisesCacheable[f])&&void 0!==t?t:this.apiPromisesCacheable[f]={},s=JSON.stringify(e),c=a[s];if(c&&(!d.override||!c.fulfilled))return c.promise;let n;d.override&&(c&&c.timeout&&(clearTimeout(c.timeout),delete c.timeout),delete d.override),d.cacheSeconds&&(n=window.setTimeout(()=>{delete a[s]},1e3*d.cacheSeconds),delete d.cacheSeconds);const i=this.invokeApi(f,e,d);return a[s]={timestamp:Date.now(),fulfilled:!1,timeout:n,promise:i,params:e},i}clearCache(f,e){const d=this.apiPromisesCacheable[f];if(d)for(const f in d){const t=d[f];e(t.params)&&(t.timeout&&clearTimeout(t.timeout),delete d[f])}}setBaseDcId(f){return this.performTaskWorker("setBaseDcId",f)}setQueueId(f){return this.performTaskWorker("setQueueId",f)}setUserAuth(f){return"number"==typeof f&&(f={dcID:0,date:Date.now()/1e3|0,id:f}),c.default.dispatchEvent("user_auth",f),this.performTaskWorker("setUserAuth",f)}getNetworker(f,e){return this.performTaskWorker("getNetworker",f,e)}logOut(){return this.performTaskWorker("logOut")}cancelDownload(f){return this.performTaskWorker("cancelDownload",f)}downloadFile(f){return this.performTaskWorker("downloadFile",f)}uploadFile(f){return this.performTaskWorker("uploadFile",f)}toggleStorage(f){const e={type:"toggleStorage",payload:f};this.postMessage(e),this.postSWMessage(e)}stopAll(){return this.performTaskWorkerVoid("stopAll")}startAll(){return this.performTaskWorkerVoid("startAll")}forceReconnectTimeout(){this.postMessage({type:"online"})}forceReconnect(){this.postMessage({type:"forceReconnect"})}getConfig(){return this.getConfigPromise?this.getConfigPromise:this.getConfigPromise=this.invokeApi("help.getConfig").then(f=>(c.default.config=f,f))}};i.a.apiManagerProxy=v;e.a=v},37:function(f,e,d){"use strict";d.d(e,"c",(function(){return i})),d.d(e,"a",(function(){return t}));var t,a=d(27),s=d(114),c=d(52);class n{constructor(f=0,e=f){this.width=f,this.height=e}aspect(f,e){return Object(s.a)(this.width,this.height,f.width,f.height,e)}aspectFitted(f){return this.aspect(f,!0)}aspectCovered(f){return this.aspect(f,!1)}}function i(f,e){return new n(f,e)}!function(f){f[f.mobile=0]="mobile",f[f.medium=1]="medium",f[f.large=2]="large"}(t||(t={}));class u extends c.a{constructor(){super(),this.screenSizes=[{key:t.mobile,value:600},{key:t.medium,value:1275},{key:t.large,value:1680}],this.sizes={handhelds:{regular:i(270,270),webpage:i(270,200),album:i(270,0),esgSticker:i(68,68),animatedSticker:i(180,180),staticSticker:i(180,180),emojiSticker:i(112,112),poll:i(240,0),round:i(200,200)},desktop:{regular:i(420,340),webpage:i(420,340),album:i(420,0),esgSticker:i(80,80),animatedSticker:i(200,200),staticSticker:i(200,200),emojiSticker:i(112,112),poll:i(330,0),round:i(280,280)}},this.isMobile=!1,this.handleResize=()=>{const f=window.innerWidth;let e=this.screenSizes[0].key;for(let d=this.screenSizes.length-1;d>=0;--d)if(this.screenSizes[d].value{this.rAF&&window.cancelAnimationFrame(this.rAF),this.rAF=window.requestAnimationFrame(()=>{this.handleResize(),this.rAF=0})}),this.handleResize()}}const r=new u;a.a.mediaSizes=r,e.b=r},51:function(f,e,d){"use strict";d.d(e,"b",(function(){return u})),d.d(e,"c",(function(){return r})),d.d(e,"d",(function(){return o})),d.d(e,"e",(function(){return b})),d.d(e,"f",(function(){return l})),d.d(e,"a",(function(){return v}));var t=d(27),a=d(14),s=d(73);const c=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],i=f=>{const e=new Date(Date.UTC(f.getFullYear(),f.getMonth(),f.getDate())),d=e.getUTCDay()||7;e.setUTCDate(e.getUTCDate()+4-d);const t=new Date(Date.UTC(e.getUTCFullYear(),0,1));return Math.ceil(((e.getTime()-t.getTime())/86400+1)/7)};function u(f){const e=new Date,d=e.getTime()/1e3|0,t=f.getTime()/1e3|0,s={};return d-t<86400&&e.getDate()===f.getDate()?s.hour=s.minute="2-digit":e.getFullYear()!==f.getFullYear()?(s.year=s.day="numeric",s.month="2-digit"):d-t<604800&&i(e)===i(f)?s.weekday="short":(s.month="short",s.day="numeric"),new a.default.IntlDateElement({date:f,options:s}).element}function r(f){const e=new Date,d=new Date(1e3*f),t=e.getTime()/1e3,c=o(d);let n;n=t-f<86400&&e.getDate()===d.getDate()?Object(a.i18n)("Date.Today"):t-f<172800&&e.getDate()-1===d.getDate()?Object(s.a)(a.default.format("Yesterday",!0)):e.getFullYear()!==d.getFullYear()?new a.default.IntlDateElement({date:d,options:{month:"short",day:"numeric",year:"numeric"}}).element:new a.default.IntlDateElement({date:d,options:{month:"short",day:"numeric"}}).element;const i=document.createDocumentFragment();return i.append(n," ",Object(a.i18n)("ScheduleController.at")," ",c),i}function o(f){return new a.default.IntlDateElement({date:f,options:{hour:"2-digit",minute:"2-digit"}}).element}t.a&&(t.a.formatDateAccordingToTodayNew=u);const b=(f,e={})=>{const d=e.monthAsNumber?".":" ",t=("0"+f.getHours()).slice(-2)+":"+("0"+f.getMinutes()).slice(-2)+(e.noSeconds?"":":"+("0"+f.getSeconds()).slice(-2));return(e.leadingZero?("0"+f.getDate()).slice(-2):f.getDate())+d+(e.monthAsNumber?("0"+(f.getMonth()+1)).slice(-2):c[f.getMonth()])+d+f.getFullYear()+(e.noTime?"":", "+t)};function l(f){const e=Date.now();return f?e/1e3|0:e}const h=new RegExp("20[0-9]{1,2}"),g=new RegExp("(\\w{3,}) ([0-9]{0,4})","i"),p=new RegExp("([0-9]{0,4}) (\\w{2,})","i"),m=new RegExp("^([0-9]{1,4})(\\.| |/|\\-)([0-9]{1,4})$","i"),k=new RegExp("^([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,4})$","i"),y=[31,29,31,30,31,30,31,31,30,31,30,31];function v(f,e){const d=f.trim().toLowerCase();if(d.length<3)return;if(0==="today".indexOf(d)){const f=new Date,d=f.getFullYear(),t=f.getMonth(),a=f.getDate();f.setFullYear(d,t,a),f.setHours(0,0,0);const s=f.getTime();f.setFullYear(d,t,a+1),f.setHours(0,0,0);const c=f.getTime()-1;return void e.push({title:"Today",minDate:s,maxDate:c})}if(0==="yesterday".indexOf(d)){const f=new Date,d=f.getFullYear(),t=f.getMonth(),a=f.getDate();f.setFullYear(d,t,a),f.setHours(0,0,0);const s=f.getTime()-864e5;f.setFullYear(d,t,a+1),f.setHours(0,0,0);const c=f.getTime()-86400001;return void e.push({title:"Yesterday",minDate:s,maxDate:c})}const t=function(f){const e=new Date;if(f.length<=3)return-1;for(let d=0;d<7;d++)if(e.setDate(e.getDate()+1),0===T(e.getTime()).toLowerCase().indexOf(f))return e.getDay();return-1}(d);if(t>=0){const f=new Date,d=f.getTime(),a=t-f.getDay();f.setDate(f.getDate()+a),f.getTime()>d&&f.setTime(f.getTime()-6048e5);const s=f.getFullYear(),c=f.getMonth(),n=f.getDate();f.setFullYear(s,c,n),f.setHours(0,0,0);const i=f.getTime();f.setFullYear(s,c,n+1),f.setHours(0,0,0);const u=f.getTime()-1;return void e.push({title:T(i),minDate:i,maxDate:u})}let a;if(null===(a=m.exec(d)))if(null===(a=k.exec(d)))if(null===(a=h.exec(d))){if(null!==(a=g.exec(d))){const f=a[1],d=a[2],t=P(f);if(t>=0){const f=+d;if(f>0&&f<=31){return void A(e,f-1,t)}if(f>=2013){return void w(e,t,f)}}}if(null!==(a=p.exec(d))){const f=a[1],d=P(a[2]);if(d>=0){const t=+f;if(t>0&&t<=31){return void A(e,t-1,d)}if(t>=2013){w(e,d,t)}}}}else{let f=+d;const t=(new Date).getFullYear();if(f<2013){f=2013;for(let d=t;d>=f;d--){const f=new Date;f.setFullYear(d,0,1),f.setHours(0,0,0);const t=f.getTime();f.setFullYear(d+1,0,1),f.setHours(0,0,0);const a=f.getTime()-1;e.push({title:""+d,minDate:t,maxDate:a})}}else if(f<=t){const d=new Date;d.setFullYear(f,0,1),d.setHours(0,0,0);const t=d.getTime();d.setFullYear(f+1,0,1),d.setHours(0,0,0);const a=d.getTime()-1;e.push({title:""+f,minDate:t,maxDate:a})}}else{const f=a[1],d=a[3],t=a[5];if(!a[2]===a[4])return;const s=parseInt(f),c=parseInt(d)-1;let n=parseInt(t);n>=10&&n<=99&&(n+=2e3);const i=(new Date).getFullYear();if(D(s-1,c)&&n>=2013&&n<=i){const f=new Date;f.setFullYear(n,c,s),f.setHours(0,0,0);const d=f.getTime();f.setFullYear(n,c,s+1),f.setHours(0,0,0);const t=f.getTime()-1;return void e.push({title:S(d),minDate:d,maxDate:t})}}else{const f=a[1],d=a[3],t=parseInt(f),s=parseInt(d);if(t>0&&t<=31){if(s>=2013&&t<=12){return void w(e,t-1,s)}if(s<=12){A(e,t-1,s-1)}}else if(t>=2013&&s<=12){w(e,s-1,t)}}}function w(f,e,d){const t=(new Date).getFullYear(),a=Date.now();if(d>=2013&&d<=t){const t=new Date;t.setFullYear(d,e,1),t.setHours(0,0,0);const s=t.getTime();if(s>a)return;t.setMonth(t.getMonth()+1);const c=t.getTime()-1;f.push({title:E(s),minDate:s,maxDate:c})}}function A(f,e,d){if(D(e,d)){const a=(new Date).getFullYear(),s=Date.now();for(let c=a;c>=2013;c--){if(1===d&&28===e&&(((t=c)%4!=0||t%100==0)&&t%400!=0))continue;const n=new Date;n.setFullYear(c,d,e+1),n.setHours(0,0,0);const i=n.getTime();if(i>s)continue;n.setFullYear(c,d,e+2),n.setHours(0,0,0);const u=n.getTime()-1;c===a?f.push({title:C(i),minDate:i,maxDate:u}):f.push({title:S(i),minDate:i,maxDate:u})}}var t}function E(f){const e=new Date(f);return c[e.getMonth()].slice(0,3)+" "+e.getFullYear()}function C(f){const e=new Date(f);return c[e.getMonth()].slice(0,3)+" "+e.getDate()}function S(f){const e=new Date(f);return("0"+e.getDate()).slice(-2)+"."+("0"+(e.getMonth()+1)).slice(-2)+"."+e.getFullYear()}function T(f){const e=new Date(f);return n[e.getDay()]}function D(f,e){return e>=0&&e<12&&f>=0&&fd&&(f=f.slice(0,e)+"..."),f}function a(f){return f.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function s(f){return f.replace(/&/g,"&").replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=>"&#"+(1024*(f.charCodeAt(0)-55296)+(f.charCodeAt(1)-56320)+65536)+";").replace(/([^\#-~| |!])/g,f=>"&#"+f.charCodeAt(0)+";").replace(//g,">")}function c(f,e){if(f.length{let i=f.slice(t,n);const u=a++;if(i.length>e){c(i.slice(e),e).forEach(f=>{s[a++]=f}),i=i.slice(0,e)}t=n,d=0,s[u]=(s[u]||"")+i};let i=0;for(;;){let t=f.indexOf(" ",i);if(-1===t){i!==f.length-1&&n();break}t+=" ".length;const a=t-i;d+a>e&&n(d),i=t,d+=a}return s}function n(f){const e=f.replace("input","");return e[0].toLowerCase()+e.slice(1)}function i(f){return f="input"+(f=f[0].toUpperCase()+f.slice(1))}function u(f){return f.charAt(0).toUpperCase()+f.slice(1)}d.d(e,"f",(function(){return t})),d.d(e,"e",(function(){return a})),d.d(e,"d",(function(){return s})),d.d(e,"g",(function(){return c})),d.d(e,"b",(function(){return n})),d.d(e,"c",(function(){return i})),d.d(e,"a",(function(){return u}))},76:function(f,e,d){"use strict";d.d(e,"a",(function(){return t}));const t=f=>new Promise(e=>{setTimeout(e,f)})},94:function(f,e,d){"use strict";function t(f){return n(c(f)).join("-")}d.d(e,"b",(function(){return t})),d.d(e,"e",(function(){return n})),d.d(e,"d",(function(){return i})),d.d(e,"c",(function(){return u})),d.d(e,"a",(function(){return r}));const a=/\uFE0F/g,s=String.fromCharCode(8205),c=f=>f.indexOf(s)<0?f.replace(a,""):f;function n(f){const e=[];let d=0,t=0,a=0;for(;a55296&&d<=56319?t=d:e.push(d.toString(16));return e.length&&2===e[0].length&&(e[0]="00"+e[0]),e}function i(f){let e=f.match(/[\uDFFB-\uDFFF]/);return e?5-(57343-e[0].charCodeAt(0)):0}function u(f){return String.fromCharCode(55356,56741+f.charCodeAt(0),55356,56741+f.charCodeAt(1))}function r(f){return f.split("-").reduce((f,e)=>f+String.fromCodePoint(parseInt(e,16)),"")}}}]); -//# sourceMappingURL=1.90adb57fb90001b6aa19.chunk.js.map \ No newline at end of file +(this.webpackJsonp=this.webpackJsonp||[]).push([[1],{113:function(f,e,d){"use strict";const t=document.createElement("canvas").toDataURL("image/webp").startsWith("data:image/webp");e.a=t},114:function(f,e,d){"use strict";d.d(e,"a",(function(){return a}));var t=d(37);function a(f,e,d,a,s=!0){if(fd/a?n=e*d/f|0:(c=f*a/e|0,c>d&&(n=n*d/c|0,c=d)),s&&c>=f&&n>=e&&(c=f,n=e),Object(t.c)(c,n)}d(27).a.calcImageInBox=a},125:function(f,e,d){"use strict";const t=new class{reload(){try{location.reload()}catch(f){}}close(){try{window.close()}catch(f){}}focus(){window.focus()}};e.a=t},126:function(f,e,d){"use strict";var t=d(27);const a={Emoji:{2049:62748,2122:62776,2139:62801,2194:62678,2195:62677,2196:62676,2197:62670,2198:62672,2199:62674,2328:61155,2600:4954,2601:4962,2602:4977,2603:4982,2604:4984,2611:62764,2614:4978,2615:3750,2618:2639,2620:196,2622:62667,2623:62668,2626:62697,2638:62694,2639:168,2648:62702,2649:62703,2650:62710,2651:62711,2652:62712,2653:62713,2660:51057,2663:51060,2665:51058,2666:51059,2668:4832,2692:61258,2693:4887,2694:61261,2696:61272,2697:61280,2699:61270,2702:61245,2705:62763,2708:4895,2709:61206,2712:61220,2714:62765,2716:62742,2721:62693,2728:5993,2733:62771,2734:62772,2744:4981,2747:62773,2753:62749,2754:62750,2755:62751,2757:62752,2763:1127,2764:1129,2795:62743,2796:62744,2797:62745,2934:62681,2935:62682,3030:62753,3297:62825,3299:62826,"0023-20e3":62777,"002a-20e3":62778,"0030-20e3":62779,"0031-20e3":62780,"0032-20e3":62781,"0033-20e3":62782,"0034-20e3":62783,"0035-20e3":62784,"0036-20e3":62785,"0037-20e3":62786,"0038-20e3":62787,"0039-20e3":62788,"00a9":62774,"00ae":62775,"1f004":51063,"1f0cf":51062,"1f170":62795,"1f171":62797,"1f17e":62806,"1f17f":62808,"1f18e":62796,"1f191":62798,"1f192":62799,"1f193":62800,"1f194":62802,"1f195":62804,"1f196":62805,"1f197":62807,"1f198":62809,"1f199":62810,"1f19a":62811,"1f1e6-1f1e8":71550,"1f1e6-1f1e9":71551,"1f1e6-1f1ea":71552,"1f1e6-1f1eb":71553,"1f1e6-1f1ec":71554,"1f1e6-1f1ee":71555,"1f1e6-1f1f1":71556,"1f1e6-1f1f2":71557,"1f1e6-1f1f4":71558,"1f1e6-1f1f6":71559,"1f1e6-1f1f7":71560,"1f1e6-1f1f8":71561,"1f1e6-1f1f9":71562,"1f1e6-1f1fa":71563,"1f1e6-1f1fc":71564,"1f1e6-1f1fd":71565,"1f1e6-1f1ff":71566,"1f1e7-1f1e6":71567,"1f1e7-1f1e7":71568,"1f1e7-1f1e9":71569,"1f1e7-1f1ea":71570,"1f1e7-1f1eb":71571,"1f1e7-1f1ec":71572,"1f1e7-1f1ed":71573,"1f1e7-1f1ee":71574,"1f1e7-1f1ef":71575,"1f1e7-1f1f1":71576,"1f1e7-1f1f2":71577,"1f1e7-1f1f3":71578,"1f1e7-1f1f4":71579,"1f1e7-1f1f6":71580,"1f1e7-1f1f7":71581,"1f1e7-1f1f8":71582,"1f1e7-1f1f9":71583,"1f1e7-1f1fb":71584,"1f1e7-1f1fc":71585,"1f1e7-1f1fe":71586,"1f1e7-1f1ff":71587,"1f1e8-1f1e6":71588,"1f1e8-1f1e8":71589,"1f1e8-1f1e9":71590,"1f1e8-1f1eb":71591,"1f1e8-1f1ec":71592,"1f1e8-1f1ed":71593,"1f1e8-1f1ee":71594,"1f1e8-1f1f0":71595,"1f1e8-1f1f1":71596,"1f1e8-1f1f2":71597,"1f1e8-1f1f3":71598,"1f1e8-1f1f4":71599,"1f1e8-1f1f5":71600,"1f1e8-1f1f7":71601,"1f1e8-1f1fa":71602,"1f1e8-1f1fb":71603,"1f1e8-1f1fc":71604,"1f1e8-1f1fd":71605,"1f1e8-1f1fe":71606,"1f1e8-1f1ff":71607,"1f1e9-1f1ea":71608,"1f1e9-1f1ec":71609,"1f1e9-1f1ef":71610,"1f1e9-1f1f0":71611,"1f1e9-1f1f2":71612,"1f1e9-1f1f4":71613,"1f1e9-1f1ff":71614,"1f1ea-1f1e6":71615,"1f1ea-1f1e8":71616,"1f1ea-1f1ea":71617,"1f1ea-1f1ec":71618,"1f1ea-1f1ed":71619,"1f1ea-1f1f7":71620,"1f1ea-1f1f8":71621,"1f1ea-1f1f9":71622,"1f1ea-1f1fa":71623,"1f1eb-1f1ee":71624,"1f1eb-1f1ef":71625,"1f1eb-1f1f0":71626,"1f1eb-1f1f2":71627,"1f1eb-1f1f4":71628,"1f1eb-1f1f7":71629,"1f1ec-1f1e6":71630,"1f1ec-1f1e7":71631,"1f1ec-1f1e9":71632,"1f1ec-1f1ea":71633,"1f1ec-1f1eb":71634,"1f1ec-1f1ec":71635,"1f1ec-1f1ed":71636,"1f1ec-1f1ee":71637,"1f1ec-1f1f1":71638,"1f1ec-1f1f2":71639,"1f1ec-1f1f3":71640,"1f1ec-1f1f5":71641,"1f1ec-1f1f6":71642,"1f1ec-1f1f7":71643,"1f1ec-1f1f8":71644,"1f1ec-1f1f9":71645,"1f1ec-1f1fa":71646,"1f1ec-1f1fc":71647,"1f1ec-1f1fe":71648,"1f1ed-1f1f0":71649,"1f1ed-1f1f2":71650,"1f1ed-1f1f3":71651,"1f1ed-1f1f7":71652,"1f1ed-1f1f9":71653,"1f1ed-1f1fa":71654,"1f1ee-1f1e8":71655,"1f1ee-1f1e9":71656,"1f1ee-1f1ea":71657,"1f1ee-1f1f1":71658,"1f1ee-1f1f2":71659,"1f1ee-1f1f3":71660,"1f1ee-1f1f4":71661,"1f1ee-1f1f6":71662,"1f1ee-1f1f7":71663,"1f1ee-1f1f8":71664,"1f1ee-1f1f9":71665,"1f1ef-1f1ea":71666,"1f1ef-1f1f2":71667,"1f1ef-1f1f4":71668,"1f1ef-1f1f5":71669,"1f1f0-1f1ea":71670,"1f1f0-1f1ec":71671,"1f1f0-1f1ed":71672,"1f1f0-1f1ee":71673,"1f1f0-1f1f2":71674,"1f1f0-1f1f3":71675,"1f1f0-1f1f5":71676,"1f1f0-1f1f7":71677,"1f1f0-1f1fc":71678,"1f1f0-1f1fe":71679,"1f1f0-1f1ff":71680,"1f1f1-1f1e6":71681,"1f1f1-1f1e7":71682,"1f1f1-1f1e8":71683,"1f1f1-1f1ee":71684,"1f1f1-1f1f0":71685,"1f1f1-1f1f7":71686,"1f1f1-1f1f8":71687,"1f1f1-1f1f9":71688,"1f1f1-1f1fa":71689,"1f1f1-1f1fb":71690,"1f1f1-1f1fe":71691,"1f1f2-1f1e6":71692,"1f1f2-1f1e8":71693,"1f1f2-1f1e9":71694,"1f1f2-1f1ea":71695,"1f1f2-1f1eb":71696,"1f1f2-1f1ec":71697,"1f1f2-1f1ed":71698,"1f1f2-1f1f0":71699,"1f1f2-1f1f1":71700,"1f1f2-1f1f2":71701,"1f1f2-1f1f3":71702,"1f1f2-1f1f4":71703,"1f1f2-1f1f5":71704,"1f1f2-1f1f6":71705,"1f1f2-1f1f7":71706,"1f1f2-1f1f8":71707,"1f1f2-1f1f9":71708,"1f1f2-1f1fa":71709,"1f1f2-1f1fb":71710,"1f1f2-1f1fc":71711,"1f1f2-1f1fd":71712,"1f1f2-1f1fe":71713,"1f1f2-1f1ff":71714,"1f1f3-1f1e6":71715,"1f1f3-1f1e8":71716,"1f1f3-1f1ea":71717,"1f1f3-1f1eb":71718,"1f1f3-1f1ec":71719,"1f1f3-1f1ee":71720,"1f1f3-1f1f1":71721,"1f1f3-1f1f4":71722,"1f1f3-1f1f5":71723,"1f1f3-1f1f7":71724,"1f1f3-1f1fa":71725,"1f1f3-1f1ff":71726,"1f1f4-1f1f2":71727,"1f1f5-1f1e6":71728,"1f1f5-1f1ea":71729,"1f1f5-1f1eb":71730,"1f1f5-1f1ec":71731,"1f1f5-1f1ed":71732,"1f1f5-1f1f0":71733,"1f1f5-1f1f1":71734,"1f1f5-1f1f2":71735,"1f1f5-1f1f3":71736,"1f1f5-1f1f7":71737,"1f1f5-1f1f8":71738,"1f1f5-1f1f9":71739,"1f1f5-1f1fc":71740,"1f1f5-1f1fe":71741,"1f1f6-1f1e6":71742,"1f1f7-1f1ea":71743,"1f1f7-1f1f4":71744,"1f1f7-1f1f8":71745,"1f1f7-1f1fa":71746,"1f1f7-1f1fc":71747,"1f1f8-1f1e6":71748,"1f1f8-1f1e7":71749,"1f1f8-1f1e8":71750,"1f1f8-1f1e9":71751,"1f1f8-1f1ea":71752,"1f1f8-1f1ec":71753,"1f1f8-1f1ed":71754,"1f1f8-1f1ee":71755,"1f1f8-1f1ef":71756,"1f1f8-1f1f0":71757,"1f1f8-1f1f1":71758,"1f1f8-1f1f2":71759,"1f1f8-1f1f3":71760,"1f1f8-1f1f4":71761,"1f1f8-1f1f7":71762,"1f1f8-1f1f8":71763,"1f1f8-1f1f9":71764,"1f1f8-1f1fb":71765,"1f1f8-1f1fd":71766,"1f1f8-1f1fe":71767,"1f1f8-1f1ff":71768,"1f1f9-1f1e6":71769,"1f1f9-1f1e8":71770,"1f1f9-1f1e9":71771,"1f1f9-1f1eb":71772,"1f1f9-1f1ec":71773,"1f1f9-1f1ed":71774,"1f1f9-1f1ef":71775,"1f1f9-1f1f0":71776,"1f1f9-1f1f1":71777,"1f1f9-1f1f2":71778,"1f1f9-1f1f3":71779,"1f1f9-1f1f4":71780,"1f1f9-1f1f7":71781,"1f1f9-1f1f9":71782,"1f1f9-1f1fb":71783,"1f1f9-1f1fc":71784,"1f1f9-1f1ff":71785,"1f1fa-1f1e6":71786,"1f1fa-1f1ec":71787,"1f1fa-1f1f2":71788,"1f1fa-1f1f3":71789,"1f1fa-1f1f8":71790,"1f1fa-1f1fe":71791,"1f1fa-1f1ff":71792,"1f1fb-1f1e6":71793,"1f1fb-1f1e8":71794,"1f1fb-1f1ea":71795,"1f1fb-1f1ec":71796,"1f1fb-1f1ee":71797,"1f1fb-1f1f3":71798,"1f1fb-1f1fa":71799,"1f1fc-1f1eb":71800,"1f1fc-1f1f8":71801,"1f1fd-1f1f0":71802,"1f1fe-1f1ea":71803,"1f1fe-1f1f9":71804,"1f1ff-1f1e6":71805,"1f1ff-1f1f2":71806,"1f1ff-1f1fc":71807,"1f201":62812,"1f202":62813,"1f21a":62819,"1f22f":62816,"1f232":62820,"1f233":62824,"1f234":62823,"1f235":62828,"1f236":62815,"1f237":62814,"1f238":62822,"1f239":62818,"1f23a":62827,"1f250":62817,"1f251":62821,"1f300":4974,"1f301":4824,"1f302":4976,"1f303":4825,"1f304":4827,"1f305":4828,"1f306":4829,"1f307":4830,"1f308":4975,"1f309":4831,"1f30a":4987,"1f30b":4782,"1f30c":4961,"1f30d":4773,"1f30e":4774,"1f30f":4775,"1f310":4776,"1f311":4941,"1f312":4942,"1f313":4943,"1f314":4944,"1f315":4945,"1f316":4946,"1f317":4947,"1f318":4948,"1f319":4949,"1f31a":4950,"1f31b":4951,"1f31c":4952,"1f31d":4955,"1f31e":4956,"1f31f":4959,"1f320":4960,"1f321":4953,"1f324":4965,"1f325":4966,"1f326":4967,"1f327":4968,"1f328":4969,"1f329":4970,"1f32a":4971,"1f32b":4972,"1f32c":4973,"1f32d":3694,"1f32e":3696,"1f32f":3697,"1f330":3677,"1f331":2631,"1f332":2633,"1f333":2634,"1f334":2635,"1f335":2636,"1f336":3668,"1f337":2630,"1f338":2622,"1f339":2625,"1f33a":2627,"1f33b":2628,"1f33c":2629,"1f33d":3667,"1f33e":2637,"1f33f":2638,"1f340":2640,"1f341":2641,"1f342":2642,"1f343":2643,"1f344":3675,"1f345":3660,"1f346":3664,"1f347":3644,"1f348":3645,"1f349":3646,"1f34a":3647,"1f34b":3648,"1f34c":3649,"1f34d":3650,"1f34e":3652,"1f34f":3653,"1f350":3654,"1f351":3655,"1f352":3656,"1f353":3657,"1f354":3691,"1f355":3693,"1f356":3687,"1f357":3688,"1f358":3713,"1f359":3714,"1f35a":3715,"1f35b":3716,"1f35c":3717,"1f35d":3718,"1f35e":3678,"1f35f":3692,"1f360":3719,"1f361":3725,"1f362":3720,"1f363":3721,"1f364":3722,"1f365":3723,"1f366":3734,"1f367":3735,"1f368":3736,"1f369":3737,"1f36a":3738,"1f36b":3743,"1f36c":3744,"1f36d":3745,"1f36e":3746,"1f36f":3747,"1f370":3740,"1f371":3712,"1f372":3704,"1f373":3702,"1f374":3769,"1f375":3752,"1f376":3753,"1f377":3755,"1f378":3756,"1f379":3757,"1f37a":3758,"1f37b":3759,"1f37c":3748,"1f37d":3768,"1f37e":3754,"1f37f":3708,"1f380":51004,"1f381":51005,"1f382":3739,"1f383":5988,"1f384":5989,"1f385":1490,"1f386":5990,"1f387":5991,"1f388":5994,"1f389":5995,"1f38a":5996,"1f38b":5997,"1f38c":71544,"1f38d":5998,"1f38e":5999,"1f38f":51e3,"1f390":51001,"1f391":51002,"1f392":61096,"1f393":61109,"1f396":51009,"1f397":51006,"1f399":61129,"1f39a":61130,"1f39b":61131,"1f39e":61164,"1f39f":51007,"1f3a0":4833,"1f3a1":4834,"1f3a2":4835,"1f3a3":51036,"1f3a4":61132,"1f3a5":61163,"1f3a6":62733,"1f3a7":61133,"1f3a8":51067,"1f3a9":61108,"1f3aa":4837,"1f3ab":51008,"1f3ac":61166,"1f3ad":51065,"1f3ae":51049,"1f3af":51042,"1f3b0":51051,"1f3b1":51045,"1f3b2":51052,"1f3b3":51024,"1f3b4":51064,"1f3b5":61127,"1f3b6":61128,"1f3b7":61135,"1f3b8":61137,"1f3b9":61138,"1f3ba":61139,"1f3bb":61140,"1f3bc":61126,"1f3bd":51038,"1f3be":51022,"1f3bf":51039,"1f3c0":51018,"1f3c1":71542,"1f3c2":1562,"1f3c3-200d-2640":1546,"1f3c3-200d-2642":1545,"1f3c3":1544,"1f3c4-200d-2640":1568,"1f3c4-200d-2642":1567,"1f3c4":1566,"1f3c5":51011,"1f3c6":51010,"1f3c7":1560,"1f3c8":51020,"1f3c9":51021,"1f3ca-200d-2640":1574,"1f3ca-200d-2642":1573,"1f3ca":1572,"1f3cb-200d-2640":1580,"1f3cb-200d-2642":1579,"1f3cb":1578,"1f3cc-200d-2640":1565,"1f3cc-200d-2642":1564,"1f3cc":1563,"1f3cd":4868,"1f3ce":4867,"1f3cf":51025,"1f3d0":51019,"1f3d1":51026,"1f3d2":51027,"1f3d3":51029,"1f3d4":4780,"1f3d5":4784,"1f3d6":4785,"1f3d7":4791,"1f3d8":4796,"1f3d9":4826,"1f3da":4797,"1f3db":4790,"1f3dc":4786,"1f3dd":4787,"1f3de":4788,"1f3df":4789,"1f3e0":4798,"1f3e1":4799,"1f3e2":4800,"1f3e3":4801,"1f3e4":4802,"1f3e5":4803,"1f3e6":4804,"1f3e7":62643,"1f3e8":4805,"1f3e9":4806,"1f3ea":4807,"1f3eb":4808,"1f3ec":4809,"1f3ed":4810,"1f3ee":61177,"1f3ef":4811,"1f3f0":4812,"1f3f3-200d-1f308":71547,"1f3f3-200d-26a7":71548,"1f3f3":71546,"1f3f4-200d-2620":71549,"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f":71808,"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f":71809,"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f":71810,"1f3f4":71545,"1f3f5":2624,"1f3f7":61195,"1f3f8":51030,"1f3f9":61264,"1f3fa":3772,"1f3fb":9499,"1f3fc":9500,"1f3fd":9501,"1f3fe":9502,"1f3ff":9503,"1f400":2550,"1f401":2549,"1f402":2530,"1f403":2531,"1f404":2532,"1f405":2521,"1f406":2522,"1f407":2553,"1f408-200d-2b1b":2518,"1f408":2517,"1f409":2592,"1f40a":2587,"1f40b":2596,"1f40c":2605,"1f40d":2590,"1f40e":2524,"1f40f":2537,"1f410":2539,"1f411":2538,"1f412":2505,"1f413":2570,"1f414":2569,"1f415-200d-1f9ba":2511,"1f415":2509,"1f416":2534,"1f417":2535,"1f418":2544,"1f419":2603,"1f41a":2604,"1f41b":2607,"1f41c":2608,"1f41d":2609,"1f41e":2611,"1f41f":2599,"1f420":2600,"1f421":2601,"1f422":2588,"1f423":2571,"1f424":2572,"1f425":2573,"1f426":2574,"1f427":2575,"1f428":2560,"1f429":2512,"1f42a":2540,"1f42b":2541,"1f42c":2597,"1f42d":2548,"1f42e":2529,"1f42f":2520,"1f430":2552,"1f431":2516,"1f432":2591,"1f433":2595,"1f434":2523,"1f435":2504,"1f436":2508,"1f437":2533,"1f438":2586,"1f439":2551,"1f43a":2513,"1f43b-200d-2744":2559,"1f43b":2558,"1f43c":2561,"1f43d":2536,"1f43e":2567,"1f43f":2554,"1f440":1350,"1f441-200d-1f5e8":1147,"1f441":1351,"1f442":1342,"1f443":1344,"1f444":1353,"1f445":1352,"1f446":1318,"1f447":1320,"1f448":1316,"1f449":1317,"1f44a":1325,"1f44b":1303,"1f44c":1308,"1f44d":1322,"1f44e":1323,"1f44f":1328,"1f450":1330,"1f451":61106,"1f452":61107,"1f453":61072,"1f454":61077,"1f455":61078,"1f456":61079,"1f457":61084,"1f458":61085,"1f459":61090,"1f45a":61091,"1f45b":61092,"1f45c":61093,"1f45d":61094,"1f45e":61098,"1f45f":61099,"1f460":61102,"1f461":61103,"1f462":61105,"1f463":1649,"1f464":1646,"1f465":1647,"1f466":1356,"1f467":1357,"1f468-200d-1f33e":1423,"1f468-200d-1f373":1426,"1f468-200d-1f37c":1487,"1f468-200d-1f393":1414,"1f468-200d-1f3a4":1444,"1f468-200d-1f3a8":1447,"1f468-200d-1f3eb":1417,"1f468-200d-1f3ed":1432,"1f468-200d-1f466-200d-1f466":1636,"1f468-200d-1f466":1635,"1f468-200d-1f467-200d-1f466":1638,"1f468-200d-1f467-200d-1f467":1639,"1f468-200d-1f467":1637,"1f468-200d-1f468-200d-1f466":1625,"1f468-200d-1f468-200d-1f466-200d-1f466":1628,"1f468-200d-1f468-200d-1f467":1626,"1f468-200d-1f468-200d-1f467-200d-1f466":1627,"1f468-200d-1f468-200d-1f467-200d-1f467":1629,"1f468-200d-1f469-200d-1f466":1620,"1f468-200d-1f469-200d-1f466-200d-1f466":1623,"1f468-200d-1f469-200d-1f467":1621,"1f468-200d-1f469-200d-1f467-200d-1f466":1622,"1f468-200d-1f469-200d-1f467-200d-1f467":1624,"1f468-200d-1f4bb":1441,"1f468-200d-1f4bc":1435,"1f468-200d-1f527":1429,"1f468-200d-1f52c":1438,"1f468-200d-1f680":1453,"1f468-200d-1f692":1456,"1f468-200d-1f9af":1536,"1f468-200d-1f9b0":1362,"1f468-200d-1f9b1":1363,"1f468-200d-1f9b2":1365,"1f468-200d-1f9b3":1364,"1f468-200d-1f9bc":1539,"1f468-200d-1f9bd":1542,"1f468-200d-2695":1411,"1f468-200d-2696":1420,"1f468-200d-2708":1450,"1f468-200d-2764-200d-1f468":1617,"1f468-200d-2764-200d-1f48b-200d-1f468":1613,"1f468":1360,"1f469-200d-1f33e":1424,"1f469-200d-1f373":1427,"1f469-200d-1f37c":1486,"1f469-200d-1f393":1415,"1f469-200d-1f3a4":1445,"1f469-200d-1f3a8":1448,"1f469-200d-1f3eb":1418,"1f469-200d-1f3ed":1433,"1f469-200d-1f466-200d-1f466":1641,"1f469-200d-1f466":1640,"1f469-200d-1f467-200d-1f466":1643,"1f469-200d-1f467-200d-1f467":1644,"1f469-200d-1f467":1642,"1f469-200d-1f469-200d-1f466":1630,"1f469-200d-1f469-200d-1f466-200d-1f466":1633,"1f469-200d-1f469-200d-1f467":1631,"1f469-200d-1f469-200d-1f467-200d-1f466":1632,"1f469-200d-1f469-200d-1f467-200d-1f467":1634,"1f469-200d-1f4bb":1442,"1f469-200d-1f4bc":1436,"1f469-200d-1f527":1430,"1f469-200d-1f52c":1439,"1f469-200d-1f680":1454,"1f469-200d-1f692":1457,"1f469-200d-1f9af":1537,"1f469-200d-1f9b0":1367,"1f469-200d-1f9b1":1369,"1f469-200d-1f9b2":1373,"1f469-200d-1f9b3":1371,"1f469-200d-1f9bc":1540,"1f469-200d-1f9bd":1543,"1f469-200d-2695":1412,"1f469-200d-2696":1421,"1f469-200d-2708":1451,"1f469-200d-2764-200d-1f468":1616,"1f469-200d-2764-200d-1f469":1618,"1f469-200d-2764-200d-1f48b-200d-1f468":1612,"1f469-200d-2764-200d-1f48b-200d-1f469":1614,"1f469":1366,"1f46a":1619,"1f46b":1609,"1f46c":1610,"1f46d":1608,"1f46e-200d-2640":1460,"1f46e-200d-2642":1459,"1f46e":1458,"1f46f-200d-2640":1552,"1f46f-200d-2642":1551,"1f46f":1550,"1f470-200d-2640":1483,"1f470-200d-2642":1482,"1f470":1481,"1f471-200d-2640":1375,"1f471-200d-2642":1376,"1f471":1359,"1f472":1476,"1f473-200d-2640":1475,"1f473-200d-2642":1474,"1f473":1473,"1f474":1378,"1f475":1379,"1f476":1354,"1f477-200d-2640":1470,"1f477-200d-2642":1469,"1f477":1468,"1f478":1472,"1f479":199,"1f47a":1100,"1f47b":1101,"1f47c":1489,"1f47d":1102,"1f47e":1103,"1f47f":194,"1f480":195,"1f481-200d-2640":1394,"1f481-200d-2642":1393,"1f481":1392,"1f482-200d-2640":1466,"1f482-200d-2642":1465,"1f482":1464,"1f483":1547,"1f484":61114,"1f485":1335,"1f486-200d-2640":1522,"1f486-200d-2642":1521,"1f486":1520,"1f487-200d-2640":1525,"1f487-200d-2642":1524,"1f487":1523,"1f488":4836,"1f489":61287,"1f48a":61289,"1f48b":1117,"1f48c":1118,"1f48d":61115,"1f48e":61116,"1f48f":1611,"1f490":2621,"1f491":1615,"1f492":4813,"1f493":1123,"1f494":1128,"1f495":1125,"1f496":1121,"1f497":1122,"1f498":1119,"1f499":1133,"1f49a":1132,"1f49b":1131,"1f49c":1134,"1f49d":1120,"1f49e":1124,"1f49f":1126,"1f4a0":62859,"1f4a1":61175,"1f4a2":1139,"1f4a3":1145,"1f4a4":1151,"1f4a5":1140,"1f4a6":1142,"1f4a7":4986,"1f4a8":1143,"1f4a9":197,"1f4aa":1337,"1f4ab":1141,"1f4ac":1146,"1f4ad":1150,"1f4ae":2623,"1f4af":1138,"1f4b0":61196,"1f4b1":62754,"1f4b2":62755,"1f4b3":61203,"1f4b4":61198,"1f4b5":61199,"1f4b6":61200,"1f4b7":61201,"1f4b8":61202,"1f4b9":61205,"1f4ba":4900,"1f4bb":61152,"1f4bc":61226,"1f4bd":61158,"1f4be":61159,"1f4bf":61160,"1f4c0":61161,"1f4c1":61227,"1f4c2":61228,"1f4c3":61188,"1f4c4":61190,"1f4c5":61230,"1f4c6":61231,"1f4c7":61234,"1f4c8":61235,"1f4c9":61236,"1f4ca":61237,"1f4cb":61238,"1f4cc":61239,"1f4cd":61240,"1f4ce":61241,"1f4cf":61243,"1f4d0":61244,"1f4d1":61193,"1f4d2":61187,"1f4d3":61186,"1f4d4":61179,"1f4d5":61180,"1f4d6":61181,"1f4d7":61182,"1f4d8":61183,"1f4d9":61184,"1f4da":61185,"1f4db":62760,"1f4dc":61189,"1f4dd":61225,"1f4de":61147,"1f4df":61148,"1f4e0":61149,"1f4e1":61286,"1f4e2":61121,"1f4e3":61122,"1f4e4":61210,"1f4e5":61211,"1f4e6":61212,"1f4e7":61207,"1f4e8":61208,"1f4e9":61209,"1f4ea":61214,"1f4eb":61213,"1f4ec":61215,"1f4ed":61216,"1f4ee":61217,"1f4ef":61123,"1f4f0":61191,"1f4f1":61144,"1f4f2":61145,"1f4f3":62737,"1f4f4":62738,"1f4f5":62665,"1f4f6":62736,"1f4f7":61168,"1f4f8":61169,"1f4f9":61170,"1f4fa":61167,"1f4fb":61134,"1f4fc":61171,"1f4fd":61165,"1f4ff":61113,"1f500":62715,"1f501":62716,"1f502":62717,"1f503":62683,"1f504":62684,"1f505":62734,"1f506":62735,"1f507":61117,"1f508":61118,"1f509":61119,"1f50a":61120,"1f50b":61150,"1f50c":61151,"1f50d":61172,"1f50e":61173,"1f50f":61251,"1f510":61252,"1f511":61253,"1f512":61249,"1f513":61250,"1f514":61124,"1f515":61125,"1f516":61194,"1f517":61274,"1f518":62860,"1f519":62685,"1f51a":62686,"1f51b":62687,"1f51c":62688,"1f51d":62689,"1f51e":62666,"1f51f":62789,"1f520":62790,"1f521":62791,"1f522":62792,"1f523":62793,"1f524":62794,"1f525":4985,"1f526":61176,"1f527":61267,"1f528":61255,"1f529":61269,"1f52a":3771,"1f52b":61262,"1f52c":61284,"1f52d":61285,"1f52e":51046,"1f52f":62701,"1f530":62761,"1f531":62759,"1f532":62862,"1f533":62861,"1f534":62829,"1f535":62833,"1f536":62853,"1f537":62854,"1f538":62855,"1f539":62856,"1f53a":62857,"1f53b":62858,"1f53c":62725,"1f53d":62727,"1f549":62692,"1f54a":2576,"1f54b":4821,"1f54c":4817,"1f54d":4819,"1f54e":62700,"1f550":4919,"1f551":4921,"1f552":4923,"1f553":4925,"1f554":4927,"1f555":4929,"1f556":4931,"1f557":4933,"1f558":4935,"1f559":4937,"1f55a":4939,"1f55b":4917,"1f55c":4920,"1f55d":4922,"1f55e":4924,"1f55f":4926,"1f560":4928,"1f561":4930,"1f562":4932,"1f563":4934,"1f564":4936,"1f565":4938,"1f566":4940,"1f567":4918,"1f56f":61174,"1f570":4916,"1f573":1144,"1f574":1549,"1f575-200d-2640":1463,"1f575-200d-2642":1462,"1f575":1461,"1f576":61073,"1f577":2614,"1f578":2615,"1f579":51050,"1f57a":1548,"1f587":61242,"1f58a":61222,"1f58b":61221,"1f58c":61223,"1f58d":61224,"1f590":1305,"1f595":1319,"1f596":1307,"1f5a4":1136,"1f5a5":61153,"1f5a8":61154,"1f5b1":61156,"1f5b2":61157,"1f5bc":51066,"1f5c2":61229,"1f5c3":61246,"1f5c4":61247,"1f5d1":61248,"1f5d2":61232,"1f5d3":61233,"1f5dc":61271,"1f5dd":61254,"1f5de":61192,"1f5e1":61260,"1f5e3":1645,"1f5e8":1148,"1f5ef":1149,"1f5f3":61218,"1f5fa":4777,"1f5fb":4783,"1f5fc":4814,"1f5fd":4815,"1f5fe":4778,"1f5ff":61320,"1f600":11,"1f601":14,"1f602":18,"1f603":12,"1f604":13,"1f605":16,"1f606":15,"1f607":113,"1f608":193,"1f609":111,"1f60a":112,"1f60b":123,"1f60c":143,"1f60d":115,"1f60e":162,"1f60f":138,"1f610":135,"1f611":136,"1f612":139,"1f613":185,"1f614":144,"1f615":165,"1f616":182,"1f617":118,"1f618":117,"1f619":121,"1f61a":120,"1f61b":124,"1f61c":125,"1f61d":127,"1f61e":184,"1f61f":166,"1f620":191,"1f621":190,"1f622":179,"1f623":183,"1f624":189,"1f625":178,"1f626":174,"1f627":175,"1f628":176,"1f629":186,"1f62a":145,"1f62b":187,"1f62c":141,"1f62d":180,"1f62e":169,"1f62f":170,"1f630":177,"1f631":181,"1f632":171,"1f633":172,"1f634":147,"1f635":157,"1f636":137,"1f637":148,"1f638":1106,"1f639":1107,"1f63a":1105,"1f63b":1108,"1f63c":1109,"1f63d":1110,"1f63e":1113,"1f63f":1112,"1f640":1111,"1f641":167,"1f642":19,"1f643":110,"1f644":140,"1f645-200d-2640":1388,"1f645-200d-2642":1387,"1f645":1386,"1f646-200d-2640":1391,"1f646-200d-2642":1390,"1f646":1389,"1f647-200d-2640":1403,"1f647-200d-2642":1402,"1f647":1401,"1f648":1114,"1f649":1115,"1f64a":1116,"1f64b-200d-2640":1397,"1f64b-200d-2642":1396,"1f64b":1395,"1f64c":1329,"1f64d-200d-2640":1382,"1f64d-200d-2642":1381,"1f64d":1380,"1f64e-200d-2640":1385,"1f64e-200d-2642":1384,"1f64e":1383,"1f64f":1333,"1f680":4906,"1f681":4901,"1f682":4838,"1f683":4839,"1f684":4840,"1f685":4841,"1f686":4842,"1f687":4843,"1f688":4844,"1f689":4845,"1f68a":4846,"1f68b":4849,"1f68c":4850,"1f68d":4851,"1f68e":4852,"1f68f":4877,"1f690":4853,"1f691":4854,"1f692":4855,"1f693":4856,"1f694":4857,"1f695":4858,"1f696":4859,"1f697":4860,"1f698":4861,"1f699":4862,"1f69a":4864,"1f69b":4865,"1f69c":4866,"1f69d":4847,"1f69e":4848,"1f69f":4902,"1f6a0":4903,"1f6a1":4904,"1f6a2":4894,"1f6a3-200d-2640":1571,"1f6a3-200d-2642":1570,"1f6a3":1569,"1f6a4":4890,"1f6a5":4883,"1f6a6":4884,"1f6a7":4886,"1f6a8":4882,"1f6a9":71543,"1f6aa":61292,"1f6ab":62659,"1f6ac":61316,"1f6ad":62661,"1f6ae":62644,"1f6af":62662,"1f6b0":62645,"1f6b1":62663,"1f6b2":4873,"1f6b3":62660,"1f6b4-200d-2640":1583,"1f6b4-200d-2642":1582,"1f6b4":1581,"1f6b5-200d-2640":1586,"1f6b5-200d-2642":1585,"1f6b5":1584,"1f6b6-200d-2640":1528,"1f6b6-200d-2642":1527,"1f6b6":1526,"1f6b7":62664,"1f6b8":62657,"1f6b9":62647,"1f6ba":62648,"1f6bb":62649,"1f6bc":62650,"1f6bd":61299,"1f6be":62651,"1f6bf":61301,"1f6c0":1605,"1f6c1":61302,"1f6c2":62652,"1f6c3":62653,"1f6c4":62654,"1f6c5":62655,"1f6cb":61297,"1f6cc":1606,"1f6cd":61095,"1f6ce":4908,"1f6cf":61296,"1f6d0":62690,"1f6d1":4885,"1f6d2":61315,"1f6d5":4818,"1f6d6":4795,"1f6d7":61293,"1f6e0":61259,"1f6e1":61265,"1f6e2":4880,"1f6e3":4878,"1f6e4":4879,"1f6e5":4893,"1f6e9":4896,"1f6eb":4897,"1f6ec":4898,"1f6f0":4905,"1f6f3":4891,"1f6f4":4874,"1f6f5":4869,"1f6f6":4889,"1f6f7":51040,"1f6f8":4907,"1f6f9":4875,"1f6fa":4872,"1f6fb":4863,"1f6fc":4876,"1f7e0":62830,"1f7e1":62831,"1f7e2":62832,"1f7e3":62834,"1f7e4":62835,"1f7e5":62838,"1f7e6":62842,"1f7e7":62839,"1f7e8":62840,"1f7e9":62841,"1f7ea":62843,"1f7eb":62844,"1f90c":1309,"1f90d":1137,"1f90e":1135,"1f90f":1310,"1f910":133,"1f911":128,"1f912":149,"1f913":163,"1f914":132,"1f915":150,"1f916":1104,"1f917":129,"1f918":1314,"1f919":1315,"1f91a":1304,"1f91b":1326,"1f91c":1327,"1f91d":1332,"1f91e":1312,"1f91f":1313,"1f920":159,"1f921":198,"1f922":151,"1f923":17,"1f924":146,"1f925":142,"1f926-200d-2640":1406,"1f926-200d-2642":1405,"1f926":1404,"1f927":153,"1f928":134,"1f929":116,"1f92a":126,"1f92b":131,"1f92c":192,"1f92d":130,"1f92e":152,"1f92f":158,"1f930":1484,"1f931":1485,"1f932":1331,"1f933":1336,"1f934":1471,"1f935-200d-2640":1480,"1f935-200d-2642":1479,"1f935":1478,"1f936":1491,"1f937-200d-2640":1409,"1f937-200d-2642":1408,"1f937":1407,"1f938-200d-2640":1589,"1f938-200d-2642":1588,"1f938":1587,"1f939-200d-2640":1601,"1f939-200d-2642":1600,"1f939":1599,"1f93a":1559,"1f93c-200d-2640":1592,"1f93c-200d-2642":1591,"1f93c":1590,"1f93d-200d-2640":1595,"1f93d-200d-2642":1594,"1f93d":1593,"1f93e-200d-2640":1598,"1f93e-200d-2642":1597,"1f93e":1596,"1f93f":51037,"1f940":2626,"1f941":61142,"1f942":3760,"1f943":3761,"1f944":3770,"1f945":51033,"1f947":51012,"1f948":51013,"1f949":51014,"1f94a":51031,"1f94b":51032,"1f94c":51041,"1f94d":51028,"1f94e":51017,"1f94f":51023,"1f950":3679,"1f951":3663,"1f952":3670,"1f953":3690,"1f954":3665,"1f955":3666,"1f956":3680,"1f957":3707,"1f958":3703,"1f959":3699,"1f95a":3701,"1f95b":3749,"1f95c":3676,"1f95d":3659,"1f95e":3684,"1f95f":3726,"1f960":3727,"1f961":3728,"1f962":3767,"1f963":3706,"1f964":3762,"1f965":3662,"1f966":3672,"1f967":3742,"1f968":3682,"1f969":3689,"1f96a":3695,"1f96b":3711,"1f96c":3671,"1f96d":3651,"1f96e":3724,"1f96f":3683,"1f970":114,"1f971":188,"1f972":122,"1f973":160,"1f974":156,"1f975":154,"1f976":155,"1f977":1467,"1f978":161,"1f97a":173,"1f97b":61086,"1f97c":61075,"1f97d":61074,"1f97e":61100,"1f97f":61101,"1f980":3729,"1f981":2519,"1f982":2616,"1f983":2568,"1f984":2525,"1f985":2577,"1f986":2578,"1f987":2557,"1f988":2602,"1f989":2580,"1f98a":2514,"1f98b":2606,"1f98c":2527,"1f98d":2506,"1f98e":2589,"1f98f":2546,"1f990":3731,"1f991":3732,"1f992":2543,"1f993":2526,"1f994":2556,"1f995":2593,"1f996":2594,"1f997":2612,"1f998":2565,"1f999":2542,"1f99a":2584,"1f99b":2547,"1f99c":2585,"1f99d":2515,"1f99e":3730,"1f99f":2617,"1f9a0":2620,"1f9a1":2566,"1f9a2":2579,"1f9a3":2545,"1f9a4":2581,"1f9a5":2562,"1f9a6":2563,"1f9a7":2507,"1f9a8":2564,"1f9a9":2583,"1f9aa":3733,"1f9ab":2555,"1f9ac":2528,"1f9ad":2598,"1f9ae":2510,"1f9af":61273,"1f9b4":1349,"1f9b5":1340,"1f9b6":1341,"1f9b7":1348,"1f9b8-200d-2640":1495,"1f9b8-200d-2642":1494,"1f9b8":1493,"1f9b9-200d-2640":1498,"1f9b9-200d-2642":1497,"1f9b9":1496,"1f9ba":61076,"1f9bb":1343,"1f9bc":4871,"1f9bd":4870,"1f9be":1338,"1f9bf":1339,"1f9c0":3686,"1f9c1":3741,"1f9c2":3710,"1f9c3":3764,"1f9c4":3673,"1f9c5":3674,"1f9c6":3700,"1f9c7":3685,"1f9c8":3709,"1f9c9":3765,"1f9ca":3766,"1f9cb":3763,"1f9cd-200d-2640":1531,"1f9cd-200d-2642":1530,"1f9cd":1529,"1f9ce-200d-2640":1534,"1f9ce-200d-2642":1533,"1f9ce":1532,"1f9cf-200d-2640":1400,"1f9cf-200d-2642":1399,"1f9cf":1398,"1f9d0":164,"1f9d1-200d-1f33e":1422,"1f9d1-200d-1f373":1425,"1f9d1-200d-1f37c":1488,"1f9d1-200d-1f384":1492,"1f9d1-200d-1f393":1413,"1f9d1-200d-1f3a4":1443,"1f9d1-200d-1f3a8":1446,"1f9d1-200d-1f3eb":1416,"1f9d1-200d-1f3ed":1431,"1f9d1-200d-1f4bb":1440,"1f9d1-200d-1f4bc":1434,"1f9d1-200d-1f527":1428,"1f9d1-200d-1f52c":1437,"1f9d1-200d-1f680":1452,"1f9d1-200d-1f692":1455,"1f9d1-200d-1f91d-200d-1f9d1":1607,"1f9d1-200d-1f9af":1535,"1f9d1-200d-1f9b0":1368,"1f9d1-200d-1f9b1":1370,"1f9d1-200d-1f9b2":1374,"1f9d1-200d-1f9b3":1372,"1f9d1-200d-1f9bc":1538,"1f9d1-200d-1f9bd":1541,"1f9d1-200d-2695":1410,"1f9d1-200d-2696":1419,"1f9d1-200d-2708":1449,"1f9d1":1358,"1f9d2":1355,"1f9d3":1377,"1f9d4":1361,"1f9d5":1477,"1f9d6-200d-2640":1555,"1f9d6-200d-2642":1554,"1f9d6":1553,"1f9d7-200d-2640":1558,"1f9d7-200d-2642":1557,"1f9d7":1556,"1f9d8-200d-2640":1604,"1f9d8-200d-2642":1603,"1f9d8":1602,"1f9d9-200d-2640":1501,"1f9d9-200d-2642":1500,"1f9d9":1499,"1f9da-200d-2640":1504,"1f9da-200d-2642":1503,"1f9da":1502,"1f9db-200d-2640":1507,"1f9db-200d-2642":1506,"1f9db":1505,"1f9dc-200d-2640":1510,"1f9dc-200d-2642":1509,"1f9dc":1508,"1f9dd-200d-2640":1513,"1f9dd-200d-2642":1512,"1f9dd":1511,"1f9de-200d-2640":1516,"1f9de-200d-2642":1515,"1f9de":1514,"1f9df-200d-2640":1519,"1f9df-200d-2642":1518,"1f9df":1517,"1f9e0":1345,"1f9e1":1130,"1f9e2":61110,"1f9e3":61080,"1f9e4":61081,"1f9e5":61082,"1f9e6":61083,"1f9e7":51003,"1f9e8":5992,"1f9e9":51053,"1f9ea":61281,"1f9eb":61282,"1f9ec":61283,"1f9ed":4779,"1f9ee":61162,"1f9ef":61314,"1f9f0":61277,"1f9f1":4792,"1f9f2":61278,"1f9f3":4909,"1f9f4":61305,"1f9f5":51068,"1f9f6":51070,"1f9f7":61306,"1f9f8":51054,"1f9f9":61307,"1f9fa":61308,"1f9fb":61309,"1f9fc":61311,"1f9fd":61313,"1f9fe":61204,"1f9ff":51048,"1fa70":61104,"1fa71":61087,"1fa72":61088,"1fa73":61089,"1fa74":61097,"1fa78":61288,"1fa79":61290,"1fa7a":61291,"1fa80":51043,"1fa81":51044,"1fa82":4899,"1fa83":61263,"1fa84":51047,"1fa85":51055,"1fa86":51056,"1fa90":4957,"1fa91":61298,"1fa92":61304,"1fa93":61256,"1fa94":61178,"1fa95":61141,"1fa96":61111,"1fa97":61136,"1fa98":61143,"1fa99":61197,"1fa9a":61266,"1fa9b":61268,"1fa9c":61279,"1fa9d":61276,"1fa9e":61294,"1fa9f":61295,"1faa0":61300,"1faa1":51069,"1faa2":51071,"1faa3":61310,"1faa4":61303,"1faa5":61312,"1faa6":61318,"1faa7":61321,"1faa8":4793,"1fab0":2618,"1fab1":2619,"1fab2":2610,"1fab3":2613,"1fab4":2632,"1fab5":4794,"1fab6":2582,"1fac0":1346,"1fac1":1347,"1fac2":1648,"1fad0":3658,"1fad1":3669,"1fad2":3661,"1fad3":3681,"1fad4":3698,"1fad5":3705,"1fad6":3751,"203c":62747,"21a9":62679,"21aa":62680,"231a":4912,"231b":4910,"23cf":62732,"23e9":62719,"23ea":62723,"23eb":62726,"23ec":62728,"23ed":62720,"23ee":62724,"23ef":62721,"23f0":4913,"23f1":4914,"23f2":4915,"23f3":4911,"23f8":62729,"23f9":62730,"23fa":62731,"24c2":62803,"25aa":62851,"25ab":62852,"25b6":62718,"25c0":62722,"25fb":62848,"25fc":62847,"25fd":62850,"25fe":62849,"260e":61146,"261d":1321,"262a":62698,"262e":62699,"262f":62695,"263a":119,"264a":62704,"264b":62705,"264c":62706,"264d":62707,"264e":62708,"264f":62709,"265f":51061,"267b":62757,"267e":62746,"267f":62646,"269b":62691,"269c":62758,"26a0":62656,"26a1":4980,"26a7":62741,"26aa":62837,"26ab":62836,"26b0":61317,"26b1":61319,"26bd":51015,"26be":51016,"26c4":4983,"26c5":4963,"26c8":4964,"26ce":62714,"26cf":61257,"26d1":61112,"26d3":61275,"26d4":62658,"26e9":4820,"26ea":4816,"26f0":4781,"26f1":4979,"26f2":4822,"26f3":51034,"26f4":4892,"26f5":4888,"26f7":1561,"26f8":51035,"26f9-200d-2640":1577,"26f9-200d-2642":1576,"26f9":1575,"26fa":4823,"26fd":4881,"270a":1324,"270b":1306,"270c":1311,"270d":1334,"270f":61219,"271d":62696,"274c":62766,"274e":62767,"27a1":62671,"27b0":62768,"27bf":62769,"2b05":62675,"2b06":62669,"2b07":62673,"2b1b":62845,"2b1c":62846,"2b50":4958,"2b55":62762,"303d":62770,"1f385-1f3fb":0,"1f385-1f3fc":0,"1f385-1f3fd":0,"1f385-1f3fe":0,"1f385-1f3ff":0,"1f3c2-1f3fb":0,"1f3c2-1f3fc":0,"1f3c2-1f3fd":0,"1f3c2-1f3fe":0,"1f3c2-1f3ff":0,"1f3c3-1f3fb-200d-2640":0,"1f3c3-1f3fc-200d-2640":0,"1f3c3-1f3fd-200d-2640":0,"1f3c3-1f3fe-200d-2640":0,"1f3c3-1f3ff-200d-2640":0,"1f3c3-1f3fb-200d-2642":0,"1f3c3-1f3fc-200d-2642":0,"1f3c3-1f3fd-200d-2642":0,"1f3c3-1f3fe-200d-2642":0,"1f3c3-1f3ff-200d-2642":0,"1f3c3-1f3fb":0,"1f3c3-1f3fc":0,"1f3c3-1f3fd":0,"1f3c3-1f3fe":0,"1f3c3-1f3ff":0,"1f3c4-1f3fb-200d-2640":0,"1f3c4-1f3fc-200d-2640":0,"1f3c4-1f3fd-200d-2640":0,"1f3c4-1f3fe-200d-2640":0,"1f3c4-1f3ff-200d-2640":0,"1f3c4-1f3fb-200d-2642":0,"1f3c4-1f3fc-200d-2642":0,"1f3c4-1f3fd-200d-2642":0,"1f3c4-1f3fe-200d-2642":0,"1f3c4-1f3ff-200d-2642":0,"1f3c4-1f3fb":0,"1f3c4-1f3fc":0,"1f3c4-1f3fd":0,"1f3c4-1f3fe":0,"1f3c4-1f3ff":0,"1f3c7-1f3fb":0,"1f3c7-1f3fc":0,"1f3c7-1f3fd":0,"1f3c7-1f3fe":0,"1f3c7-1f3ff":0,"1f3ca-1f3fb-200d-2640":0,"1f3ca-1f3fc-200d-2640":0,"1f3ca-1f3fd-200d-2640":0,"1f3ca-1f3fe-200d-2640":0,"1f3ca-1f3ff-200d-2640":0,"1f3ca-1f3fb-200d-2642":0,"1f3ca-1f3fc-200d-2642":0,"1f3ca-1f3fd-200d-2642":0,"1f3ca-1f3fe-200d-2642":0,"1f3ca-1f3ff-200d-2642":0,"1f3ca-1f3fb":0,"1f3ca-1f3fc":0,"1f3ca-1f3fd":0,"1f3ca-1f3fe":0,"1f3ca-1f3ff":0,"1f3cb-1f3fb-200d-2640":0,"1f3cb-1f3fc-200d-2640":0,"1f3cb-1f3fd-200d-2640":0,"1f3cb-1f3fe-200d-2640":0,"1f3cb-1f3ff-200d-2640":0,"1f3cb-1f3fb-200d-2642":0,"1f3cb-1f3fc-200d-2642":0,"1f3cb-1f3fd-200d-2642":0,"1f3cb-1f3fe-200d-2642":0,"1f3cb-1f3ff-200d-2642":0,"1f3cb-1f3fb":0,"1f3cb-1f3fc":0,"1f3cb-1f3fd":0,"1f3cb-1f3fe":0,"1f3cb-1f3ff":0,"1f3cc-1f3fb-200d-2640":0,"1f3cc-1f3fc-200d-2640":0,"1f3cc-1f3fd-200d-2640":0,"1f3cc-1f3fe-200d-2640":0,"1f3cc-1f3ff-200d-2640":0,"1f3cc-1f3fb-200d-2642":0,"1f3cc-1f3fc-200d-2642":0,"1f3cc-1f3fd-200d-2642":0,"1f3cc-1f3fe-200d-2642":0,"1f3cc-1f3ff-200d-2642":0,"1f3cc-1f3fb":0,"1f3cc-1f3fc":0,"1f3cc-1f3fd":0,"1f3cc-1f3fe":0,"1f3cc-1f3ff":0,"1f442-1f3fb":0,"1f442-1f3fc":0,"1f442-1f3fd":0,"1f442-1f3fe":0,"1f442-1f3ff":0,"1f443-1f3fb":0,"1f443-1f3fc":0,"1f443-1f3fd":0,"1f443-1f3fe":0,"1f443-1f3ff":0,"1f446-1f3fb":0,"1f446-1f3fc":0,"1f446-1f3fd":0,"1f446-1f3fe":0,"1f446-1f3ff":0,"1f447-1f3fb":0,"1f447-1f3fc":0,"1f447-1f3fd":0,"1f447-1f3fe":0,"1f447-1f3ff":0,"1f448-1f3fb":0,"1f448-1f3fc":0,"1f448-1f3fd":0,"1f448-1f3fe":0,"1f448-1f3ff":0,"1f449-1f3fb":0,"1f449-1f3fc":0,"1f449-1f3fd":0,"1f449-1f3fe":0,"1f449-1f3ff":0,"1f44a-1f3fb":0,"1f44a-1f3fc":0,"1f44a-1f3fd":0,"1f44a-1f3fe":0,"1f44a-1f3ff":0,"1f44b-1f3fb":0,"1f44b-1f3fc":0,"1f44b-1f3fd":0,"1f44b-1f3fe":0,"1f44b-1f3ff":0,"1f44c-1f3fb":0,"1f44c-1f3fc":0,"1f44c-1f3fd":0,"1f44c-1f3fe":0,"1f44c-1f3ff":0,"1f44d-1f3fb":0,"1f44d-1f3fc":0,"1f44d-1f3fd":0,"1f44d-1f3fe":0,"1f44d-1f3ff":0,"1f44e-1f3fb":0,"1f44e-1f3fc":0,"1f44e-1f3fd":0,"1f44e-1f3fe":0,"1f44e-1f3ff":0,"1f44f-1f3fb":0,"1f44f-1f3fc":0,"1f44f-1f3fd":0,"1f44f-1f3fe":0,"1f44f-1f3ff":0,"1f450-1f3fb":0,"1f450-1f3fc":0,"1f450-1f3fd":0,"1f450-1f3fe":0,"1f450-1f3ff":0,"1f466-1f3fb":0,"1f466-1f3fc":0,"1f466-1f3fd":0,"1f466-1f3fe":0,"1f466-1f3ff":0,"1f467-1f3fb":0,"1f467-1f3fc":0,"1f467-1f3fd":0,"1f467-1f3fe":0,"1f467-1f3ff":0,"1f468-1f3fb-200d-1f33e":0,"1f468-1f3fc-200d-1f33e":0,"1f468-1f3fd-200d-1f33e":0,"1f468-1f3fe-200d-1f33e":0,"1f468-1f3ff-200d-1f33e":0,"1f468-1f3fb-200d-1f373":0,"1f468-1f3fc-200d-1f373":0,"1f468-1f3fd-200d-1f373":0,"1f468-1f3fe-200d-1f373":0,"1f468-1f3ff-200d-1f373":0,"1f468-1f3fb-200d-1f37c":0,"1f468-1f3fc-200d-1f37c":0,"1f468-1f3fd-200d-1f37c":0,"1f468-1f3fe-200d-1f37c":0,"1f468-1f3ff-200d-1f37c":0,"1f468-1f3fb-200d-1f393":0,"1f468-1f3fc-200d-1f393":0,"1f468-1f3fd-200d-1f393":0,"1f468-1f3fe-200d-1f393":0,"1f468-1f3ff-200d-1f393":0,"1f468-1f3fb-200d-1f3a4":0,"1f468-1f3fc-200d-1f3a4":0,"1f468-1f3fd-200d-1f3a4":0,"1f468-1f3fe-200d-1f3a4":0,"1f468-1f3ff-200d-1f3a4":0,"1f468-1f3fb-200d-1f3a8":0,"1f468-1f3fc-200d-1f3a8":0,"1f468-1f3fd-200d-1f3a8":0,"1f468-1f3fe-200d-1f3a8":0,"1f468-1f3ff-200d-1f3a8":0,"1f468-1f3fb-200d-1f3eb":0,"1f468-1f3fc-200d-1f3eb":0,"1f468-1f3fd-200d-1f3eb":0,"1f468-1f3fe-200d-1f3eb":0,"1f468-1f3ff-200d-1f3eb":0,"1f468-1f3fb-200d-1f3ed":0,"1f468-1f3fc-200d-1f3ed":0,"1f468-1f3fd-200d-1f3ed":0,"1f468-1f3fe-200d-1f3ed":0,"1f468-1f3ff-200d-1f3ed":0,"1f468-1f3fb-200d-1f4bb":0,"1f468-1f3fc-200d-1f4bb":0,"1f468-1f3fd-200d-1f4bb":0,"1f468-1f3fe-200d-1f4bb":0,"1f468-1f3ff-200d-1f4bb":0,"1f468-1f3fb-200d-1f4bc":0,"1f468-1f3fc-200d-1f4bc":0,"1f468-1f3fd-200d-1f4bc":0,"1f468-1f3fe-200d-1f4bc":0,"1f468-1f3ff-200d-1f4bc":0,"1f468-1f3fb-200d-1f527":0,"1f468-1f3fc-200d-1f527":0,"1f468-1f3fd-200d-1f527":0,"1f468-1f3fe-200d-1f527":0,"1f468-1f3ff-200d-1f527":0,"1f468-1f3fb-200d-1f52c":0,"1f468-1f3fc-200d-1f52c":0,"1f468-1f3fd-200d-1f52c":0,"1f468-1f3fe-200d-1f52c":0,"1f468-1f3ff-200d-1f52c":0,"1f468-1f3fb-200d-1f680":0,"1f468-1f3fc-200d-1f680":0,"1f468-1f3fd-200d-1f680":0,"1f468-1f3fe-200d-1f680":0,"1f468-1f3ff-200d-1f680":0,"1f468-1f3fb-200d-1f692":0,"1f468-1f3fc-200d-1f692":0,"1f468-1f3fd-200d-1f692":0,"1f468-1f3fe-200d-1f692":0,"1f468-1f3ff-200d-1f692":0,"1f468-1f3fb-200d-1f9af":0,"1f468-1f3fc-200d-1f9af":0,"1f468-1f3fd-200d-1f9af":0,"1f468-1f3fe-200d-1f9af":0,"1f468-1f3ff-200d-1f9af":0,"1f468-1f3fb-200d-1f9b0":0,"1f468-1f3fc-200d-1f9b0":0,"1f468-1f3fd-200d-1f9b0":0,"1f468-1f3fe-200d-1f9b0":0,"1f468-1f3ff-200d-1f9b0":0,"1f468-1f3fb-200d-1f9b1":0,"1f468-1f3fc-200d-1f9b1":0,"1f468-1f3fd-200d-1f9b1":0,"1f468-1f3fe-200d-1f9b1":0,"1f468-1f3ff-200d-1f9b1":0,"1f468-1f3fb-200d-1f9b2":0,"1f468-1f3fc-200d-1f9b2":0,"1f468-1f3fd-200d-1f9b2":0,"1f468-1f3fe-200d-1f9b2":0,"1f468-1f3ff-200d-1f9b2":0,"1f468-1f3fb-200d-1f9b3":0,"1f468-1f3fc-200d-1f9b3":0,"1f468-1f3fd-200d-1f9b3":0,"1f468-1f3fe-200d-1f9b3":0,"1f468-1f3ff-200d-1f9b3":0,"1f468-1f3fb-200d-1f9bc":0,"1f468-1f3fc-200d-1f9bc":0,"1f468-1f3fd-200d-1f9bc":0,"1f468-1f3fe-200d-1f9bc":0,"1f468-1f3ff-200d-1f9bc":0,"1f468-1f3fb-200d-1f9bd":0,"1f468-1f3fc-200d-1f9bd":0,"1f468-1f3fd-200d-1f9bd":0,"1f468-1f3fe-200d-1f9bd":0,"1f468-1f3ff-200d-1f9bd":0,"1f468-1f3fb-200d-2695":0,"1f468-1f3fc-200d-2695":0,"1f468-1f3fd-200d-2695":0,"1f468-1f3fe-200d-2695":0,"1f468-1f3ff-200d-2695":0,"1f468-1f3fb-200d-2696":0,"1f468-1f3fc-200d-2696":0,"1f468-1f3fd-200d-2696":0,"1f468-1f3fe-200d-2696":0,"1f468-1f3ff-200d-2696":0,"1f468-1f3fb-200d-2708":0,"1f468-1f3fc-200d-2708":0,"1f468-1f3fd-200d-2708":0,"1f468-1f3fe-200d-2708":0,"1f468-1f3ff-200d-2708":0,"1f468-1f3fb":0,"1f468-1f3fc":0,"1f468-1f3fd":0,"1f468-1f3fe":0,"1f468-1f3ff":0,"1f469-1f3fb-200d-1f33e":0,"1f469-1f3fc-200d-1f33e":0,"1f469-1f3fd-200d-1f33e":0,"1f469-1f3fe-200d-1f33e":0,"1f469-1f3ff-200d-1f33e":0,"1f469-1f3fb-200d-1f373":0,"1f469-1f3fc-200d-1f373":0,"1f469-1f3fd-200d-1f373":0,"1f469-1f3fe-200d-1f373":0,"1f469-1f3ff-200d-1f373":0,"1f469-1f3fb-200d-1f37c":0,"1f469-1f3fc-200d-1f37c":0,"1f469-1f3fd-200d-1f37c":0,"1f469-1f3fe-200d-1f37c":0,"1f469-1f3ff-200d-1f37c":0,"1f469-1f3fb-200d-1f393":0,"1f469-1f3fc-200d-1f393":0,"1f469-1f3fd-200d-1f393":0,"1f469-1f3fe-200d-1f393":0,"1f469-1f3ff-200d-1f393":0,"1f469-1f3fb-200d-1f3a4":0,"1f469-1f3fc-200d-1f3a4":0,"1f469-1f3fd-200d-1f3a4":0,"1f469-1f3fe-200d-1f3a4":0,"1f469-1f3ff-200d-1f3a4":0,"1f469-1f3fb-200d-1f3a8":0,"1f469-1f3fc-200d-1f3a8":0,"1f469-1f3fd-200d-1f3a8":0,"1f469-1f3fe-200d-1f3a8":0,"1f469-1f3ff-200d-1f3a8":0,"1f469-1f3fb-200d-1f3eb":0,"1f469-1f3fc-200d-1f3eb":0,"1f469-1f3fd-200d-1f3eb":0,"1f469-1f3fe-200d-1f3eb":0,"1f469-1f3ff-200d-1f3eb":0,"1f469-1f3fb-200d-1f3ed":0,"1f469-1f3fc-200d-1f3ed":0,"1f469-1f3fd-200d-1f3ed":0,"1f469-1f3fe-200d-1f3ed":0,"1f469-1f3ff-200d-1f3ed":0,"1f469-1f3fb-200d-1f4bb":0,"1f469-1f3fc-200d-1f4bb":0,"1f469-1f3fd-200d-1f4bb":0,"1f469-1f3fe-200d-1f4bb":0,"1f469-1f3ff-200d-1f4bb":0,"1f469-1f3fb-200d-1f4bc":0,"1f469-1f3fc-200d-1f4bc":0,"1f469-1f3fd-200d-1f4bc":0,"1f469-1f3fe-200d-1f4bc":0,"1f469-1f3ff-200d-1f4bc":0,"1f469-1f3fb-200d-1f527":0,"1f469-1f3fc-200d-1f527":0,"1f469-1f3fd-200d-1f527":0,"1f469-1f3fe-200d-1f527":0,"1f469-1f3ff-200d-1f527":0,"1f469-1f3fb-200d-1f52c":0,"1f469-1f3fc-200d-1f52c":0,"1f469-1f3fd-200d-1f52c":0,"1f469-1f3fe-200d-1f52c":0,"1f469-1f3ff-200d-1f52c":0,"1f469-1f3fb-200d-1f680":0,"1f469-1f3fc-200d-1f680":0,"1f469-1f3fd-200d-1f680":0,"1f469-1f3fe-200d-1f680":0,"1f469-1f3ff-200d-1f680":0,"1f469-1f3fb-200d-1f692":0,"1f469-1f3fc-200d-1f692":0,"1f469-1f3fd-200d-1f692":0,"1f469-1f3fe-200d-1f692":0,"1f469-1f3ff-200d-1f692":0,"1f469-1f3fb-200d-1f9af":0,"1f469-1f3fc-200d-1f9af":0,"1f469-1f3fd-200d-1f9af":0,"1f469-1f3fe-200d-1f9af":0,"1f469-1f3ff-200d-1f9af":0,"1f469-1f3fb-200d-1f9b0":0,"1f469-1f3fc-200d-1f9b0":0,"1f469-1f3fd-200d-1f9b0":0,"1f469-1f3fe-200d-1f9b0":0,"1f469-1f3ff-200d-1f9b0":0,"1f469-1f3fb-200d-1f9b1":0,"1f469-1f3fc-200d-1f9b1":0,"1f469-1f3fd-200d-1f9b1":0,"1f469-1f3fe-200d-1f9b1":0,"1f469-1f3ff-200d-1f9b1":0,"1f469-1f3fb-200d-1f9b2":0,"1f469-1f3fc-200d-1f9b2":0,"1f469-1f3fd-200d-1f9b2":0,"1f469-1f3fe-200d-1f9b2":0,"1f469-1f3ff-200d-1f9b2":0,"1f469-1f3fb-200d-1f9b3":0,"1f469-1f3fc-200d-1f9b3":0,"1f469-1f3fd-200d-1f9b3":0,"1f469-1f3fe-200d-1f9b3":0,"1f469-1f3ff-200d-1f9b3":0,"1f469-1f3fb-200d-1f9bc":0,"1f469-1f3fc-200d-1f9bc":0,"1f469-1f3fd-200d-1f9bc":0,"1f469-1f3fe-200d-1f9bc":0,"1f469-1f3ff-200d-1f9bc":0,"1f469-1f3fb-200d-1f9bd":0,"1f469-1f3fc-200d-1f9bd":0,"1f469-1f3fd-200d-1f9bd":0,"1f469-1f3fe-200d-1f9bd":0,"1f469-1f3ff-200d-1f9bd":0,"1f469-1f3fb-200d-2695":0,"1f469-1f3fc-200d-2695":0,"1f469-1f3fd-200d-2695":0,"1f469-1f3fe-200d-2695":0,"1f469-1f3ff-200d-2695":0,"1f469-1f3fb-200d-2696":0,"1f469-1f3fc-200d-2696":0,"1f469-1f3fd-200d-2696":0,"1f469-1f3fe-200d-2696":0,"1f469-1f3ff-200d-2696":0,"1f469-1f3fb-200d-2708":0,"1f469-1f3fc-200d-2708":0,"1f469-1f3fd-200d-2708":0,"1f469-1f3fe-200d-2708":0,"1f469-1f3ff-200d-2708":0,"1f469-1f3fb":0,"1f469-1f3fc":0,"1f469-1f3fd":0,"1f469-1f3fe":0,"1f469-1f3ff":0,"1f46b-1f3fb":0,"1f46b-1f3fc":0,"1f46b-1f3fd":0,"1f46b-1f3fe":0,"1f46b-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46c-1f3fb":0,"1f46c-1f3fc":0,"1f46c-1f3fd":0,"1f46c-1f3fe":0,"1f46c-1f3ff":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46d-1f3fb":0,"1f46d-1f3fc":0,"1f46d-1f3fd":0,"1f46d-1f3fe":0,"1f46d-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe":0,"1f46e-1f3fb-200d-2640":0,"1f46e-1f3fc-200d-2640":0,"1f46e-1f3fd-200d-2640":0,"1f46e-1f3fe-200d-2640":0,"1f46e-1f3ff-200d-2640":0,"1f46e-1f3fb-200d-2642":0,"1f46e-1f3fc-200d-2642":0,"1f46e-1f3fd-200d-2642":0,"1f46e-1f3fe-200d-2642":0,"1f46e-1f3ff-200d-2642":0,"1f46e-1f3fb":0,"1f46e-1f3fc":0,"1f46e-1f3fd":0,"1f46e-1f3fe":0,"1f46e-1f3ff":0,"1f470-1f3fb-200d-2640":0,"1f470-1f3fc-200d-2640":0,"1f470-1f3fd-200d-2640":0,"1f470-1f3fe-200d-2640":0,"1f470-1f3ff-200d-2640":0,"1f470-1f3fb-200d-2642":0,"1f470-1f3fc-200d-2642":0,"1f470-1f3fd-200d-2642":0,"1f470-1f3fe-200d-2642":0,"1f470-1f3ff-200d-2642":0,"1f470-1f3fb":0,"1f470-1f3fc":0,"1f470-1f3fd":0,"1f470-1f3fe":0,"1f470-1f3ff":0,"1f471-1f3fb-200d-2640":0,"1f471-1f3fc-200d-2640":0,"1f471-1f3fd-200d-2640":0,"1f471-1f3fe-200d-2640":0,"1f471-1f3ff-200d-2640":0,"1f471-1f3fb-200d-2642":0,"1f471-1f3fc-200d-2642":0,"1f471-1f3fd-200d-2642":0,"1f471-1f3fe-200d-2642":0,"1f471-1f3ff-200d-2642":0,"1f471-1f3fb":0,"1f471-1f3fc":0,"1f471-1f3fd":0,"1f471-1f3fe":0,"1f471-1f3ff":0,"1f472-1f3fb":0,"1f472-1f3fc":0,"1f472-1f3fd":0,"1f472-1f3fe":0,"1f472-1f3ff":0,"1f473-1f3fb-200d-2640":0,"1f473-1f3fc-200d-2640":0,"1f473-1f3fd-200d-2640":0,"1f473-1f3fe-200d-2640":0,"1f473-1f3ff-200d-2640":0,"1f473-1f3fb-200d-2642":0,"1f473-1f3fc-200d-2642":0,"1f473-1f3fd-200d-2642":0,"1f473-1f3fe-200d-2642":0,"1f473-1f3ff-200d-2642":0,"1f473-1f3fb":0,"1f473-1f3fc":0,"1f473-1f3fd":0,"1f473-1f3fe":0,"1f473-1f3ff":0,"1f474-1f3fb":0,"1f474-1f3fc":0,"1f474-1f3fd":0,"1f474-1f3fe":0,"1f474-1f3ff":0,"1f475-1f3fb":0,"1f475-1f3fc":0,"1f475-1f3fd":0,"1f475-1f3fe":0,"1f475-1f3ff":0,"1f476-1f3fb":0,"1f476-1f3fc":0,"1f476-1f3fd":0,"1f476-1f3fe":0,"1f476-1f3ff":0,"1f477-1f3fb-200d-2640":0,"1f477-1f3fc-200d-2640":0,"1f477-1f3fd-200d-2640":0,"1f477-1f3fe-200d-2640":0,"1f477-1f3ff-200d-2640":0,"1f477-1f3fb-200d-2642":0,"1f477-1f3fc-200d-2642":0,"1f477-1f3fd-200d-2642":0,"1f477-1f3fe-200d-2642":0,"1f477-1f3ff-200d-2642":0,"1f477-1f3fb":0,"1f477-1f3fc":0,"1f477-1f3fd":0,"1f477-1f3fe":0,"1f477-1f3ff":0,"1f478-1f3fb":0,"1f478-1f3fc":0,"1f478-1f3fd":0,"1f478-1f3fe":0,"1f478-1f3ff":0,"1f47c-1f3fb":0,"1f47c-1f3fc":0,"1f47c-1f3fd":0,"1f47c-1f3fe":0,"1f47c-1f3ff":0,"1f481-1f3fb-200d-2640":0,"1f481-1f3fc-200d-2640":0,"1f481-1f3fd-200d-2640":0,"1f481-1f3fe-200d-2640":0,"1f481-1f3ff-200d-2640":0,"1f481-1f3fb-200d-2642":0,"1f481-1f3fc-200d-2642":0,"1f481-1f3fd-200d-2642":0,"1f481-1f3fe-200d-2642":0,"1f481-1f3ff-200d-2642":0,"1f481-1f3fb":0,"1f481-1f3fc":0,"1f481-1f3fd":0,"1f481-1f3fe":0,"1f481-1f3ff":0,"1f482-1f3fb-200d-2640":0,"1f482-1f3fc-200d-2640":0,"1f482-1f3fd-200d-2640":0,"1f482-1f3fe-200d-2640":0,"1f482-1f3ff-200d-2640":0,"1f482-1f3fb-200d-2642":0,"1f482-1f3fc-200d-2642":0,"1f482-1f3fd-200d-2642":0,"1f482-1f3fe-200d-2642":0,"1f482-1f3ff-200d-2642":0,"1f482-1f3fb":0,"1f482-1f3fc":0,"1f482-1f3fd":0,"1f482-1f3fe":0,"1f482-1f3ff":0,"1f483-1f3fb":0,"1f483-1f3fc":0,"1f483-1f3fd":0,"1f483-1f3fe":0,"1f483-1f3ff":0,"1f485-1f3fb":0,"1f485-1f3fc":0,"1f485-1f3fd":0,"1f485-1f3fe":0,"1f485-1f3ff":0,"1f486-1f3fb-200d-2640":0,"1f486-1f3fc-200d-2640":0,"1f486-1f3fd-200d-2640":0,"1f486-1f3fe-200d-2640":0,"1f486-1f3ff-200d-2640":0,"1f486-1f3fb-200d-2642":0,"1f486-1f3fc-200d-2642":0,"1f486-1f3fd-200d-2642":0,"1f486-1f3fe-200d-2642":0,"1f486-1f3ff-200d-2642":0,"1f486-1f3fb":0,"1f486-1f3fc":0,"1f486-1f3fd":0,"1f486-1f3fe":0,"1f486-1f3ff":0,"1f487-1f3fb-200d-2640":0,"1f487-1f3fc-200d-2640":0,"1f487-1f3fd-200d-2640":0,"1f487-1f3fe-200d-2640":0,"1f487-1f3ff-200d-2640":0,"1f487-1f3fb-200d-2642":0,"1f487-1f3fc-200d-2642":0,"1f487-1f3fd-200d-2642":0,"1f487-1f3fe-200d-2642":0,"1f487-1f3ff-200d-2642":0,"1f487-1f3fb":0,"1f487-1f3fc":0,"1f487-1f3fd":0,"1f487-1f3fe":0,"1f487-1f3ff":0,"1f4aa-1f3fb":0,"1f4aa-1f3fc":0,"1f4aa-1f3fd":0,"1f4aa-1f3fe":0,"1f4aa-1f3ff":0,"1f574-1f3fb":0,"1f574-1f3fc":0,"1f574-1f3fd":0,"1f574-1f3fe":0,"1f574-1f3ff":0,"1f575-1f3fb-200d-2640":0,"1f575-1f3fc-200d-2640":0,"1f575-1f3fd-200d-2640":0,"1f575-1f3fe-200d-2640":0,"1f575-1f3ff-200d-2640":0,"1f575-1f3fb-200d-2642":0,"1f575-1f3fc-200d-2642":0,"1f575-1f3fd-200d-2642":0,"1f575-1f3fe-200d-2642":0,"1f575-1f3ff-200d-2642":0,"1f575-1f3fb":0,"1f575-1f3fc":0,"1f575-1f3fd":0,"1f575-1f3fe":0,"1f575-1f3ff":0,"1f57a-1f3fb":0,"1f57a-1f3fc":0,"1f57a-1f3fd":0,"1f57a-1f3fe":0,"1f57a-1f3ff":0,"1f590-1f3fb":0,"1f590-1f3fc":0,"1f590-1f3fd":0,"1f590-1f3fe":0,"1f590-1f3ff":0,"1f595-1f3fb":0,"1f595-1f3fc":0,"1f595-1f3fd":0,"1f595-1f3fe":0,"1f595-1f3ff":0,"1f596-1f3fb":0,"1f596-1f3fc":0,"1f596-1f3fd":0,"1f596-1f3fe":0,"1f596-1f3ff":0,"1f645-1f3fb-200d-2640":0,"1f645-1f3fc-200d-2640":0,"1f645-1f3fd-200d-2640":0,"1f645-1f3fe-200d-2640":0,"1f645-1f3ff-200d-2640":0,"1f645-1f3fb-200d-2642":0,"1f645-1f3fc-200d-2642":0,"1f645-1f3fd-200d-2642":0,"1f645-1f3fe-200d-2642":0,"1f645-1f3ff-200d-2642":0,"1f645-1f3fb":0,"1f645-1f3fc":0,"1f645-1f3fd":0,"1f645-1f3fe":0,"1f645-1f3ff":0,"1f646-1f3fb-200d-2640":0,"1f646-1f3fc-200d-2640":0,"1f646-1f3fd-200d-2640":0,"1f646-1f3fe-200d-2640":0,"1f646-1f3ff-200d-2640":0,"1f646-1f3fb-200d-2642":0,"1f646-1f3fc-200d-2642":0,"1f646-1f3fd-200d-2642":0,"1f646-1f3fe-200d-2642":0,"1f646-1f3ff-200d-2642":0,"1f646-1f3fb":0,"1f646-1f3fc":0,"1f646-1f3fd":0,"1f646-1f3fe":0,"1f646-1f3ff":0,"1f647-1f3fb-200d-2640":0,"1f647-1f3fc-200d-2640":0,"1f647-1f3fd-200d-2640":0,"1f647-1f3fe-200d-2640":0,"1f647-1f3ff-200d-2640":0,"1f647-1f3fb-200d-2642":0,"1f647-1f3fc-200d-2642":0,"1f647-1f3fd-200d-2642":0,"1f647-1f3fe-200d-2642":0,"1f647-1f3ff-200d-2642":0,"1f647-1f3fb":0,"1f647-1f3fc":0,"1f647-1f3fd":0,"1f647-1f3fe":0,"1f647-1f3ff":0,"1f64b-1f3fb-200d-2640":0,"1f64b-1f3fc-200d-2640":0,"1f64b-1f3fd-200d-2640":0,"1f64b-1f3fe-200d-2640":0,"1f64b-1f3ff-200d-2640":0,"1f64b-1f3fb-200d-2642":0,"1f64b-1f3fc-200d-2642":0,"1f64b-1f3fd-200d-2642":0,"1f64b-1f3fe-200d-2642":0,"1f64b-1f3ff-200d-2642":0,"1f64b-1f3fb":0,"1f64b-1f3fc":0,"1f64b-1f3fd":0,"1f64b-1f3fe":0,"1f64b-1f3ff":0,"1f64c-1f3fb":0,"1f64c-1f3fc":0,"1f64c-1f3fd":0,"1f64c-1f3fe":0,"1f64c-1f3ff":0,"1f64d-1f3fb-200d-2640":0,"1f64d-1f3fc-200d-2640":0,"1f64d-1f3fd-200d-2640":0,"1f64d-1f3fe-200d-2640":0,"1f64d-1f3ff-200d-2640":0,"1f64d-1f3fb-200d-2642":0,"1f64d-1f3fc-200d-2642":0,"1f64d-1f3fd-200d-2642":0,"1f64d-1f3fe-200d-2642":0,"1f64d-1f3ff-200d-2642":0,"1f64d-1f3fb":0,"1f64d-1f3fc":0,"1f64d-1f3fd":0,"1f64d-1f3fe":0,"1f64d-1f3ff":0,"1f64e-1f3fb-200d-2640":0,"1f64e-1f3fc-200d-2640":0,"1f64e-1f3fd-200d-2640":0,"1f64e-1f3fe-200d-2640":0,"1f64e-1f3ff-200d-2640":0,"1f64e-1f3fb-200d-2642":0,"1f64e-1f3fc-200d-2642":0,"1f64e-1f3fd-200d-2642":0,"1f64e-1f3fe-200d-2642":0,"1f64e-1f3ff-200d-2642":0,"1f64e-1f3fb":0,"1f64e-1f3fc":0,"1f64e-1f3fd":0,"1f64e-1f3fe":0,"1f64e-1f3ff":0,"1f64f-1f3fb":0,"1f64f-1f3fc":0,"1f64f-1f3fd":0,"1f64f-1f3fe":0,"1f64f-1f3ff":0,"1f6a3-1f3fb-200d-2640":0,"1f6a3-1f3fc-200d-2640":0,"1f6a3-1f3fd-200d-2640":0,"1f6a3-1f3fe-200d-2640":0,"1f6a3-1f3ff-200d-2640":0,"1f6a3-1f3fb-200d-2642":0,"1f6a3-1f3fc-200d-2642":0,"1f6a3-1f3fd-200d-2642":0,"1f6a3-1f3fe-200d-2642":0,"1f6a3-1f3ff-200d-2642":0,"1f6a3-1f3fb":0,"1f6a3-1f3fc":0,"1f6a3-1f3fd":0,"1f6a3-1f3fe":0,"1f6a3-1f3ff":0,"1f6b4-1f3fb-200d-2640":0,"1f6b4-1f3fc-200d-2640":0,"1f6b4-1f3fd-200d-2640":0,"1f6b4-1f3fe-200d-2640":0,"1f6b4-1f3ff-200d-2640":0,"1f6b4-1f3fb-200d-2642":0,"1f6b4-1f3fc-200d-2642":0,"1f6b4-1f3fd-200d-2642":0,"1f6b4-1f3fe-200d-2642":0,"1f6b4-1f3ff-200d-2642":0,"1f6b4-1f3fb":0,"1f6b4-1f3fc":0,"1f6b4-1f3fd":0,"1f6b4-1f3fe":0,"1f6b4-1f3ff":0,"1f6b5-1f3fb-200d-2640":0,"1f6b5-1f3fc-200d-2640":0,"1f6b5-1f3fd-200d-2640":0,"1f6b5-1f3fe-200d-2640":0,"1f6b5-1f3ff-200d-2640":0,"1f6b5-1f3fb-200d-2642":0,"1f6b5-1f3fc-200d-2642":0,"1f6b5-1f3fd-200d-2642":0,"1f6b5-1f3fe-200d-2642":0,"1f6b5-1f3ff-200d-2642":0,"1f6b5-1f3fb":0,"1f6b5-1f3fc":0,"1f6b5-1f3fd":0,"1f6b5-1f3fe":0,"1f6b5-1f3ff":0,"1f6b6-1f3fb-200d-2640":0,"1f6b6-1f3fc-200d-2640":0,"1f6b6-1f3fd-200d-2640":0,"1f6b6-1f3fe-200d-2640":0,"1f6b6-1f3ff-200d-2640":0,"1f6b6-1f3fb-200d-2642":0,"1f6b6-1f3fc-200d-2642":0,"1f6b6-1f3fd-200d-2642":0,"1f6b6-1f3fe-200d-2642":0,"1f6b6-1f3ff-200d-2642":0,"1f6b6-1f3fb":0,"1f6b6-1f3fc":0,"1f6b6-1f3fd":0,"1f6b6-1f3fe":0,"1f6b6-1f3ff":0,"1f6c0-1f3fb":0,"1f6c0-1f3fc":0,"1f6c0-1f3fd":0,"1f6c0-1f3fe":0,"1f6c0-1f3ff":0,"1f6cc-1f3fb":0,"1f6cc-1f3fc":0,"1f6cc-1f3fd":0,"1f6cc-1f3fe":0,"1f6cc-1f3ff":0,"1f90c-1f3fb":0,"1f90c-1f3fc":0,"1f90c-1f3fd":0,"1f90c-1f3fe":0,"1f90c-1f3ff":0,"1f90f-1f3fb":0,"1f90f-1f3fc":0,"1f90f-1f3fd":0,"1f90f-1f3fe":0,"1f90f-1f3ff":0,"1f918-1f3fb":0,"1f918-1f3fc":0,"1f918-1f3fd":0,"1f918-1f3fe":0,"1f918-1f3ff":0,"1f919-1f3fb":0,"1f919-1f3fc":0,"1f919-1f3fd":0,"1f919-1f3fe":0,"1f919-1f3ff":0,"1f91a-1f3fb":0,"1f91a-1f3fc":0,"1f91a-1f3fd":0,"1f91a-1f3fe":0,"1f91a-1f3ff":0,"1f91b-1f3fb":0,"1f91b-1f3fc":0,"1f91b-1f3fd":0,"1f91b-1f3fe":0,"1f91b-1f3ff":0,"1f91c-1f3fb":0,"1f91c-1f3fc":0,"1f91c-1f3fd":0,"1f91c-1f3fe":0,"1f91c-1f3ff":0,"1f91e-1f3fb":0,"1f91e-1f3fc":0,"1f91e-1f3fd":0,"1f91e-1f3fe":0,"1f91e-1f3ff":0,"1f91f-1f3fb":0,"1f91f-1f3fc":0,"1f91f-1f3fd":0,"1f91f-1f3fe":0,"1f91f-1f3ff":0,"1f926-1f3fb-200d-2640":0,"1f926-1f3fc-200d-2640":0,"1f926-1f3fd-200d-2640":0,"1f926-1f3fe-200d-2640":0,"1f926-1f3ff-200d-2640":0,"1f926-1f3fb-200d-2642":0,"1f926-1f3fc-200d-2642":0,"1f926-1f3fd-200d-2642":0,"1f926-1f3fe-200d-2642":0,"1f926-1f3ff-200d-2642":0,"1f926-1f3fb":0,"1f926-1f3fc":0,"1f926-1f3fd":0,"1f926-1f3fe":0,"1f926-1f3ff":0,"1f930-1f3fb":0,"1f930-1f3fc":0,"1f930-1f3fd":0,"1f930-1f3fe":0,"1f930-1f3ff":0,"1f931-1f3fb":0,"1f931-1f3fc":0,"1f931-1f3fd":0,"1f931-1f3fe":0,"1f931-1f3ff":0,"1f932-1f3fb":0,"1f932-1f3fc":0,"1f932-1f3fd":0,"1f932-1f3fe":0,"1f932-1f3ff":0,"1f933-1f3fb":0,"1f933-1f3fc":0,"1f933-1f3fd":0,"1f933-1f3fe":0,"1f933-1f3ff":0,"1f934-1f3fb":0,"1f934-1f3fc":0,"1f934-1f3fd":0,"1f934-1f3fe":0,"1f934-1f3ff":0,"1f935-1f3fb-200d-2640":0,"1f935-1f3fc-200d-2640":0,"1f935-1f3fd-200d-2640":0,"1f935-1f3fe-200d-2640":0,"1f935-1f3ff-200d-2640":0,"1f935-1f3fb-200d-2642":0,"1f935-1f3fc-200d-2642":0,"1f935-1f3fd-200d-2642":0,"1f935-1f3fe-200d-2642":0,"1f935-1f3ff-200d-2642":0,"1f935-1f3fb":0,"1f935-1f3fc":0,"1f935-1f3fd":0,"1f935-1f3fe":0,"1f935-1f3ff":0,"1f936-1f3fb":0,"1f936-1f3fc":0,"1f936-1f3fd":0,"1f936-1f3fe":0,"1f936-1f3ff":0,"1f937-1f3fb-200d-2640":0,"1f937-1f3fc-200d-2640":0,"1f937-1f3fd-200d-2640":0,"1f937-1f3fe-200d-2640":0,"1f937-1f3ff-200d-2640":0,"1f937-1f3fb-200d-2642":0,"1f937-1f3fc-200d-2642":0,"1f937-1f3fd-200d-2642":0,"1f937-1f3fe-200d-2642":0,"1f937-1f3ff-200d-2642":0,"1f937-1f3fb":0,"1f937-1f3fc":0,"1f937-1f3fd":0,"1f937-1f3fe":0,"1f937-1f3ff":0,"1f938-1f3fb-200d-2640":0,"1f938-1f3fc-200d-2640":0,"1f938-1f3fd-200d-2640":0,"1f938-1f3fe-200d-2640":0,"1f938-1f3ff-200d-2640":0,"1f938-1f3fb-200d-2642":0,"1f938-1f3fc-200d-2642":0,"1f938-1f3fd-200d-2642":0,"1f938-1f3fe-200d-2642":0,"1f938-1f3ff-200d-2642":0,"1f938-1f3fb":0,"1f938-1f3fc":0,"1f938-1f3fd":0,"1f938-1f3fe":0,"1f938-1f3ff":0,"1f939-1f3fb-200d-2640":0,"1f939-1f3fc-200d-2640":0,"1f939-1f3fd-200d-2640":0,"1f939-1f3fe-200d-2640":0,"1f939-1f3ff-200d-2640":0,"1f939-1f3fb-200d-2642":0,"1f939-1f3fc-200d-2642":0,"1f939-1f3fd-200d-2642":0,"1f939-1f3fe-200d-2642":0,"1f939-1f3ff-200d-2642":0,"1f939-1f3fb":0,"1f939-1f3fc":0,"1f939-1f3fd":0,"1f939-1f3fe":0,"1f939-1f3ff":0,"1f93d-1f3fb-200d-2640":0,"1f93d-1f3fc-200d-2640":0,"1f93d-1f3fd-200d-2640":0,"1f93d-1f3fe-200d-2640":0,"1f93d-1f3ff-200d-2640":0,"1f93d-1f3fb-200d-2642":0,"1f93d-1f3fc-200d-2642":0,"1f93d-1f3fd-200d-2642":0,"1f93d-1f3fe-200d-2642":0,"1f93d-1f3ff-200d-2642":0,"1f93d-1f3fb":0,"1f93d-1f3fc":0,"1f93d-1f3fd":0,"1f93d-1f3fe":0,"1f93d-1f3ff":0,"1f93e-1f3fb-200d-2640":0,"1f93e-1f3fc-200d-2640":0,"1f93e-1f3fd-200d-2640":0,"1f93e-1f3fe-200d-2640":0,"1f93e-1f3ff-200d-2640":0,"1f93e-1f3fb-200d-2642":0,"1f93e-1f3fc-200d-2642":0,"1f93e-1f3fd-200d-2642":0,"1f93e-1f3fe-200d-2642":0,"1f93e-1f3ff-200d-2642":0,"1f93e-1f3fb":0,"1f93e-1f3fc":0,"1f93e-1f3fd":0,"1f93e-1f3fe":0,"1f93e-1f3ff":0,"1f977-1f3fb":0,"1f977-1f3fc":0,"1f977-1f3fd":0,"1f977-1f3fe":0,"1f977-1f3ff":0,"1f9b5-1f3fb":0,"1f9b5-1f3fc":0,"1f9b5-1f3fd":0,"1f9b5-1f3fe":0,"1f9b5-1f3ff":0,"1f9b6-1f3fb":0,"1f9b6-1f3fc":0,"1f9b6-1f3fd":0,"1f9b6-1f3fe":0,"1f9b6-1f3ff":0,"1f9b8-1f3fb-200d-2640":0,"1f9b8-1f3fc-200d-2640":0,"1f9b8-1f3fd-200d-2640":0,"1f9b8-1f3fe-200d-2640":0,"1f9b8-1f3ff-200d-2640":0,"1f9b8-1f3fb-200d-2642":0,"1f9b8-1f3fc-200d-2642":0,"1f9b8-1f3fd-200d-2642":0,"1f9b8-1f3fe-200d-2642":0,"1f9b8-1f3ff-200d-2642":0,"1f9b8-1f3fb":0,"1f9b8-1f3fc":0,"1f9b8-1f3fd":0,"1f9b8-1f3fe":0,"1f9b8-1f3ff":0,"1f9b9-1f3fb-200d-2640":0,"1f9b9-1f3fc-200d-2640":0,"1f9b9-1f3fd-200d-2640":0,"1f9b9-1f3fe-200d-2640":0,"1f9b9-1f3ff-200d-2640":0,"1f9b9-1f3fb-200d-2642":0,"1f9b9-1f3fc-200d-2642":0,"1f9b9-1f3fd-200d-2642":0,"1f9b9-1f3fe-200d-2642":0,"1f9b9-1f3ff-200d-2642":0,"1f9b9-1f3fb":0,"1f9b9-1f3fc":0,"1f9b9-1f3fd":0,"1f9b9-1f3fe":0,"1f9b9-1f3ff":0,"1f9bb-1f3fb":0,"1f9bb-1f3fc":0,"1f9bb-1f3fd":0,"1f9bb-1f3fe":0,"1f9bb-1f3ff":0,"1f9cd-1f3fb-200d-2640":0,"1f9cd-1f3fc-200d-2640":0,"1f9cd-1f3fd-200d-2640":0,"1f9cd-1f3fe-200d-2640":0,"1f9cd-1f3ff-200d-2640":0,"1f9cd-1f3fb-200d-2642":0,"1f9cd-1f3fc-200d-2642":0,"1f9cd-1f3fd-200d-2642":0,"1f9cd-1f3fe-200d-2642":0,"1f9cd-1f3ff-200d-2642":0,"1f9cd-1f3fb":0,"1f9cd-1f3fc":0,"1f9cd-1f3fd":0,"1f9cd-1f3fe":0,"1f9cd-1f3ff":0,"1f9ce-1f3fb-200d-2640":0,"1f9ce-1f3fc-200d-2640":0,"1f9ce-1f3fd-200d-2640":0,"1f9ce-1f3fe-200d-2640":0,"1f9ce-1f3ff-200d-2640":0,"1f9ce-1f3fb-200d-2642":0,"1f9ce-1f3fc-200d-2642":0,"1f9ce-1f3fd-200d-2642":0,"1f9ce-1f3fe-200d-2642":0,"1f9ce-1f3ff-200d-2642":0,"1f9ce-1f3fb":0,"1f9ce-1f3fc":0,"1f9ce-1f3fd":0,"1f9ce-1f3fe":0,"1f9ce-1f3ff":0,"1f9cf-1f3fb-200d-2640":0,"1f9cf-1f3fc-200d-2640":0,"1f9cf-1f3fd-200d-2640":0,"1f9cf-1f3fe-200d-2640":0,"1f9cf-1f3ff-200d-2640":0,"1f9cf-1f3fb-200d-2642":0,"1f9cf-1f3fc-200d-2642":0,"1f9cf-1f3fd-200d-2642":0,"1f9cf-1f3fe-200d-2642":0,"1f9cf-1f3ff-200d-2642":0,"1f9cf-1f3fb":0,"1f9cf-1f3fc":0,"1f9cf-1f3fd":0,"1f9cf-1f3fe":0,"1f9cf-1f3ff":0,"1f9d1-1f3fb-200d-1f33e":0,"1f9d1-1f3fc-200d-1f33e":0,"1f9d1-1f3fd-200d-1f33e":0,"1f9d1-1f3fe-200d-1f33e":0,"1f9d1-1f3ff-200d-1f33e":0,"1f9d1-1f3fb-200d-1f373":0,"1f9d1-1f3fc-200d-1f373":0,"1f9d1-1f3fd-200d-1f373":0,"1f9d1-1f3fe-200d-1f373":0,"1f9d1-1f3ff-200d-1f373":0,"1f9d1-1f3fb-200d-1f37c":0,"1f9d1-1f3fc-200d-1f37c":0,"1f9d1-1f3fd-200d-1f37c":0,"1f9d1-1f3fe-200d-1f37c":0,"1f9d1-1f3ff-200d-1f37c":0,"1f9d1-1f3fb-200d-1f384":0,"1f9d1-1f3fc-200d-1f384":0,"1f9d1-1f3fd-200d-1f384":0,"1f9d1-1f3fe-200d-1f384":0,"1f9d1-1f3ff-200d-1f384":0,"1f9d1-1f3fb-200d-1f393":0,"1f9d1-1f3fc-200d-1f393":0,"1f9d1-1f3fd-200d-1f393":0,"1f9d1-1f3fe-200d-1f393":0,"1f9d1-1f3ff-200d-1f393":0,"1f9d1-1f3fb-200d-1f3a4":0,"1f9d1-1f3fc-200d-1f3a4":0,"1f9d1-1f3fd-200d-1f3a4":0,"1f9d1-1f3fe-200d-1f3a4":0,"1f9d1-1f3ff-200d-1f3a4":0,"1f9d1-1f3fb-200d-1f3a8":0,"1f9d1-1f3fc-200d-1f3a8":0,"1f9d1-1f3fd-200d-1f3a8":0,"1f9d1-1f3fe-200d-1f3a8":0,"1f9d1-1f3ff-200d-1f3a8":0,"1f9d1-1f3fb-200d-1f3eb":0,"1f9d1-1f3fc-200d-1f3eb":0,"1f9d1-1f3fd-200d-1f3eb":0,"1f9d1-1f3fe-200d-1f3eb":0,"1f9d1-1f3ff-200d-1f3eb":0,"1f9d1-1f3fb-200d-1f3ed":0,"1f9d1-1f3fc-200d-1f3ed":0,"1f9d1-1f3fd-200d-1f3ed":0,"1f9d1-1f3fe-200d-1f3ed":0,"1f9d1-1f3ff-200d-1f3ed":0,"1f9d1-1f3fb-200d-1f4bb":0,"1f9d1-1f3fc-200d-1f4bb":0,"1f9d1-1f3fd-200d-1f4bb":0,"1f9d1-1f3fe-200d-1f4bb":0,"1f9d1-1f3ff-200d-1f4bb":0,"1f9d1-1f3fb-200d-1f4bc":0,"1f9d1-1f3fc-200d-1f4bc":0,"1f9d1-1f3fd-200d-1f4bc":0,"1f9d1-1f3fe-200d-1f4bc":0,"1f9d1-1f3ff-200d-1f4bc":0,"1f9d1-1f3fb-200d-1f527":0,"1f9d1-1f3fc-200d-1f527":0,"1f9d1-1f3fd-200d-1f527":0,"1f9d1-1f3fe-200d-1f527":0,"1f9d1-1f3ff-200d-1f527":0,"1f9d1-1f3fb-200d-1f52c":0,"1f9d1-1f3fc-200d-1f52c":0,"1f9d1-1f3fd-200d-1f52c":0,"1f9d1-1f3fe-200d-1f52c":0,"1f9d1-1f3ff-200d-1f52c":0,"1f9d1-1f3fb-200d-1f680":0,"1f9d1-1f3fc-200d-1f680":0,"1f9d1-1f3fd-200d-1f680":0,"1f9d1-1f3fe-200d-1f680":0,"1f9d1-1f3ff-200d-1f680":0,"1f9d1-1f3fb-200d-1f692":0,"1f9d1-1f3fc-200d-1f692":0,"1f9d1-1f3fd-200d-1f692":0,"1f9d1-1f3fe-200d-1f692":0,"1f9d1-1f3ff-200d-1f692":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fb-200d-1f9af":0,"1f9d1-1f3fc-200d-1f9af":0,"1f9d1-1f3fd-200d-1f9af":0,"1f9d1-1f3fe-200d-1f9af":0,"1f9d1-1f3ff-200d-1f9af":0,"1f9d1-1f3fb-200d-1f9b0":0,"1f9d1-1f3fc-200d-1f9b0":0,"1f9d1-1f3fd-200d-1f9b0":0,"1f9d1-1f3fe-200d-1f9b0":0,"1f9d1-1f3ff-200d-1f9b0":0,"1f9d1-1f3fb-200d-1f9b1":0,"1f9d1-1f3fc-200d-1f9b1":0,"1f9d1-1f3fd-200d-1f9b1":0,"1f9d1-1f3fe-200d-1f9b1":0,"1f9d1-1f3ff-200d-1f9b1":0,"1f9d1-1f3fb-200d-1f9b2":0,"1f9d1-1f3fc-200d-1f9b2":0,"1f9d1-1f3fd-200d-1f9b2":0,"1f9d1-1f3fe-200d-1f9b2":0,"1f9d1-1f3ff-200d-1f9b2":0,"1f9d1-1f3fb-200d-1f9b3":0,"1f9d1-1f3fc-200d-1f9b3":0,"1f9d1-1f3fd-200d-1f9b3":0,"1f9d1-1f3fe-200d-1f9b3":0,"1f9d1-1f3ff-200d-1f9b3":0,"1f9d1-1f3fb-200d-1f9bc":0,"1f9d1-1f3fc-200d-1f9bc":0,"1f9d1-1f3fd-200d-1f9bc":0,"1f9d1-1f3fe-200d-1f9bc":0,"1f9d1-1f3ff-200d-1f9bc":0,"1f9d1-1f3fb-200d-1f9bd":0,"1f9d1-1f3fc-200d-1f9bd":0,"1f9d1-1f3fd-200d-1f9bd":0,"1f9d1-1f3fe-200d-1f9bd":0,"1f9d1-1f3ff-200d-1f9bd":0,"1f9d1-1f3fb-200d-2695":0,"1f9d1-1f3fc-200d-2695":0,"1f9d1-1f3fd-200d-2695":0,"1f9d1-1f3fe-200d-2695":0,"1f9d1-1f3ff-200d-2695":0,"1f9d1-1f3fb-200d-2696":0,"1f9d1-1f3fc-200d-2696":0,"1f9d1-1f3fd-200d-2696":0,"1f9d1-1f3fe-200d-2696":0,"1f9d1-1f3ff-200d-2696":0,"1f9d1-1f3fb-200d-2708":0,"1f9d1-1f3fc-200d-2708":0,"1f9d1-1f3fd-200d-2708":0,"1f9d1-1f3fe-200d-2708":0,"1f9d1-1f3ff-200d-2708":0,"1f9d1-1f3fb":0,"1f9d1-1f3fc":0,"1f9d1-1f3fd":0,"1f9d1-1f3fe":0,"1f9d1-1f3ff":0,"1f9d2-1f3fb":0,"1f9d2-1f3fc":0,"1f9d2-1f3fd":0,"1f9d2-1f3fe":0,"1f9d2-1f3ff":0,"1f9d3-1f3fb":0,"1f9d3-1f3fc":0,"1f9d3-1f3fd":0,"1f9d3-1f3fe":0,"1f9d3-1f3ff":0,"1f9d4-1f3fb":0,"1f9d4-1f3fc":0,"1f9d4-1f3fd":0,"1f9d4-1f3fe":0,"1f9d4-1f3ff":0,"1f9d5-1f3fb":0,"1f9d5-1f3fc":0,"1f9d5-1f3fd":0,"1f9d5-1f3fe":0,"1f9d5-1f3ff":0,"1f9d6-1f3fb-200d-2640":0,"1f9d6-1f3fc-200d-2640":0,"1f9d6-1f3fd-200d-2640":0,"1f9d6-1f3fe-200d-2640":0,"1f9d6-1f3ff-200d-2640":0,"1f9d6-1f3fb-200d-2642":0,"1f9d6-1f3fc-200d-2642":0,"1f9d6-1f3fd-200d-2642":0,"1f9d6-1f3fe-200d-2642":0,"1f9d6-1f3ff-200d-2642":0,"1f9d6-1f3fb":0,"1f9d6-1f3fc":0,"1f9d6-1f3fd":0,"1f9d6-1f3fe":0,"1f9d6-1f3ff":0,"1f9d7-1f3fb-200d-2640":0,"1f9d7-1f3fc-200d-2640":0,"1f9d7-1f3fd-200d-2640":0,"1f9d7-1f3fe-200d-2640":0,"1f9d7-1f3ff-200d-2640":0,"1f9d7-1f3fb-200d-2642":0,"1f9d7-1f3fc-200d-2642":0,"1f9d7-1f3fd-200d-2642":0,"1f9d7-1f3fe-200d-2642":0,"1f9d7-1f3ff-200d-2642":0,"1f9d7-1f3fb":0,"1f9d7-1f3fc":0,"1f9d7-1f3fd":0,"1f9d7-1f3fe":0,"1f9d7-1f3ff":0,"1f9d8-1f3fb-200d-2640":0,"1f9d8-1f3fc-200d-2640":0,"1f9d8-1f3fd-200d-2640":0,"1f9d8-1f3fe-200d-2640":0,"1f9d8-1f3ff-200d-2640":0,"1f9d8-1f3fb-200d-2642":0,"1f9d8-1f3fc-200d-2642":0,"1f9d8-1f3fd-200d-2642":0,"1f9d8-1f3fe-200d-2642":0,"1f9d8-1f3ff-200d-2642":0,"1f9d8-1f3fb":0,"1f9d8-1f3fc":0,"1f9d8-1f3fd":0,"1f9d8-1f3fe":0,"1f9d8-1f3ff":0,"1f9d9-1f3fb-200d-2640":0,"1f9d9-1f3fc-200d-2640":0,"1f9d9-1f3fd-200d-2640":0,"1f9d9-1f3fe-200d-2640":0,"1f9d9-1f3ff-200d-2640":0,"1f9d9-1f3fb-200d-2642":0,"1f9d9-1f3fc-200d-2642":0,"1f9d9-1f3fd-200d-2642":0,"1f9d9-1f3fe-200d-2642":0,"1f9d9-1f3ff-200d-2642":0,"1f9d9-1f3fb":0,"1f9d9-1f3fc":0,"1f9d9-1f3fd":0,"1f9d9-1f3fe":0,"1f9d9-1f3ff":0,"1f9da-1f3fb-200d-2640":0,"1f9da-1f3fc-200d-2640":0,"1f9da-1f3fd-200d-2640":0,"1f9da-1f3fe-200d-2640":0,"1f9da-1f3ff-200d-2640":0,"1f9da-1f3fb-200d-2642":0,"1f9da-1f3fc-200d-2642":0,"1f9da-1f3fd-200d-2642":0,"1f9da-1f3fe-200d-2642":0,"1f9da-1f3ff-200d-2642":0,"1f9da-1f3fb":0,"1f9da-1f3fc":0,"1f9da-1f3fd":0,"1f9da-1f3fe":0,"1f9da-1f3ff":0,"1f9db-1f3fb-200d-2640":0,"1f9db-1f3fc-200d-2640":0,"1f9db-1f3fd-200d-2640":0,"1f9db-1f3fe-200d-2640":0,"1f9db-1f3ff-200d-2640":0,"1f9db-1f3fb-200d-2642":0,"1f9db-1f3fc-200d-2642":0,"1f9db-1f3fd-200d-2642":0,"1f9db-1f3fe-200d-2642":0,"1f9db-1f3ff-200d-2642":0,"1f9db-1f3fb":0,"1f9db-1f3fc":0,"1f9db-1f3fd":0,"1f9db-1f3fe":0,"1f9db-1f3ff":0,"1f9dc-1f3fb-200d-2640":0,"1f9dc-1f3fc-200d-2640":0,"1f9dc-1f3fd-200d-2640":0,"1f9dc-1f3fe-200d-2640":0,"1f9dc-1f3ff-200d-2640":0,"1f9dc-1f3fb-200d-2642":0,"1f9dc-1f3fc-200d-2642":0,"1f9dc-1f3fd-200d-2642":0,"1f9dc-1f3fe-200d-2642":0,"1f9dc-1f3ff-200d-2642":0,"1f9dc-1f3fb":0,"1f9dc-1f3fc":0,"1f9dc-1f3fd":0,"1f9dc-1f3fe":0,"1f9dc-1f3ff":0,"1f9dd-1f3fb-200d-2640":0,"1f9dd-1f3fc-200d-2640":0,"1f9dd-1f3fd-200d-2640":0,"1f9dd-1f3fe-200d-2640":0,"1f9dd-1f3ff-200d-2640":0,"1f9dd-1f3fb-200d-2642":0,"1f9dd-1f3fc-200d-2642":0,"1f9dd-1f3fd-200d-2642":0,"1f9dd-1f3fe-200d-2642":0,"1f9dd-1f3ff-200d-2642":0,"1f9dd-1f3fb":0,"1f9dd-1f3fc":0,"1f9dd-1f3fd":0,"1f9dd-1f3fe":0,"1f9dd-1f3ff":0,"261d-1f3fb":0,"261d-1f3fc":0,"261d-1f3fd":0,"261d-1f3fe":0,"261d-1f3ff":0,"26f9-1f3fb-200d-2640":0,"26f9-1f3fc-200d-2640":0,"26f9-1f3fd-200d-2640":0,"26f9-1f3fe-200d-2640":0,"26f9-1f3ff-200d-2640":0,"26f9-1f3fb-200d-2642":0,"26f9-1f3fc-200d-2642":0,"26f9-1f3fd-200d-2642":0,"26f9-1f3fe-200d-2642":0,"26f9-1f3ff-200d-2642":0,"26f9-1f3fb":0,"26f9-1f3fc":0,"26f9-1f3fd":0,"26f9-1f3fe":0,"26f9-1f3ff":0,"270a-1f3fb":0,"270a-1f3fc":0,"270a-1f3fd":0,"270a-1f3fe":0,"270a-1f3ff":0,"270b-1f3fb":0,"270b-1f3fc":0,"270b-1f3fd":0,"270b-1f3fe":0,"270b-1f3ff":0,"270c-1f3fb":0,"270c-1f3fc":0,"270c-1f3fd":0,"270c-1f3fe":0,"270c-1f3ff":0,"270d-1f3fb":0,"270d-1f3fc":0,"270d-1f3fd":0,"270d-1f3fe":0,"270d-1f3ff":0},LatinizeMap:{"Á":"A","Ă":"A","Ắ":"A","Ặ":"A","Ằ":"A","Ẳ":"A","Ẵ":"A","Ǎ":"A","Â":"A","Ấ":"A","Ậ":"A","Ầ":"A","Ẩ":"A","Ẫ":"A","Ä":"A","Ǟ":"A","Ȧ":"A","Ǡ":"A","Ạ":"A","Ȁ":"A","À":"A","Ả":"A","Ȃ":"A","Ā":"A","Ą":"A","Å":"A","Ǻ":"A","Ḁ":"A","Ⱥ":"A","Ã":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ḃ":"B","Ḅ":"B","Ɓ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ć":"C","Č":"C","Ç":"C","Ḉ":"C","Ĉ":"C","Ċ":"C","Ƈ":"C","Ȼ":"C","Ď":"D","Ḑ":"D","Ḓ":"D","Ḋ":"D","Ḍ":"D","Ɗ":"D","Ḏ":"D","Dz":"D","Dž":"D","Đ":"D","Ƌ":"D","DZ":"DZ","DŽ":"DZ","É":"E","Ĕ":"E","Ě":"E","Ȩ":"E","Ḝ":"E","Ê":"E","Ế":"E","Ệ":"E","Ề":"E","Ể":"E","Ễ":"E","Ḙ":"E","Ë":"E","Ė":"E","Ẹ":"E","Ȅ":"E","È":"E","Ẻ":"E","Ȇ":"E","Ē":"E","Ḗ":"E","Ḕ":"E","Ę":"E","Ɇ":"E","Ẽ":"E","Ḛ":"E","Ꝫ":"ET","Ḟ":"F","Ƒ":"F","Ǵ":"G","Ğ":"G","Ǧ":"G","Ģ":"G","Ĝ":"G","Ġ":"G","Ɠ":"G","Ḡ":"G","Ǥ":"G","Ḫ":"H","Ȟ":"H","Ḩ":"H","Ĥ":"H","Ⱨ":"H","Ḧ":"H","Ḣ":"H","Ḥ":"H","Ħ":"H","Í":"I","Ĭ":"I","Ǐ":"I","Î":"I","Ï":"I","Ḯ":"I","İ":"I","Ị":"I","Ȉ":"I","Ì":"I","Ỉ":"I","Ȋ":"I","Ī":"I","Į":"I","Ɨ":"I","Ĩ":"I","Ḭ":"I","Ꝺ":"D","Ꝼ":"F","Ᵹ":"G","Ꞃ":"R","Ꞅ":"S","Ꞇ":"T","Ꝭ":"IS","Ĵ":"J","Ɉ":"J","Ḱ":"K","Ǩ":"K","Ķ":"K","Ⱪ":"K","Ꝃ":"K","Ḳ":"K","Ƙ":"K","Ḵ":"K","Ꝁ":"K","Ꝅ":"K","Ĺ":"L","Ƚ":"L","Ľ":"L","Ļ":"L","Ḽ":"L","Ḷ":"L","Ḹ":"L","Ⱡ":"L","Ꝉ":"L","Ḻ":"L","Ŀ":"L","Ɫ":"L","Lj":"L","Ł":"L","LJ":"LJ","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ń":"N","Ň":"N","Ņ":"N","Ṋ":"N","Ṅ":"N","Ṇ":"N","Ǹ":"N","Ɲ":"N","Ṉ":"N","Ƞ":"N","Nj":"N","Ñ":"N","NJ":"NJ","Ó":"O","Ŏ":"O","Ǒ":"O","Ô":"O","Ố":"O","Ộ":"O","Ồ":"O","Ổ":"O","Ỗ":"O","Ö":"O","Ȫ":"O","Ȯ":"O","Ȱ":"O","Ọ":"O","Ő":"O","Ȍ":"O","Ò":"O","Ỏ":"O","Ơ":"O","Ớ":"O","Ợ":"O","Ờ":"O","Ở":"O","Ỡ":"O","Ȏ":"O","Ꝋ":"O","Ꝍ":"O","Ō":"O","Ṓ":"O","Ṑ":"O","Ɵ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Õ":"O","Ṍ":"O","Ṏ":"O","Ȭ":"O","Ƣ":"OI","Ꝏ":"OO","Ɛ":"E","Ɔ":"O","Ȣ":"OU","Ṕ":"P","Ṗ":"P","Ꝓ":"P","Ƥ":"P","Ꝕ":"P","Ᵽ":"P","Ꝑ":"P","Ꝙ":"Q","Ꝗ":"Q","Ŕ":"R","Ř":"R","Ŗ":"R","Ṙ":"R","Ṛ":"R","Ṝ":"R","Ȑ":"R","Ȓ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꜿ":"C","Ǝ":"E","Ś":"S","Ṥ":"S","Š":"S","Ṧ":"S","Ş":"S","Ŝ":"S","Ș":"S","Ṡ":"S","Ṣ":"S","Ṩ":"S","ẞ":"SS","Ť":"T","Ţ":"T","Ṱ":"T","Ț":"T","Ⱦ":"T","Ṫ":"T","Ṭ":"T","Ƭ":"T","Ṯ":"T","Ʈ":"T","Ŧ":"T","Ɐ":"A","Ꞁ":"L","Ɯ":"M","Ʌ":"V","Ꜩ":"TZ","Ú":"U","Ŭ":"U","Ǔ":"U","Û":"U","Ṷ":"U","Ü":"U","Ǘ":"U","Ǚ":"U","Ǜ":"U","Ǖ":"U","Ṳ":"U","Ụ":"U","Ű":"U","Ȕ":"U","Ù":"U","Ủ":"U","Ư":"U","Ứ":"U","Ự":"U","Ừ":"U","Ử":"U","Ữ":"U","Ȗ":"U","Ū":"U","Ṻ":"U","Ų":"U","Ů":"U","Ũ":"U","Ṹ":"U","Ṵ":"U","Ꝟ":"V","Ṿ":"V","Ʋ":"V","Ṽ":"V","Ꝡ":"VY","Ẃ":"W","Ŵ":"W","Ẅ":"W","Ẇ":"W","Ẉ":"W","Ẁ":"W","Ⱳ":"W","Ẍ":"X","Ẋ":"X","Ý":"Y","Ŷ":"Y","Ÿ":"Y","Ẏ":"Y","Ỵ":"Y","Ỳ":"Y","Ƴ":"Y","Ỷ":"Y","Ỿ":"Y","Ȳ":"Y","Ɏ":"Y","Ỹ":"Y","Ź":"Z","Ž":"Z","Ẑ":"Z","Ⱬ":"Z","Ż":"Z","Ẓ":"Z","Ȥ":"Z","Ẕ":"Z","Ƶ":"Z","IJ":"IJ","Œ":"OE","ᴀ":"A","ᴁ":"AE","ʙ":"B","ᴃ":"B","ᴄ":"C","ᴅ":"D","ᴇ":"E","ꜰ":"F","ɢ":"G","ʛ":"G","ʜ":"H","ɪ":"I","ʁ":"R","ᴊ":"J","ᴋ":"K","ʟ":"L","ᴌ":"L","ᴍ":"M","ɴ":"N","ᴏ":"O","ɶ":"OE","ᴐ":"O","ᴕ":"OU","ᴘ":"P","ʀ":"R","ᴎ":"N","ᴙ":"R","ꜱ":"S","ᴛ":"T","ⱻ":"E","ᴚ":"R","ᴜ":"U","ᴠ":"V","ᴡ":"W","ʏ":"Y","ᴢ":"Z","á":"a","ă":"a","ắ":"a","ặ":"a","ằ":"a","ẳ":"a","ẵ":"a","ǎ":"a","â":"a","ấ":"a","ậ":"a","ầ":"a","ẩ":"a","ẫ":"a","ä":"a","ǟ":"a","ȧ":"a","ǡ":"a","ạ":"a","ȁ":"a","à":"a","ả":"a","ȃ":"a","ā":"a","ą":"a","ᶏ":"a","ẚ":"a","å":"a","ǻ":"a","ḁ":"a","ⱥ":"a","ã":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ḃ":"b","ḅ":"b","ɓ":"b","ḇ":"b","ᵬ":"b","ᶀ":"b","ƀ":"b","ƃ":"b","ɵ":"o","ć":"c","č":"c","ç":"c","ḉ":"c","ĉ":"c","ɕ":"c","ċ":"c","ƈ":"c","ȼ":"c","ď":"d","ḑ":"d","ḓ":"d","ȡ":"d","ḋ":"d","ḍ":"d","ɗ":"d","ᶑ":"d","ḏ":"d","ᵭ":"d","ᶁ":"d","đ":"d","ɖ":"d","ƌ":"d","ı":"i","ȷ":"j","ɟ":"j","ʄ":"j","dz":"dz","dž":"dz","é":"e","ĕ":"e","ě":"e","ȩ":"e","ḝ":"e","ê":"e","ế":"e","ệ":"e","ề":"e","ể":"e","ễ":"e","ḙ":"e","ë":"e","ė":"e","ẹ":"e","ȅ":"e","è":"e","ẻ":"e","ȇ":"e","ē":"e","ḗ":"e","ḕ":"e","ⱸ":"e","ę":"e","ᶒ":"e","ɇ":"e","ẽ":"e","ḛ":"e","ꝫ":"et","ḟ":"f","ƒ":"f","ᵮ":"f","ᶂ":"f","ǵ":"g","ğ":"g","ǧ":"g","ģ":"g","ĝ":"g","ġ":"g","ɠ":"g","ḡ":"g","ᶃ":"g","ǥ":"g","ḫ":"h","ȟ":"h","ḩ":"h","ĥ":"h","ⱨ":"h","ḧ":"h","ḣ":"h","ḥ":"h","ɦ":"h","ẖ":"h","ħ":"h","ƕ":"hv","í":"i","ĭ":"i","ǐ":"i","î":"i","ï":"i","ḯ":"i","ị":"i","ȉ":"i","ì":"i","ỉ":"i","ȋ":"i","ī":"i","į":"i","ᶖ":"i","ɨ":"i","ĩ":"i","ḭ":"i","ꝺ":"d","ꝼ":"f","ᵹ":"g","ꞃ":"r","ꞅ":"s","ꞇ":"t","ꝭ":"is","ǰ":"j","ĵ":"j","ʝ":"j","ɉ":"j","ḱ":"k","ǩ":"k","ķ":"k","ⱪ":"k","ꝃ":"k","ḳ":"k","ƙ":"k","ḵ":"k","ᶄ":"k","ꝁ":"k","ꝅ":"k","ĺ":"l","ƚ":"l","ɬ":"l","ľ":"l","ļ":"l","ḽ":"l","ȴ":"l","ḷ":"l","ḹ":"l","ⱡ":"l","ꝉ":"l","ḻ":"l","ŀ":"l","ɫ":"l","ᶅ":"l","ɭ":"l","ł":"l","lj":"lj","ſ":"s","ẜ":"s","ẛ":"s","ẝ":"s","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ᵯ":"m","ᶆ":"m","ń":"n","ň":"n","ņ":"n","ṋ":"n","ȵ":"n","ṅ":"n","ṇ":"n","ǹ":"n","ɲ":"n","ṉ":"n","ƞ":"n","ᵰ":"n","ᶇ":"n","ɳ":"n","ñ":"n","nj":"nj","ó":"o","ŏ":"o","ǒ":"o","ô":"o","ố":"o","ộ":"o","ồ":"o","ổ":"o","ỗ":"o","ö":"o","ȫ":"o","ȯ":"o","ȱ":"o","ọ":"o","ő":"o","ȍ":"o","ò":"o","ỏ":"o","ơ":"o","ớ":"o","ợ":"o","ờ":"o","ở":"o","ỡ":"o","ȏ":"o","ꝋ":"o","ꝍ":"o","ⱺ":"o","ō":"o","ṓ":"o","ṑ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","õ":"o","ṍ":"o","ṏ":"o","ȭ":"o","ƣ":"oi","ꝏ":"oo","ɛ":"e","ᶓ":"e","ɔ":"o","ᶗ":"o","ȣ":"ou","ṕ":"p","ṗ":"p","ꝓ":"p","ƥ":"p","ᵱ":"p","ᶈ":"p","ꝕ":"p","ᵽ":"p","ꝑ":"p","ꝙ":"q","ʠ":"q","ɋ":"q","ꝗ":"q","ŕ":"r","ř":"r","ŗ":"r","ṙ":"r","ṛ":"r","ṝ":"r","ȑ":"r","ɾ":"r","ᵳ":"r","ȓ":"r","ṟ":"r","ɼ":"r","ᵲ":"r","ᶉ":"r","ɍ":"r","ɽ":"r","ↄ":"c","ꜿ":"c","ɘ":"e","ɿ":"r","ś":"s","ṥ":"s","š":"s","ṧ":"s","ş":"s","ŝ":"s","ș":"s","ṡ":"s","ṣ":"s","ṩ":"s","ʂ":"s","ᵴ":"s","ᶊ":"s","ȿ":"s","ɡ":"g","ß":"ss","ᴑ":"o","ᴓ":"o","ᴝ":"u","ť":"t","ţ":"t","ṱ":"t","ț":"t","ȶ":"t","ẗ":"t","ⱦ":"t","ṫ":"t","ṭ":"t","ƭ":"t","ṯ":"t","ᵵ":"t","ƫ":"t","ʈ":"t","ŧ":"t","ᵺ":"th","ɐ":"a","ᴂ":"ae","ǝ":"e","ᵷ":"g","ɥ":"h","ʮ":"h","ʯ":"h","ᴉ":"i","ʞ":"k","ꞁ":"l","ɯ":"m","ɰ":"m","ᴔ":"oe","ɹ":"r","ɻ":"r","ɺ":"r","ⱹ":"r","ʇ":"t","ʌ":"v","ʍ":"w","ʎ":"y","ꜩ":"tz","ú":"u","ŭ":"u","ǔ":"u","û":"u","ṷ":"u","ü":"u","ǘ":"u","ǚ":"u","ǜ":"u","ǖ":"u","ṳ":"u","ụ":"u","ű":"u","ȕ":"u","ù":"u","ủ":"u","ư":"u","ứ":"u","ự":"u","ừ":"u","ử":"u","ữ":"u","ȗ":"u","ū":"u","ṻ":"u","ų":"u","ᶙ":"u","ů":"u","ũ":"u","ṹ":"u","ṵ":"u","ᵫ":"ue","ꝸ":"um","ⱴ":"v","ꝟ":"v","ṿ":"v","ʋ":"v","ᶌ":"v","ⱱ":"v","ṽ":"v","ꝡ":"vy","ẃ":"w","ŵ":"w","ẅ":"w","ẇ":"w","ẉ":"w","ẁ":"w","ⱳ":"w","ẘ":"w","ẍ":"x","ẋ":"x","ᶍ":"x","ý":"y","ŷ":"y","ÿ":"y","ẏ":"y","ỵ":"y","ỳ":"y","ƴ":"y","ỷ":"y","ỿ":"y","ȳ":"y","ẙ":"y","ɏ":"y","ỹ":"y","ź":"z","ž":"z","ẑ":"z","ʑ":"z","ⱬ":"z","ż":"z","ẓ":"z","ȥ":"z","ẕ":"z","ᵶ":"z","ᶎ":"z","ʐ":"z","ƶ":"z","ɀ":"z","ff":"ff","ffi":"ffi","ffl":"ffl","fi":"fi","fl":"fl","ij":"ij","œ":"oe","st":"st","ₐ":"a","ₑ":"e","ᵢ":"i","ⱼ":"j","ₒ":"o","ᵣ":"r","ᵤ":"u","ᵥ":"v","ₓ":"x","Ё":"YO","Й":"I","Ц":"TS","У":"U","К":"K","Е":"E","Н":"N","Г":"G","Ш":"SH","Щ":"SCH","З":"Z","Х":"H","Ъ":"","ё":"yo","й":"i","ц":"ts","у":"u","к":"k","е":"e","н":"n","г":"g","ш":"sh","щ":"sch","з":"z","х":"h","ъ":"","Ф":"F","Ы":"I","В":"V","А":"A","П":"P","Р":"R","О":"O","Л":"L","Д":"D","Ж":"ZH","Э":"E","ф":"f","ы":"i","в":"v","а":"a","п":"p","р":"r","о":"o","л":"l","д":"d","ж":"zh","э":"e","Я":"Ya","Ч":"CH","С":"S","М":"M","И":"I","Т":"T","Ь":"","Б":"B","Ю":"YU","я":"ya","ч":"ch","с":"s","м":"m","и":"i","т":"t","ь":"","б":"b","ю":"yu"},TLD:["abogado","ac","academy","accountants","active","actor","ad","adult","ae","aero","af","ag","agency","ai","airforce","al","allfinanz","alsace","am","amsterdam","an","android","ao","apartments","aq","aquarelle","ar","archi","army","arpa","as","asia","associates","at","attorney","au","auction","audio","autos","aw","ax","axa","az","ba","band","bank","bar","barclaycard","barclays","bargains","bayern","bb","bd","be","beer","berlin","best","bf","bg","bh","bi","bid","bike","bingo","bio","biz","bj","black","blackfriday","bloomberg","blue","bm","bmw","bn","bnpparibas","bo","boo","boutique","br","brussels","bs","bt","budapest","build","builders","business","buzz","bv","bw","by","bz","bzh","ca","cab","cal","camera","camp","cancerresearch","canon","capetown","capital","caravan","cards","care","career","careers","cartier","casa","cash","cat","catering","cc","cd","center","ceo","cern","cf","cg","ch","channel","chat","cheap","christmas","chrome","church","ci","citic","city","ck","cl","claims","cleaning","click","clinic","clothing","club","cm","cn","co","coach","codes","coffee","college","cologne","com","community","company","computer","condos","construction","consulting","contractors","cooking","cool","coop","country","cr","credit","creditcard","cricket","crs","cruises","cu","cuisinella","cv","cw","cx","cy","cymru","cz","dabur","dad","dance","dating","day","dclk","de","deals","degree","delivery","democrat","dental","dentist","desi","design","dev","diamonds","diet","digital","direct","directory","discount","dj","dk","dm","dnp","do","docs","domains","doosan","durban","dvag","dz","eat","ec","edu","education","ee","eg","email","emerck","energy","engineer","engineering","enterprises","equipment","er","es","esq","estate","et","eu","eurovision","eus","events","everbank","exchange","expert","exposed","fail","farm","fashion","feedback","fi","finance","financial","firmdale","fish","fishing","fit","fitness","fj","fk","flights","florist","flowers","flsmidth","fly","fm","fo","foo","forsale","foundation","fr","frl","frogans","fund","furniture","futbol","ga","gal","gallery","garden","gb","gbiz","gd","ge","gent","gf","gg","ggee","gh","gi","gift","gifts","gives","gl","glass","gle","global","globo","gm","gmail","gmo","gmx","gn","goog","google","gop","gov","gp","gq","gr","graphics","gratis","green","gripe","gs","gt","gu","guide","guitars","guru","gw","gy","hamburg","hangout","haus","healthcare","help","here","hermes","hiphop","hiv","hk","hm","hn","holdings","holiday","homes","horse","host","hosting","house","how","hr","ht","hu","ibm","id","ie","ifm","il","im","immo","immobilien","in","industries","info","ing","ink","institute","insure","int","international","investments","io","iq","ir","irish","is","it","iwc","jcb","je","jetzt","jm","jo","jobs","joburg","jp","juegos","kaufen","kddi","ke","kg","kh","ki","kim","kitchen","kiwi","km","kn","koeln","kp","kr","krd","kred","kw","ky","kyoto","kz","la","lacaixa","land","lat","latrobe","lawyer","lb","lc","lds","lease","legal","lgbt","li","lidl","life","lighting","limited","limo","link","lk","loans","london","lotte","lotto","lr","ls","lt","ltda","lu","luxe","luxury","lv","ly","ma","madrid","maison","management","mango","market","marketing","marriott","mc","md","me","media","meet","melbourne","meme","memorial","menu","mg","mh","miami","mil","mini","mk","ml","mm","mn","mo","mobi","moda","moe","monash","money","mormon","mortgage","moscow","motorcycles","mov","mp","mq","mr","ms","mt","mu","museum","mv","mw","mx","my","mz","na","nagoya","name","navy","nc","ne","net","network","neustar","new","nexus","nf","ng","ngo","nhk","ni","nico","ninja","nl","no","np","nr","nra","nrw","ntt","nu","nyc","nz","okinawa","om","one","ong","onl","ooo","org","organic","osaka","otsuka","ovh","pa","paris","partners","parts","party","pe","pf","pg","ph","pharmacy","photo","photography","photos","physio","pics","pictures","pink","pizza","pk","pl","place","plumbing","pm","pn","pohl","poker","porn","post","pr","praxi","press","pro","prod","productions","prof","properties","property","ps","pt","pub","pw","py","qa","qpon","quebec","re","realtor","recipes","red","rehab","reise","reisen","reit","ren","rentals","repair","report","republican","rest","restaurant","reviews","rich","rio","rip","ro","rocks","rodeo","rs","rsvp","ru","ruhr","rw","ryukyu","sa","saarland","sale","samsung","sarl","saxo","sb","sc","sca","scb","schmidt","schule","schwarz","science","scot","sd","se","services","sew","sexy","sg","sh","shiksha","shoes","shriram","si","singles","sj","sk","sky","sl","sm","sn","so","social","software","sohu","solar","solutions","soy","space","spiegel","sr","st","style","su","supplies","supply","support","surf","surgery","suzuki","sv","sx","sy","sydney","systems","sz","taipei","tatar","tattoo","tax","tc","td","technology","tel","temasek","tennis","tf","tg","th","tienda","tips","tires","tirol","tj","tk","tl","tm","tn","to","today","tokyo","tools","top","toshiba","town","toys","tp","tr","trade","training","travel","trust","tt","tui","tv","tw","tz","ua","ug","uk","university","uno","uol","us","uy","uz","va","vacations","vc","ve","vegas","ventures","versicherung","vet","vg","vi","viajes","video","villas","vision","vlaanderen","vn","vodka","vote","voting","voto","voyage","vu","wales","wang","watch","webcam","website","wed","wedding","wf","whoswho","wien","wiki","williamhill","wme","work","works","world","ws","wtc","wtf","佛山","集团","在线","한국","ভারত","八卦","موقع","公益","公司","移动","我爱你","москва","қаз","онлайн","сайт","срб","淡马锡","орг","삼성","சிங்கப்பூர்","商标","商店","商城","дети","мкд","中文网","中信","中国","中國","谷歌","భారత్","ලංකා","ભારત","भारत","网店","संगठन","网络","укр","香港","台湾","台灣","手机","мон","الجزائر","عمان","ایران","امارات","بازار","الاردن","بھارت","المغرب","السعودية","مليسيا","شبكة","გე","机构","组织机构","ไทย","سورية","рус","рф","تونس","みんな","グーグル","世界","ਭਾਰਤ","网址","游戏","vermögensberater","vermögensberatung","企业","مصر","قطر","广东","இலங்கை","இந்தியா","新加坡","فلسطين","政务","xxx","xyz","yachts","yandex","ye","yoga","yokohama","youtube","yt","za","zip","zm","zone","zuerich","zw"],MediaSizes:d(37).b};t.a.Config=a,e.a=a},132:function(f,e,d){"use strict";var t=d(27),a=d(62),s=d(40),c=d(15),n=d(57),i=d(30);const u=new class{constructor(){this.log=Object(s.b)("INSTANCE"),this.clearInstance=()=>{this.masterInstance&&!this.deactivated&&(this.log.warn("clear master instance"),n.a.delete("xt_instance"))},this.deactivateInstance=()=>{if(this.masterInstance||this.deactivated)return!1;this.log("deactivate"),this.deactivateTimeout=0,this.deactivated=!0,this.clearInstance(),c.default.idle.deactivated=!0,c.default.dispatchEvent("instance_deactivated")},this.checkInstance=(f=c.default.idle&&c.default.idle.isIDLE)=>{if(this.deactivated)return!1;const e=Date.now(),d={id:this.instanceID,idle:f,time:e};n.a.get("xt_instance",!1).then(t=>{!f||!t||t.id===this.instanceID||t.time{const e=f.data.payload;if(0===e.fileName.indexOf("main-")){const f=this.convertPromises[e.fileName];f&&(e.bytes?f.resolve(e.bytes):f.reject(),delete this.convertPromises[e.fileName])}else c.a.postMessage(f.data)})}postMessage(f){this.init&&(this.init(),this.init=null),this.worker.postMessage(f)}convert(f,e){if(f="main-"+f,this.convertPromises.hasOwnProperty(f))return this.convertPromises[f];const d=Object(s.a)();return this.postMessage({type:"convertWebp",payload:{fileName:f,bytes:e}}),this.convertPromises[f]=d}};a.a.webpWorkerController=n;e.a=n},14:function(f,e,d){"use strict";d.r(e),d.d(e,"langPack",(function(){return o})),d.d(e,"I18n",(function(){return b})),d.d(e,"i18n",(function(){return l})),d.d(e,"i18n_",(function(){return h})),d.d(e,"_i18n",(function(){return g})),d.d(e,"joinElementsWith",(function(){return p})),d.d(e,"join",(function(){return m}));var t=d(27),a=d(32),s=d(73),c=d(30),n=d(75),i=d(7),u=d(15),r=d(29);const o={messageActionChatCreate:"ActionCreateGroup",messageActionChatCreateYou:"ActionYouCreateGroup",messageActionChatEditTitle:"ActionChangedTitle",messageActionChatEditPhoto:"ActionChangedPhoto",messageActionChatEditVideo:"ActionChangedVideo",messageActionChatDeletePhoto:"ActionRemovedPhoto",messageActionChatReturn:"ActionAddUserSelf",messageActionChatReturnYou:"ActionAddUserSelfYou",messageActionChatJoined:"ActionAddUserSelfMega",messageActionChatJoinedYou:"ChannelMegaJoined",messageActionChatAddUser:"ActionAddUser",messageActionChatAddUsers:"ActionAddUser",messageActionChatLeave:"ActionLeftUser",messageActionChatLeaveYou:"YouLeft",messageActionChatDeleteUser:"ActionKickUser",messageActionChatJoinedByLink:"ActionInviteUser",messageActionPinMessage:"ActionPinnedNoText",messageActionContactSignUp:"Chat.Service.PeerJoinedTelegram",messageActionChannelCreate:"ActionCreateChannel",messageActionChannelEditTitle:"Chat.Service.Channel.UpdatedTitle",messageActionChannelEditPhoto:"Chat.Service.Channel.UpdatedPhoto",messageActionChannelEditVideo:"Chat.Service.Channel.UpdatedVideo",messageActionChannelDeletePhoto:"Chat.Service.Channel.RemovedPhoto",messageActionHistoryClear:"HistoryCleared",messageActionDiscussionStarted:"DiscussionStarted",messageActionChannelMigrateFrom:"ActionMigrateFromGroup","messageActionPhoneCall.in_ok":"ChatList.Service.Call.incoming","messageActionPhoneCall.out_ok":"ChatList.Service.Call.outgoing","messageActionPhoneCall.in_missed":"ChatList.Service.Call.Missed","messageActionPhoneCall.out_missed":"ChatList.Service.Call.Cancelled","messageActionGroupCall.started":"ActionGroupCallJustStarted","messageActionGroupCall.started_by":"ActionGroupCallStarted","messageActionGroupCall.started_byYou":"ActionGroupCallStartedByYou","messageActionGroupCall.ended":"ActionGroupCallEnded","messageActionGroupCall.ended_by":"Chat.Service.VoiceChatFinished","messageActionGroupCall.ended_byYou":"Chat.Service.VoiceChatFinishedYou",messageActionBotAllowed:"Chat.Service.BotPermissionAllowed"};var b;!function(f){let e,o;function b(){const e=i.a.langPackCode;return f.lastRequestedLangCode=e,Promise.all([d.e(8).then(d.bind(null,134)),d.e(9).then(d.bind(null,135)),d.e(25).then(d.bind(null,141))]).then(([f,d,t])=>{const a=[];h(f.default,a),h(d.default,a);return p({_:"langPackDifference",from_version:0,lang_code:e,strings:a,version:0,local:!0,countries:t.default})})}function l(e){return f.requestedServerLanguage=!0,Promise.all([c.a.invokeApiCacheable("langpack.getLangPack",{lang_code:e,lang_pack:i.a.langPack}),c.a.invokeApiCacheable("langpack.getLangPack",{lang_code:e,lang_pack:"android"}),d.e(8).then(d.bind(null,134)),d.e(9).then(d.bind(null,135)),c.a.invokeApiCacheable("help.getCountriesList",{lang_code:e,hash:0}),f.polyfillPromise])}function h(f,e=[]){for(const d in f){const t=f[d];"string"==typeof t?e.push({_:"langPackString",key:d,value:t}):e.push(Object.assign({_:"langPackStringPluralized",key:d},t))}return e}function g(e){return f.lastRequestedLangCode=e,l(e).then(([f,e,d,t,a,s])=>{let c=[];[d,t].forEach(f=>{h(f.default,c)}),c=c.concat(f.strings);for(const f of e.strings)c.push(f);return f.strings=c,f.countries=a,p(f)})}function p(f){return f.appVersion=i.a.langPackVersion,n.a.set({langPack:f}).then(()=>(m(f),f))}function m(d){if(d.lang_code!==f.lastRequestedLangCode)return;try{e=new Intl.PluralRules(d.lang_code)}catch(f){console.error("pluralRules error",f),e=new Intl.PluralRules(d.lang_code.split("-",1)[0])}f.strings.clear();for(const e of d.strings)f.strings.set(e.key,e);d.countries&&(f.countriesList.length=0,f.countriesList.push(...d.countries.countries),d.countries.countries.forEach(e=>{if(e.name){const d=e.default_name;f.strings.set(d,{_:"langPackString",key:d,value:e.name})}})),f.lastAppliedLangCode!==d.lang_code&&(u.default.dispatchEvent("language_change",d.lang_code),f.lastAppliedLangCode=d.lang_code);Array.from(document.querySelectorAll(".i18n")).forEach(e=>{const d=f.weakMap.get(e);d&&d.update()})}function k(f,e,d={i:0}){let t=[];let a=0;return f.replace(/(\*\*)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,(f,s,c,n,i,u,o)=>{if(t.push(o.slice(a,u)),s)switch(s){case"**":{const f=document.createElement("b");f.append(...k(c,e,d)),t.push(f);break}}else if(n)t.push(document.createElement("br"));else if(i){const f=document.createElement("a"),a=i.lastIndexOf("]"),s=i.slice(1,a);f.append(...k(s,e,d));const c=i.slice(a+2,i.length-1);if(c){const e=r.b.wrapUrl(c);f.href=e.url,e.onclick&&f.setAttribute("onclick",e.onclick),f.target="_blank"}t.push(f)}else e&&t.push(e[d.i++]);return a=u+f.length,""}),a!==f.length&&t.push(f.slice(a)),t}function y(d,t=!1,a){const s=f.strings.get(d);let c;if(s)if("langPackStringPluralized"===s._&&(null==a?void 0:a.length)){let f=a[0];"string"==typeof f&&(f=+f.replace(/\D/g,""));c=s[e.select(f)+"_value"]||s.other_value}else c="langPackString"===s._?s.value:d;else c=d;if(t){if(null==a?void 0:a.length){const f=/un\d|%\d\$.|%./g;let e=0;c=c.replace(f,(f,d,t)=>""+a[e++])}return c}return k(c,a)}f.strings=new Map,f.countriesList=[],f.requestedServerLanguage=!1,f.getCacheLangPack=function(){return o||(o=Promise.all([n.a.get("langPack"),f.polyfillPromise]).then(([e])=>e?(t.b,f.lastRequestedLangCode||(f.lastRequestedLangCode=e.lang_code),m(e),e):b()).finally(()=>{o=void 0}))},f.loadLocalLangPack=b,f.loadLangPack=l,f.getStrings=function(f,e){return c.a.invokeApi("langpack.getStrings",{lang_pack:i.a.langPack,lang_code:f,keys:e})},f.formatLocalStrings=h,f.getLangPack=g,f.saveLangPack=p,f.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():d.e(28).then(d.bind(null,142)).then(f=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},f.default)}),f.applyLangPack=m,f.superFormatter=k,f.format=y,f.weakMap=new WeakMap;class v{constructor(e){this.property="innerHTML",this.element=e.element||document.createElement("span"),this.element.classList.add("i18n"),this.update(e),f.weakMap.set(this.element,this)}}class w extends v{update(f){if(Object(a.g)(this,f),"innerHTML"===this.property)this.element.textContent="",this.element.append(...y(this.key,!1,this.args));else{const f=this.element[this.property],e=y(this.key,!0,this.args);void 0===f?this.element.dataset[this.property]=e:this.element[this.property]=e}}}f.IntlElement=w;f.IntlDateElement=class extends v{update(e){Object(a.g)(this,e);const d=new Intl.DateTimeFormat(f.lastRequestedLangCode+"-u-hc-h23",this.options);this.element[this.property]=Object(s.a)(d.format(this.date))}},f.i18n=function(f,e){return new w({key:f,args:e}).element},f.i18n_=function(f){return new w(f).element},f._i18n=function(f,e,d,t){return new w({element:f,key:e,args:d,property:t}).element}}(b||(b={})),e.default=b;const l=b.i18n,h=b.i18n_,g=b._i18n;function p(f,e){const d=f.slice(0,1);for(let t=1;tl(f&&e?"WordDelimiterLast":"WordDelimiter"))}t.a.I18n=b},24:function(f,e,d){"use strict";d.r(e),d.d(e,"WebPushApiManager",(function(){return o}));var t=d(27),a=d(32),s=d(40),c=d(15),n=d(30),i=d(14),u=d(0),r=d(125);class o{constructor(){this.isAvailable=!0,this.isPushEnabled=!1,this.localNotificationsAvailable=!0,this.started=!1,this.settings={},this.isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,this.userVisibleOnly=!this.isFirefox,this.log=Object(s.b)("PM"),this.subscribe=()=>{this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.subscribe({userVisibleOnly:this.userVisibleOnly}).then(f=>{this.isPushEnabled=!0,this.pushSubscriptionNotify("subscribe",f)}).catch(f=>{"denied"===Notification.permission?this.log("Permission for Notifications was denied"):(this.log("Unable to subscribe to push.",f),this.userVisibleOnly||(this.userVisibleOnly=!0,setTimeout(this.subscribe,0)))})})},this.isAliveNotify=()=>{if(!this.isAvailable||c.default.idle&&c.default.idle.deactivated)return;this.settings.baseUrl=(location.href||"").replace(/#.*$/,"")+"#/im";const f={},e={push_action_mute1d:u.IS_MOBILE?"PushNotification.Action.Mute1d.Mobile":"PushNotification.Action.Mute1d",push_action_settings:u.IS_MOBILE?"PushNotification.Action.Settings.Mobile":"PushNotification.Action.Settings",push_message_nopreview:"PushNotification.Message.NoPreview"};for(const d in e)f[d]=i.default.format(e[d],!0);const d={type:"ping",payload:{localNotifications:this.localNotificationsAvailable,lang:f,settings:this.settings}};n.a.postSWMessage(d),this.isAliveTO=setTimeout(this.isAliveNotify,1e4)},"PushManager"in window&&"Notification"in window&&"serviceWorker"in navigator||(this.log.warn("Push messaging is not supported."),this.isAvailable=!1,this.localNotificationsAvailable=!1),this.isAvailable&&"denied"===Notification.permission&&this.log.warn("The user has blocked notifications.")}start(){this.started||(this.started=!0,this.getSubscription(),this.setUpServiceWorkerChannel())}setLocalNotificationsDisabled(){this.localNotificationsAvailable=!1}getSubscription(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.isPushEnabled=!!f,this.pushSubscriptionNotify("init",f)}).catch(f=>{this.log.error("Error during getSubscription()",f)})})}unsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.isPushEnabled=!1,f&&(this.pushSubscriptionNotify("unsubscribe",f),setTimeout(()=>{f.unsubscribe().then(f=>{this.isPushEnabled=!1}).catch(f=>{this.log.error("Unsubscription error: ",f)})},3e3))}).catch(f=>{this.log.error("Error thrown while unsubscribing from push messaging.",f)})})}forceUnsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then(f=>{f.pushManager.getSubscription().then(f=>{this.log.warn("force unsubscribe",f),f&&f.unsubscribe().then(f=>{this.log.warn("force unsubscribe successful",f),this.isPushEnabled=!1}).catch(f=>{this.log.error("Unsubscription error: ",f)})}).catch(f=>{this.log.error("Error thrown while unsubscribing from push messaging.",f)})})}setSettings(f){this.settings=Object(a.a)(f),clearTimeout(this.isAliveTO),this.isAliveNotify()}hidePushNotifications(){if(!this.isAvailable)return;n.a.postSWMessage({type:"notifications_clear"})}setUpServiceWorkerChannel(){this.isAvailable&&(n.a.addServiceWorkerTaskListener("push_click",f=>{c.default.idle&&c.default.idle.deactivated?r.a.reload():c.default.dispatchEvent("push_notification_click",f.payload)}),navigator.serviceWorker.ready.then(this.isAliveNotify))}pushSubscriptionNotify(f,e){if(e){const d=e.toJSON();if(!(d&&d.endpoint&&d.keys&&d.keys.p256dh&&d.keys.auth))return this.log.warn("Invalid push subscription",d),this.unsubscribe(),this.isAvailable=!1,void this.pushSubscriptionNotify(f);this.log.warn("Push",f,d),c.default.dispatchEvent("push_"+f,{tokenType:10,tokenValue:JSON.stringify(d)})}else this.log.warn("Push",f,!1),c.default.dispatchEvent("push_"+f,!1)}}const b=new o;t.a&&(t.a.webPushApiManager=b),e.default=b},25:function(f,e,d){"use strict";d.r(e),d.d(e,"TelegramMeWebManager",(function(){return i}));var t=d(7),a=d(27),s=d(72),c=d(51),n=d(57);class i{constructor(){this.disabled=s.a.test||-1===t.a.domains.indexOf(location.hostname)}setAuthorized(f){if(!this.disabled)return n.a.get("tgme_sync").then(e=>{const d=Object(c.f)(!0);if(f&&e&&e.canRedirect===f&&e.ts+86400>d)return;n.a.set({tgme_sync:{canRedirect:f,ts:d}});const a=`_websync_?authed=${f?"1":"0"}&version=${encodeURIComponent(t.a.version+" "+t.a.suffix)}`,s=["//telegram.me/"+a,"//t.me/"+a].map(f=>{const e=document.createElement("script"),d=new Promise(f=>{e.onload=e.onerror=()=>{e.remove(),f()}});return e.src=f,document.body.appendChild(e),d});return Promise.all(s)})}}const u=new i;a.a&&(a.a.telegramMeWebManager=u),e.default=u},29:function(f,e,d){"use strict";d.d(e,"a",(function(){return w}));var t=d(126);var a=d(94),s=d(73),c=d(0),n=d(27),i=d(9);const u={emojiMap:f=>f,shortcuts:[],emojis:[]},r=t.a.Emoji,o="a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc",b="["+o+"0-9]",l="((?:https?|ftp)://|mailto:)?(?:"+b+"{1,64}(?::"+b+"{0,64})?@)?(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}|"+b+"["+o+"·0-9-]{0,64}(?:\\."+b+"["+o+"·0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+o+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",h=(new RegExp("^"+"((?:https?|ftp)://|mailto:)?".slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),g=new RegExp("(^| )(@)([a-zA-Z\\d_]{5,32})|("+l+")|(\\n)|(((?:👨🏻‍🤝‍👨\ud83c[\udffc-\udfff]|👨🏼‍🤝‍👨\ud83c[\udffb\udffd-\udfff]|👨🏽‍🤝‍👨\ud83c[\udffb\udffc\udffe\udfff]|👨🏾‍🤝‍👨\ud83c[\udffb-\udffd\udfff]|👨🏿‍🤝‍👨\ud83c[\udffb-\udffe]|👩🏻‍🤝‍👨\ud83c[\udffc-\udfff]|👩🏻‍🤝‍👩\ud83c[\udffc-\udfff]|👩🏼‍🤝‍👨\ud83c[\udffb\udffd-\udfff]|👩🏼‍🤝‍👩\ud83c[\udffb\udffd-\udfff]|👩🏽‍🤝‍👨\ud83c[\udffb\udffc\udffe\udfff]|👩🏽‍🤝‍👩\ud83c[\udffb\udffc\udffe\udfff]|👩🏾‍🤝‍👨\ud83c[\udffb-\udffd\udfff]|👩🏾‍🤝‍👩\ud83c[\udffb-\udffd\udfff]|👩🏿‍🤝‍👨\ud83c[\udffb-\udffe]|👩🏿‍🤝‍👩\ud83c[\udffb-\udffe]|🧑🏻‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏼‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏽‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏾‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑🏿‍🤝‍🧑\ud83c[\udffb-\udfff]|🧑‍🤝‍🧑|👫\ud83c[\udffb-\udfff]|👬\ud83c[\udffb-\udfff]|👭\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d])|(?:\ud83d[\udc68\udc69]|🧑)(?:\ud83c[\udffb-\udfff])?‍(?:⚕️?|⚖️?|✈️?|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|⛹)(?:(?:\ud83c[\udffb-\udfff]|️?)‍[♀♂]️?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?‍[♀♂]️?|(?:👨‍❤️?‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍\ud83d[\udc66\udc67]|👨‍👩‍👦‍👦|👨‍👩‍👧‍\ud83d[\udc66\udc67]|👩‍❤️?‍💋‍\ud83d[\udc68\udc69]|👩‍👩‍👦‍👦|👩‍👩‍👧‍\ud83d[\udc66\udc67]|👨‍❤️?‍👨|👨‍👦‍👦|👨‍👧‍\ud83d[\udc66\udc67]|👨‍👨‍\ud83d[\udc66\udc67]|👨‍👩‍\ud83d[\udc66\udc67]|👩‍❤️?‍\ud83d[\udc68\udc69]|👩‍👦‍👦|👩‍👧‍\ud83d[\udc66\udc67]|👩‍👩‍\ud83d[\udc66\udc67]|🏳️?‍⚧️?|🏳️?‍🌈|🏴‍☠️?|🐕‍🦺|🐻‍❄️?|👁‍🗨|👨‍\ud83d[\udc66\udc67]|👩‍\ud83d[\udc66\udc67]|👯‍♀️?|👯‍♂️?|🤼‍♀️?|🤼‍♂️?|🧞‍♀️?|🧞‍♂️?|🧟‍♀️?|🧟‍♂️?|🐈‍⬛)|[#*0-9]️?⃣|(?:[©®™♟]️?)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[‼⁉ℹ↔-↙↩↪⌚⌛⌨⏏⏭-⏯⏱⏲⏸-⏺Ⓜ▪▫▶◀◻-◾☀-☄☎☑☔☕☘☠☢☣☦☪☮☯☸-☺♀♂♈-♓♠♣♥♦♨♻♿⚒-⚗⚙⚛⚜⚠⚡⚧⚪⚫⚰⚱⚽⚾⛄⛅⛈⛏⛑⛓⛔⛩⛪⛰-⛵⛸⛺⛽✂✈✉✏✒✔✖✝✡✳✴❄❇❗❣❤➡⤴⤵⬅-⬇⬛⬜⭐⭕〰〽㊗㊙])(?:️?|(?!︎))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[☝⛷⛹✌✍])(?:️?|(?!︎))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd]|[✊✋]))(?:\ud83c[\udffb-\udfff])?|(?:🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|🇦\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|🇧\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|🇨\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|🇩\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|🇪\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|🇫\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|🇬\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|🇭\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|🇮\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|🇯\ud83c[\uddea\uddf2\uddf4\uddf5]|🇰\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|🇱\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|🇲\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|🇳\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|🇴🇲|🇵\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|🇶🇦|🇷\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|🇸\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|🇹\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|🇺\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|🇻\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|🇼\ud83c[\uddeb\uddf8]|🇽🇰|🇾\ud83c[\uddea\uddf9]|🇿\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udeeb\udeec\udef4-\udefc\udfe0-\udfeb]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78\udd7a-\uddb4\uddb7\uddba\uddbc-\uddcb\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7a\ude80-\ude86\ude90-\udea8\udeb0-\udeb6\udec0-\udec2\uded0-\uded6]|[⏩-⏬⏰⏳♾⛎✅✨❌❎❓-❕➕-➗➰➿])|️))|(^|[\\s\\(\\]])(#[0-9_a-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff\\u0100-\\u024f\\u0253\\u0254\\u0256\\u0257\\u0259\\u025b\\u0263\\u0268\\u026f\\u0272\\u0289\\u028b\\u02bb\\u0300-\\u036f\\u1e00-\\u1eff\\u0400-\\u04ff\\u0500-\\u0527\\u2de0-\\u2dff\\ua640-\\ua69f\\u0591-\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u05d0-\\u05ea\\u05f0-\\u05f4\\ufb1d-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40-\\ufb41\\ufb43-\\ufb44\\ufb46-\\ufb4f\\u0610-\\u061a\\u0620-\\u065f\\u066e-\\u06d3\\u06d5-\\u06dc\\u06de-\\u06e8\\u06ea-\\u06ef\\u06fa-\\u06fc\\u06ff\\u0750-\\u077f\\u08a0\\u08a2-\\u08ac\\u08e4-\\u08fe\\ufb50-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\u200c\\u0e01-\\u0e3a\\u0e40-\\u0e4e\\u1100-\\u11ff\\u3130-\\u3185\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3003\\u3005\\u303b\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uff9f\\uffa1-\\uffdc]{2,64})|(^|\\s)\\/([a-zA-Z\\d_]{1,32})(?:@([a-zA-Z\\d_]{5,32}))?(\\b|$)","i"),p=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,m=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,k={Telegram:"tg://search_hashtag?hashtag={1}",Twitter:"https://twitter.com/hashtag/{1}",Instagram:"https://instagram.com/explore/tags/{1}/","Google Plus":"https://plus.google.com/explore/{1}"},y={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline"},v=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(let f in y)v.add(y[f]);var w;!function(f){function e(f){let e=Object(a.b)(f).replace(/-?fe0f/g,"");return r.hasOwnProperty(e)?e:null}function d(f){let d,a=f;const s=[];let c,n=0;for(g.lastIndex=0;d=a.match(g);){if(c=n+d.index,d[3])s.push({_:"messageEntityMention",offset:c+d[1].length,length:d[2].length+d[3].length});else if(d[4])if(p.test(d[4]))s.push({_:"messageEntityEmail",offset:c,length:d[4].length});else{let f,e=d[5];const a=d[6];if(a){if(e||"xn--"!==a.substr(0,4)&&-1===t.a.TLD.indexOf(a.toLowerCase())||(e="http://"),e){const t=A(d[4]);t.length!==d[4].length&&(d[4]=t),f=(d[5]?"":e)+d[4]}}else f=(d[5]?"":"http://")+d[4];f&&s.push({_:"messageEntityUrl",offset:c,length:d[4].length})}else if(d[7])s.push({_:"messageEntityLinebreak",offset:c,length:1});else if(d[8]){const f=e(d[8]);f&&s.push({_:"messageEntityEmoji",offset:c,length:d[8].length,unicode:f})}else d[11]?s.push({_:"messageEntityHashtag",offset:c+(d[10]?d[10].length:0),length:d[11].length}):d[13]&&s.push({_:"messageEntityBotCommand",offset:c+(d[11]?d[11].length:0)+(d[12]?d[12].length:0),length:1+d[13].length+(d[14]?1+d[14].length:0),unsafe:!0});a=a.substr(d.index+d[0].length),n+=d.index+d[0].length}return s}function n(f,e){return f.find(f=>{if(!(e._===f._||!v.has(e._)&&!v.has(f._)))return!1;return e.offset>=f.offset&&e.length+e.offset<=f.length+f.offset})}function o(f,e){const d=e.filter(e=>!n(f,e));if(f.push(...d),f.sort((f,e)=>f.offset-e.offset),!i.a)for(let e=0;et!==e&&f._===d._&&f.offset-d.length===d.offset),-1!==t){const e=f[t];d.length+=e.length,f.splice(t,1)}}while(-1!==t)}}function w(f,e={}){if(!f)return"";const t=[],a=e.entities||d(f),n=e.passEntities||{},u=e.contextSite||"Telegram",r="Telegram"!==u,o=(f,e,d)=>{t.push({part:e,offset:f.offset}),d&&t.unshift({part:d,offset:f.offset+f.length})};for(let d=0,t=a.length;d',""):o(t,"",""));break;case"messageEntityItalic":e.noTextFormat||(e.wrappingDraft?o(t,'',""):o(t,"",""));break;case"messageEntityStrike":if(e.wrappingDraft){o(t,``,"")}else o(t,"","");break;case"messageEntityUnderline":if(e.wrappingDraft){o(t,``,"")}else o(t,"","");break;case"messageEntityCode":e.wrappingDraft?o(t,'',""):o(t,"","");break;case"messageEntityPre":e.noTextFormat||o(t,`
`,"
");break;case"messageEntityHighlight":o(t,'',"");break;case"messageEntityBotCommand":if(!e.noLinks&&n[t._]){let d,a,c=f.substr(t.offset,t.length).substr(1);-1!==(a=c.indexOf("@"))?(d=c.substr(a+1),c=c.substr(0,a)):d=e.fromBot,o(t,``,"")}break;case"messageEntityEmoji":i.a?e.wrappingDraft?c.IS_SAFARI||o(t,'',""):o(t,'',""):o(t,``,'');break;case"messageEntityCaret":o(t,'');break;case"messageEntityUrl":case"messageEntityTextUrl":if(!e.noLinks||n[t._]){const c=f.substr(t.offset,t.length);let n,i=t.url||c,u=!1;const r=C(i,!0);if(i=r.url,n=r.onclick,"messageEntityTextUrl"===t._){const f=a[d+1];"messageEntityUrl"===(null==f?void 0:f._)&&f.length===t.length&&f.offset===t.offset&&d++,i!==c&&(u=!0)}const b=!!n;n||!u||b||(n="showMaskedAlert"),e.wrappingDraft&&(n=void 0);o(t,``,"")}break;case"messageEntityEmail":if(!e.noLinks){const e=f.substr(t.offset,t.length);o(t,``,"")}break;case"messageEntityHashtag":{const d=!e.noLinks&&k[u];if(d){const e=f.substr(t.offset,t.length).substr(1);o(t,``,"")}break}case"messageEntityMentionName":e.noLinks&&!n[t._]||o(t,`");break;case"messageEntityMention":if(!e.noLinks){const e=f.substr(t.offset,t.length).substr(1),{url:d,onclick:a}=C("t.me/"+e);o(t,``,"")}}}t.sort((f,e)=>f.offset-e.offset);const b=[];let l=0;for(const{part:e,offset:d}of t)d>l&&(b.push(Object(s.d)(f.slice(l,d))),l=d),b.push(e);return ld&&")"===f.charAt(e-1);)f=f.substr(0,e-1),t--,e--;return d>t&&(f=f.replace(/\)+$/,"")),f}function E(f,e=!1){if(!f)return"";return w(f,{entities:d(f).filter(f=>"messageEntityEmoji"===f._),wrappingDraft:e})}function C(f,e){let d,t,a,s;if(S(f)||(f="https://"+f),d=f.match(/^(?:https?:\/\/)?t(?:elegram)?\.me\/(.+)/)){const f=d[1].split("/");switch(f[0]){case"joinchat":case"addstickers":s=f[0];break;default:if(f[1]&&f[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===f.length){s="im";break}}}else(t=f.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?s="im":(a=f.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(s="tg_"+a[1],window[s]||(s=void 0));return{url:f,onclick:s}}function S(f){return f?f.match(h):null}function T(f){return{_:"messageEntityEmoji",offset:0,length:f.length,unicode:Object(a.e)(f).join("-").replace(/-?fe0f/g,"")}}f.getEmojiSpritesheetCoords=e,f.parseEntities=d,f.parseMarkdown=function(f,e,d){const t=[];let a=!1;const s=f=>n(e,f)?a=!1:(t.push(f),a=!0),c=[];let i,u=0;for(;i=f.match(m);){const e=u+i.index;c.push(f.substr(0,i.index));const d=i[3]||i[8]||i[11]||i[13];let t;if(u-=d.length,u+=d.length,a=!1,d.match(/^`*$/))c.push(i[0]);else if(i[3])t={_:"messageEntityPre",language:"",offset:e+i[1].length,length:d.length},s(t)&&("\n"===i[5]&&(i[5]="",u-=1),c.push(i[1]+d+i[5]),u-=i[2].length+i[4].length);else if(i[7]){const f=""===i[6];t={_:y[i[7]],offset:e+(f?0:i[6].length),length:d.length},s(t)&&(f?c.push(d):c.push(i[6]+d+i[9]),u-=2*i[7].length+(f?2:0))}else i[11]?(t={_:"messageEntityMentionName",user_id:+i[10],offset:e,length:d.length},s(t)&&(c.push(d),u-=i[0].length-d.length)):i[12]&&(t={_:"messageEntityTextUrl",url:i[14],offset:e,length:d.length},s(t)&&(c.push(d),u-=i[12].length-d.length));a||c.push(i[0]),f=f.substr(i.index+i[0].length),u+=i.index+i[0].length}c.push(f);let r=c.join("");r.replace(/\s+/g,"").length||(r=f,t.splice(0,t.length)),t.length||d||(r=r.trim()),o(e,t),b(e);let l=r.length;if(!d){r=r.replace(/^\s*/,"");let f=l-r.length;f&&e.forEach(e=>{e.offset=Math.max(0,e.offset-f)}),r=r.replace(/\s*$/,""),f=l-r.length,l=r.length,f&&e.forEach(f=>{f.offset+f.length>l&&(f.length=l-f.offset)})}return r},f.findConflictingEntity=n,f.mergeEntities=o,f.combineSameEntities=b,f.wrapRichText=w,f.fixEmoji=function(f,e){return f=f.replace(/[\u2640\u2642\u2764](?!\ufe0f)/g,(f,d,t)=>{if(e){const t=f.length;d+=t,e.forEach(f=>{const e=f.offset+f.length;e===d?f.length+=t:e>d&&(f.offset+=t)})}return f+"️"})},f.wrapDraftText=function(f,e={}){return f?w(f,{entities:e.entities,noLinks:!0,wrappingDraft:!0,passEntities:{messageEntityTextUrl:!0,messageEntityMentionName:!0}}):""},f.checkBrackets=A,f.replaceUrlEncodings=function(f){return f.replace(/(%[A-Z\d]{2})+/g,f=>{try{return decodeURIComponent(f)}catch(e){return f}})},f.wrapPlainText=function(f){if(i.a)return f;if(!f||!f.length)return"";var e,d=f=f.replace(/\ufe0f/g,"");const t=[];let a;for(g.lastIndex=0;e=d.match(g);){if(t.push(d.substr(0,e.index)),e[8]){const f=u.emojiMap[e[8]];f&&(a=r[f][1][0])?t.push(":"+a+":"):t.push(e[0])}else t.push(e[0]);d=d.substr(e.index+e[0].length)}return t.push(d),t.join("")},f.wrapEmojiText=E,f.wrapUrl=C,f.matchUrlProtocol=S,f.matchUrl=function(f){return f?f.match(l):null},f.matchEmail=function(f){return f?f.match(p):null},f.getAbbreviation=function(f,e=!1){const d=f.trim().split(" ");if(!d[0])return"";const t=[...d[0]][0];return e||1===d.length?E(t):E(t+[...d[d.length-1]][0])},f.isUsernameValid=function(f){return(f.length>=5&&f.length<=32||!f.length)&&/^[a-zA-Z0-9_]*$/.test(f)},f.getEmojiEntityFromEmoji=T,f.wrapSingleEmoji=function(f){return w(f,{entities:[T(f)]})}}(w||(w={})),n.a.RichTextProcessor=w;e.b=w},30:function(f,e,d){"use strict";function t(){return new Worker(d.p+"mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js")}var a=d(32);var s=d(40),c=d(15),n=d(139),i=d(27),u=d(72),r=d(52);class o extends r.a{constructor(f,e,d){super(),this.dcId=f,this.url=e,this.debug=u.a.debug&&!1,this.handleOpen=()=>{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=f=>{this.log.error("handleError",f),this.close()},this.handleClose=()=>{this.log("closed"),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=f=>{this.debug&&this.log.debug("<-","handleMessage",f.data.byteLength),this.dispatchEvent("message",f.data)},this.send=f=>{this.debug&&this.log.debug("-> body length to send:",f.length),this.ws.send(f)};let t=s.a.Error|s.a.Log;return this.debug&&(t|=s.a.Debug),this.log=Object(s.b)("WS-"+f+d,t),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(f){}this.handleClose()}}}var b=d(132),l=d(57),h=d(24),g=d(93),p=d(125),m=d(25),k=d(76),y=d(113);const v=new class extends class{invokeCrypto(f,...e){return this.performTaskWorker(f,...e)}}{constructor(){super(),this.afterMessageIdTemp=0,this.taskId=0,this.awaiting={},this.pending=[],this.updatesProcessor=null,this.log=Object(s.b)("API-PROXY"),this.hashes={},this.apiPromisesSingle={},this.apiPromisesCacheable={},this.isSWRegistered=!0,this.debug=i.b,this.sockets=new Map,this.taskListeners={},this.taskListenersSW={},this.postMessagesWaiting=[],this.onWorkerMessage=f=>{const e=f.data;if(!Object(a.f)(e))return;const d=this.taskListeners[e.type];d?d(e):e.update?this.updatesProcessor&&this.updatesProcessor(e.update):e.progress?c.default.dispatchEvent("download_progress",e.progress):(e.hasOwnProperty("result")||e.hasOwnProperty("error"))&&this.finalizeTask(e.taskId,e.result,e.error)},this.log("constructor"),b.a.start(),this.registerServiceWorker(),this.addTaskListener("clear",()=>{Promise.all([g.a.toggleStorage(!1),l.a.clear(),Promise.race([m.default.setAuthorized(!1),Object(k.a)(3e3)]),h.default.forceUnsubscribe(),Promise.all(["cachedFiles","cachedStreamChunks"].map(f=>caches.delete(f)))]).finally(()=>{p.a.reload()})}),this.addTaskListener("connectionStatusChange",f=>{c.default.dispatchEvent("connection_status_change",f.payload)}),this.addTaskListener("convertWebp",f=>{n.a.postMessage(f)}),this.addTaskListener("socketProxy",f=>{const e=f.payload,d=e.id;if("send"===e.type){this.sockets.get(d).send(e.payload)}else if("close"===e.type){this.sockets.get(d).close()}else if("setup"===e.type){const f=new o(e.payload.dcId,e.payload.url,e.payload.logSuffix),t=()=>{this.postMessage({type:"socketProxy",payload:{type:"open",id:d}})},a=()=>{this.postMessage({type:"socketProxy",payload:{type:"close",id:d}}),f.removeEventListener("open",t),f.removeEventListener("close",a),f.removeEventListener("message",s),this.sockets.delete(d)},s=f=>{this.postMessage({type:"socketProxy",payload:{type:"message",id:d,payload:f}})};f.addEventListener("open",t),f.addEventListener("close",a),f.addEventListener("message",s),this.sockets.set(d,f)}}),this.addTaskListener("localStorageProxy",f=>{const e=f.payload;l.a[e.type](...e.args).then(e=>{this.postMessage({type:"localStorageProxy",id:f.id,payload:e})})}),c.default.addEventListener("language_change",f=>{this.performTaskWorkerVoid("setLanguage",f)}),window.addEventListener("online",f=>{this.forceReconnectTimeout()}),this.registerWorker(),setTimeout(()=>{this.getConfig()},5e3)}isServiceWorkerOnline(){return this.isSWRegistered}registerServiceWorker(){if(!("serviceWorker"in navigator))return;const f=navigator.serviceWorker;f.register("./sw.js",{scope:"./"}).then(f=>{this.log("SW registered",f),this.isSWRegistered=!0;(f.installing||f.waiting||f.active).addEventListener("statechange",f=>{this.log("SW statechange",f)})},f=>{this.isSWRegistered=!1,this.log.error("SW registration failed!",f),this.onServiceWorkerFail&&this.onServiceWorkerFail()}),f.addEventListener("controllerchange",()=>{this.log.warn("controllerchange"),this.releasePending(),f.controller.addEventListener("error",f=>{this.log.error("controller error:",f)})}),f.addEventListener("message",f=>{const e=f.data;if(!Object(a.f)(e))return;const d=this.taskListenersSW[e.type];d&&d(e)}),this.addServiceWorkerTaskListener("requestFilePart",f=>{const e={type:f.type,id:f.id};this.performTaskWorker("requestFilePart",...f.payload).then(f=>{e.payload=f,this.postSWMessage(e)},d=>{e.originalPayload=f.payload,e.error=d,this.postSWMessage(e)})}),f.addEventListener("messageerror",f=>{this.log.error("SW messageerror:",f)})}postMessage(...f){this.postMessagesWaiting.push(f)}postSWMessage(f){navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage(f)}onWorkerFirstMessage(f){if(!this.worker){this.worker=f,this.log("set webWorker"),this.postMessage=this.worker.postMessage.bind(this.worker),this.postMessagesWaiting.forEach(f=>this.postMessage(...f)),this.postMessagesWaiting.length=0;const e=y.a;this.log("WebP supported:",e),this.postMessage({type:"webpSupport",payload:e}),this.postMessage({type:"userAgent",payload:navigator.userAgent}),this.releasePending()}}addTaskListener(f,e){this.taskListeners[f]=e}addServiceWorkerTaskListener(f,e){this.taskListenersSW[f]=e}registerWorker(){const f=new t;f.addEventListener("message",this.onWorkerFirstMessage.bind(this,f),{once:!0}),f.addEventListener("message",this.onWorkerMessage),f.addEventListener("error",f=>{this.log.error("WORKER ERROR",f)})}finalizeTask(f,e,d){const t=this.awaiting[f];void 0!==t&&(this.debug&&this.log.debug("done",t.taskName,e,d),d?t.reject(d):t.resolve(e),delete this.awaiting[f])}performTaskWorkerVoid(f,...e){const d={task:f,taskId:this.taskId,args:e};this.pending.push(d),this.releasePending(),this.taskId++}performTaskWorker(f,...e){return this.debug&&this.log.debug("start",f,e),new Promise((d,t)=>{this.awaiting[this.taskId]={resolve:d,reject:t,taskName:f},this.performTaskWorkerVoid(f,...e)})}releasePending(){this.postMessage&&(this.debug&&this.log.debug("releasing tasks, length:",this.pending.length),this.pending.forEach(f=>{this.postMessage(f)}),this.debug&&this.log.debug("released tasks"),this.pending.length=0)}setUpdatesProcessor(f){this.updatesProcessor=f}invokeApi(f,e={},d={}){return this.performTaskWorker("invokeApi",f,e,d)}invokeApiAfter(f,e={},d={}){let t=d;return t.prepareTempMessageId=""+ ++this.afterMessageIdTemp,t=Object.assign({},d),d.messageId=t.prepareTempMessageId,this.invokeApi(f,e,t)}invokeApiHashable(f,e={},d={}){const t=JSON.stringify(e);let a;return this.hashes[f]&&(a=this.hashes[f][t],a&&(e.hash=a.hash)),this.invokeApi(f,e,d).then(e=>{if(e._.includes("NotModified"))return this.debug&&this.log.warn("NotModified saved!",f,t),a.result;if(e.hash){const d=e.hash;this.hashes[f]||(this.hashes[f]={}),this.hashes[f][t]={hash:d,result:e}}return e})}invokeApiSingle(f,e={},d={}){const t=f+"-"+JSON.stringify(e);return this.apiPromisesSingle[t]?this.apiPromisesSingle[t]:this.apiPromisesSingle[t]=this.invokeApi(f,e,d).finally(()=>{delete this.apiPromisesSingle[t]})}invokeApiCacheable(f,e={},d={}){var t;const a=null!==(t=this.apiPromisesCacheable[f])&&void 0!==t?t:this.apiPromisesCacheable[f]={},s=JSON.stringify(e),c=a[s];if(c&&(!d.override||!c.fulfilled))return c.promise;let n;d.override&&(c&&c.timeout&&(clearTimeout(c.timeout),delete c.timeout),delete d.override),d.cacheSeconds&&(n=window.setTimeout(()=>{delete a[s]},1e3*d.cacheSeconds),delete d.cacheSeconds);const i=this.invokeApi(f,e,d);return a[s]={timestamp:Date.now(),fulfilled:!1,timeout:n,promise:i,params:e},i}clearCache(f,e){const d=this.apiPromisesCacheable[f];if(d)for(const f in d){const t=d[f];e(t.params)&&(t.timeout&&clearTimeout(t.timeout),delete d[f])}}setBaseDcId(f){return this.performTaskWorker("setBaseDcId",f)}setQueueId(f){return this.performTaskWorker("setQueueId",f)}setUserAuth(f){return"number"==typeof f&&(f={dcID:0,date:Date.now()/1e3|0,id:f}),c.default.dispatchEvent("user_auth",f),this.performTaskWorker("setUserAuth",f)}getNetworker(f,e){return this.performTaskWorker("getNetworker",f,e)}logOut(){return this.performTaskWorker("logOut")}cancelDownload(f){return this.performTaskWorker("cancelDownload",f)}downloadFile(f){return this.performTaskWorker("downloadFile",f)}uploadFile(f){return this.performTaskWorker("uploadFile",f)}toggleStorage(f){const e={type:"toggleStorage",payload:f};this.postMessage(e),this.postSWMessage(e)}stopAll(){return this.performTaskWorkerVoid("stopAll")}startAll(){return this.performTaskWorkerVoid("startAll")}forceReconnectTimeout(){this.postMessage({type:"online"})}forceReconnect(){this.postMessage({type:"forceReconnect"})}getConfig(){return this.getConfigPromise?this.getConfigPromise:this.getConfigPromise=this.invokeApi("help.getConfig").then(f=>(c.default.config=f,f))}};i.a.apiManagerProxy=v;e.a=v},37:function(f,e,d){"use strict";d.d(e,"c",(function(){return i})),d.d(e,"a",(function(){return t}));var t,a=d(27),s=d(114),c=d(52);class n{constructor(f=0,e=f){this.width=f,this.height=e}aspect(f,e){return Object(s.a)(this.width,this.height,f.width,f.height,e)}aspectFitted(f){return this.aspect(f,!0)}aspectCovered(f){return this.aspect(f,!1)}}function i(f,e){return new n(f,e)}!function(f){f[f.mobile=0]="mobile",f[f.medium=1]="medium",f[f.large=2]="large"}(t||(t={}));class u extends c.a{constructor(){super(),this.screenSizes=[{key:t.mobile,value:600},{key:t.medium,value:1275},{key:t.large,value:1680}],this.sizes={handhelds:{regular:i(270,270),webpage:i(270,200),album:i(270,0),esgSticker:i(68,68),animatedSticker:i(180,180),staticSticker:i(180,180),emojiSticker:i(112,112),poll:i(240,0),round:i(200,200)},desktop:{regular:i(420,340),webpage:i(420,340),album:i(420,0),esgSticker:i(80,80),animatedSticker:i(200,200),staticSticker:i(200,200),emojiSticker:i(112,112),poll:i(330,0),round:i(280,280)}},this.isMobile=!1,this.handleResize=()=>{const f=window.innerWidth;let e=this.screenSizes[0].key;for(let d=this.screenSizes.length-1;d>=0;--d)if(this.screenSizes[d].value{this.rAF&&window.cancelAnimationFrame(this.rAF),this.rAF=window.requestAnimationFrame(()=>{this.handleResize(),this.rAF=0})}),this.handleResize()}}const r=new u;a.a.mediaSizes=r,e.b=r},51:function(f,e,d){"use strict";d.d(e,"b",(function(){return u})),d.d(e,"c",(function(){return r})),d.d(e,"d",(function(){return o})),d.d(e,"e",(function(){return b})),d.d(e,"f",(function(){return l})),d.d(e,"a",(function(){return v}));var t=d(27),a=d(14),s=d(73);const c=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],i=f=>{const e=new Date(Date.UTC(f.getFullYear(),f.getMonth(),f.getDate())),d=e.getUTCDay()||7;e.setUTCDate(e.getUTCDate()+4-d);const t=new Date(Date.UTC(e.getUTCFullYear(),0,1));return Math.ceil(((e.getTime()-t.getTime())/86400+1)/7)};function u(f){const e=new Date,d=e.getTime()/1e3|0,t=f.getTime()/1e3|0,s={};return d-t<86400&&e.getDate()===f.getDate()?s.hour=s.minute="2-digit":e.getFullYear()!==f.getFullYear()?(s.year=s.day="numeric",s.month="2-digit"):d-t<604800&&i(e)===i(f)?s.weekday="short":(s.month="short",s.day="numeric"),new a.default.IntlDateElement({date:f,options:s}).element}function r(f){const e=new Date,d=new Date(1e3*f),t=e.getTime()/1e3,c=o(d);let n;n=t-f<86400&&e.getDate()===d.getDate()?Object(a.i18n)("Date.Today"):t-f<172800&&e.getDate()-1===d.getDate()?Object(s.a)(a.default.format("Yesterday",!0)):e.getFullYear()!==d.getFullYear()?new a.default.IntlDateElement({date:d,options:{month:"short",day:"numeric",year:"numeric"}}).element:new a.default.IntlDateElement({date:d,options:{month:"short",day:"numeric"}}).element;const i=document.createDocumentFragment();return i.append(n," ",Object(a.i18n)("ScheduleController.at")," ",c),i}function o(f){return new a.default.IntlDateElement({date:f,options:{hour:"2-digit",minute:"2-digit"}}).element}t.a&&(t.a.formatDateAccordingToTodayNew=u);const b=(f,e={})=>{const d=e.monthAsNumber?".":" ",t=("0"+f.getHours()).slice(-2)+":"+("0"+f.getMinutes()).slice(-2)+(e.noSeconds?"":":"+("0"+f.getSeconds()).slice(-2));return(e.leadingZero?("0"+f.getDate()).slice(-2):f.getDate())+d+(e.monthAsNumber?("0"+(f.getMonth()+1)).slice(-2):c[f.getMonth()])+d+f.getFullYear()+(e.noTime?"":", "+t)};function l(f){const e=Date.now();return f?e/1e3|0:e}const h=new RegExp("20[0-9]{1,2}"),g=new RegExp("(\\w{3,}) ([0-9]{0,4})","i"),p=new RegExp("([0-9]{0,4}) (\\w{2,})","i"),m=new RegExp("^([0-9]{1,4})(\\.| |/|\\-)([0-9]{1,4})$","i"),k=new RegExp("^([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,4})$","i"),y=[31,29,31,30,31,30,31,31,30,31,30,31];function v(f,e){const d=f.trim().toLowerCase();if(d.length<3)return;if(0==="today".indexOf(d)){const f=new Date,d=f.getFullYear(),t=f.getMonth(),a=f.getDate();f.setFullYear(d,t,a),f.setHours(0,0,0);const s=f.getTime();f.setFullYear(d,t,a+1),f.setHours(0,0,0);const c=f.getTime()-1;return void e.push({title:"Today",minDate:s,maxDate:c})}if(0==="yesterday".indexOf(d)){const f=new Date,d=f.getFullYear(),t=f.getMonth(),a=f.getDate();f.setFullYear(d,t,a),f.setHours(0,0,0);const s=f.getTime()-864e5;f.setFullYear(d,t,a+1),f.setHours(0,0,0);const c=f.getTime()-86400001;return void e.push({title:"Yesterday",minDate:s,maxDate:c})}const t=function(f){const e=new Date;if(f.length<=3)return-1;for(let d=0;d<7;d++)if(e.setDate(e.getDate()+1),0===T(e.getTime()).toLowerCase().indexOf(f))return e.getDay();return-1}(d);if(t>=0){const f=new Date,d=f.getTime(),a=t-f.getDay();f.setDate(f.getDate()+a),f.getTime()>d&&f.setTime(f.getTime()-6048e5);const s=f.getFullYear(),c=f.getMonth(),n=f.getDate();f.setFullYear(s,c,n),f.setHours(0,0,0);const i=f.getTime();f.setFullYear(s,c,n+1),f.setHours(0,0,0);const u=f.getTime()-1;return void e.push({title:T(i),minDate:i,maxDate:u})}let a;if(null===(a=m.exec(d)))if(null===(a=k.exec(d)))if(null===(a=h.exec(d))){if(null!==(a=g.exec(d))){const f=a[1],d=a[2],t=P(f);if(t>=0){const f=+d;if(f>0&&f<=31){return void A(e,f-1,t)}if(f>=2013){return void w(e,t,f)}}}if(null!==(a=p.exec(d))){const f=a[1],d=P(a[2]);if(d>=0){const t=+f;if(t>0&&t<=31){return void A(e,t-1,d)}if(t>=2013){w(e,d,t)}}}}else{let f=+d;const t=(new Date).getFullYear();if(f<2013){f=2013;for(let d=t;d>=f;d--){const f=new Date;f.setFullYear(d,0,1),f.setHours(0,0,0);const t=f.getTime();f.setFullYear(d+1,0,1),f.setHours(0,0,0);const a=f.getTime()-1;e.push({title:""+d,minDate:t,maxDate:a})}}else if(f<=t){const d=new Date;d.setFullYear(f,0,1),d.setHours(0,0,0);const t=d.getTime();d.setFullYear(f+1,0,1),d.setHours(0,0,0);const a=d.getTime()-1;e.push({title:""+f,minDate:t,maxDate:a})}}else{const f=a[1],d=a[3],t=a[5];if(!a[2]===a[4])return;const s=parseInt(f),c=parseInt(d)-1;let n=parseInt(t);n>=10&&n<=99&&(n+=2e3);const i=(new Date).getFullYear();if(D(s-1,c)&&n>=2013&&n<=i){const f=new Date;f.setFullYear(n,c,s),f.setHours(0,0,0);const d=f.getTime();f.setFullYear(n,c,s+1),f.setHours(0,0,0);const t=f.getTime()-1;return void e.push({title:S(d),minDate:d,maxDate:t})}}else{const f=a[1],d=a[3],t=parseInt(f),s=parseInt(d);if(t>0&&t<=31){if(s>=2013&&t<=12){return void w(e,t-1,s)}if(s<=12){A(e,t-1,s-1)}}else if(t>=2013&&s<=12){w(e,s-1,t)}}}function w(f,e,d){const t=(new Date).getFullYear(),a=Date.now();if(d>=2013&&d<=t){const t=new Date;t.setFullYear(d,e,1),t.setHours(0,0,0);const s=t.getTime();if(s>a)return;t.setMonth(t.getMonth()+1);const c=t.getTime()-1;f.push({title:E(s),minDate:s,maxDate:c})}}function A(f,e,d){if(D(e,d)){const a=(new Date).getFullYear(),s=Date.now();for(let c=a;c>=2013;c--){if(1===d&&28===e&&(((t=c)%4!=0||t%100==0)&&t%400!=0))continue;const n=new Date;n.setFullYear(c,d,e+1),n.setHours(0,0,0);const i=n.getTime();if(i>s)continue;n.setFullYear(c,d,e+2),n.setHours(0,0,0);const u=n.getTime()-1;c===a?f.push({title:C(i),minDate:i,maxDate:u}):f.push({title:S(i),minDate:i,maxDate:u})}}var t}function E(f){const e=new Date(f);return c[e.getMonth()].slice(0,3)+" "+e.getFullYear()}function C(f){const e=new Date(f);return c[e.getMonth()].slice(0,3)+" "+e.getDate()}function S(f){const e=new Date(f);return("0"+e.getDate()).slice(-2)+"."+("0"+(e.getMonth()+1)).slice(-2)+"."+e.getFullYear()}function T(f){const e=new Date(f);return n[e.getDay()]}function D(f,e){return e>=0&&e<12&&f>=0&&fd&&(f=f.slice(0,e)+"..."),f}function a(f){return f.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function s(f){return f.replace(/&/g,"&").replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=>"&#"+(1024*(f.charCodeAt(0)-55296)+(f.charCodeAt(1)-56320)+65536)+";").replace(/([^\#-~| |!])/g,f=>"&#"+f.charCodeAt(0)+";").replace(//g,">")}function c(f,e){if(f.length{let i=f.slice(t,n);const u=a++;if(i.length>e){c(i.slice(e),e).forEach(f=>{s[a++]=f}),i=i.slice(0,e)}t=n,d=0,s[u]=(s[u]||"")+i};let i=0;for(;;){let t=f.indexOf(" ",i);if(-1===t){i!==f.length-1&&n();break}t+=" ".length;const a=t-i;d+a>e&&n(d),i=t,d+=a}return s}function n(f){const e=f.replace("input","");return e[0].toLowerCase()+e.slice(1)}function i(f){return f="input"+(f=f[0].toUpperCase()+f.slice(1))}function u(f){return f.charAt(0).toUpperCase()+f.slice(1)}d.d(e,"f",(function(){return t})),d.d(e,"e",(function(){return a})),d.d(e,"d",(function(){return s})),d.d(e,"g",(function(){return c})),d.d(e,"b",(function(){return n})),d.d(e,"c",(function(){return i})),d.d(e,"a",(function(){return u}))},76:function(f,e,d){"use strict";d.d(e,"a",(function(){return t}));const t=f=>new Promise(e=>{setTimeout(e,f)})},94:function(f,e,d){"use strict";function t(f){return n(c(f)).join("-")}d.d(e,"b",(function(){return t})),d.d(e,"e",(function(){return n})),d.d(e,"d",(function(){return i})),d.d(e,"c",(function(){return u})),d.d(e,"a",(function(){return r}));const a=/\uFE0F/g,s=String.fromCharCode(8205),c=f=>f.indexOf(s)<0?f.replace(a,""):f;function n(f){const e=[];let d=0,t=0,a=0;for(;a55296&&d<=56319?t=d:e.push(d.toString(16));return e.length&&2===e[0].length&&(e[0]="00"+e[0]),e}function i(f){let e=f.match(/[\uDFFB-\uDFFF]/);return e?5-(57343-e[0].charCodeAt(0)):0}function u(f){return String.fromCharCode(55356,56741+f.charCodeAt(0),55356,56741+f.charCodeAt(1))}function r(f){return f.split("-").reduce((f,e)=>f+String.fromCodePoint(parseInt(e,16)),"")}}}]); +//# sourceMappingURL=1.8ebe82cad4450b8187c1.chunk.js.map \ No newline at end of file diff --git a/public/1.90adb57fb90001b6aa19.chunk.js.map b/public/1.8ebe82cad4450b8187c1.chunk.js.map similarity index 99% rename from public/1.90adb57fb90001b6aa19.chunk.js.map rename to public/1.8ebe82cad4450b8187c1.chunk.js.map index ab0d6789..c75a1dc5 100644 --- a/public/1.90adb57fb90001b6aa19.chunk.js.map +++ b/public/1.8ebe82cad4450b8187c1.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/environment/webpSupport.ts","webpack:///./src/helpers/calcImageInBox.ts","webpack:///./src/lib/appManagers/appRuntimeManager.ts","webpack:///./src/lib/config.ts","webpack:///./src/lib/mtproto/singleInstance.ts","webpack:///./src/lib/webp/webp.worker.ts","webpack:///./src/lib/webp/webpWorkerController.ts","webpack:///./src/lib/langPack.ts","webpack:///./src/lib/mtproto/webPushApiManager.ts","webpack:///./src/lib/mtproto/telegramMeWebManager.ts","webpack:///./src/vendor/emoji/regex.ts","webpack:///./src/lib/richtextprocessor.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/mtprotoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/helpers/mediaSizes.ts","webpack:///./src/helpers/date.ts","webpack:///./src/helpers/string.ts","webpack:///./src/helpers/schedulers/pause.ts","webpack:///./src/vendor/emoji/index.ts"],"names":["IS_WEBP_SUPPORTED","document","createElement","toDataURL","startsWith","calcImageInBox","imageW","imageH","boxW","boxH","noZoom","boxedImageW","boxedImageH","appRuntimeManager","location","reload","e","window","close","focus","Config","Emoji","LatinizeMap","TLD","MediaSizes","singleInstance","log","clearInstance","this","masterInstance","deactivated","warn","delete","deactivateInstance","deactivateTimeout","idle","dispatchEvent","checkInstance","isIDLE","time","Date","now","newInstance","id","instanceID","get","then","curInstance","set","xt_instance","startAll","initial","clearTimeout","stopAll","setTimeout","started","reset","addEventListener","setInterval","documentElement","Worker_fn","Worker","webpWorkerController","convertPromises","worker","payload","data","fileName","indexOf","promise","bytes","resolve","reject","postMessage","init","hasOwnProperty","convertPromise","type","langPack","I18n","pluralRules","cacheLangPackPromise","loadLocalLangPack","defaultCode","langPackCode","lastRequestedLangCode","Promise","all","lang","langSign","countries","strings","formatLocalStrings","default","saveLangPack","_","from_version","lang_code","version","local","loadLangPack","langCode","requestedServerLanguage","invokeApiCacheable","lang_pack","hash","polyfillPromise","pushTo","i","v","push","key","value","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","forEach","l","concat","string","appVersion","langPackVersion","applyLangPack","Intl","PluralRules","err","console","error","split","clear","countriesList","length","country","name","langPackKey","default_name","lastAppliedLangCode","Array","from","querySelectorAll","element","instance","weakMap","update","superFormatter","input","args","indexHolder","out","lastIndex","replace","match","p1","p2","p3","p4","offset","slice","b","append","a","idx","lastIndexOf","text","url","wrappedUrl","wrapUrl","href","onclick","setAttribute","target","format","plain","str","select","regExp","Map","getCacheLangPack","finally","undefined","getStrings","invokeApi","keys","_Intl","Object","assign","WeakMap","IntlElementBase","options","property","classList","add","IntlElement","textContent","formatted","dataset","IntlDateElement","dateTimeFormat","DateTimeFormat","date","i18n","i18n_","_i18n","joinElementsWith","elements","joiner","arr","isLast","join","useLast","WebPushApiManager","isAvailable","isPushEnabled","localNotificationsAvailable","settings","isFirefox","navigator","userAgent","toLowerCase","userVisibleOnly","subscribe","serviceWorker","ready","reg","pushManager","subscription","pushSubscriptionNotify","catch","Notification","permission","isAliveNotify","baseUrl","ACTIONS_LANG_MAP","push_action_mute1d","push_action_settings","push_message_nopreview","action","task","localNotifications","postSWMessage","isAliveTO","getSubscription","setUpServiceWorkerChannel","unsubscribe","successful","newSettings","addServiceWorkerTaskListener","event","subscriptionObj","toJSON","endpoint","p256dh","auth","tokenType","tokenValue","JSON","stringify","webPushApiManager","TelegramMeWebManager","disabled","test","domains","hostname","canRedirect","curValue","ts","tgme_sync","path","encodeURIComponent","suffix","promises","map","script","onload","onerror","remove","src","body","appendChild","telegramMeWebManager","EmojiHelper","emojiMap","code","shortcuts","emojis","emojiData","alphaCharsRegExp","urlAlphanumericRegExpPart","urlRegExp","urlProtocolRegExpPart","urlAnyProtocolRegExp","RegExp","fullRegExp","emailRegExp","markdownRegExp","siteHashtags","Telegram","Twitter","Instagram","markdownEntities","passConflictingEntities","Set","RichTextProcessor","getEmojiSpritesheetCoords","emojiCode","unified","parseEntities","raw","entities","matchIndex","rawOffset","index","protocol","tld","substr","balanced","checkBrackets","emojiCoords","unicode","unsafe","findConflictingEntity","currentEntities","newEntity","find","currentEntity","has","mergeEntities","newEntities","filtered","filter","sort","entity","nextEntity","combineSameEntities","nextEntityIdx","findIndex","_i","splice","wrapRichText","lol","passEntities","contextSite","contextExternal","insertPart","startPart","endPart","part","unshift","noTextFormat","wrappingDraft","language","noLinks","bot","atPos","command","fromBot","entityText","masked","wrapped","currentContext","electronHelpers","contextUrl","hashtag","user_id","username","usedLength","urlLength","urlOpenBrackets","urlCloseBrackets","charAt","wrapEmojiText","isDraft","tgMeMatch","telescoPeMatch","tgMatch","matchUrlProtocol","getEmojiEntityFromEmoji","emoji","parseMarkdown","noTrim","pushedEntity","pushEntity","newTextParts","isSOH","newText","trim","diff","Math","max","fixEmoji","end","wrapDraftText","messageEntityTextUrl","messageEntityMentionName","replaceUrlEncodings","urlWithEncoded","decodeURIComponent","wrapPlainText","emojiTitle","matchUrl","matchEmail","getAbbreviation","onlyFirst","splitted","first","isUsernameValid","wrapSingleEmoji","dcId","logSuffix","super","debug","handleOpen","handleError","handleClose","removeListeners","handleMessage","byteLength","send","ws","logTypes","Error","Log","Debug","logger","connect","removeEventListener","WebSocket","binaryType","apiManagerProxy","method","performTaskWorker","afterMessageIdTemp","taskId","awaiting","pending","updatesProcessor","hashes","apiPromisesSingle","apiPromisesCacheable","isSWRegistered","sockets","taskListeners","taskListenersSW","postMessagesWaiting","onWorkerMessage","callback","progress","rootScope","finalizeTask","result","start","registerServiceWorker","addTaskListener","toggleStorage","sessionStorage","race","setAuthorized","pause","forceUnsubscribe","cacheName","caches","socketTask","socket","onOpen","onClose","onMessage","buffer","storageTask","res","performTaskWorkerVoid","forceReconnectTimeout","registerWorker","getConfig","register","scope","registration","installing","waiting","active","onServiceWorkerFail","releasePending","controller","responseTask","uploadFile","originalPayload","message","bind","isWebpSupported","onWorkerFirstMessage","once","deferred","taskName","params","o","prepareTempMessageId","messageId","queryJSON","cached","includes","q","cache","item","override","fulfilled","timeout","cacheSeconds","timestamp","verify","queueId","userAuth","dcID","dc_id","enabled","getConfigPromise","config","ScreenSize","MediaSize","width","height","boxSize","fitted","aspect","makeMediaSize","screenSizes","mobile","medium","large","sizes","handhelds","regular","webpage","album","esgSticker","animatedSticker","staticSticker","emojiSticker","poll","round","desktop","isMobile","handleResize","innerWidth","activeScreen","wasScreen","rAF","cancelAnimationFrame","requestAnimationFrame","mediaSizes","months","days","getWeekNumber","d","UTC","getFullYear","getMonth","getDate","dayNum","getUTCDay","setUTCDate","getUTCDate","yearStart","getUTCFullYear","ceil","getTime","formatDateAccordingToTodayNew","today","hour","minute","year","day","month","weekday","formatFullSentTime","timeEl","formatTime","dateEl","fragment","createDocumentFragment","getFullDate","monthAsNumber","getHours","getMinutes","noSeconds","getSeconds","leadingZero","noTime","tsNow","seconds","t","yearPattern","monthYearOrDayPattern","yearOrDayAndMonthPattern","shortDate","longDate","numberOfDaysEachMonth","fillTipDates","query","dates","setFullYear","setHours","minDate","maxDate","title","dayOfWeek","c","setDate","formatWeekLong","getDay","getDayOfWeek","distance","setTime","matches","exec","g1","g2","k","createForDayMonth","createForMonthYear","selectedYear","currentYear","g3","parseInt","validDateForMonth","formatterYearMax","k1","setMonth","formatterMonthYear","formatterDayMonth","limitSymbols","limitFrom","escapeRegExp","encodeEntities","charCodeAt","splitStringByLength","maxLength","lastSliceStartIndex","arrayIndex","cut","_arrayIndex","partLength","convertInputKeyToKey","inputKey","convertKeyToInputKey","toUpperCase","capitalizeFirstLetter","ms","encodeEmoji","emojiText","toCodePoints","removeVS16s","vs16RegExp","zeroWidthJoiner","String","fromCharCode","rawEmoji","unicodeSurrogates","points","char","previous","toString","getEmojiToneIndex","getCountryEmoji","iso2","emojiFromCodePoints","codePoints","reduce","prev","curr","fromCodePoint"],"mappings":"sFAAA,MAAMA,EAAoBC,SAASC,cAAc,UAAUC,UAAU,cAAcC,WAAW,mBAE/E,O,iCCFf,8CAce,SAASC,EAAeC,EAAgBC,EAAgBC,EAAcC,EAAcC,GAAS,GAC1G,GAAGJ,EAASE,GAAQD,EAASE,GAAQC,EACnC,OAAO,YAAcJ,EAAQC,GAG/B,IAAII,EAAcH,EACdI,EAAcH,EAsBlB,OApBIH,EAASC,EAAWC,EAAOC,EAC7BG,EAAeL,EAASC,EAAOF,EAAU,GAEzCK,EAAeL,EAASG,EAAOF,EAAU,EACtCI,EAAcH,IACfI,EAAeA,EAAcJ,EAAOG,EAAe,EACnDA,EAAcH,IASfE,GAAUC,GAAeL,GAAUM,GAAeL,IACnDI,EAAcL,EACdM,EAAcL,GAGT,YAAcI,EAAaC,GA1CpC,MA6CA,EAAeP,eAAiBA,G,iCCMhC,MAAMQ,EAAoB,IAxCnB,MACE,SACL,IACEC,SAASC,SACT,MAAMC,KAOH,QACL,IACEC,OAAOC,QACP,MAAMF,KAMH,QAeHC,OAAOE,UAME,O,iCCpDf,YAeO,MAYDC,EAAS,CACbC,MAb8C,CAAC,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,IAAI,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,IAAI,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,MAAM,kBAAkB,MAAM,QAAQ,MAAM,kBAAkB,MAAM,4CAA4C,MAAM,4CAA4C,MAAM,4CAA4C,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,6BAA6B,KAAK,wCAAwC,KAAK,QAAQ,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,6BAA6B,KAAK,6BAA6B,KAAK,wCAAwC,KAAK,wCAAwC,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,IAAI,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,IAAI,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,iBAAiB,KAAK,iBAAiB,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GActs7DC,YAJgD,CAAC,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,MAAM,IAAK,MAAM,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,MAAO,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,MAAO,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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","file":"1.90adb57fb90001b6aa19.chunk.js","sourcesContent":["const IS_WEBP_SUPPORTED = document.createElement('canvas').toDataURL('image/webp').startsWith('data:image/webp');\n\nexport default IS_WEBP_SUPPORTED;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { makeMediaSize } from \"./mediaSizes\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\nexport default function calcImageInBox(imageW: number, imageH: number, boxW: number, boxH: number, noZoom = true) {\r\n if(imageW < boxW && imageH < boxH && noZoom) {\r\n return makeMediaSize(imageW, imageH);\r\n }\r\n\r\n let boxedImageW = boxW;\r\n let boxedImageH = boxH;\r\n\r\n if((imageW / imageH) > (boxW / boxH)) {\r\n boxedImageH = (imageH * boxW / imageW) | 0;\r\n } else {\r\n boxedImageW = (imageW * boxH / imageH) | 0;\r\n if(boxedImageW > boxW) {\r\n boxedImageH = (boxedImageH * boxW / boxedImageW) | 0;\r\n boxedImageW = boxW;\r\n }\r\n }\r\n\r\n // if (Config.Navigator.retina) {\r\n // imageW = Math.floor(imageW / 2)\r\n // imageH = Math.floor(imageH / 2)\r\n // }\r\n\r\n if(noZoom && boxedImageW >= imageW && boxedImageH >= imageH) {\r\n boxedImageW = imageW;\r\n boxedImageH = imageH;\r\n }\r\n\r\n return makeMediaSize(boxedImageW, boxedImageH);\r\n}\r\n\r\nMOUNT_CLASS_TO.calcImageInBox = calcImageInBox;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport class AppRuntimeManager {\r\n public reload() {\r\n try {\r\n location.reload();\r\n } catch(e) {};\r\n\r\n // if(window.chrome && chrome.runtime && chrome.runtime.reload) {\r\n // chrome.runtime.reload();\r\n // }\r\n }\r\n\r\n public close() {\r\n try {\r\n window.close();\r\n } catch(e) {}\r\n }\r\n\r\n /**\r\n * Better to call from event\r\n */\r\n public focus() {\r\n // // @ts-ignore\r\n // if(window.navigator.mozApps && document.hidden) {\r\n // // Get app instance and launch it to bring app to foreground\r\n // // @ts-ignore\r\n // window.navigator.mozApps.getSelf().onsuccess = function() {\r\n // this.result.launch();\r\n // };\r\n // } else {\r\n // // @ts-ignore\r\n // if(window.chrome && chrome.app && chrome.app.window) {\r\n // // @ts-ignore\r\n // chrome.app.window.current().focus();\r\n // }\r\n\r\n window.focus();\r\n // }\r\n }\r\n}\r\n\r\nconst appRuntimeManager = new AppRuntimeManager();\r\nexport default appRuntimeManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport mediaSizes from '../helpers/mediaSizes';\r\n\r\n// !WARNING, ТУТ СЛОЖНО! по-хорошему, надо бы это переделать без fe0f, но они здесь необходимы чтобы отрендерить панель, и ниже дописаны 3 элемента которые не воспроизводятся без fe0f\r\nexport const Emoji: {[emoji: string]: number} = {\"2049\":62748,\"2122\":62776,\"2139\":62801,\"2194\":62678,\"2195\":62677,\"2196\":62676,\"2197\":62670,\"2198\":62672,\"2199\":62674,\"2328\":61155,\"2600\":4954,\"2601\":4962,\"2602\":4977,\"2603\":4982,\"2604\":4984,\"2611\":62764,\"2614\":4978,\"2615\":3750,\"2618\":2639,\"2620\":196,\"2622\":62667,\"2623\":62668,\"2626\":62697,\"2638\":62694,\"2639\":168,\"2648\":62702,\"2649\":62703,\"2650\":62710,\"2651\":62711,\"2652\":62712,\"2653\":62713,\"2660\":51057,\"2663\":51060,\"2665\":51058,\"2666\":51059,\"2668\":4832,\"2692\":61258,\"2693\":4887,\"2694\":61261,\"2696\":61272,\"2697\":61280,\"2699\":61270,\"2702\":61245,\"2705\":62763,\"2708\":4895,\"2709\":61206,\"2712\":61220,\"2714\":62765,\"2716\":62742,\"2721\":62693,\"2728\":5993,\"2733\":62771,\"2734\":62772,\"2744\":4981,\"2747\":62773,\"2753\":62749,\"2754\":62750,\"2755\":62751,\"2757\":62752,\"2763\":1127,\"2764\":1129,\"2795\":62743,\"2796\":62744,\"2797\":62745,\"2934\":62681,\"2935\":62682,\"3030\":62753,\"3297\":62825,\"3299\":62826,\"0023-20e3\":62777,\"002a-20e3\":62778,\"0030-20e3\":62779,\"0031-20e3\":62780,\"0032-20e3\":62781,\"0033-20e3\":62782,\"0034-20e3\":62783,\"0035-20e3\":62784,\"0036-20e3\":62785,\"0037-20e3\":62786,\"0038-20e3\":62787,\"0039-20e3\":62788,\"00a9\":62774,\"00ae\":62775,\"1f004\":51063,\"1f0cf\":51062,\"1f170\":62795,\"1f171\":62797,\"1f17e\":62806,\"1f17f\":62808,\"1f18e\":62796,\"1f191\":62798,\"1f192\":62799,\"1f193\":62800,\"1f194\":62802,\"1f195\":62804,\"1f196\":62805,\"1f197\":62807,\"1f198\":62809,\"1f199\":62810,\"1f19a\":62811,\"1f1e6-1f1e8\":71550,\"1f1e6-1f1e9\":71551,\"1f1e6-1f1ea\":71552,\"1f1e6-1f1eb\":71553,\"1f1e6-1f1ec\":71554,\"1f1e6-1f1ee\":71555,\"1f1e6-1f1f1\":71556,\"1f1e6-1f1f2\":71557,\"1f1e6-1f1f4\":71558,\"1f1e6-1f1f6\":71559,\"1f1e6-1f1f7\":71560,\"1f1e6-1f1f8\":71561,\"1f1e6-1f1f9\":71562,\"1f1e6-1f1fa\":71563,\"1f1e6-1f1fc\":71564,\"1f1e6-1f1fd\":71565,\"1f1e6-1f1ff\":71566,\"1f1e7-1f1e6\":71567,\"1f1e7-1f1e7\":71568,\"1f1e7-1f1e9\":71569,\"1f1e7-1f1ea\":71570,\"1f1e7-1f1eb\":71571,\"1f1e7-1f1ec\":71572,\"1f1e7-1f1ed\":71573,\"1f1e7-1f1ee\":71574,\"1f1e7-1f1ef\":71575,\"1f1e7-1f1f1\":71576,\"1f1e7-1f1f2\":71577,\"1f1e7-1f1f3\":71578,\"1f1e7-1f1f4\":71579,\"1f1e7-1f1f6\":71580,\"1f1e7-1f1f7\":71581,\"1f1e7-1f1f8\":71582,\"1f1e7-1f1f9\":71583,\"1f1e7-1f1fb\":71584,\"1f1e7-1f1fc\":71585,\"1f1e7-1f1fe\":71586,\"1f1e7-1f1ff\":71587,\"1f1e8-1f1e6\":71588,\"1f1e8-1f1e8\":71589,\"1f1e8-1f1e9\":71590,\"1f1e8-1f1eb\":71591,\"1f1e8-1f1ec\":71592,\"1f1e8-1f1ed\":71593,\"1f1e8-1f1ee\":71594,\"1f1e8-1f1f0\":71595,\"1f1e8-1f1f1\":71596,\"1f1e8-1f1f2\":71597,\"1f1e8-1f1f3\":71598,\"1f1e8-1f1f4\":71599,\"1f1e8-1f1f5\":71600,\"1f1e8-1f1f7\":71601,\"1f1e8-1f1fa\":71602,\"1f1e8-1f1fb\":71603,\"1f1e8-1f1fc\":71604,\"1f1e8-1f1fd\":71605,\"1f1e8-1f1fe\":71606,\"1f1e8-1f1ff\":71607,\"1f1e9-1f1ea\":71608,\"1f1e9-1f1ec\":71609,\"1f1e9-1f1ef\":71610,\"1f1e9-1f1f0\":71611,\"1f1e9-1f1f2\":71612,\"1f1e9-1f1f4\":71613,\"1f1e9-1f1ff\":71614,\"1f1ea-1f1e6\":71615,\"1f1ea-1f1e8\":71616,\"1f1ea-1f1ea\":71617,\"1f1ea-1f1ec\":71618,\"1f1ea-1f1ed\":71619,\"1f1ea-1f1f7\":71620,\"1f1ea-1f1f8\":71621,\"1f1ea-1f1f9\":71622,\"1f1ea-1f1fa\":71623,\"1f1eb-1f1ee\":71624,\"1f1eb-1f1ef\":71625,\"1f1eb-1f1f0\":71626,\"1f1eb-1f1f2\":71627,\"1f1eb-1f1f4\":71628,\"1f1eb-1f1f7\":71629,\"1f1ec-1f1e6\":71630,\"1f1ec-1f1e7\":71631,\"1f1ec-1f1e9\":71632,\"1f1ec-1f1ea\":71633,\"1f1ec-1f1eb\":71634,\"1f1ec-1f1ec\":71635,\"1f1ec-1f1ed\":71636,\"1f1ec-1f1ee\":71637,\"1f1ec-1f1f1\":71638,\"1f1ec-1f1f2\":71639,\"1f1ec-1f1f3\":71640,\"1f1ec-1f1f5\":71641,\"1f1ec-1f1f6\":71642,\"1f1ec-1f1f7\":71643,\"1f1ec-1f1f8\":71644,\"1f1ec-1f1f9\":71645,\"1f1ec-1f1fa\":71646,\"1f1ec-1f1fc\":71647,\"1f1ec-1f1fe\":71648,\"1f1ed-1f1f0\":71649,\"1f1ed-1f1f2\":71650,\"1f1ed-1f1f3\":71651,\"1f1ed-1f1f7\":71652,\"1f1ed-1f1f9\":71653,\"1f1ed-1f1fa\":71654,\"1f1ee-1f1e8\":71655,\"1f1ee-1f1e9\":71656,\"1f1ee-1f1ea\":71657,\"1f1ee-1f1f1\":71658,\"1f1ee-1f1f2\":71659,\"1f1ee-1f1f3\":71660,\"1f1ee-1f1f4\":71661,\"1f1ee-1f1f6\":71662,\"1f1ee-1f1f7\":71663,\"1f1ee-1f1f8\":71664,\"1f1ee-1f1f9\":71665,\"1f1ef-1f1ea\":71666,\"1f1ef-1f1f2\":71667,\"1f1ef-1f1f4\":71668,\"1f1ef-1f1f5\":71669,\"1f1f0-1f1ea\":71670,\"1f1f0-1f1ec\":71671,\"1f1f0-1f1ed\":71672,\"1f1f0-1f1ee\":71673,\"1f1f0-1f1f2\":71674,\"1f1f0-1f1f3\":71675,\"1f1f0-1f1f5\":71676,\"1f1f0-1f1f7\":71677,\"1f1f0-1f1fc\":71678,\"1f1f0-1f1fe\":71679,\"1f1f0-1f1ff\":71680,\"1f1f1-1f1e6\":71681,\"1f1f1-1f1e7\":71682,\"1f1f1-1f1e8\":71683,\"1f1f1-1f1ee\":71684,\"1f1f1-1f1f0\":71685,\"1f1f1-1f1f7\":71686,\"1f1f1-1f1f8\":71687,\"1f1f1-1f1f9\":71688,\"1f1f1-1f1fa\":71689,\"1f1f1-1f1fb\":71690,\"1f1f1-1f1fe\":71691,\"1f1f2-1f1e6\":71692,\"1f1f2-1f1e8\":71693,\"1f1f2-1f1e9\":71694,\"1f1f2-1f1ea\":71695,\"1f1f2-1f1eb\":71696,\"1f1f2-1f1ec\":71697,\"1f1f2-1f1ed\":71698,\"1f1f2-1f1f0\":71699,\"1f1f2-1f1f1\":71700,\"1f1f2-1f1f2\":71701,\"1f1f2-1f1f3\":71702,\"1f1f2-1f1f4\":71703,\"1f1f2-1f1f5\":71704,\"1f1f2-1f1f6\":71705,\"1f1f2-1f1f7\":71706,\"1f1f2-1f1f8\":71707,\"1f1f2-1f1f9\":71708,\"1f1f2-1f1fa\":71709,\"1f1f2-1f1fb\":71710,\"1f1f2-1f1fc\":71711,\"1f1f2-1f1fd\":71712,\"1f1f2-1f1fe\":71713,\"1f1f2-1f1ff\":71714,\"1f1f3-1f1e6\":71715,\"1f1f3-1f1e8\":71716,\"1f1f3-1f1ea\":71717,\"1f1f3-1f1eb\":71718,\"1f1f3-1f1ec\":71719,\"1f1f3-1f1ee\":71720,\"1f1f3-1f1f1\":71721,\"1f1f3-1f1f4\":71722,\"1f1f3-1f1f5\":71723,\"1f1f3-1f1f7\":71724,\"1f1f3-1f1fa\":71725,\"1f1f3-1f1ff\":71726,\"1f1f4-1f1f2\":71727,\"1f1f5-1f1e6\":71728,\"1f1f5-1f1ea\":71729,\"1f1f5-1f1eb\":71730,\"1f1f5-1f1ec\":71731,\"1f1f5-1f1ed\":71732,\"1f1f5-1f1f0\":71733,\"1f1f5-1f1f1\":71734,\"1f1f5-1f1f2\":71735,\"1f1f5-1f1f3\":71736,\"1f1f5-1f1f7\":71737,\"1f1f5-1f1f8\":71738,\"1f1f5-1f1f9\":71739,\"1f1f5-1f1fc\":71740,\"1f1f5-1f1fe\":71741,\"1f1f6-1f1e6\":71742,\"1f1f7-1f1ea\":71743,\"1f1f7-1f1f4\":71744,\"1f1f7-1f1f8\":71745,\"1f1f7-1f1fa\":71746,\"1f1f7-1f1fc\":71747,\"1f1f8-1f1e6\":71748,\"1f1f8-1f1e7\":71749,\"1f1f8-1f1e8\":71750,\"1f1f8-1f1e9\":71751,\"1f1f8-1f1ea\":71752,\"1f1f8-1f1ec\":71753,\"1f1f8-1f1ed\":71754,\"1f1f8-1f1ee\":71755,\"1f1f8-1f1ef\":71756,\"1f1f8-1f1f0\":71757,\"1f1f8-1f1f1\":71758,\"1f1f8-1f1f2\":71759,\"1f1f8-1f1f3\":71760,\"1f1f8-1f1f4\":71761,\"1f1f8-1f1f7\":71762,\"1f1f8-1f1f8\":71763,\"1f1f8-1f1f9\":71764,\"1f1f8-1f1fb\":71765,\"1f1f8-1f1fd\":71766,\"1f1f8-1f1fe\":71767,\"1f1f8-1f1ff\":71768,\"1f1f9-1f1e6\":71769,\"1f1f9-1f1e8\":71770,\"1f1f9-1f1e9\":71771,\"1f1f9-1f1eb\":71772,\"1f1f9-1f1ec\":71773,\"1f1f9-1f1ed\":71774,\"1f1f9-1f1ef\":71775,\"1f1f9-1f1f0\":71776,\"1f1f9-1f1f1\":71777,\"1f1f9-1f1f2\":71778,\"1f1f9-1f1f3\":71779,\"1f1f9-1f1f4\":71780,\"1f1f9-1f1f7\":71781,\"1f1f9-1f1f9\":71782,\"1f1f9-1f1fb\":71783,\"1f1f9-1f1fc\":71784,\"1f1f9-1f1ff\":71785,\"1f1fa-1f1e6\":71786,\"1f1fa-1f1ec\":71787,\"1f1fa-1f1f2\":71788,\"1f1fa-1f1f3\":71789,\"1f1fa-1f1f8\":71790,\"1f1fa-1f1fe\":71791,\"1f1fa-1f1ff\":71792,\"1f1fb-1f1e6\":71793,\"1f1fb-1f1e8\":71794,\"1f1fb-1f1ea\":71795,\"1f1fb-1f1ec\":71796,\"1f1fb-1f1ee\":71797,\"1f1fb-1f1f3\":71798,\"1f1fb-1f1fa\":71799,\"1f1fc-1f1eb\":71800,\"1f1fc-1f1f8\":71801,\"1f1fd-1f1f0\":71802,\"1f1fe-1f1ea\":71803,\"1f1fe-1f1f9\":71804,\"1f1ff-1f1e6\":71805,\"1f1ff-1f1f2\":71806,\"1f1ff-1f1fc\":71807,\"1f201\":62812,\"1f202\":62813,\"1f21a\":62819,\"1f22f\":62816,\"1f232\":62820,\"1f233\":62824,\"1f234\":62823,\"1f235\":62828,\"1f236\":62815,\"1f237\":62814,\"1f238\":62822,\"1f239\":62818,\"1f23a\":62827,\"1f250\":62817,\"1f251\":62821,\"1f300\":4974,\"1f301\":4824,\"1f302\":4976,\"1f303\":4825,\"1f304\":4827,\"1f305\":4828,\"1f306\":4829,\"1f307\":4830,\"1f308\":4975,\"1f309\":4831,\"1f30a\":4987,\"1f30b\":4782,\"1f30c\":4961,\"1f30d\":4773,\"1f30e\":4774,\"1f30f\":4775,\"1f310\":4776,\"1f311\":4941,\"1f312\":4942,\"1f313\":4943,\"1f314\":4944,\"1f315\":4945,\"1f316\":4946,\"1f317\":4947,\"1f318\":4948,\"1f319\":4949,\"1f31a\":4950,\"1f31b\":4951,\"1f31c\":4952,\"1f31d\":4955,\"1f31e\":4956,\"1f31f\":4959,\"1f320\":4960,\"1f321\":4953,\"1f324\":4965,\"1f325\":4966,\"1f326\":4967,\"1f327\":4968,\"1f328\":4969,\"1f329\":4970,\"1f32a\":4971,\"1f32b\":4972,\"1f32c\":4973,\"1f32d\":3694,\"1f32e\":3696,\"1f32f\":3697,\"1f330\":3677,\"1f331\":2631,\"1f332\":2633,\"1f333\":2634,\"1f334\":2635,\"1f335\":2636,\"1f336\":3668,\"1f337\":2630,\"1f338\":2622,\"1f339\":2625,\"1f33a\":2627,\"1f33b\":2628,\"1f33c\":2629,\"1f33d\":3667,\"1f33e\":2637,\"1f33f\":2638,\"1f340\":2640,\"1f341\":2641,\"1f342\":2642,\"1f343\":2643,\"1f344\":3675,\"1f345\":3660,\"1f346\":3664,\"1f347\":3644,\"1f348\":3645,\"1f349\":3646,\"1f34a\":3647,\"1f34b\":3648,\"1f34c\":3649,\"1f34d\":3650,\"1f34e\":3652,\"1f34f\":3653,\"1f350\":3654,\"1f351\":3655,\"1f352\":3656,\"1f353\":3657,\"1f354\":3691,\"1f355\":3693,\"1f356\":3687,\"1f357\":3688,\"1f358\":3713,\"1f359\":3714,\"1f35a\":3715,\"1f35b\":3716,\"1f35c\":3717,\"1f35d\":3718,\"1f35e\":3678,\"1f35f\":3692,\"1f360\":3719,\"1f361\":3725,\"1f362\":3720,\"1f363\":3721,\"1f364\":3722,\"1f365\":3723,\"1f366\":3734,\"1f367\":3735,\"1f368\":3736,\"1f369\":3737,\"1f36a\":3738,\"1f36b\":3743,\"1f36c\":3744,\"1f36d\":3745,\"1f36e\":3746,\"1f36f\":3747,\"1f370\":3740,\"1f371\":3712,\"1f372\":3704,\"1f373\":3702,\"1f374\":3769,\"1f375\":3752,\"1f376\":3753,\"1f377\":3755,\"1f378\":3756,\"1f379\":3757,\"1f37a\":3758,\"1f37b\":3759,\"1f37c\":3748,\"1f37d\":3768,\"1f37e\":3754,\"1f37f\":3708,\"1f380\":51004,\"1f381\":51005,\"1f382\":3739,\"1f383\":5988,\"1f384\":5989,\"1f385\":1490,\"1f386\":5990,\"1f387\":5991,\"1f388\":5994,\"1f389\":5995,\"1f38a\":5996,\"1f38b\":5997,\"1f38c\":71544,\"1f38d\":5998,\"1f38e\":5999,\"1f38f\":51000,\"1f390\":51001,\"1f391\":51002,\"1f392\":61096,\"1f393\":61109,\"1f396\":51009,\"1f397\":51006,\"1f399\":61129,\"1f39a\":61130,\"1f39b\":61131,\"1f39e\":61164,\"1f39f\":51007,\"1f3a0\":4833,\"1f3a1\":4834,\"1f3a2\":4835,\"1f3a3\":51036,\"1f3a4\":61132,\"1f3a5\":61163,\"1f3a6\":62733,\"1f3a7\":61133,\"1f3a8\":51067,\"1f3a9\":61108,\"1f3aa\":4837,\"1f3ab\":51008,\"1f3ac\":61166,\"1f3ad\":51065,\"1f3ae\":51049,\"1f3af\":51042,\"1f3b0\":51051,\"1f3b1\":51045,\"1f3b2\":51052,\"1f3b3\":51024,\"1f3b4\":51064,\"1f3b5\":61127,\"1f3b6\":61128,\"1f3b7\":61135,\"1f3b8\":61137,\"1f3b9\":61138,\"1f3ba\":61139,\"1f3bb\":61140,\"1f3bc\":61126,\"1f3bd\":51038,\"1f3be\":51022,\"1f3bf\":51039,\"1f3c0\":51018,\"1f3c1\":71542,\"1f3c2\":1562,\"1f3c3-200d-2640\":1546,\"1f3c3-200d-2642\":1545,\"1f3c3\":1544,\"1f3c4-200d-2640\":1568,\"1f3c4-200d-2642\":1567,\"1f3c4\":1566,\"1f3c5\":51011,\"1f3c6\":51010,\"1f3c7\":1560,\"1f3c8\":51020,\"1f3c9\":51021,\"1f3ca-200d-2640\":1574,\"1f3ca-200d-2642\":1573,\"1f3ca\":1572,\"1f3cb-200d-2640\":1580,\"1f3cb-200d-2642\":1579,\"1f3cb\":1578,\"1f3cc-200d-2640\":1565,\"1f3cc-200d-2642\":1564,\"1f3cc\":1563,\"1f3cd\":4868,\"1f3ce\":4867,\"1f3cf\":51025,\"1f3d0\":51019,\"1f3d1\":51026,\"1f3d2\":51027,\"1f3d3\":51029,\"1f3d4\":4780,\"1f3d5\":4784,\"1f3d6\":4785,\"1f3d7\":4791,\"1f3d8\":4796,\"1f3d9\":4826,\"1f3da\":4797,\"1f3db\":4790,\"1f3dc\":4786,\"1f3dd\":4787,\"1f3de\":4788,\"1f3df\":4789,\"1f3e0\":4798,\"1f3e1\":4799,\"1f3e2\":4800,\"1f3e3\":4801,\"1f3e4\":4802,\"1f3e5\":4803,\"1f3e6\":4804,\"1f3e7\":62643,\"1f3e8\":4805,\"1f3e9\":4806,\"1f3ea\":4807,\"1f3eb\":4808,\"1f3ec\":4809,\"1f3ed\":4810,\"1f3ee\":61177,\"1f3ef\":4811,\"1f3f0\":4812,\"1f3f3-200d-1f308\":71547,\"1f3f3-200d-26a7\":71548,\"1f3f3\":71546,\"1f3f4-200d-2620\":71549,\"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f\":71808,\"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f\":71809,\"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f\":71810,\"1f3f4\":71545,\"1f3f5\":2624,\"1f3f7\":61195,\"1f3f8\":51030,\"1f3f9\":61264,\"1f3fa\":3772,\"1f3fb\":9499,\"1f3fc\":9500,\"1f3fd\":9501,\"1f3fe\":9502,\"1f3ff\":9503,\"1f400\":2550,\"1f401\":2549,\"1f402\":2530,\"1f403\":2531,\"1f404\":2532,\"1f405\":2521,\"1f406\":2522,\"1f407\":2553,\"1f408-200d-2b1b\":2518,\"1f408\":2517,\"1f409\":2592,\"1f40a\":2587,\"1f40b\":2596,\"1f40c\":2605,\"1f40d\":2590,\"1f40e\":2524,\"1f40f\":2537,\"1f410\":2539,\"1f411\":2538,\"1f412\":2505,\"1f413\":2570,\"1f414\":2569,\"1f415-200d-1f9ba\":2511,\"1f415\":2509,\"1f416\":2534,\"1f417\":2535,\"1f418\":2544,\"1f419\":2603,\"1f41a\":2604,\"1f41b\":2607,\"1f41c\":2608,\"1f41d\":2609,\"1f41e\":2611,\"1f41f\":2599,\"1f420\":2600,\"1f421\":2601,\"1f422\":2588,\"1f423\":2571,\"1f424\":2572,\"1f425\":2573,\"1f426\":2574,\"1f427\":2575,\"1f428\":2560,\"1f429\":2512,\"1f42a\":2540,\"1f42b\":2541,\"1f42c\":2597,\"1f42d\":2548,\"1f42e\":2529,\"1f42f\":2520,\"1f430\":2552,\"1f431\":2516,\"1f432\":2591,\"1f433\":2595,\"1f434\":2523,\"1f435\":2504,\"1f436\":2508,\"1f437\":2533,\"1f438\":2586,\"1f439\":2551,\"1f43a\":2513,\"1f43b-200d-2744\":2559,\"1f43b\":2558,\"1f43c\":2561,\"1f43d\":2536,\"1f43e\":2567,\"1f43f\":2554,\"1f440\":1350,\"1f441-200d-1f5e8\":1147,\"1f441\":1351,\"1f442\":1342,\"1f443\":1344,\"1f444\":1353,\"1f445\":1352,\"1f446\":1318,\"1f447\":1320,\"1f448\":1316,\"1f449\":1317,\"1f44a\":1325,\"1f44b\":1303,\"1f44c\":1308,\"1f44d\":1322,\"1f44e\":1323,\"1f44f\":1328,\"1f450\":1330,\"1f451\":61106,\"1f452\":61107,\"1f453\":61072,\"1f454\":61077,\"1f455\":61078,\"1f456\":61079,\"1f457\":61084,\"1f458\":61085,\"1f459\":61090,\"1f45a\":61091,\"1f45b\":61092,\"1f45c\":61093,\"1f45d\":61094,\"1f45e\":61098,\"1f45f\":61099,\"1f460\":61102,\"1f461\":61103,\"1f462\":61105,\"1f463\":1649,\"1f464\":1646,\"1f465\":1647,\"1f466\":1356,\"1f467\":1357,\"1f468-200d-1f33e\":1423,\"1f468-200d-1f373\":1426,\"1f468-200d-1f37c\":1487,\"1f468-200d-1f393\":1414,\"1f468-200d-1f3a4\":1444,\"1f468-200d-1f3a8\":1447,\"1f468-200d-1f3eb\":1417,\"1f468-200d-1f3ed\":1432,\"1f468-200d-1f466-200d-1f466\":1636,\"1f468-200d-1f466\":1635,\"1f468-200d-1f467-200d-1f466\":1638,\"1f468-200d-1f467-200d-1f467\":1639,\"1f468-200d-1f467\":1637,\"1f468-200d-1f468-200d-1f466\":1625,\"1f468-200d-1f468-200d-1f466-200d-1f466\":1628,\"1f468-200d-1f468-200d-1f467\":1626,\"1f468-200d-1f468-200d-1f467-200d-1f466\":1627,\"1f468-200d-1f468-200d-1f467-200d-1f467\":1629,\"1f468-200d-1f469-200d-1f466\":1620,\"1f468-200d-1f469-200d-1f466-200d-1f466\":1623,\"1f468-200d-1f469-200d-1f467\":1621,\"1f468-200d-1f469-200d-1f467-200d-1f466\":1622,\"1f468-200d-1f469-200d-1f467-200d-1f467\":1624,\"1f468-200d-1f4bb\":1441,\"1f468-200d-1f4bc\":1435,\"1f468-200d-1f527\":1429,\"1f468-200d-1f52c\":1438,\"1f468-200d-1f680\":1453,\"1f468-200d-1f692\":1456,\"1f468-200d-1f9af\":1536,\"1f468-200d-1f9b0\":1362,\"1f468-200d-1f9b1\":1363,\"1f468-200d-1f9b2\":1365,\"1f468-200d-1f9b3\":1364,\"1f468-200d-1f9bc\":1539,\"1f468-200d-1f9bd\":1542,\"1f468-200d-2695\":1411,\"1f468-200d-2696\":1420,\"1f468-200d-2708\":1450,\"1f468-200d-2764-200d-1f468\":1617,\"1f468-200d-2764-200d-1f48b-200d-1f468\":1613,\"1f468\":1360,\"1f469-200d-1f33e\":1424,\"1f469-200d-1f373\":1427,\"1f469-200d-1f37c\":1486,\"1f469-200d-1f393\":1415,\"1f469-200d-1f3a4\":1445,\"1f469-200d-1f3a8\":1448,\"1f469-200d-1f3eb\":1418,\"1f469-200d-1f3ed\":1433,\"1f469-200d-1f466-200d-1f466\":1641,\"1f469-200d-1f466\":1640,\"1f469-200d-1f467-200d-1f466\":1643,\"1f469-200d-1f467-200d-1f467\":1644,\"1f469-200d-1f467\":1642,\"1f469-200d-1f469-200d-1f466\":1630,\"1f469-200d-1f469-200d-1f466-200d-1f466\":1633,\"1f469-200d-1f469-200d-1f467\":1631,\"1f469-200d-1f469-200d-1f467-200d-1f466\":1632,\"1f469-200d-1f469-200d-1f467-200d-1f467\":1634,\"1f469-200d-1f4bb\":1442,\"1f469-200d-1f4bc\":1436,\"1f469-200d-1f527\":1430,\"1f469-200d-1f52c\":1439,\"1f469-200d-1f680\":1454,\"1f469-200d-1f692\":1457,\"1f469-200d-1f9af\":1537,\"1f469-200d-1f9b0\":1367,\"1f469-200d-1f9b1\":1369,\"1f469-200d-1f9b2\":1373,\"1f469-200d-1f9b3\":1371,\"1f469-200d-1f9bc\":1540,\"1f469-200d-1f9bd\":1543,\"1f469-200d-2695\":1412,\"1f469-200d-2696\":1421,\"1f469-200d-2708\":1451,\"1f469-200d-2764-200d-1f468\":1616,\"1f469-200d-2764-200d-1f469\":1618,\"1f469-200d-2764-200d-1f48b-200d-1f468\":1612,\"1f469-200d-2764-200d-1f48b-200d-1f469\":1614,\"1f469\":1366,\"1f46a\":1619,\"1f46b\":1609,\"1f46c\":1610,\"1f46d\":1608,\"1f46e-200d-2640\":1460,\"1f46e-200d-2642\":1459,\"1f46e\":1458,\"1f46f-200d-2640\":1552,\"1f46f-200d-2642\":1551,\"1f46f\":1550,\"1f470-200d-2640\":1483,\"1f470-200d-2642\":1482,\"1f470\":1481,\"1f471-200d-2640\":1375,\"1f471-200d-2642\":1376,\"1f471\":1359,\"1f472\":1476,\"1f473-200d-2640\":1475,\"1f473-200d-2642\":1474,\"1f473\":1473,\"1f474\":1378,\"1f475\":1379,\"1f476\":1354,\"1f477-200d-2640\":1470,\"1f477-200d-2642\":1469,\"1f477\":1468,\"1f478\":1472,\"1f479\":199,\"1f47a\":1100,\"1f47b\":1101,\"1f47c\":1489,\"1f47d\":1102,\"1f47e\":1103,\"1f47f\":194,\"1f480\":195,\"1f481-200d-2640\":1394,\"1f481-200d-2642\":1393,\"1f481\":1392,\"1f482-200d-2640\":1466,\"1f482-200d-2642\":1465,\"1f482\":1464,\"1f483\":1547,\"1f484\":61114,\"1f485\":1335,\"1f486-200d-2640\":1522,\"1f486-200d-2642\":1521,\"1f486\":1520,\"1f487-200d-2640\":1525,\"1f487-200d-2642\":1524,\"1f487\":1523,\"1f488\":4836,\"1f489\":61287,\"1f48a\":61289,\"1f48b\":1117,\"1f48c\":1118,\"1f48d\":61115,\"1f48e\":61116,\"1f48f\":1611,\"1f490\":2621,\"1f491\":1615,\"1f492\":4813,\"1f493\":1123,\"1f494\":1128,\"1f495\":1125,\"1f496\":1121,\"1f497\":1122,\"1f498\":1119,\"1f499\":1133,\"1f49a\":1132,\"1f49b\":1131,\"1f49c\":1134,\"1f49d\":1120,\"1f49e\":1124,\"1f49f\":1126,\"1f4a0\":62859,\"1f4a1\":61175,\"1f4a2\":1139,\"1f4a3\":1145,\"1f4a4\":1151,\"1f4a5\":1140,\"1f4a6\":1142,\"1f4a7\":4986,\"1f4a8\":1143,\"1f4a9\":197,\"1f4aa\":1337,\"1f4ab\":1141,\"1f4ac\":1146,\"1f4ad\":1150,\"1f4ae\":2623,\"1f4af\":1138,\"1f4b0\":61196,\"1f4b1\":62754,\"1f4b2\":62755,\"1f4b3\":61203,\"1f4b4\":61198,\"1f4b5\":61199,\"1f4b6\":61200,\"1f4b7\":61201,\"1f4b8\":61202,\"1f4b9\":61205,\"1f4ba\":4900,\"1f4bb\":61152,\"1f4bc\":61226,\"1f4bd\":61158,\"1f4be\":61159,\"1f4bf\":61160,\"1f4c0\":61161,\"1f4c1\":61227,\"1f4c2\":61228,\"1f4c3\":61188,\"1f4c4\":61190,\"1f4c5\":61230,\"1f4c6\":61231,\"1f4c7\":61234,\"1f4c8\":61235,\"1f4c9\":61236,\"1f4ca\":61237,\"1f4cb\":61238,\"1f4cc\":61239,\"1f4cd\":61240,\"1f4ce\":61241,\"1f4cf\":61243,\"1f4d0\":61244,\"1f4d1\":61193,\"1f4d2\":61187,\"1f4d3\":61186,\"1f4d4\":61179,\"1f4d5\":61180,\"1f4d6\":61181,\"1f4d7\":61182,\"1f4d8\":61183,\"1f4d9\":61184,\"1f4da\":61185,\"1f4db\":62760,\"1f4dc\":61189,\"1f4dd\":61225,\"1f4de\":61147,\"1f4df\":61148,\"1f4e0\":61149,\"1f4e1\":61286,\"1f4e2\":61121,\"1f4e3\":61122,\"1f4e4\":61210,\"1f4e5\":61211,\"1f4e6\":61212,\"1f4e7\":61207,\"1f4e8\":61208,\"1f4e9\":61209,\"1f4ea\":61214,\"1f4eb\":61213,\"1f4ec\":61215,\"1f4ed\":61216,\"1f4ee\":61217,\"1f4ef\":61123,\"1f4f0\":61191,\"1f4f1\":61144,\"1f4f2\":61145,\"1f4f3\":62737,\"1f4f4\":62738,\"1f4f5\":62665,\"1f4f6\":62736,\"1f4f7\":61168,\"1f4f8\":61169,\"1f4f9\":61170,\"1f4fa\":61167,\"1f4fb\":61134,\"1f4fc\":61171,\"1f4fd\":61165,\"1f4ff\":61113,\"1f500\":62715,\"1f501\":62716,\"1f502\":62717,\"1f503\":62683,\"1f504\":62684,\"1f505\":62734,\"1f506\":62735,\"1f507\":61117,\"1f508\":61118,\"1f509\":61119,\"1f50a\":61120,\"1f50b\":61150,\"1f50c\":61151,\"1f50d\":61172,\"1f50e\":61173,\"1f50f\":61251,\"1f510\":61252,\"1f511\":61253,\"1f512\":61249,\"1f513\":61250,\"1f514\":61124,\"1f515\":61125,\"1f516\":61194,\"1f517\":61274,\"1f518\":62860,\"1f519\":62685,\"1f51a\":62686,\"1f51b\":62687,\"1f51c\":62688,\"1f51d\":62689,\"1f51e\":62666,\"1f51f\":62789,\"1f520\":62790,\"1f521\":62791,\"1f522\":62792,\"1f523\":62793,\"1f524\":62794,\"1f525\":4985,\"1f526\":61176,\"1f527\":61267,\"1f528\":61255,\"1f529\":61269,\"1f52a\":3771,\"1f52b\":61262,\"1f52c\":61284,\"1f52d\":61285,\"1f52e\":51046,\"1f52f\":62701,\"1f530\":62761,\"1f531\":62759,\"1f532\":62862,\"1f533\":62861,\"1f534\":62829,\"1f535\":62833,\"1f536\":62853,\"1f537\":62854,\"1f538\":62855,\"1f539\":62856,\"1f53a\":62857,\"1f53b\":62858,\"1f53c\":62725,\"1f53d\":62727,\"1f549\":62692,\"1f54a\":2576,\"1f54b\":4821,\"1f54c\":4817,\"1f54d\":4819,\"1f54e\":62700,\"1f550\":4919,\"1f551\":4921,\"1f552\":4923,\"1f553\":4925,\"1f554\":4927,\"1f555\":4929,\"1f556\":4931,\"1f557\":4933,\"1f558\":4935,\"1f559\":4937,\"1f55a\":4939,\"1f55b\":4917,\"1f55c\":4920,\"1f55d\":4922,\"1f55e\":4924,\"1f55f\":4926,\"1f560\":4928,\"1f561\":4930,\"1f562\":4932,\"1f563\":4934,\"1f564\":4936,\"1f565\":4938,\"1f566\":4940,\"1f567\":4918,\"1f56f\":61174,\"1f570\":4916,\"1f573\":1144,\"1f574\":1549,\"1f575-200d-2640\":1463,\"1f575-200d-2642\":1462,\"1f575\":1461,\"1f576\":61073,\"1f577\":2614,\"1f578\":2615,\"1f579\":51050,\"1f57a\":1548,\"1f587\":61242,\"1f58a\":61222,\"1f58b\":61221,\"1f58c\":61223,\"1f58d\":61224,\"1f590\":1305,\"1f595\":1319,\"1f596\":1307,\"1f5a4\":1136,\"1f5a5\":61153,\"1f5a8\":61154,\"1f5b1\":61156,\"1f5b2\":61157,\"1f5bc\":51066,\"1f5c2\":61229,\"1f5c3\":61246,\"1f5c4\":61247,\"1f5d1\":61248,\"1f5d2\":61232,\"1f5d3\":61233,\"1f5dc\":61271,\"1f5dd\":61254,\"1f5de\":61192,\"1f5e1\":61260,\"1f5e3\":1645,\"1f5e8\":1148,\"1f5ef\":1149,\"1f5f3\":61218,\"1f5fa\":4777,\"1f5fb\":4783,\"1f5fc\":4814,\"1f5fd\":4815,\"1f5fe\":4778,\"1f5ff\":61320,\"1f600\":11,\"1f601\":14,\"1f602\":18,\"1f603\":12,\"1f604\":13,\"1f605\":16,\"1f606\":15,\"1f607\":113,\"1f608\":193,\"1f609\":111,\"1f60a\":112,\"1f60b\":123,\"1f60c\":143,\"1f60d\":115,\"1f60e\":162,\"1f60f\":138,\"1f610\":135,\"1f611\":136,\"1f612\":139,\"1f613\":185,\"1f614\":144,\"1f615\":165,\"1f616\":182,\"1f617\":118,\"1f618\":117,\"1f619\":121,\"1f61a\":120,\"1f61b\":124,\"1f61c\":125,\"1f61d\":127,\"1f61e\":184,\"1f61f\":166,\"1f620\":191,\"1f621\":190,\"1f622\":179,\"1f623\":183,\"1f624\":189,\"1f625\":178,\"1f626\":174,\"1f627\":175,\"1f628\":176,\"1f629\":186,\"1f62a\":145,\"1f62b\":187,\"1f62c\":141,\"1f62d\":180,\"1f62e\":169,\"1f62f\":170,\"1f630\":177,\"1f631\":181,\"1f632\":171,\"1f633\":172,\"1f634\":147,\"1f635\":157,\"1f636\":137,\"1f637\":148,\"1f638\":1106,\"1f639\":1107,\"1f63a\":1105,\"1f63b\":1108,\"1f63c\":1109,\"1f63d\":1110,\"1f63e\":1113,\"1f63f\":1112,\"1f640\":1111,\"1f641\":167,\"1f642\":19,\"1f643\":110,\"1f644\":140,\"1f645-200d-2640\":1388,\"1f645-200d-2642\":1387,\"1f645\":1386,\"1f646-200d-2640\":1391,\"1f646-200d-2642\":1390,\"1f646\":1389,\"1f647-200d-2640\":1403,\"1f647-200d-2642\":1402,\"1f647\":1401,\"1f648\":1114,\"1f649\":1115,\"1f64a\":1116,\"1f64b-200d-2640\":1397,\"1f64b-200d-2642\":1396,\"1f64b\":1395,\"1f64c\":1329,\"1f64d-200d-2640\":1382,\"1f64d-200d-2642\":1381,\"1f64d\":1380,\"1f64e-200d-2640\":1385,\"1f64e-200d-2642\":1384,\"1f64e\":1383,\"1f64f\":1333,\"1f680\":4906,\"1f681\":4901,\"1f682\":4838,\"1f683\":4839,\"1f684\":4840,\"1f685\":4841,\"1f686\":4842,\"1f687\":4843,\"1f688\":4844,\"1f689\":4845,\"1f68a\":4846,\"1f68b\":4849,\"1f68c\":4850,\"1f68d\":4851,\"1f68e\":4852,\"1f68f\":4877,\"1f690\":4853,\"1f691\":4854,\"1f692\":4855,\"1f693\":4856,\"1f694\":4857,\"1f695\":4858,\"1f696\":4859,\"1f697\":4860,\"1f698\":4861,\"1f699\":4862,\"1f69a\":4864,\"1f69b\":4865,\"1f69c\":4866,\"1f69d\":4847,\"1f69e\":4848,\"1f69f\":4902,\"1f6a0\":4903,\"1f6a1\":4904,\"1f6a2\":4894,\"1f6a3-200d-2640\":1571,\"1f6a3-200d-2642\":1570,\"1f6a3\":1569,\"1f6a4\":4890,\"1f6a5\":4883,\"1f6a6\":4884,\"1f6a7\":4886,\"1f6a8\":4882,\"1f6a9\":71543,\"1f6aa\":61292,\"1f6ab\":62659,\"1f6ac\":61316,\"1f6ad\":62661,\"1f6ae\":62644,\"1f6af\":62662,\"1f6b0\":62645,\"1f6b1\":62663,\"1f6b2\":4873,\"1f6b3\":62660,\"1f6b4-200d-2640\":1583,\"1f6b4-200d-2642\":1582,\"1f6b4\":1581,\"1f6b5-200d-2640\":1586,\"1f6b5-200d-2642\":1585,\"1f6b5\":1584,\"1f6b6-200d-2640\":1528,\"1f6b6-200d-2642\":1527,\"1f6b6\":1526,\"1f6b7\":62664,\"1f6b8\":62657,\"1f6b9\":62647,\"1f6ba\":62648,\"1f6bb\":62649,\"1f6bc\":62650,\"1f6bd\":61299,\"1f6be\":62651,\"1f6bf\":61301,\"1f6c0\":1605,\"1f6c1\":61302,\"1f6c2\":62652,\"1f6c3\":62653,\"1f6c4\":62654,\"1f6c5\":62655,\"1f6cb\":61297,\"1f6cc\":1606,\"1f6cd\":61095,\"1f6ce\":4908,\"1f6cf\":61296,\"1f6d0\":62690,\"1f6d1\":4885,\"1f6d2\":61315,\"1f6d5\":4818,\"1f6d6\":4795,\"1f6d7\":61293,\"1f6e0\":61259,\"1f6e1\":61265,\"1f6e2\":4880,\"1f6e3\":4878,\"1f6e4\":4879,\"1f6e5\":4893,\"1f6e9\":4896,\"1f6eb\":4897,\"1f6ec\":4898,\"1f6f0\":4905,\"1f6f3\":4891,\"1f6f4\":4874,\"1f6f5\":4869,\"1f6f6\":4889,\"1f6f7\":51040,\"1f6f8\":4907,\"1f6f9\":4875,\"1f6fa\":4872,\"1f6fb\":4863,\"1f6fc\":4876,\"1f7e0\":62830,\"1f7e1\":62831,\"1f7e2\":62832,\"1f7e3\":62834,\"1f7e4\":62835,\"1f7e5\":62838,\"1f7e6\":62842,\"1f7e7\":62839,\"1f7e8\":62840,\"1f7e9\":62841,\"1f7ea\":62843,\"1f7eb\":62844,\"1f90c\":1309,\"1f90d\":1137,\"1f90e\":1135,\"1f90f\":1310,\"1f910\":133,\"1f911\":128,\"1f912\":149,\"1f913\":163,\"1f914\":132,\"1f915\":150,\"1f916\":1104,\"1f917\":129,\"1f918\":1314,\"1f919\":1315,\"1f91a\":1304,\"1f91b\":1326,\"1f91c\":1327,\"1f91d\":1332,\"1f91e\":1312,\"1f91f\":1313,\"1f920\":159,\"1f921\":198,\"1f922\":151,\"1f923\":17,\"1f924\":146,\"1f925\":142,\"1f926-200d-2640\":1406,\"1f926-200d-2642\":1405,\"1f926\":1404,\"1f927\":153,\"1f928\":134,\"1f929\":116,\"1f92a\":126,\"1f92b\":131,\"1f92c\":192,\"1f92d\":130,\"1f92e\":152,\"1f92f\":158,\"1f930\":1484,\"1f931\":1485,\"1f932\":1331,\"1f933\":1336,\"1f934\":1471,\"1f935-200d-2640\":1480,\"1f935-200d-2642\":1479,\"1f935\":1478,\"1f936\":1491,\"1f937-200d-2640\":1409,\"1f937-200d-2642\":1408,\"1f937\":1407,\"1f938-200d-2640\":1589,\"1f938-200d-2642\":1588,\"1f938\":1587,\"1f939-200d-2640\":1601,\"1f939-200d-2642\":1600,\"1f939\":1599,\"1f93a\":1559,\"1f93c-200d-2640\":1592,\"1f93c-200d-2642\":1591,\"1f93c\":1590,\"1f93d-200d-2640\":1595,\"1f93d-200d-2642\":1594,\"1f93d\":1593,\"1f93e-200d-2640\":1598,\"1f93e-200d-2642\":1597,\"1f93e\":1596,\"1f93f\":51037,\"1f940\":2626,\"1f941\":61142,\"1f942\":3760,\"1f943\":3761,\"1f944\":3770,\"1f945\":51033,\"1f947\":51012,\"1f948\":51013,\"1f949\":51014,\"1f94a\":51031,\"1f94b\":51032,\"1f94c\":51041,\"1f94d\":51028,\"1f94e\":51017,\"1f94f\":51023,\"1f950\":3679,\"1f951\":3663,\"1f952\":3670,\"1f953\":3690,\"1f954\":3665,\"1f955\":3666,\"1f956\":3680,\"1f957\":3707,\"1f958\":3703,\"1f959\":3699,\"1f95a\":3701,\"1f95b\":3749,\"1f95c\":3676,\"1f95d\":3659,\"1f95e\":3684,\"1f95f\":3726,\"1f960\":3727,\"1f961\":3728,\"1f962\":3767,\"1f963\":3706,\"1f964\":3762,\"1f965\":3662,\"1f966\":3672,\"1f967\":3742,\"1f968\":3682,\"1f969\":3689,\"1f96a\":3695,\"1f96b\":3711,\"1f96c\":3671,\"1f96d\":3651,\"1f96e\":3724,\"1f96f\":3683,\"1f970\":114,\"1f971\":188,\"1f972\":122,\"1f973\":160,\"1f974\":156,\"1f975\":154,\"1f976\":155,\"1f977\":1467,\"1f978\":161,\"1f97a\":173,\"1f97b\":61086,\"1f97c\":61075,\"1f97d\":61074,\"1f97e\":61100,\"1f97f\":61101,\"1f980\":3729,\"1f981\":2519,\"1f982\":2616,\"1f983\":2568,\"1f984\":2525,\"1f985\":2577,\"1f986\":2578,\"1f987\":2557,\"1f988\":2602,\"1f989\":2580,\"1f98a\":2514,\"1f98b\":2606,\"1f98c\":2527,\"1f98d\":2506,\"1f98e\":2589,\"1f98f\":2546,\"1f990\":3731,\"1f991\":3732,\"1f992\":2543,\"1f993\":2526,\"1f994\":2556,\"1f995\":2593,\"1f996\":2594,\"1f997\":2612,\"1f998\":2565,\"1f999\":2542,\"1f99a\":2584,\"1f99b\":2547,\"1f99c\":2585,\"1f99d\":2515,\"1f99e\":3730,\"1f99f\":2617,\"1f9a0\":2620,\"1f9a1\":2566,\"1f9a2\":2579,\"1f9a3\":2545,\"1f9a4\":2581,\"1f9a5\":2562,\"1f9a6\":2563,\"1f9a7\":2507,\"1f9a8\":2564,\"1f9a9\":2583,\"1f9aa\":3733,\"1f9ab\":2555,\"1f9ac\":2528,\"1f9ad\":2598,\"1f9ae\":2510,\"1f9af\":61273,\"1f9b4\":1349,\"1f9b5\":1340,\"1f9b6\":1341,\"1f9b7\":1348,\"1f9b8-200d-2640\":1495,\"1f9b8-200d-2642\":1494,\"1f9b8\":1493,\"1f9b9-200d-2640\":1498,\"1f9b9-200d-2642\":1497,\"1f9b9\":1496,\"1f9ba\":61076,\"1f9bb\":1343,\"1f9bc\":4871,\"1f9bd\":4870,\"1f9be\":1338,\"1f9bf\":1339,\"1f9c0\":3686,\"1f9c1\":3741,\"1f9c2\":3710,\"1f9c3\":3764,\"1f9c4\":3673,\"1f9c5\":3674,\"1f9c6\":3700,\"1f9c7\":3685,\"1f9c8\":3709,\"1f9c9\":3765,\"1f9ca\":3766,\"1f9cb\":3763,\"1f9cd-200d-2640\":1531,\"1f9cd-200d-2642\":1530,\"1f9cd\":1529,\"1f9ce-200d-2640\":1534,\"1f9ce-200d-2642\":1533,\"1f9ce\":1532,\"1f9cf-200d-2640\":1400,\"1f9cf-200d-2642\":1399,\"1f9cf\":1398,\"1f9d0\":164,\"1f9d1-200d-1f33e\":1422,\"1f9d1-200d-1f373\":1425,\"1f9d1-200d-1f37c\":1488,\"1f9d1-200d-1f384\":1492,\"1f9d1-200d-1f393\":1413,\"1f9d1-200d-1f3a4\":1443,\"1f9d1-200d-1f3a8\":1446,\"1f9d1-200d-1f3eb\":1416,\"1f9d1-200d-1f3ed\":1431,\"1f9d1-200d-1f4bb\":1440,\"1f9d1-200d-1f4bc\":1434,\"1f9d1-200d-1f527\":1428,\"1f9d1-200d-1f52c\":1437,\"1f9d1-200d-1f680\":1452,\"1f9d1-200d-1f692\":1455,\"1f9d1-200d-1f91d-200d-1f9d1\":1607,\"1f9d1-200d-1f9af\":1535,\"1f9d1-200d-1f9b0\":1368,\"1f9d1-200d-1f9b1\":1370,\"1f9d1-200d-1f9b2\":1374,\"1f9d1-200d-1f9b3\":1372,\"1f9d1-200d-1f9bc\":1538,\"1f9d1-200d-1f9bd\":1541,\"1f9d1-200d-2695\":1410,\"1f9d1-200d-2696\":1419,\"1f9d1-200d-2708\":1449,\"1f9d1\":1358,\"1f9d2\":1355,\"1f9d3\":1377,\"1f9d4\":1361,\"1f9d5\":1477,\"1f9d6-200d-2640\":1555,\"1f9d6-200d-2642\":1554,\"1f9d6\":1553,\"1f9d7-200d-2640\":1558,\"1f9d7-200d-2642\":1557,\"1f9d7\":1556,\"1f9d8-200d-2640\":1604,\"1f9d8-200d-2642\":1603,\"1f9d8\":1602,\"1f9d9-200d-2640\":1501,\"1f9d9-200d-2642\":1500,\"1f9d9\":1499,\"1f9da-200d-2640\":1504,\"1f9da-200d-2642\":1503,\"1f9da\":1502,\"1f9db-200d-2640\":1507,\"1f9db-200d-2642\":1506,\"1f9db\":1505,\"1f9dc-200d-2640\":1510,\"1f9dc-200d-2642\":1509,\"1f9dc\":1508,\"1f9dd-200d-2640\":1513,\"1f9dd-200d-2642\":1512,\"1f9dd\":1511,\"1f9de-200d-2640\":1516,\"1f9de-200d-2642\":1515,\"1f9de\":1514,\"1f9df-200d-2640\":1519,\"1f9df-200d-2642\":1518,\"1f9df\":1517,\"1f9e0\":1345,\"1f9e1\":1130,\"1f9e2\":61110,\"1f9e3\":61080,\"1f9e4\":61081,\"1f9e5\":61082,\"1f9e6\":61083,\"1f9e7\":51003,\"1f9e8\":5992,\"1f9e9\":51053,\"1f9ea\":61281,\"1f9eb\":61282,\"1f9ec\":61283,\"1f9ed\":4779,\"1f9ee\":61162,\"1f9ef\":61314,\"1f9f0\":61277,\"1f9f1\":4792,\"1f9f2\":61278,\"1f9f3\":4909,\"1f9f4\":61305,\"1f9f5\":51068,\"1f9f6\":51070,\"1f9f7\":61306,\"1f9f8\":51054,\"1f9f9\":61307,\"1f9fa\":61308,\"1f9fb\":61309,\"1f9fc\":61311,\"1f9fd\":61313,\"1f9fe\":61204,\"1f9ff\":51048,\"1fa70\":61104,\"1fa71\":61087,\"1fa72\":61088,\"1fa73\":61089,\"1fa74\":61097,\"1fa78\":61288,\"1fa79\":61290,\"1fa7a\":61291,\"1fa80\":51043,\"1fa81\":51044,\"1fa82\":4899,\"1fa83\":61263,\"1fa84\":51047,\"1fa85\":51055,\"1fa86\":51056,\"1fa90\":4957,\"1fa91\":61298,\"1fa92\":61304,\"1fa93\":61256,\"1fa94\":61178,\"1fa95\":61141,\"1fa96\":61111,\"1fa97\":61136,\"1fa98\":61143,\"1fa99\":61197,\"1fa9a\":61266,\"1fa9b\":61268,\"1fa9c\":61279,\"1fa9d\":61276,\"1fa9e\":61294,\"1fa9f\":61295,\"1faa0\":61300,\"1faa1\":51069,\"1faa2\":51071,\"1faa3\":61310,\"1faa4\":61303,\"1faa5\":61312,\"1faa6\":61318,\"1faa7\":61321,\"1faa8\":4793,\"1fab0\":2618,\"1fab1\":2619,\"1fab2\":2610,\"1fab3\":2613,\"1fab4\":2632,\"1fab5\":4794,\"1fab6\":2582,\"1fac0\":1346,\"1fac1\":1347,\"1fac2\":1648,\"1fad0\":3658,\"1fad1\":3669,\"1fad2\":3661,\"1fad3\":3681,\"1fad4\":3698,\"1fad5\":3705,\"1fad6\":3751,\"203c\":62747,\"21a9\":62679,\"21aa\":62680,\"231a\":4912,\"231b\":4910,\"23cf\":62732,\"23e9\":62719,\"23ea\":62723,\"23eb\":62726,\"23ec\":62728,\"23ed\":62720,\"23ee\":62724,\"23ef\":62721,\"23f0\":4913,\"23f1\":4914,\"23f2\":4915,\"23f3\":4911,\"23f8\":62729,\"23f9\":62730,\"23fa\":62731,\"24c2\":62803,\"25aa\":62851,\"25ab\":62852,\"25b6\":62718,\"25c0\":62722,\"25fb\":62848,\"25fc\":62847,\"25fd\":62850,\"25fe\":62849,\"260e\":61146,\"261d\":1321,\"262a\":62698,\"262e\":62699,\"262f\":62695,\"263a\":119,\"264a\":62704,\"264b\":62705,\"264c\":62706,\"264d\":62707,\"264e\":62708,\"264f\":62709,\"265f\":51061,\"267b\":62757,\"267e\":62746,\"267f\":62646,\"269b\":62691,\"269c\":62758,\"26a0\":62656,\"26a1\":4980,\"26a7\":62741,\"26aa\":62837,\"26ab\":62836,\"26b0\":61317,\"26b1\":61319,\"26bd\":51015,\"26be\":51016,\"26c4\":4983,\"26c5\":4963,\"26c8\":4964,\"26ce\":62714,\"26cf\":61257,\"26d1\":61112,\"26d3\":61275,\"26d4\":62658,\"26e9\":4820,\"26ea\":4816,\"26f0\":4781,\"26f1\":4979,\"26f2\":4822,\"26f3\":51034,\"26f4\":4892,\"26f5\":4888,\"26f7\":1561,\"26f8\":51035,\"26f9-200d-2640\":1577,\"26f9-200d-2642\":1576,\"26f9\":1575,\"26fa\":4823,\"26fd\":4881,\"270a\":1324,\"270b\":1306,\"270c\":1311,\"270d\":1334,\"270f\":61219,\"271d\":62696,\"274c\":62766,\"274e\":62767,\"27a1\":62671,\"27b0\":62768,\"27bf\":62769,\"2b05\":62675,\"2b06\":62669,\"2b07\":62673,\"2b1b\":62845,\"2b1c\":62846,\"2b50\":4958,\"2b55\":62762,\"303d\":62770,\"1f385-1f3fb\":0,\"1f385-1f3fc\":0,\"1f385-1f3fd\":0,\"1f385-1f3fe\":0,\"1f385-1f3ff\":0,\"1f3c2-1f3fb\":0,\"1f3c2-1f3fc\":0,\"1f3c2-1f3fd\":0,\"1f3c2-1f3fe\":0,\"1f3c2-1f3ff\":0,\"1f3c3-1f3fb-200d-2640\":0,\"1f3c3-1f3fc-200d-2640\":0,\"1f3c3-1f3fd-200d-2640\":0,\"1f3c3-1f3fe-200d-2640\":0,\"1f3c3-1f3ff-200d-2640\":0,\"1f3c3-1f3fb-200d-2642\":0,\"1f3c3-1f3fc-200d-2642\":0,\"1f3c3-1f3fd-200d-2642\":0,\"1f3c3-1f3fe-200d-2642\":0,\"1f3c3-1f3ff-200d-2642\":0,\"1f3c3-1f3fb\":0,\"1f3c3-1f3fc\":0,\"1f3c3-1f3fd\":0,\"1f3c3-1f3fe\":0,\"1f3c3-1f3ff\":0,\"1f3c4-1f3fb-200d-2640\":0,\"1f3c4-1f3fc-200d-2640\":0,\"1f3c4-1f3fd-200d-2640\":0,\"1f3c4-1f3fe-200d-2640\":0,\"1f3c4-1f3ff-200d-2640\":0,\"1f3c4-1f3fb-200d-2642\":0,\"1f3c4-1f3fc-200d-2642\":0,\"1f3c4-1f3fd-200d-2642\":0,\"1f3c4-1f3fe-200d-2642\":0,\"1f3c4-1f3ff-200d-2642\":0,\"1f3c4-1f3fb\":0,\"1f3c4-1f3fc\":0,\"1f3c4-1f3fd\":0,\"1f3c4-1f3fe\":0,\"1f3c4-1f3ff\":0,\"1f3c7-1f3fb\":0,\"1f3c7-1f3fc\":0,\"1f3c7-1f3fd\":0,\"1f3c7-1f3fe\":0,\"1f3c7-1f3ff\":0,\"1f3ca-1f3fb-200d-2640\":0,\"1f3ca-1f3fc-200d-2640\":0,\"1f3ca-1f3fd-200d-2640\":0,\"1f3ca-1f3fe-200d-2640\":0,\"1f3ca-1f3ff-200d-2640\":0,\"1f3ca-1f3fb-200d-2642\":0,\"1f3ca-1f3fc-200d-2642\":0,\"1f3ca-1f3fd-200d-2642\":0,\"1f3ca-1f3fe-200d-2642\":0,\"1f3ca-1f3ff-200d-2642\":0,\"1f3ca-1f3fb\":0,\"1f3ca-1f3fc\":0,\"1f3ca-1f3fd\":0,\"1f3ca-1f3fe\":0,\"1f3ca-1f3ff\":0,\"1f3cb-1f3fb-200d-2640\":0,\"1f3cb-1f3fc-200d-2640\":0,\"1f3cb-1f3fd-200d-2640\":0,\"1f3cb-1f3fe-200d-2640\":0,\"1f3cb-1f3ff-200d-2640\":0,\"1f3cb-1f3fb-200d-2642\":0,\"1f3cb-1f3fc-200d-2642\":0,\"1f3cb-1f3fd-200d-2642\":0,\"1f3cb-1f3fe-200d-2642\":0,\"1f3cb-1f3ff-200d-2642\":0,\"1f3cb-1f3fb\":0,\"1f3cb-1f3fc\":0,\"1f3cb-1f3fd\":0,\"1f3cb-1f3fe\":0,\"1f3cb-1f3ff\":0,\"1f3cc-1f3fb-200d-2640\":0,\"1f3cc-1f3fc-200d-2640\":0,\"1f3cc-1f3fd-200d-2640\":0,\"1f3cc-1f3fe-200d-2640\":0,\"1f3cc-1f3ff-200d-2640\":0,\"1f3cc-1f3fb-200d-2642\":0,\"1f3cc-1f3fc-200d-2642\":0,\"1f3cc-1f3fd-200d-2642\":0,\"1f3cc-1f3fe-200d-2642\":0,\"1f3cc-1f3ff-200d-2642\":0,\"1f3cc-1f3fb\":0,\"1f3cc-1f3fc\":0,\"1f3cc-1f3fd\":0,\"1f3cc-1f3fe\":0,\"1f3cc-1f3ff\":0,\"1f442-1f3fb\":0,\"1f442-1f3fc\":0,\"1f442-1f3fd\":0,\"1f442-1f3fe\":0,\"1f442-1f3ff\":0,\"1f443-1f3fb\":0,\"1f443-1f3fc\":0,\"1f443-1f3fd\":0,\"1f443-1f3fe\":0,\"1f443-1f3ff\":0,\"1f446-1f3fb\":0,\"1f446-1f3fc\":0,\"1f446-1f3fd\":0,\"1f446-1f3fe\":0,\"1f446-1f3ff\":0,\"1f447-1f3fb\":0,\"1f447-1f3fc\":0,\"1f447-1f3fd\":0,\"1f447-1f3fe\":0,\"1f447-1f3ff\":0,\"1f448-1f3fb\":0,\"1f448-1f3fc\":0,\"1f448-1f3fd\":0,\"1f448-1f3fe\":0,\"1f448-1f3ff\":0,\"1f449-1f3fb\":0,\"1f449-1f3fc\":0,\"1f449-1f3fd\":0,\"1f449-1f3fe\":0,\"1f449-1f3ff\":0,\"1f44a-1f3fb\":0,\"1f44a-1f3fc\":0,\"1f44a-1f3fd\":0,\"1f44a-1f3fe\":0,\"1f44a-1f3ff\":0,\"1f44b-1f3fb\":0,\"1f44b-1f3fc\":0,\"1f44b-1f3fd\":0,\"1f44b-1f3fe\":0,\"1f44b-1f3ff\":0,\"1f44c-1f3fb\":0,\"1f44c-1f3fc\":0,\"1f44c-1f3fd\":0,\"1f44c-1f3fe\":0,\"1f44c-1f3ff\":0,\"1f44d-1f3fb\":0,\"1f44d-1f3fc\":0,\"1f44d-1f3fd\":0,\"1f44d-1f3fe\":0,\"1f44d-1f3ff\":0,\"1f44e-1f3fb\":0,\"1f44e-1f3fc\":0,\"1f44e-1f3fd\":0,\"1f44e-1f3fe\":0,\"1f44e-1f3ff\":0,\"1f44f-1f3fb\":0,\"1f44f-1f3fc\":0,\"1f44f-1f3fd\":0,\"1f44f-1f3fe\":0,\"1f44f-1f3ff\":0,\"1f450-1f3fb\":0,\"1f450-1f3fc\":0,\"1f450-1f3fd\":0,\"1f450-1f3fe\":0,\"1f450-1f3ff\":0,\"1f466-1f3fb\":0,\"1f466-1f3fc\":0,\"1f466-1f3fd\":0,\"1f466-1f3fe\":0,\"1f466-1f3ff\":0,\"1f467-1f3fb\":0,\"1f467-1f3fc\":0,\"1f467-1f3fd\":0,\"1f467-1f3fe\":0,\"1f467-1f3ff\":0,\"1f468-1f3fb-200d-1f33e\":0,\"1f468-1f3fc-200d-1f33e\":0,\"1f468-1f3fd-200d-1f33e\":0,\"1f468-1f3fe-200d-1f33e\":0,\"1f468-1f3ff-200d-1f33e\":0,\"1f468-1f3fb-200d-1f373\":0,\"1f468-1f3fc-200d-1f373\":0,\"1f468-1f3fd-200d-1f373\":0,\"1f468-1f3fe-200d-1f373\":0,\"1f468-1f3ff-200d-1f373\":0,\"1f468-1f3fb-200d-1f37c\":0,\"1f468-1f3fc-200d-1f37c\":0,\"1f468-1f3fd-200d-1f37c\":0,\"1f468-1f3fe-200d-1f37c\":0,\"1f468-1f3ff-200d-1f37c\":0,\"1f468-1f3fb-200d-1f393\":0,\"1f468-1f3fc-200d-1f393\":0,\"1f468-1f3fd-200d-1f393\":0,\"1f468-1f3fe-200d-1f393\":0,\"1f468-1f3ff-200d-1f393\":0,\"1f468-1f3fb-200d-1f3a4\":0,\"1f468-1f3fc-200d-1f3a4\":0,\"1f468-1f3fd-200d-1f3a4\":0,\"1f468-1f3fe-200d-1f3a4\":0,\"1f468-1f3ff-200d-1f3a4\":0,\"1f468-1f3fb-200d-1f3a8\":0,\"1f468-1f3fc-200d-1f3a8\":0,\"1f468-1f3fd-200d-1f3a8\":0,\"1f468-1f3fe-200d-1f3a8\":0,\"1f468-1f3ff-200d-1f3a8\":0,\"1f468-1f3fb-200d-1f3eb\":0,\"1f468-1f3fc-200d-1f3eb\":0,\"1f468-1f3fd-200d-1f3eb\":0,\"1f468-1f3fe-200d-1f3eb\":0,\"1f468-1f3ff-200d-1f3eb\":0,\"1f468-1f3fb-200d-1f3ed\":0,\"1f468-1f3fc-200d-1f3ed\":0,\"1f468-1f3fd-200d-1f3ed\":0,\"1f468-1f3fe-200d-1f3ed\":0,\"1f468-1f3ff-200d-1f3ed\":0,\"1f468-1f3fb-200d-1f4bb\":0,\"1f468-1f3fc-200d-1f4bb\":0,\"1f468-1f3fd-200d-1f4bb\":0,\"1f468-1f3fe-200d-1f4bb\":0,\"1f468-1f3ff-200d-1f4bb\":0,\"1f468-1f3fb-200d-1f4bc\":0,\"1f468-1f3fc-200d-1f4bc\":0,\"1f468-1f3fd-200d-1f4bc\":0,\"1f468-1f3fe-200d-1f4bc\":0,\"1f468-1f3ff-200d-1f4bc\":0,\"1f468-1f3fb-200d-1f527\":0,\"1f468-1f3fc-200d-1f527\":0,\"1f468-1f3fd-200d-1f527\":0,\"1f468-1f3fe-200d-1f527\":0,\"1f468-1f3ff-200d-1f527\":0,\"1f468-1f3fb-200d-1f52c\":0,\"1f468-1f3fc-200d-1f52c\":0,\"1f468-1f3fd-200d-1f52c\":0,\"1f468-1f3fe-200d-1f52c\":0,\"1f468-1f3ff-200d-1f52c\":0,\"1f468-1f3fb-200d-1f680\":0,\"1f468-1f3fc-200d-1f680\":0,\"1f468-1f3fd-200d-1f680\":0,\"1f468-1f3fe-200d-1f680\":0,\"1f468-1f3ff-200d-1f680\":0,\"1f468-1f3fb-200d-1f692\":0,\"1f468-1f3fc-200d-1f692\":0,\"1f468-1f3fd-200d-1f692\":0,\"1f468-1f3fe-200d-1f692\":0,\"1f468-1f3ff-200d-1f692\":0,\"1f468-1f3fb-200d-1f9af\":0,\"1f468-1f3fc-200d-1f9af\":0,\"1f468-1f3fd-200d-1f9af\":0,\"1f468-1f3fe-200d-1f9af\":0,\"1f468-1f3ff-200d-1f9af\":0,\"1f468-1f3fb-200d-1f9b0\":0,\"1f468-1f3fc-200d-1f9b0\":0,\"1f468-1f3fd-200d-1f9b0\":0,\"1f468-1f3fe-200d-1f9b0\":0,\"1f468-1f3ff-200d-1f9b0\":0,\"1f468-1f3fb-200d-1f9b1\":0,\"1f468-1f3fc-200d-1f9b1\":0,\"1f468-1f3fd-200d-1f9b1\":0,\"1f468-1f3fe-200d-1f9b1\":0,\"1f468-1f3ff-200d-1f9b1\":0,\"1f468-1f3fb-200d-1f9b2\":0,\"1f468-1f3fc-200d-1f9b2\":0,\"1f468-1f3fd-200d-1f9b2\":0,\"1f468-1f3fe-200d-1f9b2\":0,\"1f468-1f3ff-200d-1f9b2\":0,\"1f468-1f3fb-200d-1f9b3\":0,\"1f468-1f3fc-200d-1f9b3\":0,\"1f468-1f3fd-200d-1f9b3\":0,\"1f468-1f3fe-200d-1f9b3\":0,\"1f468-1f3ff-200d-1f9b3\":0,\"1f468-1f3fb-200d-1f9bc\":0,\"1f468-1f3fc-200d-1f9bc\":0,\"1f468-1f3fd-200d-1f9bc\":0,\"1f468-1f3fe-200d-1f9bc\":0,\"1f468-1f3ff-200d-1f9bc\":0,\"1f468-1f3fb-200d-1f9bd\":0,\"1f468-1f3fc-200d-1f9bd\":0,\"1f468-1f3fd-200d-1f9bd\":0,\"1f468-1f3fe-200d-1f9bd\":0,\"1f468-1f3ff-200d-1f9bd\":0,\"1f468-1f3fb-200d-2695\":0,\"1f468-1f3fc-200d-2695\":0,\"1f468-1f3fd-200d-2695\":0,\"1f468-1f3fe-200d-2695\":0,\"1f468-1f3ff-200d-2695\":0,\"1f468-1f3fb-200d-2696\":0,\"1f468-1f3fc-200d-2696\":0,\"1f468-1f3fd-200d-2696\":0,\"1f468-1f3fe-200d-2696\":0,\"1f468-1f3ff-200d-2696\":0,\"1f468-1f3fb-200d-2708\":0,\"1f468-1f3fc-200d-2708\":0,\"1f468-1f3fd-200d-2708\":0,\"1f468-1f3fe-200d-2708\":0,\"1f468-1f3ff-200d-2708\":0,\"1f468-1f3fb\":0,\"1f468-1f3fc\":0,\"1f468-1f3fd\":0,\"1f468-1f3fe\":0,\"1f468-1f3ff\":0,\"1f469-1f3fb-200d-1f33e\":0,\"1f469-1f3fc-200d-1f33e\":0,\"1f469-1f3fd-200d-1f33e\":0,\"1f469-1f3fe-200d-1f33e\":0,\"1f469-1f3ff-200d-1f33e\":0,\"1f469-1f3fb-200d-1f373\":0,\"1f469-1f3fc-200d-1f373\":0,\"1f469-1f3fd-200d-1f373\":0,\"1f469-1f3fe-200d-1f373\":0,\"1f469-1f3ff-200d-1f373\":0,\"1f469-1f3fb-200d-1f37c\":0,\"1f469-1f3fc-200d-1f37c\":0,\"1f469-1f3fd-200d-1f37c\":0,\"1f469-1f3fe-200d-1f37c\":0,\"1f469-1f3ff-200d-1f37c\":0,\"1f469-1f3fb-200d-1f393\":0,\"1f469-1f3fc-200d-1f393\":0,\"1f469-1f3fd-200d-1f393\":0,\"1f469-1f3fe-200d-1f393\":0,\"1f469-1f3ff-200d-1f393\":0,\"1f469-1f3fb-200d-1f3a4\":0,\"1f469-1f3fc-200d-1f3a4\":0,\"1f469-1f3fd-200d-1f3a4\":0,\"1f469-1f3fe-200d-1f3a4\":0,\"1f469-1f3ff-200d-1f3a4\":0,\"1f469-1f3fb-200d-1f3a8\":0,\"1f469-1f3fc-200d-1f3a8\":0,\"1f469-1f3fd-200d-1f3a8\":0,\"1f469-1f3fe-200d-1f3a8\":0,\"1f469-1f3ff-200d-1f3a8\":0,\"1f469-1f3fb-200d-1f3eb\":0,\"1f469-1f3fc-200d-1f3eb\":0,\"1f469-1f3fd-200d-1f3eb\":0,\"1f469-1f3fe-200d-1f3eb\":0,\"1f469-1f3ff-200d-1f3eb\":0,\"1f469-1f3fb-200d-1f3ed\":0,\"1f469-1f3fc-200d-1f3ed\":0,\"1f469-1f3fd-200d-1f3ed\":0,\"1f469-1f3fe-200d-1f3ed\":0,\"1f469-1f3ff-200d-1f3ed\":0,\"1f469-1f3fb-200d-1f4bb\":0,\"1f469-1f3fc-200d-1f4bb\":0,\"1f469-1f3fd-200d-1f4bb\":0,\"1f469-1f3fe-200d-1f4bb\":0,\"1f469-1f3ff-200d-1f4bb\":0,\"1f469-1f3fb-200d-1f4bc\":0,\"1f469-1f3fc-200d-1f4bc\":0,\"1f469-1f3fd-200d-1f4bc\":0,\"1f469-1f3fe-200d-1f4bc\":0,\"1f469-1f3ff-200d-1f4bc\":0,\"1f469-1f3fb-200d-1f527\":0,\"1f469-1f3fc-200d-1f527\":0,\"1f469-1f3fd-200d-1f527\":0,\"1f469-1f3fe-200d-1f527\":0,\"1f469-1f3ff-200d-1f527\":0,\"1f469-1f3fb-200d-1f52c\":0,\"1f469-1f3fc-200d-1f52c\":0,\"1f469-1f3fd-200d-1f52c\":0,\"1f469-1f3fe-200d-1f52c\":0,\"1f469-1f3ff-200d-1f52c\":0,\"1f469-1f3fb-200d-1f680\":0,\"1f469-1f3fc-200d-1f680\":0,\"1f469-1f3fd-200d-1f680\":0,\"1f469-1f3fe-200d-1f680\":0,\"1f469-1f3ff-200d-1f680\":0,\"1f469-1f3fb-200d-1f692\":0,\"1f469-1f3fc-200d-1f692\":0,\"1f469-1f3fd-200d-1f692\":0,\"1f469-1f3fe-200d-1f692\":0,\"1f469-1f3ff-200d-1f692\":0,\"1f469-1f3fb-200d-1f9af\":0,\"1f469-1f3fc-200d-1f9af\":0,\"1f469-1f3fd-200d-1f9af\":0,\"1f469-1f3fe-200d-1f9af\":0,\"1f469-1f3ff-200d-1f9af\":0,\"1f469-1f3fb-200d-1f9b0\":0,\"1f469-1f3fc-200d-1f9b0\":0,\"1f469-1f3fd-200d-1f9b0\":0,\"1f469-1f3fe-200d-1f9b0\":0,\"1f469-1f3ff-200d-1f9b0\":0,\"1f469-1f3fb-200d-1f9b1\":0,\"1f469-1f3fc-200d-1f9b1\":0,\"1f469-1f3fd-200d-1f9b1\":0,\"1f469-1f3fe-200d-1f9b1\":0,\"1f469-1f3ff-200d-1f9b1\":0,\"1f469-1f3fb-200d-1f9b2\":0,\"1f469-1f3fc-200d-1f9b2\":0,\"1f469-1f3fd-200d-1f9b2\":0,\"1f469-1f3fe-200d-1f9b2\":0,\"1f469-1f3ff-200d-1f9b2\":0,\"1f469-1f3fb-200d-1f9b3\":0,\"1f469-1f3fc-200d-1f9b3\":0,\"1f469-1f3fd-200d-1f9b3\":0,\"1f469-1f3fe-200d-1f9b3\":0,\"1f469-1f3ff-200d-1f9b3\":0,\"1f469-1f3fb-200d-1f9bc\":0,\"1f469-1f3fc-200d-1f9bc\":0,\"1f469-1f3fd-200d-1f9bc\":0,\"1f469-1f3fe-200d-1f9bc\":0,\"1f469-1f3ff-200d-1f9bc\":0,\"1f469-1f3fb-200d-1f9bd\":0,\"1f469-1f3fc-200d-1f9bd\":0,\"1f469-1f3fd-200d-1f9bd\":0,\"1f469-1f3fe-200d-1f9bd\":0,\"1f469-1f3ff-200d-1f9bd\":0,\"1f469-1f3fb-200d-2695\":0,\"1f469-1f3fc-200d-2695\":0,\"1f469-1f3fd-200d-2695\":0,\"1f469-1f3fe-200d-2695\":0,\"1f469-1f3ff-200d-2695\":0,\"1f469-1f3fb-200d-2696\":0,\"1f469-1f3fc-200d-2696\":0,\"1f469-1f3fd-200d-2696\":0,\"1f469-1f3fe-200d-2696\":0,\"1f469-1f3ff-200d-2696\":0,\"1f469-1f3fb-200d-2708\":0,\"1f469-1f3fc-200d-2708\":0,\"1f469-1f3fd-200d-2708\":0,\"1f469-1f3fe-200d-2708\":0,\"1f469-1f3ff-200d-2708\":0,\"1f469-1f3fb\":0,\"1f469-1f3fc\":0,\"1f469-1f3fd\":0,\"1f469-1f3fe\":0,\"1f469-1f3ff\":0,\"1f46b-1f3fb\":0,\"1f46b-1f3fc\":0,\"1f46b-1f3fd\":0,\"1f46b-1f3fe\":0,\"1f46b-1f3ff\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe\":0,\"1f46c-1f3fb\":0,\"1f46c-1f3fc\":0,\"1f46c-1f3fd\":0,\"1f46c-1f3fe\":0,\"1f46c-1f3ff\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe\":0,\"1f46d-1f3fb\":0,\"1f46d-1f3fc\":0,\"1f46d-1f3fd\":0,\"1f46d-1f3fe\":0,\"1f46d-1f3ff\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe\":0,\"1f46e-1f3fb-200d-2640\":0,\"1f46e-1f3fc-200d-2640\":0,\"1f46e-1f3fd-200d-2640\":0,\"1f46e-1f3fe-200d-2640\":0,\"1f46e-1f3ff-200d-2640\":0,\"1f46e-1f3fb-200d-2642\":0,\"1f46e-1f3fc-200d-2642\":0,\"1f46e-1f3fd-200d-2642\":0,\"1f46e-1f3fe-200d-2642\":0,\"1f46e-1f3ff-200d-2642\":0,\"1f46e-1f3fb\":0,\"1f46e-1f3fc\":0,\"1f46e-1f3fd\":0,\"1f46e-1f3fe\":0,\"1f46e-1f3ff\":0,\"1f470-1f3fb-200d-2640\":0,\"1f470-1f3fc-200d-2640\":0,\"1f470-1f3fd-200d-2640\":0,\"1f470-1f3fe-200d-2640\":0,\"1f470-1f3ff-200d-2640\":0,\"1f470-1f3fb-200d-2642\":0,\"1f470-1f3fc-200d-2642\":0,\"1f470-1f3fd-200d-2642\":0,\"1f470-1f3fe-200d-2642\":0,\"1f470-1f3ff-200d-2642\":0,\"1f470-1f3fb\":0,\"1f470-1f3fc\":0,\"1f470-1f3fd\":0,\"1f470-1f3fe\":0,\"1f470-1f3ff\":0,\"1f471-1f3fb-200d-2640\":0,\"1f471-1f3fc-200d-2640\":0,\"1f471-1f3fd-200d-2640\":0,\"1f471-1f3fe-200d-2640\":0,\"1f471-1f3ff-200d-2640\":0,\"1f471-1f3fb-200d-2642\":0,\"1f471-1f3fc-200d-2642\":0,\"1f471-1f3fd-200d-2642\":0,\"1f471-1f3fe-200d-2642\":0,\"1f471-1f3ff-200d-2642\":0,\"1f471-1f3fb\":0,\"1f471-1f3fc\":0,\"1f471-1f3fd\":0,\"1f471-1f3fe\":0,\"1f471-1f3ff\":0,\"1f472-1f3fb\":0,\"1f472-1f3fc\":0,\"1f472-1f3fd\":0,\"1f472-1f3fe\":0,\"1f472-1f3ff\":0,\"1f473-1f3fb-200d-2640\":0,\"1f473-1f3fc-200d-2640\":0,\"1f473-1f3fd-200d-2640\":0,\"1f473-1f3fe-200d-2640\":0,\"1f473-1f3ff-200d-2640\":0,\"1f473-1f3fb-200d-2642\":0,\"1f473-1f3fc-200d-2642\":0,\"1f473-1f3fd-200d-2642\":0,\"1f473-1f3fe-200d-2642\":0,\"1f473-1f3ff-200d-2642\":0,\"1f473-1f3fb\":0,\"1f473-1f3fc\":0,\"1f473-1f3fd\":0,\"1f473-1f3fe\":0,\"1f473-1f3ff\":0,\"1f474-1f3fb\":0,\"1f474-1f3fc\":0,\"1f474-1f3fd\":0,\"1f474-1f3fe\":0,\"1f474-1f3ff\":0,\"1f475-1f3fb\":0,\"1f475-1f3fc\":0,\"1f475-1f3fd\":0,\"1f475-1f3fe\":0,\"1f475-1f3ff\":0,\"1f476-1f3fb\":0,\"1f476-1f3fc\":0,\"1f476-1f3fd\":0,\"1f476-1f3fe\":0,\"1f476-1f3ff\":0,\"1f477-1f3fb-200d-2640\":0,\"1f477-1f3fc-200d-2640\":0,\"1f477-1f3fd-200d-2640\":0,\"1f477-1f3fe-200d-2640\":0,\"1f477-1f3ff-200d-2640\":0,\"1f477-1f3fb-200d-2642\":0,\"1f477-1f3fc-200d-2642\":0,\"1f477-1f3fd-200d-2642\":0,\"1f477-1f3fe-200d-2642\":0,\"1f477-1f3ff-200d-2642\":0,\"1f477-1f3fb\":0,\"1f477-1f3fc\":0,\"1f477-1f3fd\":0,\"1f477-1f3fe\":0,\"1f477-1f3ff\":0,\"1f478-1f3fb\":0,\"1f478-1f3fc\":0,\"1f478-1f3fd\":0,\"1f478-1f3fe\":0,\"1f478-1f3ff\":0,\"1f47c-1f3fb\":0,\"1f47c-1f3fc\":0,\"1f47c-1f3fd\":0,\"1f47c-1f3fe\":0,\"1f47c-1f3ff\":0,\"1f481-1f3fb-200d-2640\":0,\"1f481-1f3fc-200d-2640\":0,\"1f481-1f3fd-200d-2640\":0,\"1f481-1f3fe-200d-2640\":0,\"1f481-1f3ff-200d-2640\":0,\"1f481-1f3fb-200d-2642\":0,\"1f481-1f3fc-200d-2642\":0,\"1f481-1f3fd-200d-2642\":0,\"1f481-1f3fe-200d-2642\":0,\"1f481-1f3ff-200d-2642\":0,\"1f481-1f3fb\":0,\"1f481-1f3fc\":0,\"1f481-1f3fd\":0,\"1f481-1f3fe\":0,\"1f481-1f3ff\":0,\"1f482-1f3fb-200d-2640\":0,\"1f482-1f3fc-200d-2640\":0,\"1f482-1f3fd-200d-2640\":0,\"1f482-1f3fe-200d-2640\":0,\"1f482-1f3ff-200d-2640\":0,\"1f482-1f3fb-200d-2642\":0,\"1f482-1f3fc-200d-2642\":0,\"1f482-1f3fd-200d-2642\":0,\"1f482-1f3fe-200d-2642\":0,\"1f482-1f3ff-200d-2642\":0,\"1f482-1f3fb\":0,\"1f482-1f3fc\":0,\"1f482-1f3fd\":0,\"1f482-1f3fe\":0,\"1f482-1f3ff\":0,\"1f483-1f3fb\":0,\"1f483-1f3fc\":0,\"1f483-1f3fd\":0,\"1f483-1f3fe\":0,\"1f483-1f3ff\":0,\"1f485-1f3fb\":0,\"1f485-1f3fc\":0,\"1f485-1f3fd\":0,\"1f485-1f3fe\":0,\"1f485-1f3ff\":0,\"1f486-1f3fb-200d-2640\":0,\"1f486-1f3fc-200d-2640\":0,\"1f486-1f3fd-200d-2640\":0,\"1f486-1f3fe-200d-2640\":0,\"1f486-1f3ff-200d-2640\":0,\"1f486-1f3fb-200d-2642\":0,\"1f486-1f3fc-200d-2642\":0,\"1f486-1f3fd-200d-2642\":0,\"1f486-1f3fe-200d-2642\":0,\"1f486-1f3ff-200d-2642\":0,\"1f486-1f3fb\":0,\"1f486-1f3fc\":0,\"1f486-1f3fd\":0,\"1f486-1f3fe\":0,\"1f486-1f3ff\":0,\"1f487-1f3fb-200d-2640\":0,\"1f487-1f3fc-200d-2640\":0,\"1f487-1f3fd-200d-2640\":0,\"1f487-1f3fe-200d-2640\":0,\"1f487-1f3ff-200d-2640\":0,\"1f487-1f3fb-200d-2642\":0,\"1f487-1f3fc-200d-2642\":0,\"1f487-1f3fd-200d-2642\":0,\"1f487-1f3fe-200d-2642\":0,\"1f487-1f3ff-200d-2642\":0,\"1f487-1f3fb\":0,\"1f487-1f3fc\":0,\"1f487-1f3fd\":0,\"1f487-1f3fe\":0,\"1f487-1f3ff\":0,\"1f4aa-1f3fb\":0,\"1f4aa-1f3fc\":0,\"1f4aa-1f3fd\":0,\"1f4aa-1f3fe\":0,\"1f4aa-1f3ff\":0,\"1f574-1f3fb\":0,\"1f574-1f3fc\":0,\"1f574-1f3fd\":0,\"1f574-1f3fe\":0,\"1f574-1f3ff\":0,\"1f575-1f3fb-200d-2640\":0,\"1f575-1f3fc-200d-2640\":0,\"1f575-1f3fd-200d-2640\":0,\"1f575-1f3fe-200d-2640\":0,\"1f575-1f3ff-200d-2640\":0,\"1f575-1f3fb-200d-2642\":0,\"1f575-1f3fc-200d-2642\":0,\"1f575-1f3fd-200d-2642\":0,\"1f575-1f3fe-200d-2642\":0,\"1f575-1f3ff-200d-2642\":0,\"1f575-1f3fb\":0,\"1f575-1f3fc\":0,\"1f575-1f3fd\":0,\"1f575-1f3fe\":0,\"1f575-1f3ff\":0,\"1f57a-1f3fb\":0,\"1f57a-1f3fc\":0,\"1f57a-1f3fd\":0,\"1f57a-1f3fe\":0,\"1f57a-1f3ff\":0,\"1f590-1f3fb\":0,\"1f590-1f3fc\":0,\"1f590-1f3fd\":0,\"1f590-1f3fe\":0,\"1f590-1f3ff\":0,\"1f595-1f3fb\":0,\"1f595-1f3fc\":0,\"1f595-1f3fd\":0,\"1f595-1f3fe\":0,\"1f595-1f3ff\":0,\"1f596-1f3fb\":0,\"1f596-1f3fc\":0,\"1f596-1f3fd\":0,\"1f596-1f3fe\":0,\"1f596-1f3ff\":0,\"1f645-1f3fb-200d-2640\":0,\"1f645-1f3fc-200d-2640\":0,\"1f645-1f3fd-200d-2640\":0,\"1f645-1f3fe-200d-2640\":0,\"1f645-1f3ff-200d-2640\":0,\"1f645-1f3fb-200d-2642\":0,\"1f645-1f3fc-200d-2642\":0,\"1f645-1f3fd-200d-2642\":0,\"1f645-1f3fe-200d-2642\":0,\"1f645-1f3ff-200d-2642\":0,\"1f645-1f3fb\":0,\"1f645-1f3fc\":0,\"1f645-1f3fd\":0,\"1f645-1f3fe\":0,\"1f645-1f3ff\":0,\"1f646-1f3fb-200d-2640\":0,\"1f646-1f3fc-200d-2640\":0,\"1f646-1f3fd-200d-2640\":0,\"1f646-1f3fe-200d-2640\":0,\"1f646-1f3ff-200d-2640\":0,\"1f646-1f3fb-200d-2642\":0,\"1f646-1f3fc-200d-2642\":0,\"1f646-1f3fd-200d-2642\":0,\"1f646-1f3fe-200d-2642\":0,\"1f646-1f3ff-200d-2642\":0,\"1f646-1f3fb\":0,\"1f646-1f3fc\":0,\"1f646-1f3fd\":0,\"1f646-1f3fe\":0,\"1f646-1f3ff\":0,\"1f647-1f3fb-200d-2640\":0,\"1f647-1f3fc-200d-2640\":0,\"1f647-1f3fd-200d-2640\":0,\"1f647-1f3fe-200d-2640\":0,\"1f647-1f3ff-200d-2640\":0,\"1f647-1f3fb-200d-2642\":0,\"1f647-1f3fc-200d-2642\":0,\"1f647-1f3fd-200d-2642\":0,\"1f647-1f3fe-200d-2642\":0,\"1f647-1f3ff-200d-2642\":0,\"1f647-1f3fb\":0,\"1f647-1f3fc\":0,\"1f647-1f3fd\":0,\"1f647-1f3fe\":0,\"1f647-1f3ff\":0,\"1f64b-1f3fb-200d-2640\":0,\"1f64b-1f3fc-200d-2640\":0,\"1f64b-1f3fd-200d-2640\":0,\"1f64b-1f3fe-200d-2640\":0,\"1f64b-1f3ff-200d-2640\":0,\"1f64b-1f3fb-200d-2642\":0,\"1f64b-1f3fc-200d-2642\":0,\"1f64b-1f3fd-200d-2642\":0,\"1f64b-1f3fe-200d-2642\":0,\"1f64b-1f3ff-200d-2642\":0,\"1f64b-1f3fb\":0,\"1f64b-1f3fc\":0,\"1f64b-1f3fd\":0,\"1f64b-1f3fe\":0,\"1f64b-1f3ff\":0,\"1f64c-1f3fb\":0,\"1f64c-1f3fc\":0,\"1f64c-1f3fd\":0,\"1f64c-1f3fe\":0,\"1f64c-1f3ff\":0,\"1f64d-1f3fb-200d-2640\":0,\"1f64d-1f3fc-200d-2640\":0,\"1f64d-1f3fd-200d-2640\":0,\"1f64d-1f3fe-200d-2640\":0,\"1f64d-1f3ff-200d-2640\":0,\"1f64d-1f3fb-200d-2642\":0,\"1f64d-1f3fc-200d-2642\":0,\"1f64d-1f3fd-200d-2642\":0,\"1f64d-1f3fe-200d-2642\":0,\"1f64d-1f3ff-200d-2642\":0,\"1f64d-1f3fb\":0,\"1f64d-1f3fc\":0,\"1f64d-1f3fd\":0,\"1f64d-1f3fe\":0,\"1f64d-1f3ff\":0,\"1f64e-1f3fb-200d-2640\":0,\"1f64e-1f3fc-200d-2640\":0,\"1f64e-1f3fd-200d-2640\":0,\"1f64e-1f3fe-200d-2640\":0,\"1f64e-1f3ff-200d-2640\":0,\"1f64e-1f3fb-200d-2642\":0,\"1f64e-1f3fc-200d-2642\":0,\"1f64e-1f3fd-200d-2642\":0,\"1f64e-1f3fe-200d-2642\":0,\"1f64e-1f3ff-200d-2642\":0,\"1f64e-1f3fb\":0,\"1f64e-1f3fc\":0,\"1f64e-1f3fd\":0,\"1f64e-1f3fe\":0,\"1f64e-1f3ff\":0,\"1f64f-1f3fb\":0,\"1f64f-1f3fc\":0,\"1f64f-1f3fd\":0,\"1f64f-1f3fe\":0,\"1f64f-1f3ff\":0,\"1f6a3-1f3fb-200d-2640\":0,\"1f6a3-1f3fc-200d-2640\":0,\"1f6a3-1f3fd-200d-2640\":0,\"1f6a3-1f3fe-200d-2640\":0,\"1f6a3-1f3ff-200d-2640\":0,\"1f6a3-1f3fb-200d-2642\":0,\"1f6a3-1f3fc-200d-2642\":0,\"1f6a3-1f3fd-200d-2642\":0,\"1f6a3-1f3fe-200d-2642\":0,\"1f6a3-1f3ff-200d-2642\":0,\"1f6a3-1f3fb\":0,\"1f6a3-1f3fc\":0,\"1f6a3-1f3fd\":0,\"1f6a3-1f3fe\":0,\"1f6a3-1f3ff\":0,\"1f6b4-1f3fb-200d-2640\":0,\"1f6b4-1f3fc-200d-2640\":0,\"1f6b4-1f3fd-200d-2640\":0,\"1f6b4-1f3fe-200d-2640\":0,\"1f6b4-1f3ff-200d-2640\":0,\"1f6b4-1f3fb-200d-2642\":0,\"1f6b4-1f3fc-200d-2642\":0,\"1f6b4-1f3fd-200d-2642\":0,\"1f6b4-1f3fe-200d-2642\":0,\"1f6b4-1f3ff-200d-2642\":0,\"1f6b4-1f3fb\":0,\"1f6b4-1f3fc\":0,\"1f6b4-1f3fd\":0,\"1f6b4-1f3fe\":0,\"1f6b4-1f3ff\":0,\"1f6b5-1f3fb-200d-2640\":0,\"1f6b5-1f3fc-200d-2640\":0,\"1f6b5-1f3fd-200d-2640\":0,\"1f6b5-1f3fe-200d-2640\":0,\"1f6b5-1f3ff-200d-2640\":0,\"1f6b5-1f3fb-200d-2642\":0,\"1f6b5-1f3fc-200d-2642\":0,\"1f6b5-1f3fd-200d-2642\":0,\"1f6b5-1f3fe-200d-2642\":0,\"1f6b5-1f3ff-200d-2642\":0,\"1f6b5-1f3fb\":0,\"1f6b5-1f3fc\":0,\"1f6b5-1f3fd\":0,\"1f6b5-1f3fe\":0,\"1f6b5-1f3ff\":0,\"1f6b6-1f3fb-200d-2640\":0,\"1f6b6-1f3fc-200d-2640\":0,\"1f6b6-1f3fd-200d-2640\":0,\"1f6b6-1f3fe-200d-2640\":0,\"1f6b6-1f3ff-200d-2640\":0,\"1f6b6-1f3fb-200d-2642\":0,\"1f6b6-1f3fc-200d-2642\":0,\"1f6b6-1f3fd-200d-2642\":0,\"1f6b6-1f3fe-200d-2642\":0,\"1f6b6-1f3ff-200d-2642\":0,\"1f6b6-1f3fb\":0,\"1f6b6-1f3fc\":0,\"1f6b6-1f3fd\":0,\"1f6b6-1f3fe\":0,\"1f6b6-1f3ff\":0,\"1f6c0-1f3fb\":0,\"1f6c0-1f3fc\":0,\"1f6c0-1f3fd\":0,\"1f6c0-1f3fe\":0,\"1f6c0-1f3ff\":0,\"1f6cc-1f3fb\":0,\"1f6cc-1f3fc\":0,\"1f6cc-1f3fd\":0,\"1f6cc-1f3fe\":0,\"1f6cc-1f3ff\":0,\"1f90c-1f3fb\":0,\"1f90c-1f3fc\":0,\"1f90c-1f3fd\":0,\"1f90c-1f3fe\":0,\"1f90c-1f3ff\":0,\"1f90f-1f3fb\":0,\"1f90f-1f3fc\":0,\"1f90f-1f3fd\":0,\"1f90f-1f3fe\":0,\"1f90f-1f3ff\":0,\"1f918-1f3fb\":0,\"1f918-1f3fc\":0,\"1f918-1f3fd\":0,\"1f918-1f3fe\":0,\"1f918-1f3ff\":0,\"1f919-1f3fb\":0,\"1f919-1f3fc\":0,\"1f919-1f3fd\":0,\"1f919-1f3fe\":0,\"1f919-1f3ff\":0,\"1f91a-1f3fb\":0,\"1f91a-1f3fc\":0,\"1f91a-1f3fd\":0,\"1f91a-1f3fe\":0,\"1f91a-1f3ff\":0,\"1f91b-1f3fb\":0,\"1f91b-1f3fc\":0,\"1f91b-1f3fd\":0,\"1f91b-1f3fe\":0,\"1f91b-1f3ff\":0,\"1f91c-1f3fb\":0,\"1f91c-1f3fc\":0,\"1f91c-1f3fd\":0,\"1f91c-1f3fe\":0,\"1f91c-1f3ff\":0,\"1f91e-1f3fb\":0,\"1f91e-1f3fc\":0,\"1f91e-1f3fd\":0,\"1f91e-1f3fe\":0,\"1f91e-1f3ff\":0,\"1f91f-1f3fb\":0,\"1f91f-1f3fc\":0,\"1f91f-1f3fd\":0,\"1f91f-1f3fe\":0,\"1f91f-1f3ff\":0,\"1f926-1f3fb-200d-2640\":0,\"1f926-1f3fc-200d-2640\":0,\"1f926-1f3fd-200d-2640\":0,\"1f926-1f3fe-200d-2640\":0,\"1f926-1f3ff-200d-2640\":0,\"1f926-1f3fb-200d-2642\":0,\"1f926-1f3fc-200d-2642\":0,\"1f926-1f3fd-200d-2642\":0,\"1f926-1f3fe-200d-2642\":0,\"1f926-1f3ff-200d-2642\":0,\"1f926-1f3fb\":0,\"1f926-1f3fc\":0,\"1f926-1f3fd\":0,\"1f926-1f3fe\":0,\"1f926-1f3ff\":0,\"1f930-1f3fb\":0,\"1f930-1f3fc\":0,\"1f930-1f3fd\":0,\"1f930-1f3fe\":0,\"1f930-1f3ff\":0,\"1f931-1f3fb\":0,\"1f931-1f3fc\":0,\"1f931-1f3fd\":0,\"1f931-1f3fe\":0,\"1f931-1f3ff\":0,\"1f932-1f3fb\":0,\"1f932-1f3fc\":0,\"1f932-1f3fd\":0,\"1f932-1f3fe\":0,\"1f932-1f3ff\":0,\"1f933-1f3fb\":0,\"1f933-1f3fc\":0,\"1f933-1f3fd\":0,\"1f933-1f3fe\":0,\"1f933-1f3ff\":0,\"1f934-1f3fb\":0,\"1f934-1f3fc\":0,\"1f934-1f3fd\":0,\"1f934-1f3fe\":0,\"1f934-1f3ff\":0,\"1f935-1f3fb-200d-2640\":0,\"1f935-1f3fc-200d-2640\":0,\"1f935-1f3fd-200d-2640\":0,\"1f935-1f3fe-200d-2640\":0,\"1f935-1f3ff-200d-2640\":0,\"1f935-1f3fb-200d-2642\":0,\"1f935-1f3fc-200d-2642\":0,\"1f935-1f3fd-200d-2642\":0,\"1f935-1f3fe-200d-2642\":0,\"1f935-1f3ff-200d-2642\":0,\"1f935-1f3fb\":0,\"1f935-1f3fc\":0,\"1f935-1f3fd\":0,\"1f935-1f3fe\":0,\"1f935-1f3ff\":0,\"1f936-1f3fb\":0,\"1f936-1f3fc\":0,\"1f936-1f3fd\":0,\"1f936-1f3fe\":0,\"1f936-1f3ff\":0,\"1f937-1f3fb-200d-2640\":0,\"1f937-1f3fc-200d-2640\":0,\"1f937-1f3fd-200d-2640\":0,\"1f937-1f3fe-200d-2640\":0,\"1f937-1f3ff-200d-2640\":0,\"1f937-1f3fb-200d-2642\":0,\"1f937-1f3fc-200d-2642\":0,\"1f937-1f3fd-200d-2642\":0,\"1f937-1f3fe-200d-2642\":0,\"1f937-1f3ff-200d-2642\":0,\"1f937-1f3fb\":0,\"1f937-1f3fc\":0,\"1f937-1f3fd\":0,\"1f937-1f3fe\":0,\"1f937-1f3ff\":0,\"1f938-1f3fb-200d-2640\":0,\"1f938-1f3fc-200d-2640\":0,\"1f938-1f3fd-200d-2640\":0,\"1f938-1f3fe-200d-2640\":0,\"1f938-1f3ff-200d-2640\":0,\"1f938-1f3fb-200d-2642\":0,\"1f938-1f3fc-200d-2642\":0,\"1f938-1f3fd-200d-2642\":0,\"1f938-1f3fe-200d-2642\":0,\"1f938-1f3ff-200d-2642\":0,\"1f938-1f3fb\":0,\"1f938-1f3fc\":0,\"1f938-1f3fd\":0,\"1f938-1f3fe\":0,\"1f938-1f3ff\":0,\"1f939-1f3fb-200d-2640\":0,\"1f939-1f3fc-200d-2640\":0,\"1f939-1f3fd-200d-2640\":0,\"1f939-1f3fe-200d-2640\":0,\"1f939-1f3ff-200d-2640\":0,\"1f939-1f3fb-200d-2642\":0,\"1f939-1f3fc-200d-2642\":0,\"1f939-1f3fd-200d-2642\":0,\"1f939-1f3fe-200d-2642\":0,\"1f939-1f3ff-200d-2642\":0,\"1f939-1f3fb\":0,\"1f939-1f3fc\":0,\"1f939-1f3fd\":0,\"1f939-1f3fe\":0,\"1f939-1f3ff\":0,\"1f93d-1f3fb-200d-2640\":0,\"1f93d-1f3fc-200d-2640\":0,\"1f93d-1f3fd-200d-2640\":0,\"1f93d-1f3fe-200d-2640\":0,\"1f93d-1f3ff-200d-2640\":0,\"1f93d-1f3fb-200d-2642\":0,\"1f93d-1f3fc-200d-2642\":0,\"1f93d-1f3fd-200d-2642\":0,\"1f93d-1f3fe-200d-2642\":0,\"1f93d-1f3ff-200d-2642\":0,\"1f93d-1f3fb\":0,\"1f93d-1f3fc\":0,\"1f93d-1f3fd\":0,\"1f93d-1f3fe\":0,\"1f93d-1f3ff\":0,\"1f93e-1f3fb-200d-2640\":0,\"1f93e-1f3fc-200d-2640\":0,\"1f93e-1f3fd-200d-2640\":0,\"1f93e-1f3fe-200d-2640\":0,\"1f93e-1f3ff-200d-2640\":0,\"1f93e-1f3fb-200d-2642\":0,\"1f93e-1f3fc-200d-2642\":0,\"1f93e-1f3fd-200d-2642\":0,\"1f93e-1f3fe-200d-2642\":0,\"1f93e-1f3ff-200d-2642\":0,\"1f93e-1f3fb\":0,\"1f93e-1f3fc\":0,\"1f93e-1f3fd\":0,\"1f93e-1f3fe\":0,\"1f93e-1f3ff\":0,\"1f977-1f3fb\":0,\"1f977-1f3fc\":0,\"1f977-1f3fd\":0,\"1f977-1f3fe\":0,\"1f977-1f3ff\":0,\"1f9b5-1f3fb\":0,\"1f9b5-1f3fc\":0,\"1f9b5-1f3fd\":0,\"1f9b5-1f3fe\":0,\"1f9b5-1f3ff\":0,\"1f9b6-1f3fb\":0,\"1f9b6-1f3fc\":0,\"1f9b6-1f3fd\":0,\"1f9b6-1f3fe\":0,\"1f9b6-1f3ff\":0,\"1f9b8-1f3fb-200d-2640\":0,\"1f9b8-1f3fc-200d-2640\":0,\"1f9b8-1f3fd-200d-2640\":0,\"1f9b8-1f3fe-200d-2640\":0,\"1f9b8-1f3ff-200d-2640\":0,\"1f9b8-1f3fb-200d-2642\":0,\"1f9b8-1f3fc-200d-2642\":0,\"1f9b8-1f3fd-200d-2642\":0,\"1f9b8-1f3fe-200d-2642\":0,\"1f9b8-1f3ff-200d-2642\":0,\"1f9b8-1f3fb\":0,\"1f9b8-1f3fc\":0,\"1f9b8-1f3fd\":0,\"1f9b8-1f3fe\":0,\"1f9b8-1f3ff\":0,\"1f9b9-1f3fb-200d-2640\":0,\"1f9b9-1f3fc-200d-2640\":0,\"1f9b9-1f3fd-200d-2640\":0,\"1f9b9-1f3fe-200d-2640\":0,\"1f9b9-1f3ff-200d-2640\":0,\"1f9b9-1f3fb-200d-2642\":0,\"1f9b9-1f3fc-200d-2642\":0,\"1f9b9-1f3fd-200d-2642\":0,\"1f9b9-1f3fe-200d-2642\":0,\"1f9b9-1f3ff-200d-2642\":0,\"1f9b9-1f3fb\":0,\"1f9b9-1f3fc\":0,\"1f9b9-1f3fd\":0,\"1f9b9-1f3fe\":0,\"1f9b9-1f3ff\":0,\"1f9bb-1f3fb\":0,\"1f9bb-1f3fc\":0,\"1f9bb-1f3fd\":0,\"1f9bb-1f3fe\":0,\"1f9bb-1f3ff\":0,\"1f9cd-1f3fb-200d-2640\":0,\"1f9cd-1f3fc-200d-2640\":0,\"1f9cd-1f3fd-200d-2640\":0,\"1f9cd-1f3fe-200d-2640\":0,\"1f9cd-1f3ff-200d-2640\":0,\"1f9cd-1f3fb-200d-2642\":0,\"1f9cd-1f3fc-200d-2642\":0,\"1f9cd-1f3fd-200d-2642\":0,\"1f9cd-1f3fe-200d-2642\":0,\"1f9cd-1f3ff-200d-2642\":0,\"1f9cd-1f3fb\":0,\"1f9cd-1f3fc\":0,\"1f9cd-1f3fd\":0,\"1f9cd-1f3fe\":0,\"1f9cd-1f3ff\":0,\"1f9ce-1f3fb-200d-2640\":0,\"1f9ce-1f3fc-200d-2640\":0,\"1f9ce-1f3fd-200d-2640\":0,\"1f9ce-1f3fe-200d-2640\":0,\"1f9ce-1f3ff-200d-2640\":0,\"1f9ce-1f3fb-200d-2642\":0,\"1f9ce-1f3fc-200d-2642\":0,\"1f9ce-1f3fd-200d-2642\":0,\"1f9ce-1f3fe-200d-2642\":0,\"1f9ce-1f3ff-200d-2642\":0,\"1f9ce-1f3fb\":0,\"1f9ce-1f3fc\":0,\"1f9ce-1f3fd\":0,\"1f9ce-1f3fe\":0,\"1f9ce-1f3ff\":0,\"1f9cf-1f3fb-200d-2640\":0,\"1f9cf-1f3fc-200d-2640\":0,\"1f9cf-1f3fd-200d-2640\":0,\"1f9cf-1f3fe-200d-2640\":0,\"1f9cf-1f3ff-200d-2640\":0,\"1f9cf-1f3fb-200d-2642\":0,\"1f9cf-1f3fc-200d-2642\":0,\"1f9cf-1f3fd-200d-2642\":0,\"1f9cf-1f3fe-200d-2642\":0,\"1f9cf-1f3ff-200d-2642\":0,\"1f9cf-1f3fb\":0,\"1f9cf-1f3fc\":0,\"1f9cf-1f3fd\":0,\"1f9cf-1f3fe\":0,\"1f9cf-1f3ff\":0,\"1f9d1-1f3fb-200d-1f33e\":0,\"1f9d1-1f3fc-200d-1f33e\":0,\"1f9d1-1f3fd-200d-1f33e\":0,\"1f9d1-1f3fe-200d-1f33e\":0,\"1f9d1-1f3ff-200d-1f33e\":0,\"1f9d1-1f3fb-200d-1f373\":0,\"1f9d1-1f3fc-200d-1f373\":0,\"1f9d1-1f3fd-200d-1f373\":0,\"1f9d1-1f3fe-200d-1f373\":0,\"1f9d1-1f3ff-200d-1f373\":0,\"1f9d1-1f3fb-200d-1f37c\":0,\"1f9d1-1f3fc-200d-1f37c\":0,\"1f9d1-1f3fd-200d-1f37c\":0,\"1f9d1-1f3fe-200d-1f37c\":0,\"1f9d1-1f3ff-200d-1f37c\":0,\"1f9d1-1f3fb-200d-1f384\":0,\"1f9d1-1f3fc-200d-1f384\":0,\"1f9d1-1f3fd-200d-1f384\":0,\"1f9d1-1f3fe-200d-1f384\":0,\"1f9d1-1f3ff-200d-1f384\":0,\"1f9d1-1f3fb-200d-1f393\":0,\"1f9d1-1f3fc-200d-1f393\":0,\"1f9d1-1f3fd-200d-1f393\":0,\"1f9d1-1f3fe-200d-1f393\":0,\"1f9d1-1f3ff-200d-1f393\":0,\"1f9d1-1f3fb-200d-1f3a4\":0,\"1f9d1-1f3fc-200d-1f3a4\":0,\"1f9d1-1f3fd-200d-1f3a4\":0,\"1f9d1-1f3fe-200d-1f3a4\":0,\"1f9d1-1f3ff-200d-1f3a4\":0,\"1f9d1-1f3fb-200d-1f3a8\":0,\"1f9d1-1f3fc-200d-1f3a8\":0,\"1f9d1-1f3fd-200d-1f3a8\":0,\"1f9d1-1f3fe-200d-1f3a8\":0,\"1f9d1-1f3ff-200d-1f3a8\":0,\"1f9d1-1f3fb-200d-1f3eb\":0,\"1f9d1-1f3fc-200d-1f3eb\":0,\"1f9d1-1f3fd-200d-1f3eb\":0,\"1f9d1-1f3fe-200d-1f3eb\":0,\"1f9d1-1f3ff-200d-1f3eb\":0,\"1f9d1-1f3fb-200d-1f3ed\":0,\"1f9d1-1f3fc-200d-1f3ed\":0,\"1f9d1-1f3fd-200d-1f3ed\":0,\"1f9d1-1f3fe-200d-1f3ed\":0,\"1f9d1-1f3ff-200d-1f3ed\":0,\"1f9d1-1f3fb-200d-1f4bb\":0,\"1f9d1-1f3fc-200d-1f4bb\":0,\"1f9d1-1f3fd-200d-1f4bb\":0,\"1f9d1-1f3fe-200d-1f4bb\":0,\"1f9d1-1f3ff-200d-1f4bb\":0,\"1f9d1-1f3fb-200d-1f4bc\":0,\"1f9d1-1f3fc-200d-1f4bc\":0,\"1f9d1-1f3fd-200d-1f4bc\":0,\"1f9d1-1f3fe-200d-1f4bc\":0,\"1f9d1-1f3ff-200d-1f4bc\":0,\"1f9d1-1f3fb-200d-1f527\":0,\"1f9d1-1f3fc-200d-1f527\":0,\"1f9d1-1f3fd-200d-1f527\":0,\"1f9d1-1f3fe-200d-1f527\":0,\"1f9d1-1f3ff-200d-1f527\":0,\"1f9d1-1f3fb-200d-1f52c\":0,\"1f9d1-1f3fc-200d-1f52c\":0,\"1f9d1-1f3fd-200d-1f52c\":0,\"1f9d1-1f3fe-200d-1f52c\":0,\"1f9d1-1f3ff-200d-1f52c\":0,\"1f9d1-1f3fb-200d-1f680\":0,\"1f9d1-1f3fc-200d-1f680\":0,\"1f9d1-1f3fd-200d-1f680\":0,\"1f9d1-1f3fe-200d-1f680\":0,\"1f9d1-1f3ff-200d-1f680\":0,\"1f9d1-1f3fb-200d-1f692\":0,\"1f9d1-1f3fc-200d-1f692\":0,\"1f9d1-1f3fd-200d-1f692\":0,\"1f9d1-1f3fe-200d-1f692\":0,\"1f9d1-1f3ff-200d-1f692\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fb-200d-1f9af\":0,\"1f9d1-1f3fc-200d-1f9af\":0,\"1f9d1-1f3fd-200d-1f9af\":0,\"1f9d1-1f3fe-200d-1f9af\":0,\"1f9d1-1f3ff-200d-1f9af\":0,\"1f9d1-1f3fb-200d-1f9b0\":0,\"1f9d1-1f3fc-200d-1f9b0\":0,\"1f9d1-1f3fd-200d-1f9b0\":0,\"1f9d1-1f3fe-200d-1f9b0\":0,\"1f9d1-1f3ff-200d-1f9b0\":0,\"1f9d1-1f3fb-200d-1f9b1\":0,\"1f9d1-1f3fc-200d-1f9b1\":0,\"1f9d1-1f3fd-200d-1f9b1\":0,\"1f9d1-1f3fe-200d-1f9b1\":0,\"1f9d1-1f3ff-200d-1f9b1\":0,\"1f9d1-1f3fb-200d-1f9b2\":0,\"1f9d1-1f3fc-200d-1f9b2\":0,\"1f9d1-1f3fd-200d-1f9b2\":0,\"1f9d1-1f3fe-200d-1f9b2\":0,\"1f9d1-1f3ff-200d-1f9b2\":0,\"1f9d1-1f3fb-200d-1f9b3\":0,\"1f9d1-1f3fc-200d-1f9b3\":0,\"1f9d1-1f3fd-200d-1f9b3\":0,\"1f9d1-1f3fe-200d-1f9b3\":0,\"1f9d1-1f3ff-200d-1f9b3\":0,\"1f9d1-1f3fb-200d-1f9bc\":0,\"1f9d1-1f3fc-200d-1f9bc\":0,\"1f9d1-1f3fd-200d-1f9bc\":0,\"1f9d1-1f3fe-200d-1f9bc\":0,\"1f9d1-1f3ff-200d-1f9bc\":0,\"1f9d1-1f3fb-200d-1f9bd\":0,\"1f9d1-1f3fc-200d-1f9bd\":0,\"1f9d1-1f3fd-200d-1f9bd\":0,\"1f9d1-1f3fe-200d-1f9bd\":0,\"1f9d1-1f3ff-200d-1f9bd\":0,\"1f9d1-1f3fb-200d-2695\":0,\"1f9d1-1f3fc-200d-2695\":0,\"1f9d1-1f3fd-200d-2695\":0,\"1f9d1-1f3fe-200d-2695\":0,\"1f9d1-1f3ff-200d-2695\":0,\"1f9d1-1f3fb-200d-2696\":0,\"1f9d1-1f3fc-200d-2696\":0,\"1f9d1-1f3fd-200d-2696\":0,\"1f9d1-1f3fe-200d-2696\":0,\"1f9d1-1f3ff-200d-2696\":0,\"1f9d1-1f3fb-200d-2708\":0,\"1f9d1-1f3fc-200d-2708\":0,\"1f9d1-1f3fd-200d-2708\":0,\"1f9d1-1f3fe-200d-2708\":0,\"1f9d1-1f3ff-200d-2708\":0,\"1f9d1-1f3fb\":0,\"1f9d1-1f3fc\":0,\"1f9d1-1f3fd\":0,\"1f9d1-1f3fe\":0,\"1f9d1-1f3ff\":0,\"1f9d2-1f3fb\":0,\"1f9d2-1f3fc\":0,\"1f9d2-1f3fd\":0,\"1f9d2-1f3fe\":0,\"1f9d2-1f3ff\":0,\"1f9d3-1f3fb\":0,\"1f9d3-1f3fc\":0,\"1f9d3-1f3fd\":0,\"1f9d3-1f3fe\":0,\"1f9d3-1f3ff\":0,\"1f9d4-1f3fb\":0,\"1f9d4-1f3fc\":0,\"1f9d4-1f3fd\":0,\"1f9d4-1f3fe\":0,\"1f9d4-1f3ff\":0,\"1f9d5-1f3fb\":0,\"1f9d5-1f3fc\":0,\"1f9d5-1f3fd\":0,\"1f9d5-1f3fe\":0,\"1f9d5-1f3ff\":0,\"1f9d6-1f3fb-200d-2640\":0,\"1f9d6-1f3fc-200d-2640\":0,\"1f9d6-1f3fd-200d-2640\":0,\"1f9d6-1f3fe-200d-2640\":0,\"1f9d6-1f3ff-200d-2640\":0,\"1f9d6-1f3fb-200d-2642\":0,\"1f9d6-1f3fc-200d-2642\":0,\"1f9d6-1f3fd-200d-2642\":0,\"1f9d6-1f3fe-200d-2642\":0,\"1f9d6-1f3ff-200d-2642\":0,\"1f9d6-1f3fb\":0,\"1f9d6-1f3fc\":0,\"1f9d6-1f3fd\":0,\"1f9d6-1f3fe\":0,\"1f9d6-1f3ff\":0,\"1f9d7-1f3fb-200d-2640\":0,\"1f9d7-1f3fc-200d-2640\":0,\"1f9d7-1f3fd-200d-2640\":0,\"1f9d7-1f3fe-200d-2640\":0,\"1f9d7-1f3ff-200d-2640\":0,\"1f9d7-1f3fb-200d-2642\":0,\"1f9d7-1f3fc-200d-2642\":0,\"1f9d7-1f3fd-200d-2642\":0,\"1f9d7-1f3fe-200d-2642\":0,\"1f9d7-1f3ff-200d-2642\":0,\"1f9d7-1f3fb\":0,\"1f9d7-1f3fc\":0,\"1f9d7-1f3fd\":0,\"1f9d7-1f3fe\":0,\"1f9d7-1f3ff\":0,\"1f9d8-1f3fb-200d-2640\":0,\"1f9d8-1f3fc-200d-2640\":0,\"1f9d8-1f3fd-200d-2640\":0,\"1f9d8-1f3fe-200d-2640\":0,\"1f9d8-1f3ff-200d-2640\":0,\"1f9d8-1f3fb-200d-2642\":0,\"1f9d8-1f3fc-200d-2642\":0,\"1f9d8-1f3fd-200d-2642\":0,\"1f9d8-1f3fe-200d-2642\":0,\"1f9d8-1f3ff-200d-2642\":0,\"1f9d8-1f3fb\":0,\"1f9d8-1f3fc\":0,\"1f9d8-1f3fd\":0,\"1f9d8-1f3fe\":0,\"1f9d8-1f3ff\":0,\"1f9d9-1f3fb-200d-2640\":0,\"1f9d9-1f3fc-200d-2640\":0,\"1f9d9-1f3fd-200d-2640\":0,\"1f9d9-1f3fe-200d-2640\":0,\"1f9d9-1f3ff-200d-2640\":0,\"1f9d9-1f3fb-200d-2642\":0,\"1f9d9-1f3fc-200d-2642\":0,\"1f9d9-1f3fd-200d-2642\":0,\"1f9d9-1f3fe-200d-2642\":0,\"1f9d9-1f3ff-200d-2642\":0,\"1f9d9-1f3fb\":0,\"1f9d9-1f3fc\":0,\"1f9d9-1f3fd\":0,\"1f9d9-1f3fe\":0,\"1f9d9-1f3ff\":0,\"1f9da-1f3fb-200d-2640\":0,\"1f9da-1f3fc-200d-2640\":0,\"1f9da-1f3fd-200d-2640\":0,\"1f9da-1f3fe-200d-2640\":0,\"1f9da-1f3ff-200d-2640\":0,\"1f9da-1f3fb-200d-2642\":0,\"1f9da-1f3fc-200d-2642\":0,\"1f9da-1f3fd-200d-2642\":0,\"1f9da-1f3fe-200d-2642\":0,\"1f9da-1f3ff-200d-2642\":0,\"1f9da-1f3fb\":0,\"1f9da-1f3fc\":0,\"1f9da-1f3fd\":0,\"1f9da-1f3fe\":0,\"1f9da-1f3ff\":0,\"1f9db-1f3fb-200d-2640\":0,\"1f9db-1f3fc-200d-2640\":0,\"1f9db-1f3fd-200d-2640\":0,\"1f9db-1f3fe-200d-2640\":0,\"1f9db-1f3ff-200d-2640\":0,\"1f9db-1f3fb-200d-2642\":0,\"1f9db-1f3fc-200d-2642\":0,\"1f9db-1f3fd-200d-2642\":0,\"1f9db-1f3fe-200d-2642\":0,\"1f9db-1f3ff-200d-2642\":0,\"1f9db-1f3fb\":0,\"1f9db-1f3fc\":0,\"1f9db-1f3fd\":0,\"1f9db-1f3fe\":0,\"1f9db-1f3ff\":0,\"1f9dc-1f3fb-200d-2640\":0,\"1f9dc-1f3fc-200d-2640\":0,\"1f9dc-1f3fd-200d-2640\":0,\"1f9dc-1f3fe-200d-2640\":0,\"1f9dc-1f3ff-200d-2640\":0,\"1f9dc-1f3fb-200d-2642\":0,\"1f9dc-1f3fc-200d-2642\":0,\"1f9dc-1f3fd-200d-2642\":0,\"1f9dc-1f3fe-200d-2642\":0,\"1f9dc-1f3ff-200d-2642\":0,\"1f9dc-1f3fb\":0,\"1f9dc-1f3fc\":0,\"1f9dc-1f3fd\":0,\"1f9dc-1f3fe\":0,\"1f9dc-1f3ff\":0,\"1f9dd-1f3fb-200d-2640\":0,\"1f9dd-1f3fc-200d-2640\":0,\"1f9dd-1f3fd-200d-2640\":0,\"1f9dd-1f3fe-200d-2640\":0,\"1f9dd-1f3ff-200d-2640\":0,\"1f9dd-1f3fb-200d-2642\":0,\"1f9dd-1f3fc-200d-2642\":0,\"1f9dd-1f3fd-200d-2642\":0,\"1f9dd-1f3fe-200d-2642\":0,\"1f9dd-1f3ff-200d-2642\":0,\"1f9dd-1f3fb\":0,\"1f9dd-1f3fc\":0,\"1f9dd-1f3fd\":0,\"1f9dd-1f3fe\":0,\"1f9dd-1f3ff\":0,\"261d-1f3fb\":0,\"261d-1f3fc\":0,\"261d-1f3fd\":0,\"261d-1f3fe\":0,\"261d-1f3ff\":0,\"26f9-1f3fb-200d-2640\":0,\"26f9-1f3fc-200d-2640\":0,\"26f9-1f3fd-200d-2640\":0,\"26f9-1f3fe-200d-2640\":0,\"26f9-1f3ff-200d-2640\":0,\"26f9-1f3fb-200d-2642\":0,\"26f9-1f3fc-200d-2642\":0,\"26f9-1f3fd-200d-2642\":0,\"26f9-1f3fe-200d-2642\":0,\"26f9-1f3ff-200d-2642\":0,\"26f9-1f3fb\":0,\"26f9-1f3fc\":0,\"26f9-1f3fd\":0,\"26f9-1f3fe\":0,\"26f9-1f3ff\":0,\"270a-1f3fb\":0,\"270a-1f3fc\":0,\"270a-1f3fd\":0,\"270a-1f3fe\":0,\"270a-1f3ff\":0,\"270b-1f3fb\":0,\"270b-1f3fc\":0,\"270b-1f3fd\":0,\"270b-1f3fe\":0,\"270b-1f3ff\":0,\"270c-1f3fb\":0,\"270c-1f3fc\":0,\"270c-1f3fd\":0,\"270c-1f3fe\":0,\"270c-1f3ff\":0,\"270d-1f3fb\":0,\"270d-1f3fc\":0,\"270d-1f3fd\":0,\"270d-1f3fe\":0,\"270d-1f3ff\":0};\r\n\r\n/* Emoji[\"00a9-fe0f\"] = 6362;\r\nEmoji[\"00ae-fe0f\"] = 6363;\r\nEmoji[\"2122-fe0f\"] = 6364; */\r\n\r\n// From https://github.com/stephenmathieson/node-tlds/blob/master/index.js\r\nexport const TLD = ['abogado', 'ac', 'academy', 'accountants', 'active', 'actor', 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', 'careers', 'cartier', 'casa', 'cash', 'cat', 'catering', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'community', 'company', 'computer', 'condos', 'construction', 'consulting', 'contractors', 'cooking', 'cool', 'coop', 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cz', 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'domains', 'doosan', 'durban', 'dvag', 'dz', 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'fail', 'farm', 'fashion', 'feedback', 'fi', 'finance', 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'forsale', 'foundation', 'fr', 'frl', 'frogans', 'fund', 'furniture', 'futbol', 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmo', 'gmx', 'gn', 'goog', 'google', 'gop', 'gov', 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', 'hr', 'ht', 'hu', 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', 'it', 'iwc', 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', 'juegos', 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'madrid', 'maison', 'management', 'mango', 'market', 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', 'osaka', 'otsuka', 'ovh', 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', 'qa', 'qpon', 'quebec', 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', 'sca', 'scb', 'schmidt', 'schule', 'schwarz', 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', 'style', 'su', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', 'voyage', 'vu', 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', 'works', 'world', 'ws', 'wtc', 'wtf', '佛山', '集团', '在线', '한국', 'ভারত', '八卦', 'موقع', '公益', '公司', '移动', '我爱你', 'москва', 'қаз', 'онлайн', 'сайт', 'срб', '淡马锡', 'орг', '삼성', 'சிங்கப்பூர்', '商标', '商店', '商城', 'дети', 'мкд', '中文网', '中信', '中国', '中國', '谷歌', 'భారత్', 'ලංකා', 'ભારત', 'भारत', '网店', 'संगठन', '网络', 'укр', '香港', '台湾', '台灣', '手机', 'мон', 'الجزائر', 'عمان', 'ایران', 'امارات', 'بازار', 'الاردن', 'بھارت', 'المغرب', 'السعودية', 'مليسيا', 'شبكة', 'გე', '机构', '组织机构', 'ไทย', 'سورية', 'рус', 'рф', 'تونس', 'みんな', 'グーグル', '世界', 'ਭਾਰਤ', '网址', '游戏', 'vermögensberater', 'vermögensberatung', '企业', 'مصر', 'قطر', '广东', 'இலங்கை', 'இந்தியா', '新加坡', 'فلسطين', '政务', 'xxx', 'xyz', 'yachts', 'yandex', 'ye', 'yoga', 'yokohama', 'youtube', 'yt', 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw'];\r\n\r\n// From https://raw.githubusercontent.com/FGRibreau/latenize/master/latinize_map.js\r\nexport const LatinizeMap: {[k: string]: string} = {'Á': 'A','Ă': 'A','Ắ': 'A','Ặ': 'A','Ằ': 'A','Ẳ': 'A','Ẵ': 'A','Ǎ': 'A','Â': 'A','Ấ': 'A','Ậ': 'A','Ầ': 'A','Ẩ': 'A','Ẫ': 'A','Ä': 'A','Ǟ': 'A','Ȧ': 'A','Ǡ': 'A','Ạ': 'A','Ȁ': 'A','À': 'A','Ả': 'A','Ȃ': 'A','Ā': 'A','Ą': 'A','Å': 'A','Ǻ': 'A','Ḁ': 'A','Ⱥ': 'A','Ã': 'A','Ꜳ': 'AA','Æ': 'AE','Ǽ': 'AE','Ǣ': 'AE','Ꜵ': 'AO','Ꜷ': 'AU','Ꜹ': 'AV','Ꜻ': 'AV','Ꜽ': 'AY','Ḃ': 'B','Ḅ': 'B','Ɓ': 'B','Ḇ': 'B','Ƀ': 'B','Ƃ': 'B','Ć': 'C','Č': 'C','Ç': 'C','Ḉ': 'C','Ĉ': 'C','Ċ': 'C','Ƈ': 'C','Ȼ': 'C','Ď': 'D','Ḑ': 'D','Ḓ': 'D','Ḋ': 'D','Ḍ': 'D','Ɗ': 'D','Ḏ': 'D','Dz': 'D','Dž': 'D','Đ': 'D','Ƌ': 'D','DZ': 'DZ','DŽ': 'DZ','É': 'E','Ĕ': 'E','Ě': 'E','Ȩ': 'E','Ḝ': 'E','Ê': 'E','Ế': 'E','Ệ': 'E','Ề': 'E','Ể': 'E','Ễ': 'E','Ḙ': 'E','Ë': 'E','Ė': 'E','Ẹ': 'E','Ȅ': 'E','È': 'E','Ẻ': 'E','Ȇ': 'E','Ē': 'E','Ḗ': 'E','Ḕ': 'E','Ę': 'E','Ɇ': 'E','Ẽ': 'E','Ḛ': 'E','Ꝫ': 'ET','Ḟ': 'F','Ƒ': 'F','Ǵ': 'G','Ğ': 'G','Ǧ': 'G','Ģ': 'G','Ĝ': 'G','Ġ': 'G','Ɠ': 'G','Ḡ': 'G','Ǥ': 'G','Ḫ': 'H','Ȟ': 'H','Ḩ': 'H','Ĥ': 'H','Ⱨ': 'H','Ḧ': 'H','Ḣ': 'H','Ḥ': 'H','Ħ': 'H','Í': 'I','Ĭ': 'I','Ǐ': 'I','Î': 'I','Ï': 'I','Ḯ': 'I','İ': 'I','Ị': 'I','Ȉ': 'I','Ì': 'I','Ỉ': 'I','Ȋ': 'I','Ī': 'I','Į': 'I','Ɨ': 'I','Ĩ': 'I','Ḭ': 'I','Ꝺ': 'D','Ꝼ': 'F','Ᵹ': 'G','Ꞃ': 'R','Ꞅ': 'S','Ꞇ': 'T','Ꝭ': 'IS','Ĵ': 'J','Ɉ': 'J','Ḱ': 'K','Ǩ': 'K','Ķ': 'K','Ⱪ': 'K','Ꝃ': 'K','Ḳ': 'K','Ƙ': 'K','Ḵ': 'K','Ꝁ': 'K','Ꝅ': 'K','Ĺ': 'L','Ƚ': 'L','Ľ': 'L','Ļ': 'L','Ḽ': 'L','Ḷ': 'L','Ḹ': 'L','Ⱡ': 'L','Ꝉ': 'L','Ḻ': 'L','Ŀ': 'L','Ɫ': 'L','Lj': 'L','Ł': 'L','LJ': 'LJ','Ḿ': 'M','Ṁ': 'M','Ṃ': 'M','Ɱ': 'M','Ń': 'N','Ň': 'N','Ņ': 'N','Ṋ': 'N','Ṅ': 'N','Ṇ': 'N','Ǹ': 'N','Ɲ': 'N','Ṉ': 'N','Ƞ': 'N','Nj': 'N','Ñ': 'N','NJ': 'NJ','Ó': 'O','Ŏ': 'O','Ǒ': 'O','Ô': 'O','Ố': 'O','Ộ': 'O','Ồ': 'O','Ổ': 'O','Ỗ': 'O','Ö': 'O','Ȫ': 'O','Ȯ': 'O','Ȱ': 'O','Ọ': 'O','Ő': 'O','Ȍ': 'O','Ò': 'O','Ỏ': 'O','Ơ': 'O','Ớ': 'O','Ợ': 'O','Ờ': 'O','Ở': 'O','Ỡ': 'O','Ȏ': 'O','Ꝋ': 'O','Ꝍ': 'O','Ō': 'O','Ṓ': 'O','Ṑ': 'O','Ɵ': 'O','Ǫ': 'O','Ǭ': 'O','Ø': 'O','Ǿ': 'O','Õ': 'O','Ṍ': 'O','Ṏ': 'O','Ȭ': 'O','Ƣ': 'OI','Ꝏ': 'OO','Ɛ': 'E','Ɔ': 'O','Ȣ': 'OU','Ṕ': 'P','Ṗ': 'P','Ꝓ': 'P','Ƥ': 'P','Ꝕ': 'P','Ᵽ': 'P','Ꝑ': 'P','Ꝙ': 'Q','Ꝗ': 'Q','Ŕ': 'R','Ř': 'R','Ŗ': 'R','Ṙ': 'R','Ṛ': 'R','Ṝ': 'R','Ȑ': 'R','Ȓ': 'R','Ṟ': 'R','Ɍ': 'R','Ɽ': 'R','Ꜿ': 'C','Ǝ': 'E','Ś': 'S','Ṥ': 'S','Š': 'S','Ṧ': 'S','Ş': 'S','Ŝ': 'S','Ș': 'S','Ṡ': 'S','Ṣ': 'S','Ṩ': 'S','ẞ': 'SS','Ť': 'T','Ţ': 'T','Ṱ': 'T','Ț': 'T','Ⱦ': 'T','Ṫ': 'T','Ṭ': 'T','Ƭ': 'T','Ṯ': 'T','Ʈ': 'T','Ŧ': 'T','Ɐ': 'A','Ꞁ': 'L','Ɯ': 'M','Ʌ': 'V','Ꜩ': 'TZ','Ú': 'U','Ŭ': 'U','Ǔ': 'U','Û': 'U','Ṷ': 'U','Ü': 'U','Ǘ': 'U','Ǚ': 'U','Ǜ': 'U','Ǖ': 'U','Ṳ': 'U','Ụ': 'U','Ű': 'U','Ȕ': 'U','Ù': 'U','Ủ': 'U','Ư': 'U','Ứ': 'U','Ự': 'U','Ừ': 'U','Ử': 'U','Ữ': 'U','Ȗ': 'U','Ū': 'U','Ṻ': 'U','Ų': 'U','Ů': 'U','Ũ': 'U','Ṹ': 'U','Ṵ': 'U','Ꝟ': 'V','Ṿ': 'V','Ʋ': 'V','Ṽ': 'V','Ꝡ': 'VY','Ẃ': 'W','Ŵ': 'W','Ẅ': 'W','Ẇ': 'W','Ẉ': 'W','Ẁ': 'W','Ⱳ': 'W','Ẍ': 'X','Ẋ': 'X','Ý': 'Y','Ŷ': 'Y','Ÿ': 'Y','Ẏ': 'Y','Ỵ': 'Y','Ỳ': 'Y','Ƴ': 'Y','Ỷ': 'Y','Ỿ': 'Y','Ȳ': 'Y','Ɏ': 'Y','Ỹ': 'Y','Ź': 'Z','Ž': 'Z','Ẑ': 'Z','Ⱬ': 'Z','Ż': 'Z','Ẓ': 'Z','Ȥ': 'Z','Ẕ': 'Z','Ƶ': 'Z','IJ': 'IJ','Œ': 'OE','ᴀ': 'A','ᴁ': 'AE','ʙ': 'B','ᴃ': 'B','ᴄ': 'C','ᴅ': 'D','ᴇ': 'E','ꜰ': 'F','ɢ': 'G','ʛ': 'G','ʜ': 'H','ɪ': 'I','ʁ': 'R','ᴊ': 'J','ᴋ': 'K','ʟ': 'L','ᴌ': 'L','ᴍ': 'M','ɴ': 'N','ᴏ': 'O','ɶ': 'OE','ᴐ': 'O','ᴕ': 'OU','ᴘ': 'P','ʀ': 'R','ᴎ': 'N','ᴙ': 'R','ꜱ': 'S','ᴛ': 'T','ⱻ': 'E','ᴚ': 'R','ᴜ': 'U','ᴠ': 'V','ᴡ': 'W','ʏ': 'Y','ᴢ': 'Z','á': 'a','ă': 'a','ắ': 'a','ặ': 'a','ằ': 'a','ẳ': 'a','ẵ': 'a','ǎ': 'a','â': 'a','ấ': 'a','ậ': 'a','ầ': 'a','ẩ': 'a','ẫ': 'a','ä': 'a','ǟ': 'a','ȧ': 'a','ǡ': 'a','ạ': 'a','ȁ': 'a','à': 'a','ả': 'a','ȃ': 'a','ā': 'a','ą': 'a','ᶏ': 'a','ẚ': 'a','å': 'a','ǻ': 'a','ḁ': 'a','ⱥ': 'a','ã': 'a','ꜳ': 'aa','æ': 'ae','ǽ': 'ae','ǣ': 'ae','ꜵ': 'ao','ꜷ': 'au','ꜹ': 'av','ꜻ': 'av','ꜽ': 'ay','ḃ': 'b','ḅ': 'b','ɓ': 'b','ḇ': 'b','ᵬ': 'b','ᶀ': 'b','ƀ': 'b','ƃ': 'b','ɵ': 'o','ć': 'c','č': 'c','ç': 'c','ḉ': 'c','ĉ': 'c','ɕ': 'c','ċ': 'c','ƈ': 'c','ȼ': 'c','ď': 'd','ḑ': 'd','ḓ': 'd','ȡ': 'd','ḋ': 'd','ḍ': 'd','ɗ': 'd','ᶑ': 'd','ḏ': 'd','ᵭ': 'd','ᶁ': 'd','đ': 'd','ɖ': 'd','ƌ': 'd','ı': 'i','ȷ': 'j','ɟ': 'j','ʄ': 'j','dz': 'dz','dž': 'dz','é': 'e','ĕ': 'e','ě': 'e','ȩ': 'e','ḝ': 'e','ê': 'e','ế': 'e','ệ': 'e','ề': 'e','ể': 'e','ễ': 'e','ḙ': 'e','ë': 'e','ė': 'e','ẹ': 'e','ȅ': 'e','è': 'e','ẻ': 'e','ȇ': 'e','ē': 'e','ḗ': 'e','ḕ': 'e','ⱸ': 'e','ę': 'e','ᶒ': 'e','ɇ': 'e','ẽ': 'e','ḛ': 'e','ꝫ': 'et','ḟ': 'f','ƒ': 'f','ᵮ': 'f','ᶂ': 'f','ǵ': 'g','ğ': 'g','ǧ': 'g','ģ': 'g','ĝ': 'g','ġ': 'g','ɠ': 'g','ḡ': 'g','ᶃ': 'g','ǥ': 'g','ḫ': 'h','ȟ': 'h','ḩ': 'h','ĥ': 'h','ⱨ': 'h','ḧ': 'h','ḣ': 'h','ḥ': 'h','ɦ': 'h','ẖ': 'h','ħ': 'h','ƕ': 'hv','í': 'i','ĭ': 'i','ǐ': 'i','î': 'i','ï': 'i','ḯ': 'i','ị': 'i','ȉ': 'i','ì': 'i','ỉ': 'i','ȋ': 'i','ī': 'i','į': 'i','ᶖ': 'i','ɨ': 'i','ĩ': 'i','ḭ': 'i','ꝺ': 'd','ꝼ': 'f','ᵹ': 'g','ꞃ': 'r','ꞅ': 's','ꞇ': 't','ꝭ': 'is','ǰ': 'j','ĵ': 'j','ʝ': 'j','ɉ': 'j','ḱ': 'k','ǩ': 'k','ķ': 'k','ⱪ': 'k','ꝃ': 'k','ḳ': 'k','ƙ': 'k','ḵ': 'k','ᶄ': 'k','ꝁ': 'k','ꝅ': 'k','ĺ': 'l','ƚ': 'l','ɬ': 'l','ľ': 'l','ļ': 'l','ḽ': 'l','ȴ': 'l','ḷ': 'l','ḹ': 'l','ⱡ': 'l','ꝉ': 'l','ḻ': 'l','ŀ': 'l','ɫ': 'l','ᶅ': 'l','ɭ': 'l','ł': 'l','lj': 'lj','ſ': 's','ẜ': 's','ẛ': 's','ẝ': 's','ḿ': 'm','ṁ': 'm','ṃ': 'm','ɱ': 'm','ᵯ': 'm','ᶆ': 'm','ń': 'n','ň': 'n','ņ': 'n','ṋ': 'n','ȵ': 'n','ṅ': 'n','ṇ': 'n','ǹ': 'n','ɲ': 'n','ṉ': 'n','ƞ': 'n','ᵰ': 'n','ᶇ': 'n','ɳ': 'n','ñ': 'n','nj': 'nj','ó': 'o','ŏ': 'o','ǒ': 'o','ô': 'o','ố': 'o','ộ': 'o','ồ': 'o','ổ': 'o','ỗ': 'o','ö': 'o','ȫ': 'o','ȯ': 'o','ȱ': 'o','ọ': 'o','ő': 'o','ȍ': 'o','ò': 'o','ỏ': 'o','ơ': 'o','ớ': 'o','ợ': 'o','ờ': 'o','ở': 'o','ỡ': 'o','ȏ': 'o','ꝋ': 'o','ꝍ': 'o','ⱺ': 'o','ō': 'o','ṓ': 'o','ṑ': 'o','ǫ': 'o','ǭ': 'o','ø': 'o','ǿ': 'o','õ': 'o','ṍ': 'o','ṏ': 'o','ȭ': 'o','ƣ': 'oi','ꝏ': 'oo','ɛ': 'e','ᶓ': 'e','ɔ': 'o','ᶗ': 'o','ȣ': 'ou','ṕ': 'p','ṗ': 'p','ꝓ': 'p','ƥ': 'p','ᵱ': 'p','ᶈ': 'p','ꝕ': 'p','ᵽ': 'p','ꝑ': 'p','ꝙ': 'q','ʠ': 'q','ɋ': 'q','ꝗ': 'q','ŕ': 'r','ř': 'r','ŗ': 'r','ṙ': 'r','ṛ': 'r','ṝ': 'r','ȑ': 'r','ɾ': 'r','ᵳ': 'r','ȓ': 'r','ṟ': 'r','ɼ': 'r','ᵲ': 'r','ᶉ': 'r','ɍ': 'r','ɽ': 'r','ↄ': 'c','ꜿ': 'c','ɘ': 'e','ɿ': 'r','ś': 's','ṥ': 's','š': 's','ṧ': 's','ş': 's','ŝ': 's','ș': 's','ṡ': 's','ṣ': 's','ṩ': 's','ʂ': 's','ᵴ': 's','ᶊ': 's','ȿ': 's','ɡ': 'g','ß': 'ss','ᴑ': 'o','ᴓ': 'o','ᴝ': 'u','ť': 't','ţ': 't','ṱ': 't','ț': 't','ȶ': 't','ẗ': 't','ⱦ': 't','ṫ': 't','ṭ': 't','ƭ': 't','ṯ': 't','ᵵ': 't','ƫ': 't','ʈ': 't','ŧ': 't','ᵺ': 'th','ɐ': 'a','ᴂ': 'ae','ǝ': 'e','ᵷ': 'g','ɥ': 'h','ʮ': 'h','ʯ': 'h','ᴉ': 'i','ʞ': 'k','ꞁ': 'l','ɯ': 'm','ɰ': 'm','ᴔ': 'oe','ɹ': 'r','ɻ': 'r','ɺ': 'r','ⱹ': 'r','ʇ': 't','ʌ': 'v','ʍ': 'w','ʎ': 'y','ꜩ': 'tz','ú': 'u','ŭ': 'u','ǔ': 'u','û': 'u','ṷ': 'u','ü': 'u','ǘ': 'u','ǚ': 'u','ǜ': 'u','ǖ': 'u','ṳ': 'u','ụ': 'u','ű': 'u','ȕ': 'u','ù': 'u','ủ': 'u','ư': 'u','ứ': 'u','ự': 'u','ừ': 'u','ử': 'u','ữ': 'u','ȗ': 'u','ū': 'u','ṻ': 'u','ų': 'u','ᶙ': 'u','ů': 'u','ũ': 'u','ṹ': 'u','ṵ': 'u','ᵫ': 'ue','ꝸ': 'um','ⱴ': 'v','ꝟ': 'v','ṿ': 'v','ʋ': 'v','ᶌ': 'v','ⱱ': 'v','ṽ': 'v','ꝡ': 'vy','ẃ': 'w','ŵ': 'w','ẅ': 'w','ẇ': 'w','ẉ': 'w','ẁ': 'w','ⱳ': 'w','ẘ': 'w','ẍ': 'x','ẋ': 'x','ᶍ': 'x','ý': 'y','ŷ': 'y','ÿ': 'y','ẏ': 'y','ỵ': 'y','ỳ': 'y','ƴ': 'y','ỷ': 'y','ỿ': 'y','ȳ': 'y','ẙ': 'y','ɏ': 'y','ỹ': 'y','ź': 'z','ž': 'z','ẑ': 'z','ʑ': 'z','ⱬ': 'z','ż': 'z','ẓ': 'z','ȥ': 'z','ẕ': 'z','ᵶ': 'z','ᶎ': 'z','ʐ': 'z','ƶ': 'z','ɀ': 'z','ff': 'ff','ffi': 'ffi','ffl': 'ffl','fi': 'fi','fl': 'fl','ij': 'ij','œ': 'oe','st': 'st','ₐ': 'a','ₑ': 'e','ᵢ': 'i','ⱼ': 'j','ₒ': 'o','ᵣ': 'r','ᵤ': 'u','ᵥ': 'v','ₓ': 'x','Ё': 'YO', 'Й': 'I', 'Ц': 'TS', 'У': 'U', 'К': 'K', 'Е': 'E', 'Н': 'N', 'Г': 'G', 'Ш': 'SH', 'Щ': 'SCH', 'З': 'Z', 'Х': 'H', 'Ъ': '', 'ё': 'yo', 'й': 'i', 'ц': 'ts', 'у': 'u', 'к': 'k', 'е': 'e', 'н': 'n', 'г': 'g', 'ш': 'sh', 'щ': 'sch', 'з': 'z', 'х': 'h', 'ъ': '', 'Ф': 'F', 'Ы': 'I', 'В': 'V', 'А': 'A', 'П': 'P', 'Р': 'R', 'О': 'O', 'Л': 'L', 'Д': 'D', 'Ж': 'ZH', 'Э': 'E', 'ф': 'f', 'ы': 'i', 'в': 'v', 'а': 'a', 'п': 'p', 'р': 'r', 'о': 'o', 'л': 'l', 'д': 'd', 'ж': 'zh', 'э': 'e', 'Я': 'Ya', 'Ч': 'CH', 'С': 'S', 'М': 'M', 'И': 'I', 'Т': 'T', 'Ь': '', 'Б': 'B', 'Ю': 'YU', 'я': 'ya', 'ч': 'ch', 'с': 's', 'м': 'm', 'и': 'i', 'т': 't', 'ь': '', 'б': 'b', 'ю': 'yu'};\r\n\r\nconst Config = {\r\n Emoji,\r\n LatinizeMap,\r\n TLD,\r\n MediaSizes: mediaSizes\r\n};\r\nMOUNT_CLASS_TO.Config = Config;\r\nexport default Config;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport { nextRandomUint } from \"../../helpers/random\";\nimport { logger } from \"../logger\";\nimport rootScope from \"../rootScope\";\nimport sessionStorage from \"../sessionStorage\";\nimport apiManager from \"./mtprotoworker\";\n\nexport type AppInstance = {\n id: number,\n idle: boolean,\n time: number\n};\n\nconst CHECK_INSTANCE_INTERVAL = 5000; \nconst DEACTIVATE_TIMEOUT = 30000;\nconst MULTIPLE_TABS_THRESHOLD = 20000;\n\nexport class SingleInstance {\n private instanceID: number;\n private started: boolean;\n private masterInstance: boolean;\n private deactivateTimeout: number;\n private deactivated: boolean;\n private initial: boolean;\n private log = logger('INSTANCE');\n\n public start() {\n if(!this.started/* && !Config.Navigator.mobile && !Config.Modes.packed */) {\n this.started = true;\n\n this.reset();\n //IdleManager.start();\n\n rootScope.addEventListener('idle', this.checkInstance);\n setInterval(this.checkInstance, CHECK_INSTANCE_INTERVAL);\n this.checkInstance();\n\n try {\n document.documentElement.addEventListener('beforeunload', this.clearInstance);\n } catch(e) {}\n }\n }\n\n public reset() {\n this.instanceID = nextRandomUint(32);\n this.masterInstance = false;\n if(this.deactivateTimeout) clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n this.deactivated = false;\n this.initial = false;\n }\n\n public clearInstance = () => {\n if(this.masterInstance && !this.deactivated) {\n this.log.warn('clear master instance');\n sessionStorage.delete('xt_instance');\n }\n };\n\n public activateInstance() {\n if(this.deactivated) {\n this.reset();\n this.checkInstance(false);\n rootScope.dispatchEvent('instance_activated');\n }\n }\n\n public deactivateInstance = () => {\n if(this.masterInstance || this.deactivated) {\n return false;\n }\n\n this.log('deactivate');\n this.deactivateTimeout = 0;\n this.deactivated = true;\n this.clearInstance();\n //$modalStack.dismissAll();\n\n //document.title = _('inactive_tab_title_raw')\n\n rootScope.idle.deactivated = true;\n rootScope.dispatchEvent('instance_deactivated');\n };\n\n public checkInstance = (idle = rootScope.idle && rootScope.idle.isIDLE) => {\n if(this.deactivated) {\n return false;\n }\n \n const time = Date.now();\n const newInstance: AppInstance = {\n id: this.instanceID, \n idle, \n time\n };\n\n sessionStorage.get('xt_instance', false).then((curInstance: AppInstance) => {\n // this.log('check instance', newInstance, curInstance)\n if(!idle ||\n !curInstance ||\n curInstance.id === this.instanceID ||\n curInstance.time < (time - MULTIPLE_TABS_THRESHOLD)) {\n sessionStorage.set({xt_instance: newInstance});\n\n if(!this.masterInstance) {\n apiManager.startAll();\n if(!this.initial) {\n this.initial = true;\n } else {\n this.log.warn('now master instance', newInstance);\n }\n\n this.masterInstance = true;\n }\n\n if(this.deactivateTimeout) {\n clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n }\n } else {\n if(this.masterInstance) {\n apiManager.stopAll();\n this.log.warn('now idle instance', newInstance);\n if(!this.deactivateTimeout) {\n this.deactivateTimeout = window.setTimeout(this.deactivateInstance, DEACTIVATE_TIMEOUT);\n }\n\n this.masterInstance = false;\n }\n }\n });\n };\n}\n\nconst singleInstance = new SingleInstance();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.singleInstance = singleInstance);\nexport default singleInstance;\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"webp.worker.bd598dc02a03fd59d71a.bundle.worker.js\");\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport WebpWorker from 'worker-loader!./webp.worker';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport apiManagerProxy from '../mtproto/mtprotoworker';\r\n\r\nexport type WebpConvertTask = {\r\n type: 'convertWebp', \r\n payload: {\r\n fileName: string, \r\n bytes: Uint8Array\r\n }\r\n};\r\n\r\nexport class WebpWorkerController {\r\n private worker: Worker;\r\n private convertPromises: {[fileName: string]: CancellablePromise} = {};\r\n \r\n private init() {\r\n this.worker = new WebpWorker();\r\n this.worker.addEventListener('message', (e) => {\r\n const payload = (e.data as WebpConvertTask).payload;\r\n\r\n if(payload.fileName.indexOf('main-') === 0) {\r\n const promise = this.convertPromises[payload.fileName];\r\n if(promise) {\r\n payload.bytes ? promise.resolve(payload.bytes) : promise.reject();\r\n delete this.convertPromises[payload.fileName];\r\n }\r\n } else {\r\n apiManagerProxy.postMessage(e.data);\r\n }\r\n });\r\n }\r\n\r\n public postMessage(data: WebpConvertTask) {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n this.worker.postMessage(data);\r\n }\r\n\r\n public convert(fileName: string, bytes: Uint8Array) {\r\n fileName = 'main-' + fileName;\r\n\r\n if(this.convertPromises.hasOwnProperty(fileName)) {\r\n return this.convertPromises[fileName];\r\n }\r\n \r\n const convertPromise = deferredPromise();\r\n\r\n this.postMessage({type: 'convertWebp', payload: {fileName, bytes}});\r\n\r\n return this.convertPromises[fileName] = convertPromise;\r\n }\r\n}\r\n\r\nconst webpWorkerController = new WebpWorkerController();\r\nMOUNT_CLASS_TO.webpWorkerController = webpWorkerController;\r\nexport default webpWorkerController;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG, { MOUNT_CLASS_TO } from \"../config/debug\";\nimport { safeAssign } from \"../helpers/object\";\nimport { capitalizeFirstLetter } from \"../helpers/string\";\nimport type lang from \"../lang\";\nimport type langSign from \"../langSign\";\nimport { HelpCountriesList, HelpCountry, LangPackDifference, LangPackString } from \"../layer\";\nimport apiManager from \"./mtproto/mtprotoworker\";\nimport stateStorage from \"./stateStorage\";\nimport App from \"../config/app\";\nimport rootScope from \"./rootScope\";\nimport RichTextProcessor from \"./richtextprocessor\";\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n \"messageActionChatCreate\": \"ActionCreateGroup\",\n \"messageActionChatCreateYou\": \"ActionYouCreateGroup\",\n\t\"messageActionChatEditTitle\": \"ActionChangedTitle\",\n\t\"messageActionChatEditPhoto\": \"ActionChangedPhoto\",\n\t\"messageActionChatEditVideo\": \"ActionChangedVideo\",\n\t\"messageActionChatDeletePhoto\": \"ActionRemovedPhoto\",\n\t\"messageActionChatReturn\": \"ActionAddUserSelf\",\n\t\"messageActionChatReturnYou\": \"ActionAddUserSelfYou\",\n\t\"messageActionChatJoined\": \"ActionAddUserSelfMega\",\n\t\"messageActionChatJoinedYou\": \"ChannelMegaJoined\",\n \"messageActionChatAddUser\": \"ActionAddUser\",\n \"messageActionChatAddUsers\": \"ActionAddUser\",\n\t\"messageActionChatLeave\": \"ActionLeftUser\",\n\t\"messageActionChatLeaveYou\": \"YouLeft\",\n\t\"messageActionChatDeleteUser\": \"ActionKickUser\",\n\t\"messageActionChatJoinedByLink\": \"ActionInviteUser\",\n \"messageActionPinMessage\": \"ActionPinnedNoText\",\n \"messageActionContactSignUp\": \"Chat.Service.PeerJoinedTelegram\",\n\t\"messageActionChannelCreate\": \"ActionCreateChannel\",\n\t\"messageActionChannelEditTitle\": \"Chat.Service.Channel.UpdatedTitle\",\n\t\"messageActionChannelEditPhoto\": \"Chat.Service.Channel.UpdatedPhoto\",\n\t\"messageActionChannelEditVideo\": \"Chat.Service.Channel.UpdatedVideo\",\n \"messageActionChannelDeletePhoto\": \"Chat.Service.Channel.RemovedPhoto\",\n \"messageActionHistoryClear\": \"HistoryCleared\",\n\t\"messageActionDiscussionStarted\": \"DiscussionStarted\",\n\n \"messageActionChannelMigrateFrom\": \"ActionMigrateFromGroup\",\n\n \"messageActionPhoneCall.in_ok\": \"ChatList.Service.Call.incoming\",\n\t\"messageActionPhoneCall.out_ok\": \"ChatList.Service.Call.outgoing\",\n\t\"messageActionPhoneCall.in_missed\": \"ChatList.Service.Call.Missed\",\n\t\"messageActionPhoneCall.out_missed\": \"ChatList.Service.Call.Cancelled\",\n\n\t\"messageActionGroupCall.started\": \"ActionGroupCallJustStarted\",\n\t\"messageActionGroupCall.started_by\": \"ActionGroupCallStarted\",\n\t\"messageActionGroupCall.started_byYou\": \"ActionGroupCallStartedByYou\",\n\t\"messageActionGroupCall.ended\": \"ActionGroupCallEnded\",\n\t\"messageActionGroupCall.ended_by\": \"Chat.Service.VoiceChatFinished\",\n\t\"messageActionGroupCall.ended_byYou\": \"Chat.Service.VoiceChatFinishedYou\",\n\n\t\"messageActionBotAllowed\": \"Chat.Service.BotPermissionAllowed\"\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | Node;\nexport type FormatterArguments = FormatterArgument[];\n\nnamespace I18n {\n\texport const strings: Map = new Map();\n\texport const countriesList: HelpCountry[] = [];\n\tlet pluralRules: Intl.PluralRules;\n\n\tlet cacheLangPackPromise: Promise;\n\texport let lastRequestedLangCode: string;\n\texport let lastAppliedLangCode: string;\n\texport let requestedServerLanguage = false;\n\texport function getCacheLangPack(): Promise {\n\t\tif(cacheLangPackPromise) return cacheLangPackPromise;\n\t\treturn cacheLangPackPromise = Promise.all([\n\t\t\tstateStorage.get('langPack') as Promise,\n\t\t\tpolyfillPromise\n\t\t]).then(([langPack]) => {\n\t\t\tif(!langPack/* || true */) {\n\t\t\t\treturn loadLocalLangPack();\n\t\t\t} else if(DEBUG && false) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t}/* else if(langPack.appVersion !== App.langPackVersion) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t} */\n\t\t\t\n\t\t\tif(!lastRequestedLangCode) {\n\t\t\t\tlastRequestedLangCode = langPack.lang_code;\n\t\t\t}\n\t\t\t\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t}).finally(() => {\n\t\t\tcacheLangPackPromise = undefined;\n\t\t});\n\t}\n\n\texport function loadLocalLangPack() {\n\t\tconst defaultCode = App.langPackCode;\n\t\tlastRequestedLangCode = defaultCode;\n\t\treturn Promise.all([\n\t\t\timport('../lang'),\n\t\t\timport('../langSign'),\n\t\t\timport('../countries')\n\t\t]).then(([lang, langSign, countries]) => {\n\t\t\tconst strings: LangPackString[] = [];\n\t\t\tformatLocalStrings(lang.default, strings);\n\t\t\tformatLocalStrings(langSign.default, strings);\n\n\t\t\tconst langPack: LangPackDifference = {\n\t\t\t\t_: 'langPackDifference',\n\t\t\t\tfrom_version: 0,\n\t\t\t\tlang_code: defaultCode,\n\t\t\t\tstrings,\n\t\t\t\tversion: 0,\n\t\t\t\tlocal: true,\n\t\t\t\tcountries: countries.default\n\t\t\t};\n\t\t\treturn saveLangPack(langPack);\n\t\t});\n\t}\n\n\texport function loadLangPack(langCode: string) {\n\t\trequestedServerLanguage = true;\n\t\treturn Promise.all([\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: App.langPack\n\t\t\t}),\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: 'android'\n\t\t\t}),\n\t\t\timport('../lang'),\n\t\t\timport('../langSign'),\n\t\t\tapiManager.invokeApiCacheable('help.getCountriesList', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\thash: 0\n\t\t\t}) as Promise,\n\t\t\tpolyfillPromise,\n\t\t]);\n\t}\n\n\texport function getStrings(langCode: string, strings: string[]) {\n\t\treturn apiManager.invokeApi('langpack.getStrings', {\n\t\t\tlang_pack: App.langPack,\n\t\t\tlang_code: langCode,\n\t\t\tkeys: strings\n\t\t});\n\t}\n\n\texport function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n\t\tfor(const i in strings) {\n\t\t\t// @ts-ignore\n\t\t\tconst v = strings[i];\n\t\t\tif(typeof(v) === 'string') {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackString',\n\t\t\t\t\tkey: i,\n\t\t\t\t\tvalue: v\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackStringPluralized',\n\t\t\t\t\tkey: i,\n\t\t\t\t\t...v\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn pushTo;\n\t}\n\n\texport function getLangPack(langCode: string) {\n\t\tlastRequestedLangCode = langCode;\n\t\treturn loadLangPack(langCode).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n\t\t\tlet strings: LangPackString[] = [];\n\n\t\t\t[localLangPack1, localLangPack2].forEach(l => {\n\t\t\t\tformatLocalStrings(l.default as any, strings);\n\t\t\t});\n\n\t\t\tstrings = strings.concat(langPack1.strings);\n\n\t\t\tfor(const string of langPack2.strings) {\n\t\t\t\tstrings.push(string);\n\t\t\t}\n\n\t\t\tlangPack1.strings = strings;\n\t\t\tlangPack1.countries = countries;\n\t\t\treturn saveLangPack(langPack1);\n\t\t});\n\t}\n\n\texport function saveLangPack(langPack: LangPackDifference) {\n\t\tlangPack.appVersion = App.langPackVersion;\n\n\t\treturn stateStorage.set({langPack}).then(() => {\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t});\n\t}\n\n\texport const polyfillPromise = (function checkIfPolyfillNeeded() {\n\t\tif(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n\t\t\treturn Promise.resolve();\n\t\t} else {\n\t\t\treturn import('./pluralPolyfill').then((_Intl) => {\n\t\t\t\t(window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n\t\t\t});\n\t\t}\n\t})();\n\t\n\texport function applyLangPack(langPack: LangPackDifference) {\n\t\tif(langPack.lang_code !== lastRequestedLangCode) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tpluralRules = new Intl.PluralRules(langPack.lang_code);\n\t\t} catch(err) {\n\t\t\tconsole.error('pluralRules error', err);\n\t\t\tpluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n\t\t}\n\n\t\tstrings.clear();\n\n\t\tfor(const string of langPack.strings) {\n\t\t\tstrings.set(string.key as LangPackKey, string);\n\t\t}\n\n\t\tif(langPack.countries) {\n\t\t\tcountriesList.length = 0;\n\t\t\tcountriesList.push(...langPack.countries.countries);\n\n\t\t\tlangPack.countries.countries.forEach(country => {\n\t\t\t\tif(country.name) {\n\t\t\t\t\tconst langPackKey: any = country.default_name;\n\t\t\t\t\tstrings.set(langPackKey, {\n\t\t\t\t\t\t_: 'langPackString',\n\t\t\t\t\t\tkey: langPackKey,\n\t\t\t\t\t\tvalue: country.name\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(lastAppliedLangCode !== langPack.lang_code) {\n\t\t\trootScope.dispatchEvent('language_change', langPack.lang_code);\n\t\t\tlastAppliedLangCode = langPack.lang_code;\n\t\t}\n\n\t\tconst elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n\t\telements.forEach(element => {\n\t\t\tconst instance = weakMap.get(element);\n\n\t\t\tif(instance) {\n\t\t\t\tinstance.update();\n\t\t\t}\n\t\t});\n\t}\n\n\texport function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}) {\n\t\tlet out: FormatterArguments = [];\n\t\tconst regExp = /(\\*\\*)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n\t\tlet lastIndex = 0;\n\t\tinput.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n\t\t\t//console.table({match, p1, p2, offset, string});\n\n\t\t\tout.push(string.slice(lastIndex, offset));\n\n\t\t\tif(p1) {\n\t\t\t\t//offset += p1.length;\n\t\t\t\tswitch(p1) {\n\t\t\t\t\tcase '**': {\n\t\t\t\t\t\tconst b = document.createElement('b');\n\t\t\t\t\t\tb.append(...superFormatter(p2, args, indexHolder));\n\t\t\t\t\t\tout.push(b);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(p3) {\n\t\t\t\tout.push(document.createElement('br'));\n\t\t\t} else if(p4) {\n\t\t\t\tconst a = document.createElement('a');\n\n\t\t\t\tconst idx = p4.lastIndexOf(']');\n\t\t\t\tconst text = p4.slice(1, idx);\n\t\t\t\ta.append(...superFormatter(text, args, indexHolder));\n\n\t\t\t\tconst url = p4.slice(idx + 2, p4.length - 1);\n\t\t\t\tif(url) {\n\t\t\t\t\tconst wrappedUrl = RichTextProcessor.wrapUrl(url);\n\t\t\t\t\ta.href = wrappedUrl.url;\n\t\t\t\t\tif(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n\t\t\t\t\ta.target = '_blank';\n\t\t\t\t}\n\n\t\t\t\tout.push(a);\n\t\t\t} else if(args) {\n\t\t\t\tout.push(args[indexHolder.i++]);\n\t\t\t}\n\n\t\t\tlastIndex = offset + match.length;\n\t\t\treturn '';\n\t\t});\n\t\n\t\tif(lastIndex !== input.length) {\n\t\t\tout.push(input.slice(lastIndex));\n\t\t}\n\n\t\treturn out;\n\t}\n\t\n\texport function format(key: LangPackKey, plain: true, args?: any[]): string;\n\texport function format(key: LangPackKey, plain?: false, args?: any[]): FormatterArguments;\n\texport function format(key: LangPackKey, plain = false, args?: any[]): FormatterArguments | string {\n\t\tconst str = strings.get(key);\n\t\tlet input: string;\n\t\tif(str) {\n\t\t\tif(str._ === 'langPackStringPluralized' && args?.length) {\n\t\t\t\tlet v = args[0] as number | string;\n\t\t\t\tif(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n\t\t\t\tconst s = pluralRules.select(v);\n\t\t\t\t// @ts-ignore\n\t\t\t\tinput = str[s + '_value'] || str['other_value'];\n\t\t\t} else if(str._ === 'langPackString') {\n\t\t\t\tinput = str.value;\n\t\t\t} else {\n\t\t\t\t//input = '[' + key + ']';\n\t\t\t\tinput = key;\n\t\t\t}\n\t\t} else {\n\t\t\t//input = '[' + key + ']';\n\t\t\tinput = key;\n\t\t}\n\t\t\n\t\tif(plain) {\n\t\t\tif(args?.length) {\n\t\t\t\tconst regExp = /un\\d|%\\d\\$.|%./g;\n\t\t\t\tlet i = 0;\n\t\t\t\tinput = input.replace(regExp, (match, offset, string) => {\n\t\t\t\t\treturn '' + args[i++];\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn input;\n\t\t} else {\n\t\t\treturn superFormatter(input, args);\n\t\t}\n\t}\n\n\texport const weakMap: WeakMap> = new WeakMap();\n\n\texport type IntlElementBaseOptions = {\n\t\telement?: HTMLElement,\n\t\tproperty?: /* 'innerText' | */'innerHTML' | 'placeholder',\n\t};\n\n\tabstract class IntlElementBase {\n\t\tpublic element: IntlElementBaseOptions['element'];\n\t\tpublic property: IntlElementBaseOptions['property'] = 'innerHTML';\n\t\n\t\tconstructor(options: Options) {\n\t\t\tthis.element = options.element || document.createElement('span');\n\t\t\tthis.element.classList.add('i18n');\n\t\t\t\n\t\t\tthis.update(options);\n\t\t\tweakMap.set(this.element, this);\n\t\t}\n\n\t\tabstract update(options?: Options): void;\n\t}\n\n\texport type IntlElementOptions = IntlElementBaseOptions & {\n\t\tkey: LangPackKey,\n\t\targs?: FormatterArguments\n\t};\n\texport class IntlElement extends IntlElementBase {\n\t\tpublic key: IntlElementOptions['key'];\n\t\tpublic args: IntlElementOptions['args'];\n\n\t\tpublic update(options?: IntlElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\tif(this.property === 'innerHTML') {\n\t\t\t\tthis.element.textContent = '';\n\t\t\t\tthis.element.append(...format(this.key, false, this.args));\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst v = this.element[this.property];\n\t\t\t\tconst formatted = format(this.key, true, this.args);\n\n\t\t\t\t// * hasOwnProperty won't work here\n\t\t\t\tif(v === undefined) this.element.dataset[this.property] = formatted;\n\t\t\t\telse (this.element as HTMLInputElement)[this.property] = formatted;\n\t\t\t}\n\t\t}\n\t}\n\n\texport type IntlDateElementOptions = IntlElementBaseOptions & {\n\t\tdate: Date,\n\t\toptions: Intl.DateTimeFormatOptions\n\t};\n\texport class IntlDateElement extends IntlElementBase {\n\t\tpublic date: IntlDateElementOptions['date'];\n\t\tpublic options: IntlDateElementOptions['options'];\n\n\t\tpublic update(options?: IntlDateElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\t//var options = { month: 'long', day: 'numeric' };\n\t\t\t\n\t\t\t// * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n\t\t\tconst dateTimeFormat = new Intl.DateTimeFormat(lastRequestedLangCode + '-u-hc-h23', this.options);\n\t\t\t\n\t\t\t(this.element as any)[this.property] = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n\t\t}\n\t}\n\n\texport function i18n(key: LangPackKey, args?: any[]) {\n\t\treturn new IntlElement({key, args}).element;\n\t}\n\t\n\texport function i18n_(options: IntlElementOptions) {\n\t\treturn new IntlElement(options).element;\n\t}\n\n\texport function _i18n(element: HTMLElement, key: LangPackKey, args?: any[], property?: IntlElementOptions['property']) {\n\t\treturn new IntlElement({element, key, args, property}).element;\n\t}\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n\tconst arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n\treturn arr;\n}\n\nexport function join(elements: (Node | string)[], useLast = true) {\n\treturn joinElementsWith(elements, (isLast) => i18n(isLast && useLast ? 'WordDelimiterLast' : 'WordDelimiter'));\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { NotificationSettings } from \"../appManagers/appNotificationsManager\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport { copy } from \"../../helpers/object\";\r\nimport { logger } from \"../logger\";\r\nimport rootScope from \"../rootScope\";\r\nimport { ServiceWorkerNotificationsClearTask, ServiceWorkerPingTask, ServiceWorkerPushClickTask } from \"../serviceWorker/index.service\";\r\nimport apiManager from \"./mtprotoworker\";\r\nimport I18n, { LangPackKey } from \"../langPack\";\r\nimport { IS_MOBILE } from \"../../environment/userAgent\";\r\nimport appRuntimeManager from \"../appManagers/appRuntimeManager\";\r\n\r\nexport type PushSubscriptionNotifyType = 'init' | 'subscribe' | 'unsubscribe';\r\nexport type PushSubscriptionNotifyEvent = `push_${PushSubscriptionNotifyType}`;\r\n\r\nexport type PushSubscriptionNotify = {\r\n tokenType: number,\r\n tokenValue: string\r\n};\r\n\r\nexport class WebPushApiManager {\r\n public isAvailable = true;\r\n private isPushEnabled = false;\r\n private localNotificationsAvailable = true;\r\n private started = false;\r\n private settings: NotificationSettings & {baseUrl?: string} = {} as any;\r\n private isAliveTO: any;\r\n private isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n private userVisibleOnly = this.isFirefox ? false : true;\r\n private log = logger('PM');\r\n\r\n constructor() {\r\n if(!('PushManager' in window) ||\r\n !('Notification' in window) ||\r\n !('serviceWorker' in navigator)) {\r\n this.log.warn('Push messaging is not supported.');\r\n this.isAvailable = false;\r\n this.localNotificationsAvailable = false;\r\n }\r\n\r\n if(this.isAvailable && Notification.permission === 'denied') {\r\n this.log.warn('The user has blocked notifications.');\r\n }\r\n }\r\n\r\n public start() {\r\n if(!this.started) {\r\n this.started = true;\r\n this.getSubscription();\r\n this.setUpServiceWorkerChannel();\r\n }\r\n }\r\n\r\n public setLocalNotificationsDisabled() {\r\n this.localNotificationsAvailable = false;\r\n }\r\n\r\n public getSubscription() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.isPushEnabled = !!subscription;\r\n this.pushSubscriptionNotify('init', subscription);\r\n }).catch((err) => {\r\n this.log.error('Error during getSubscription()', err);\r\n });\r\n });\r\n }\r\n\r\n public subscribe = () => {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.subscribe({userVisibleOnly: this.userVisibleOnly}).then((subscription) => {\r\n // The subscription was successful\r\n this.isPushEnabled = true;\r\n this.pushSubscriptionNotify('subscribe', subscription);\r\n }).catch((e) => {\r\n if(Notification.permission === 'denied') {\r\n this.log('Permission for Notifications was denied');\r\n } else {\r\n this.log('Unable to subscribe to push.', e);\r\n if(!this.userVisibleOnly) {\r\n this.userVisibleOnly = true;\r\n setTimeout(this.subscribe, 0);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n public unsubscribe() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n \r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.isPushEnabled = false;\r\n\r\n if(subscription) {\r\n this.pushSubscriptionNotify('unsubscribe', subscription);\r\n\r\n setTimeout(() => {\r\n subscription.unsubscribe().then((successful) => {\r\n this.isPushEnabled = false;\r\n }).catch((e) => {\r\n this.log.error('Unsubscription error: ', e);\r\n });\r\n }, 3000);\r\n }\r\n }).catch((e) => {\r\n this.log.error('Error thrown while unsubscribing from ' +\r\n 'push messaging.', e);\r\n });\r\n });\r\n }\r\n\r\n public forceUnsubscribe() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.log.warn('force unsubscribe', subscription);\r\n if(subscription) {\r\n subscription.unsubscribe().then((successful) => {\r\n this.log.warn('force unsubscribe successful', successful);\r\n this.isPushEnabled = false;\r\n }).catch((e) => {\r\n this.log.error('Unsubscription error: ', e);\r\n });\r\n }\r\n }).catch((e) => {\r\n this.log.error('Error thrown while unsubscribing from ' +\r\n 'push messaging.', e);\r\n });\r\n });\r\n }\r\n\r\n public isAliveNotify = () => {\r\n if(!this.isAvailable || rootScope.idle && rootScope.idle.deactivated) {\r\n return;\r\n }\r\n\r\n this.settings.baseUrl = (location.href || '').replace(/#.*$/, '') + '#/im';\r\n\r\n const lang: ServiceWorkerPingTask['payload']['lang'] = {} as any;\r\n const ACTIONS_LANG_MAP: Record = {\r\n push_action_mute1d: IS_MOBILE ? 'PushNotification.Action.Mute1d.Mobile' : 'PushNotification.Action.Mute1d',\r\n push_action_settings: IS_MOBILE ? 'PushNotification.Action.Settings.Mobile' : 'PushNotification.Action.Settings',\r\n push_message_nopreview: 'PushNotification.Message.NoPreview'\r\n };\r\n\r\n for(const action in ACTIONS_LANG_MAP) {\r\n lang[action as keyof typeof ACTIONS_LANG_MAP] = I18n.format(ACTIONS_LANG_MAP[action as keyof typeof ACTIONS_LANG_MAP], true);\r\n }\r\n\r\n const task: ServiceWorkerPingTask = {\r\n type: 'ping',\r\n payload: {\r\n localNotifications: this.localNotificationsAvailable,\r\n lang: lang,\r\n settings: this.settings\r\n }\r\n };\r\n\r\n apiManager.postSWMessage(task);\r\n\r\n this.isAliveTO = setTimeout(this.isAliveNotify, 10000);\r\n }\r\n\r\n public setSettings(newSettings: WebPushApiManager['settings']) {\r\n this.settings = copy(newSettings);\r\n clearTimeout(this.isAliveTO);\r\n this.isAliveNotify();\r\n }\r\n\r\n public hidePushNotifications() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const task: ServiceWorkerNotificationsClearTask = {type: 'notifications_clear'};\r\n apiManager.postSWMessage(task);\r\n }\r\n\r\n public setUpServiceWorkerChannel() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n apiManager.addServiceWorkerTaskListener('push_click', (task: ServiceWorkerPushClickTask) => {\r\n if(rootScope.idle && rootScope.idle.deactivated) {\r\n appRuntimeManager.reload();\r\n return;\r\n }\r\n\r\n rootScope.dispatchEvent('push_notification_click', task.payload);\r\n });\r\n\r\n navigator.serviceWorker.ready.then(this.isAliveNotify);\r\n }\r\n\r\n public pushSubscriptionNotify(event: PushSubscriptionNotifyType, subscription?: PushSubscription) {\r\n if(subscription) {\r\n const subscriptionObj: PushSubscriptionJSON = subscription.toJSON();\r\n if(!subscriptionObj ||\r\n !subscriptionObj.endpoint ||\r\n !subscriptionObj.keys ||\r\n !subscriptionObj.keys.p256dh ||\r\n !subscriptionObj.keys.auth) {\r\n this.log.warn('Invalid push subscription', subscriptionObj);\r\n this.unsubscribe();\r\n this.isAvailable = false;\r\n this.pushSubscriptionNotify(event);\r\n return;\r\n }\r\n \r\n this.log.warn('Push', event, subscriptionObj);\r\n rootScope.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, {\r\n tokenType: 10,\r\n tokenValue: JSON.stringify(subscriptionObj)\r\n });\r\n } else {\r\n this.log.warn('Push', event, false);\r\n rootScope.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, false as any);\r\n }\r\n }\r\n}\r\n\r\nconst webPushApiManager = new WebPushApiManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.webPushApiManager = webPushApiManager);\r\nexport default webPushApiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport App from \"../../config/app\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { tsNow } from \"../../helpers/date\";\r\nimport sessionStorage from '../sessionStorage';\r\n\r\nexport class TelegramMeWebManager {\r\n private disabled = /* false && */(Modes.test || App.domains.indexOf(location.hostname) === -1);\r\n\r\n public setAuthorized(canRedirect: boolean) {\r\n if(this.disabled) {\r\n return;\r\n }\r\n\r\n return sessionStorage.get('tgme_sync').then((curValue) => {\r\n const ts = tsNow(true);\r\n if(canRedirect &&\r\n curValue &&\r\n curValue.canRedirect === canRedirect &&\r\n (curValue.ts + 86400) > ts) {\r\n return;\r\n }\r\n\r\n sessionStorage.set({\r\n tgme_sync: {\r\n canRedirect, \r\n ts\r\n }\r\n });\r\n\r\n const path = `_websync_?authed=${canRedirect ? '1' : '0'}&version=${encodeURIComponent(App.version + ' ' + App.suffix)}`;\r\n const urls = [\r\n '//telegram.me/' + path,\r\n '//t.me/' + path\r\n ];\r\n\r\n const promises = urls.map(url => {\r\n const script = document.createElement('script');\r\n const promise = new Promise((resolve) => {\r\n script.onload = script.onerror = () => {\r\n script.remove();\r\n resolve();\r\n };\r\n });\r\n script.src = url;\r\n document.body.appendChild(script);\r\n return promise;\r\n });\r\n\r\n return Promise.all(promises);\r\n });\r\n }\r\n}\r\n\r\nconst telegramMeWebManager = new TelegramMeWebManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.telegramMeWebManager = telegramMeWebManager);\r\nexport default telegramMeWebManager;\r\n","// Copyright Twitter Inc. Licensed under MIT\r\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\r\n\r\nconst originalString = \"((?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f?|\\u2696\\ufe0f?|\\u2708\\ufe0f?|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)(?:(?:\\ud83c[\\udffb-\\udfff]|\\ufe0f?)\\u200d[\\u2640\\u2642]\\ufe0f?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f?|(?:\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f?\\u200d\\u26a7\\ufe0f?|\\ud83c\\udff3\\ufe0f?\\u200d\\ud83c\\udf08|\\ud83c\\udff4\\u200d\\u2620\\ufe0f?|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f?|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f?|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f?|\\ud83e\\uddde\\u200d\\u2640\\ufe0f?|\\ud83e\\uddde\\u200d\\u2642\\ufe0f?|\\ud83e\\udddf\\u200d\\u2640\\ufe0f?|\\ud83e\\udddf\\u200d\\u2642\\ufe0f?|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f?)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f?|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f?|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f)\";\r\nexport default originalString;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Config from './config';\n\nimport emojiRegExp from '../vendor/emoji/regex';\nimport { encodeEmoji, toCodePoints } from '../vendor/emoji';\nimport { MessageEntity } from '../layer';\nimport { encodeEntities } from '../helpers/string';\nimport { IS_SAFARI } from '../environment/userAgent';\nimport { MOUNT_CLASS_TO } from '../config/debug';\nimport IS_EMOJI_SUPPORTED from '../environment/emojiSupport';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nconst emojiData = Config.Emoji;\n\nconst alphaCharsRegExp = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nconst alphaNumericRegExp = '0-9\\_' + alphaCharsRegExp;\nconst domainAddChars = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nconst urlAlphanumericRegExpPart = '[' + alphaCharsRegExp + '0-9]';\nconst urlProtocolRegExpPart = '((?:https?|ftp)://|mailto:)?';\nconst urlRegExp = urlProtocolRegExpPart +\n // user:pass authentication\n '(?:' + urlAlphanumericRegExpPart + '{1,64}(?::' + urlAlphanumericRegExpPart + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}' +\n '|' +\n // host name\n urlAlphanumericRegExpPart + '[' + alphaCharsRegExp + domainAddChars + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + urlAlphanumericRegExpPart + '[' + alphaCharsRegExp + domainAddChars + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + alphaCharsRegExp + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nconst urlProtocolRegExp = new RegExp('^' + urlProtocolRegExpPart.slice(0, -1), 'i');\nconst urlAnyProtocolRegExp = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nconst usernameRegExp = '[a-zA-Z\\\\d_]{5,32}';\nconst botCommandRegExp = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + usernameRegExp + '))?(\\\\b|$)';\nconst fullRegExp = new RegExp('(^| )(@)(' + usernameRegExp + ')|(' + urlRegExp + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + alphaNumericRegExp + ']{2,64})|(^|\\\\s)' + botCommandRegExp, 'i');\nconst emailRegExp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n//const markdownTestRegExp = /[`_*@~]/;\nconst markdownRegExp = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nconst siteHashtags: {[siteName: string]: string} = {\n Telegram: 'tg://search_hashtag?hashtag={1}',\n Twitter: 'https://twitter.com/hashtag/{1}',\n Instagram: 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\nconst siteMentions: {[siteName: string]: string} = {\n Telegram: '#/im?p=%40{1}',\n Twitter: 'https://twitter.com/{1}',\n Instagram: 'https://instagram.com/{1}/',\n GitHub: 'https://github.com/{1}'\n};\nconst markdownEntities: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline'\n};\n\nconst passConflictingEntities: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(let i in markdownEntities) {\n passConflictingEntities.add(markdownEntities[i]);\n}\n\nnamespace RichTextProcessor {\n export function getEmojiSpritesheetCoords(emojiCode: string) {\n let unified = encodeEmoji(emojiCode).replace(/-?fe0f/g, '');\n \n /* if(unified === '1f441-200d-1f5e8') {\n //unified = '1f441-fe0f-200d-1f5e8-fe0f';\n unified = '1f441-fe0f-200d-1f5e8';\n } */\n \n if(!emojiData.hasOwnProperty(unified) \n // && !emojiData.hasOwnProperty(unified.replace(/-?fe0f$/, ''))\n ) {\n //console.error('lol', unified);\n return null;\n }\n \n return unified;\n }\n\n export function parseEntities(text: string) {\n let match: any;\n let raw = text;\n const entities: MessageEntity[] = [];\n let matchIndex;\n let rawOffset = 0;\n // var start = tsNow()\n fullRegExp.lastIndex = 0;\n while((match = raw.match(fullRegExp))) {\n matchIndex = rawOffset + match.index;\n \n //console.log('parseEntities match:', match);\n \n if(match[3]) { // mentions\n entities.push({\n _: 'messageEntityMention',\n offset: matchIndex + match[1].length,\n length: match[2].length + match[3].length\n });\n } else if(match[4]) {\n if(emailRegExp.test(match[4])) { // email\n entities.push({\n _: 'messageEntityEmail',\n offset: matchIndex,\n length: match[4].length\n });\n } else {\n let url: string;\n let protocol = match[5];\n const tld = match[6];\n // let excluded = '';\n if(tld) { // URL\n if(!protocol && (tld.substr(0, 4) === 'xn--' || Config.TLD.indexOf(tld.toLowerCase()) !== -1)) {\n protocol = 'http://';\n }\n \n if(protocol) {\n const balanced = checkBrackets(match[4]);\n if(balanced.length !== match[4].length) {\n // excluded = match[4].substring(balanced.length);\n match[4] = balanced;\n }\n \n url = (match[5] ? '' : protocol) + match[4];\n }\n } else { // IP address\n url = (match[5] ? '' : 'http://') + match[4];\n }\n \n if(url) {\n entities.push({\n _: 'messageEntityUrl',\n offset: matchIndex,\n length: match[4].length\n });\n }\n }\n } else if(match[7]) { // New line\n entities.push({\n _: 'messageEntityLinebreak',\n offset: matchIndex,\n length: 1\n });\n } else if(match[8]) { // Emoji\n //console.log('hit', match[8]);\n const emojiCoords = getEmojiSpritesheetCoords(match[8]);\n if(emojiCoords) {\n entities.push({\n _: 'messageEntityEmoji',\n offset: matchIndex,\n length: match[8].length,\n unicode: emojiCoords\n });\n }\n } else if(match[11]) { // Hashtag\n entities.push({\n _: 'messageEntityHashtag',\n offset: matchIndex + (match[10] ? match[10].length : 0),\n length: match[11].length\n });\n } else if(match[13]) { // Bot command\n entities.push({\n _: 'messageEntityBotCommand',\n offset: matchIndex + (match[11] ? match[11].length : 0) + (match[12] ? match[12].length : 0),\n length: 1 + match[13].length + (match[14] ? 1 + match[14].length : 0),\n unsafe: true\n });\n }\n \n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n }\n \n // if (entities.length) {\n // console.log('parse entities', text, entities.slice())\n // }\n return entities;\n }\n\n /* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n } */\n\n export function parseMarkdown(raw: string, currentEntities: MessageEntity[], noTrim?: boolean): string {\n   /* if(!markdownTestRegExp.test(text)) {\n return noTrim ? text : text.trim();\n } */\n\n const entities: MessageEntity[] = [];\n let pushedEntity = false;\n const pushEntity = (entity: MessageEntity) => !findConflictingEntity(currentEntities, entity) ? (entities.push(entity), pushedEntity = true) : pushedEntity = false;\n\n const newTextParts: string[] = [];\n let rawOffset = 0, match;\n while(match = raw.match(markdownRegExp)) {\n const matchIndex = rawOffset + match.index;\n newTextParts.push(raw.substr(0, match.index));\n const text = (match[3] || match[8] || match[11] || match[13]);\n rawOffset -= text.length;\n //text = text.replace(/^\\s+|\\s+$/g, '');\n rawOffset += text.length;\n\n let entity: MessageEntity;\n pushedEntity = false;\n if(text.match(/^`*$/)) {\n newTextParts.push(match[0]);\n } else if(match[3]) { // pre\n entity = {\n _: 'messageEntityPre',\n language: '',\n offset: matchIndex + match[1].length,\n length: text.length\n };\n\n if(pushEntity(entity)) {\n if(match[5] === '\\n') {\n match[5] = '';\n rawOffset -= 1;\n }\n \n newTextParts.push(match[1] + text + match[5]);\n \n rawOffset -= match[2].length + match[4].length;\n }\n } else if(match[7]) { // code|italic|bold\n const isSOH = match[6] === '\\x01';\n\n entity = {\n _: markdownEntities[match[7]] as (MessageEntity.messageEntityBold | MessageEntity.messageEntityCode | MessageEntity.messageEntityItalic)['_'],\n //offset: matchIndex + match[6].length,\n offset: matchIndex + (isSOH ? 0 : match[6].length),\n length: text.length\n };\n\n if(pushEntity(entity)) {\n if(!isSOH) {\n newTextParts.push(match[6] + text + match[9]);\n } else {\n newTextParts.push(text);\n }\n \n rawOffset -= match[7].length * 2 + (isSOH ? 2 : 0);\n }\n } else if(match[11]) { // custom mention\n entity = {\n _: 'messageEntityMentionName',\n user_id: +match[10],\n offset: matchIndex,\n length: text.length\n };\n \n if(pushEntity(entity)) {\n newTextParts.push(text);\n \n rawOffset -= match[0].length - text.length;\n }\n } else if(match[12]) { // text url\n entity = {\n _: 'messageEntityTextUrl',\n url: match[14],\n offset: matchIndex,\n length: text.length\n };\n \n if(pushEntity(entity)) {\n newTextParts.push(text);\n\n rawOffset -= match[12].length - text.length;\n }\n }\n\n if(!pushedEntity) {\n newTextParts.push(match[0]);\n }\n\n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n }\n\n newTextParts.push(raw);\n let newText = newTextParts.join('');\n if(!newText.replace(/\\s+/g, '').length) {\n newText = raw;\n entities.splice(0, entities.length);\n }\n\n if(!entities.length && !noTrim) {\n newText = newText.trim();\n }\n\n mergeEntities(currentEntities, entities);\n combineSameEntities(currentEntities);\n\n let length = newText.length;\n if(!noTrim) {\n // trim left\n newText = newText.replace(/^\\s*/, '');\n\n let diff = length - newText.length;\n if(diff) {\n currentEntities.forEach(entity => {\n entity.offset = Math.max(0, entity.offset - diff);\n });\n }\n\n // trim right\n newText = newText.replace(/\\s*$/, '');\n diff = length - newText.length;\n length = newText.length;\n if(diff) {\n currentEntities.forEach(entity => {\n if((entity.offset + entity.length) > length) {\n entity.length = length - entity.offset;\n }\n });\n }\n }\n\n return newText;\n }\n\n export function findConflictingEntity(currentEntities: MessageEntity[], newEntity: MessageEntity) {\n return currentEntities.find(currentEntity => {\n const isConflictingTypes = newEntity._ === currentEntity._ || \n (!passConflictingEntities.has(newEntity._) && !passConflictingEntities.has(currentEntity._));\n\n if(!isConflictingTypes) {\n return false;\n }\n\n const isConflictingOffset = newEntity.offset >= currentEntity.offset && \n (newEntity.length + newEntity.offset) <= (currentEntity.length + currentEntity.offset);\n\n return isConflictingOffset;\n });\n }\n\n export function mergeEntities(currentEntities: MessageEntity[], newEntities: MessageEntity[]) {\n const filtered = newEntities.filter(e => {\n return !findConflictingEntity(currentEntities, e);\n });\n\n currentEntities.push(...filtered);\n currentEntities.sort((a, b) => a.offset - b.offset);\n\n if(!IS_EMOJI_SUPPORTED) { // fix splitted emoji. messageEntityTextUrl can split the emoji if starts before its end (e.g. on fe0f)\n for(let i = 0; i < currentEntities.length; ++i) {\n const entity = currentEntities[i];\n if(entity._ === 'messageEntityEmoji') {\n const nextEntity = currentEntities[i + 1];\n if(nextEntity && nextEntity.offset < (entity.offset + entity.length)) {\n entity.length = nextEntity.offset - entity.offset;\n }\n }\n }\n }\n\n return currentEntities;\n }\n\n export function combineSameEntities(entities: MessageEntity[]) {\n //entities = entities.slice();\n for(let i = 0; i < entities.length; ++i) {\n const entity = entities[i];\n\n let nextEntityIdx = -1;\n do {\n nextEntityIdx = entities.findIndex((e, _i) => _i !== i && e._ === entity._ && (e.offset - entity.length) === entity.offset);\n if(nextEntityIdx !== -1) {\n const nextEntity = entities[nextEntityIdx];\n entity.length += nextEntity.length;\n entities.splice(nextEntityIdx, 1);\n }\n } while(nextEntityIdx !== -1);\n }\n //return entities;\n }\n\n export function wrapRichText(text: string, options: Partial<{\n entities: MessageEntity[],\n contextSite: string,\n highlightUsername: string,\n noLinks: true,\n noLinebreaks: true,\n noCommands: true,\n wrappingDraft: boolean,\n //mustWrapEmoji: boolean,\n fromBot: boolean,\n noTextFormat: true,\n passEntities: Partial<{\n [_ in MessageEntity['_']]: boolean\n }>,\n\n contextHashtag?: string,\n }> = {}) {\n if(!text) {\n return '';\n }\n\n const lol: {\n part: string,\n offset: number\n }[] = [];\n const entities = options.entities || parseEntities(text);\n\n const passEntities: typeof options.passEntities = options.passEntities || {};\n const contextSite = options.contextSite || 'Telegram';\n const contextExternal = contextSite !== 'Telegram';\n\n const insertPart = (entity: MessageEntity, startPart: string, endPart?: string) => {\n lol.push({part: startPart, offset: entity.offset});\n\n if(endPart) {\n lol.unshift({part: endPart, offset: entity.offset + entity.length});\n }\n };\n\n for(let i = 0, length = entities.length; i < length; ++i) {\n const entity = entities[i];\n switch(entity._) {\n case 'messageEntityBold': {\n if(!options.noTextFormat) {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n }\n\n break;\n }\n\n case 'messageEntityItalic': {\n if(!options.noTextFormat) {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n }\n\n break;\n }\n\n case 'messageEntityStrike': {\n if(options.wrappingDraft) {\n const styleName = IS_SAFARI ? 'text-decoration' : 'text-decoration-line';\n insertPart(entity, ``, '');\n } else {\n insertPart(entity, '', '');\n }\n\n break;\n }\n\n case 'messageEntityUnderline': {\n if(options.wrappingDraft) {\n const styleName = IS_SAFARI ? 'text-decoration' : 'text-decoration-line';\n insertPart(entity, ``, '');\n } else {\n insertPart(entity, '', '');\n }\n\n break;\n }\n \n case 'messageEntityCode': {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n \n break;\n }\n \n case 'messageEntityPre': {\n if(!options.noTextFormat) {\n insertPart(entity, `
`, '
');\n }\n \n break;\n }\n\n case 'messageEntityHighlight': {\n insertPart(entity, '', '');\n break;\n }\n\n case 'messageEntityBotCommand': {\n // if(!(options.noLinks || options.noCommands || contextExternal)/* && !entity.unsafe */) {\n if(!options.noLinks && passEntities[entity._]) {\n const entityText = text.substr(entity.offset, entity.length);\n let command = entityText.substr(1);\n let bot: string | boolean;\n let atPos: number;\n if((atPos = command.indexOf('@')) !== -1) {\n bot = command.substr(atPos + 1);\n command = command.substr(0, atPos);\n } else {\n bot = options.fromBot;\n }\n\n insertPart(entity, ``, ``);\n }\n\n break;\n }\n\n case 'messageEntityEmoji': {\n //if(!(options.wrappingDraft && IS_EMOJI_SUPPORTED)) { // * fix safari emoji\n if(!IS_EMOJI_SUPPORTED) { // no wrapping needed\n // if(IS_EMOJI_SUPPORTED) { // ! contenteditable=\"false\" нужен для поля ввода, иначе там будет меняться шрифт в Safari, или же рендерить смайлик напрямую, без контейнера\n // insertPart(entity, '', '');\n // } else {\n insertPart(entity, `\"`,`);\n // }\n //} else if(options.mustWrapEmoji) {\n } else if(!options.wrappingDraft) {\n insertPart(entity, '', '');\n } else if(!IS_SAFARI) {\n insertPart(entity, '', '');\n }\n /* if(!IS_EMOJI_SUPPORTED) {\n insertPart(entity, `\"`,`);\n } */\n\n break;\n }\n \n case 'messageEntityCaret': {\n insertPart(entity, '');\n break;\n }\n\n /* case 'messageEntityLinebreak': {\n if(options.noLinebreaks) {\n insertPart(entity, ' ');\n } else {\n insertPart(entity, '
');\n }\n \n break;\n } */\n\n case 'messageEntityUrl':\n case 'messageEntityTextUrl': {\n if(!(options.noLinks && !passEntities[entity._])) {\n const entityText = text.substr(entity.offset, entity.length);\n\n // let inner: string;\n let url: string = (entity as MessageEntity.messageEntityTextUrl).url || entityText;\n let masked = false;\n let onclick: string;\n\n const wrapped = wrapUrl(url, true);\n url = wrapped.url;\n onclick = wrapped.onclick;\n\n if(entity._ === 'messageEntityTextUrl') {\n const nextEntity = entities[i + 1];\n if(nextEntity?._ === 'messageEntityUrl' && \n nextEntity.length === entity.length && \n nextEntity.offset === entity.offset) {\n i++;\n }\n\n if(url !== entityText) {\n masked = true;\n }\n } else {\n //inner = encodeEntities(replaceUrlEncodings(entityText));\n }\n\n const currentContext = !!onclick;\n if(!onclick && masked && !currentContext) {\n onclick = 'showMaskedAlert';\n }\n\n if(options.wrappingDraft) {\n onclick = undefined;\n }\n\n const href = (currentContext || typeof electronHelpers === 'undefined') \n ? encodeEntities(url)\n : `javascript:electronHelpers.openExternal('${encodeEntities(url)}');`;\n\n const target = (currentContext || typeof electronHelpers !== 'undefined')\n ? '' : ' target=\"_blank\" rel=\"noopener noreferrer\"';\n\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityEmail': {\n if(!options.noLinks) {\n const entityText = text.substr(entity.offset, entity.length);\n insertPart(entity, ``, '');\n }\n\n break;\n }\n \n case 'messageEntityHashtag': {\n const contextUrl = !options.noLinks && siteHashtags[contextSite];\n if(contextUrl) {\n const entityText = text.substr(entity.offset, entity.length);\n const hashtag = entityText.substr(1);\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityMentionName': {\n if(!(options.noLinks && !passEntities[entity._])) {\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityMention': {\n // const contextUrl = !options.noLinks && siteMentions[contextSite];\n if(!options.noLinks) {\n const entityText = text.substr(entity.offset, entity.length);\n const username = entityText.substr(1);\n\n const {url, onclick} = wrapUrl('t.me/' + username);\n\n // insertPart(entity, ``, '');\n insertPart(entity, ``, '');\n }\n \n break;\n }\n }\n }\n\n lol.sort((a, b) => a.offset - b.offset);\n\n const arr: string[] = [];\n let usedLength = 0;\n for(const {part, offset} of lol) {\n if(offset > usedLength) {\n arr.push(encodeEntities(text.slice(usedLength, offset)));\n usedLength = offset;\n }\n\n arr.push(part);\n }\n\n if(usedLength < text.length) {\n arr.push(encodeEntities(text.slice(usedLength)));\n }\n\n return arr.join('');\n }\n\n export function fixEmoji(text: string, entities?: MessageEntity[]) {\n /* if(!IS_EMOJI_SUPPORTED) {\n return text;\n } */\n // '$`\\ufe0f'\n\n text = text.replace(/[\\u2640\\u2642\\u2764](?!\\ufe0f)/g, (match, offset, string) => {\n if(entities) {\n const length = match.length;\n\n offset += length;\n entities.forEach(entity => {\n const end = entity.offset + entity.length;\n if(end === offset) { // current entity\n entity.length += length;\n } else if(end > offset) {\n entity.offset += length;\n }\n });\n }\n \n // console.log([match, offset, string]);\n return match + '\\ufe0f';\n });\n\n return text;\n }\n\n export function wrapDraftText(text: string, options: Partial<{\n entities: MessageEntity[]\n }> = {}) {\n if(!text) {\n return '';\n }\n\n return wrapRichText(text, {\n entities: options.entities, \n noLinks: true,\n wrappingDraft: true,\n passEntities: {\n messageEntityTextUrl: true,\n messageEntityMentionName: true\n }\n });\n }\n\n export function checkBrackets(url: string) {\n var urlLength = url.length;\n var urlOpenBrackets = url.split('(').length - 1;\n var urlCloseBrackets = url.split(')').length - 1;\n while(urlCloseBrackets > urlOpenBrackets &&\n url.charAt(urlLength - 1) === ')') {\n url = url.substr(0, urlLength - 1)\n urlCloseBrackets--;\n urlLength--;\n }\n if(urlOpenBrackets > urlCloseBrackets) {\n url = url.replace(/\\)+$/, '');\n }\n return url;\n }\n \n export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n }\n \n export function wrapPlainText(text: string) {\n if(IS_EMOJI_SUPPORTED) {\n return text;\n }\n \n if(!text || !text.length) {\n return '';\n }\n \n text = text.replace(/\\ufe0f/g, '');\n var match;\n var raw = text;\n const arr: string[] = [];\n let emojiTitle;\n fullRegExp.lastIndex = 0;\n while((match = raw.match(fullRegExp))) {\n arr.push(raw.substr(0, match.index))\n if(match[8]) {\n // @ts-ignore\n const emojiCode = EmojiHelper.emojiMap[match[8]];\n if(emojiCode &&\n // @ts-ignore\n (emojiTitle = emojiData[emojiCode][1][0])) {\n arr.push(':' + emojiTitle + ':');\n } else {\n arr.push(match[0]);\n }\n } else {\n arr.push(match[0]);\n }\n \n raw = raw.substr(match.index + match[0].length);\n }\n arr.push(raw);\n return arr.join('');\n }\n\n export function wrapEmojiText(text: string, isDraft = false) {\n if(!text) return '';\n \n let entities = parseEntities(text).filter(e => e._ === 'messageEntityEmoji');\n return wrapRichText(text, {entities, wrappingDraft: isDraft});\n }\n\n export function wrapUrl(url: string, unsafe?: number | boolean): {url: string, onclick: string} {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n \n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: string;\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?t(?:elegram)?\\.me\\/(.+)/))) {\n const fullPath = tgMeMatch[1];\n const path = fullPath.split('/');\n switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n onclick = path[0];\n break;\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1];\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n \n return {url, onclick};\n }\n\n export function matchUrlProtocol(text: string) {\n return !text ? null : text.match(urlAnyProtocolRegExp);\n }\n \n export function matchUrl(text: string) {\n return !text ? null : text.match(urlRegExp);\n }\n\n export function matchEmail(text: string) {\n return !text ? null : text.match(emailRegExp);\n }\n\n export function getAbbreviation(str: string, onlyFirst = false) {\n const splitted = str.trim().split(' ');\n if(!splitted[0]) return '';\n\n const first = [...splitted[0]][0];\n\n if(onlyFirst || splitted.length === 1) return wrapEmojiText(first);\n\n const last = [...splitted[splitted.length - 1]][0];\n\n return wrapEmojiText(first + last);\n }\n\n export function isUsernameValid(username: string) {\n return ((username.length >= 5 && username.length <= 32) || !username.length) && /^[a-zA-Z0-9_]*$/.test(username);\n }\n\n export function getEmojiEntityFromEmoji(emoji: string): MessageEntity.messageEntityEmoji {\n return {\n _: 'messageEntityEmoji',\n offset: 0,\n length: emoji.length,\n unicode: toCodePoints(emoji).join('-').replace(/-?fe0f/g, '')\n };\n }\n\n export function wrapSingleEmoji(emoji: string) {\n return wrapRichText(emoji, {\n entities: [getEmojiEntityFromEmoji(emoji)]\n });\n }\n}\n\nMOUNT_CLASS_TO.RichTextProcessor = RichTextProcessor;\n\nexport {RichTextProcessor};\nexport default RichTextProcessor;\n\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"mtproto.worker.08024df6e720e6031331.bundle.worker.js\");\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { LocalStorageProxyTask, LocalStorageProxyTaskResponse } from '../localStorage';\n//import type { LocalStorageProxyDeleteTask, LocalStorageProxySetTask } from '../storage';\nimport type { Awaited, InvokeApiOptions, WorkerTaskVoidTemplate } from '../../types';\nimport type { Config, InputFile, MethodDeclMap } from '../../layer';\nimport MTProtoWorker from 'worker-loader!./mtproto.worker';\n//import './mtproto.worker';\nimport { isObject } from '../../helpers/object';\nimport CryptoWorkerMethods from '../crypto/crypto_methods';\nimport { logger } from '../logger';\nimport rootScope from '../rootScope';\nimport webpWorkerController from '../webp/webpWorkerController';\nimport { ApiFileManager, DownloadOptions } from './apiFileManager';\nimport type { RequestFilePartTask, RequestFilePartTaskResponse, ServiceWorkerTask } from '../serviceWorker/index.service';\nimport { UserAuth } from './mtproto_config';\nimport type { MTMessage } from './networker';\nimport DEBUG, { MOUNT_CLASS_TO } from '../../config/debug';\nimport Socket from './transports/websocket';\nimport singleInstance from './singleInstance';\nimport sessionStorage from '../sessionStorage';\nimport webPushApiManager from './webPushApiManager';\nimport AppStorage from '../storage';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport { SocketProxyTask } from './transports/socketProxied';\nimport telegramMeWebManager from './telegramMeWebManager';\nimport { CacheStorageDbName } from '../cacheStorage';\nimport { pause } from '../../helpers/schedulers/pause';\nimport IS_WEBP_SUPPORTED from '../../environment/webpSupport';\n\ntype Task = {\n taskId: number,\n task: string,\n args: any[]\n};\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport interface ToggleStorageTask extends WorkerTaskVoidTemplate {\n type: 'toggleStorage',\n payload: boolean\n};\n\nexport class ApiManagerProxy extends CryptoWorkerMethods {\n public worker: /* Window */Worker;\n private afterMessageIdTemp = 0;\n\n private taskId = 0;\n private awaiting: {\n [id: number]: {\n resolve: any,\n reject: any,\n taskName: string\n }\n } = {} as any;\n private pending: Array = [];\n\n public updatesProcessor: (obj: any) => void = null;\n\n private log = logger('API-PROXY');\n\n private hashes: {[method: string]: HashOptions} = {};\n\n private apiPromisesSingle: {\n [q: string]: Promise\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise,\n fulfilled: boolean,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n private isSWRegistered = true;\n\n private debug = DEBUG /* && false */;\n\n private sockets: Map = new Map();\n\n private taskListeners: {[taskType: string]: (task: any) => void} = {};\n private taskListenersSW: {[taskType: string]: (task: any) => void} = {};\n\n public onServiceWorkerFail: () => void;\n\n private postMessagesWaiting: any[][] = [];\n\n private getConfigPromise: Promise;\n\n constructor() {\n super();\n this.log('constructor');\n\n singleInstance.start();\n\n this.registerServiceWorker();\n\n this.addTaskListener('clear', () => {\n const toClear: CacheStorageDbName[] = ['cachedFiles', 'cachedStreamChunks'];\n Promise.all([\n AppStorage.toggleStorage(false), \n sessionStorage.clear(),\n Promise.race([\n telegramMeWebManager.setAuthorized(false),\n pause(3000)\n ]),\n webPushApiManager.forceUnsubscribe(),\n Promise.all(toClear.map(cacheName => caches.delete(cacheName)))\n ]).finally(() => {\n appRuntimeManager.reload();\n });\n });\n\n this.addTaskListener('connectionStatusChange', (task: any) => {\n rootScope.dispatchEvent('connection_status_change', task.payload);\n });\n\n this.addTaskListener('convertWebp', (task) => {\n webpWorkerController.postMessage(task);\n });\n\n this.addTaskListener('socketProxy', (task: SocketProxyTask) => {\n const socketTask = task.payload;\n const id = socketTask.id;\n //console.log('socketProxy', socketTask, id);\n\n if(socketTask.type === 'send') {\n const socket = this.sockets.get(id);\n socket.send(socketTask.payload);\n } else if(socketTask.type === 'close') { // will remove from map in onClose\n const socket = this.sockets.get(id);\n socket.close();\n } else if(socketTask.type === 'setup') {\n const socket = new Socket(socketTask.payload.dcId, socketTask.payload.url, socketTask.payload.logSuffix);\n \n const onOpen = () => {\n //console.log('socketProxy onOpen');\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'open',\n id\n }\n });\n };\n const onClose = () => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'close',\n id\n }\n });\n\n socket.removeEventListener('open', onOpen);\n socket.removeEventListener('close', onClose);\n socket.removeEventListener('message', onMessage);\n this.sockets.delete(id);\n };\n const onMessage = (buffer: ArrayBuffer) => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'message',\n id,\n payload: buffer\n }\n });\n };\n\n socket.addEventListener('open', onOpen);\n socket.addEventListener('close', onClose);\n socket.addEventListener('message', onMessage);\n this.sockets.set(id, socket);\n }\n });\n\n this.addTaskListener('localStorageProxy', (task: LocalStorageProxyTask) => {\n const storageTask = task.payload;\n // @ts-ignore\n sessionStorage[storageTask.type](...storageTask.args).then(res => {\n this.postMessage({\n type: 'localStorageProxy',\n id: task.id,\n payload: res\n } as LocalStorageProxyTaskResponse);\n });\n });\n\n rootScope.addEventListener('language_change', (language) => {\n this.performTaskWorkerVoid('setLanguage', language);\n });\n\n window.addEventListener('online', (event) => {\n this.forceReconnectTimeout();\n });\n\n \n this.registerWorker();\n \n\n setTimeout(() => {\n this.getConfig();\n }, 5000);\n }\n\n public isServiceWorkerOnline() {\n return this.isSWRegistered;\n }\n\n private registerServiceWorker() {\n if(!('serviceWorker' in navigator)) return;\n \n const worker = navigator.serviceWorker;\n worker.register('./sw.js', {scope: './'}).then(registration => {\n this.log('SW registered', registration);\n this.isSWRegistered = true;\n\n const sw = registration.installing || registration.waiting || registration.active;\n sw.addEventListener('statechange', (e) => {\n this.log('SW statechange', e);\n });\n\n //this.postSWMessage = worker.controller.postMessage.bind(worker.controller);\n\n \n \n \n \n }, (err) => {\n this.isSWRegistered = false;\n this.log.error('SW registration failed!', err);\n\n if(this.onServiceWorkerFail) {\n this.onServiceWorkerFail();\n }\n });\n\n worker.addEventListener('controllerchange', () => {\n this.log.warn('controllerchange');\n this.releasePending();\n\n worker.controller.addEventListener('error', (e) => {\n this.log.error('controller error:', e);\n });\n });\n\n \n \n \n worker.addEventListener('message', (e) => {\n const task: ServiceWorkerTask = e.data;\n if(!isObject(task)) {\n return;\n }\n\n const callback = this.taskListenersSW[task.type];\n if(callback) {\n callback(task);\n }\n });\n\n this.addServiceWorkerTaskListener('requestFilePart', (task: RequestFilePartTask) => {\n const responseTask: RequestFilePartTaskResponse = {\n type: task.type,\n id: task.id\n };\n \n this.performTaskWorker>>('requestFilePart', ...task.payload)\n .then((uploadFile) => {\n responseTask.payload = uploadFile;\n this.postSWMessage(responseTask);\n }, (err) => {\n responseTask.originalPayload = task.payload;\n responseTask.error = err;\n this.postSWMessage(responseTask);\n });\n });\n\n \n\n worker.addEventListener('messageerror', (e) => {\n this.log.error('SW messageerror:', e);\n });\n }\n\n public postMessage(...args: any[]) {\n this.postMessagesWaiting.push(args);\n }\n\n public postSWMessage(message: any) {\n if(navigator.serviceWorker.controller) {\n navigator.serviceWorker.controller.postMessage(message);\n }\n }\n\n private onWorkerFirstMessage(worker: any) {\n if(!this.worker) {\n this.worker = worker;\n this.log('set webWorker');\n\n this.postMessage = this.worker.postMessage.bind(this.worker);\n\n this.postMessagesWaiting.forEach(args => this.postMessage(...args));\n this.postMessagesWaiting.length = 0;\n\n const isWebpSupported = IS_WEBP_SUPPORTED;\n this.log('WebP supported:', isWebpSupported);\n this.postMessage({type: 'webpSupport', payload: isWebpSupported});\n this.postMessage({type: 'userAgent', payload: navigator.userAgent});\n\n this.releasePending();\n }\n }\n\n public addTaskListener(name: keyof ApiManagerProxy['taskListeners'], callback: ApiManagerProxy['taskListeners'][typeof name]) {\n this.taskListeners[name] = callback;\n }\n\n public addServiceWorkerTaskListener(name: keyof ApiManagerProxy['taskListenersSW'], callback: ApiManagerProxy['taskListenersSW'][typeof name]) {\n this.taskListenersSW[name] = callback;\n }\n\n private onWorkerMessage = (e: MessageEvent) => {\n //this.log('got message from worker:', e.data);\n\n const task = e.data;\n\n if(!isObject(task)) {\n return;\n }\n\n const callback = this.taskListeners[task.type];\n if(callback) {\n callback(task);\n return;\n }\n\n if(task.update) {\n if(this.updatesProcessor) {\n this.updatesProcessor(task.update);\n }\n } else if(task.progress) {\n rootScope.dispatchEvent('download_progress', task.progress);\n } else if(task.hasOwnProperty('result') || task.hasOwnProperty('error')) {\n this.finalizeTask(task.taskId, task.result, task.error);\n }\n };\n\n \n private registerWorker() {\n // return;\n\n const worker = new MTProtoWorker();\n //const worker = window;\n worker.addEventListener('message', this.onWorkerFirstMessage.bind(this, worker), {once: true});\n worker.addEventListener('message', this.onWorkerMessage);\n\n worker.addEventListener('error', (err) => {\n this.log.error('WORKER ERROR', err);\n });\n }\n \n\n private finalizeTask(taskId: number, result: any, error: any) {\n const deferred = this.awaiting[taskId];\n if(deferred !== undefined) {\n this.debug && this.log.debug('done', deferred.taskName, result, error);\n error ? deferred.reject(error) : deferred.resolve(result);\n delete this.awaiting[taskId];\n }\n }\n\n public performTaskWorkerVoid(task: string, ...args: any[]) {\n const params = {\n task,\n taskId: this.taskId,\n args\n };\n\n this.pending.push(params);\n this.releasePending();\n\n this.taskId++;\n }\n\n public performTaskWorker(task: string, ...args: any[]) {\n this.debug && this.log.debug('start', task, args);\n\n return new Promise((resolve, reject) => {\n this.awaiting[this.taskId] = {resolve, reject, taskName: task};\n this.performTaskWorkerVoid(task, ...args);\n });\n }\n\n private releasePending() {\n //return;\n\n if(this.postMessage) {\n this.debug && this.log.debug('releasing tasks, length:', this.pending.length);\n this.pending.forEach(pending => {\n this.postMessage(pending);\n });\n \n this.debug && this.log.debug('released tasks');\n this.pending.length = 0;\n }\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n //console.log('will invokeApi:', method, params, options);\n return this.performTaskWorker('invokeApi', method, params, options);\n }\n\n public invokeApiAfter(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n \n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n //console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable(method: T, params: Omit = {} as any, options: InvokeApiOptions = {}): Promise {\n //console.log('will invokeApi:', method, params, options);\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n (params as any).hash = cached.hash;\n }\n }\n\n return this.invokeApi(method, params, options).then((result: any) => {\n if(result._.includes('NotModified')) {\n this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n \n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n \n if(!this.hashes[method]) this.hashes[method] = {};\n this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n return result;\n });\n }\n\n public invokeApiSingle(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise {\n const q = method + '-' + JSON.stringify(params);\n if(this.apiPromisesSingle[q]) {\n return this.apiPromisesSingle[q];\n }\n\n return this.apiPromisesSingle[q] = this.invokeApi(method, params, options).finally(() => {\n delete this.apiPromisesSingle[q];\n });\n }\n\n public invokeApiCacheable(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean}> = {}): Promise {\n const cache = this.apiPromisesCacheable[method] ?? (this.apiPromisesCacheable[method] = {});\n const queryJSON = JSON.stringify(params);\n const item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n return item.promise;\n }\n\n if(options.override) {\n if(item && item.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = window.setTimeout(() => {\n delete cache[queryJSON];\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n }\n }\n }\n\n /* private computeHash(smth: any[]) {\n smth = smth.slice().sort((a, b) => a.id - b.id);\n //return smth.reduce((hash, v) => (((hash * 0x4F25) & 0x7FFFFFFF) + v.id) & 0x7FFFFFFF, 0);\n return smth.reduce((hash, v) => ((hash * 20261) + 0x80000000 + v.id) % 0x80000000, 0);\n } */\n\n public setBaseDcId(dcId: number) {\n return this.performTaskWorker('setBaseDcId', dcId);\n }\n\n public setQueueId(queueId: number) {\n return this.performTaskWorker('setQueueId', queueId);\n }\n\n public setUserAuth(userAuth: UserAuth | number) {\n if(typeof(userAuth) === 'number') {\n userAuth = {dcID: 0, date: Date.now() / 1000 | 0, id: userAuth};\n }\n \n rootScope.dispatchEvent('user_auth', userAuth);\n return this.performTaskWorker('setUserAuth', userAuth);\n }\n\n public getNetworker(dc_id: number, options?: InvokeApiOptions) {\n return this.performTaskWorker('getNetworker', dc_id, options);\n }\n\n public logOut(): Promise {\n // AppStorage.toggleStorage(false);\n return this.performTaskWorker('logOut');\n }\n\n public cancelDownload(fileName: string) {\n return this.performTaskWorker('cancelDownload', fileName);\n }\n\n public downloadFile(options: DownloadOptions) {\n return this.performTaskWorker('downloadFile', options);\n }\n\n public uploadFile(options: {file: Blob | File, fileName: string}) {\n return this.performTaskWorker('uploadFile', options);\n }\n\n public toggleStorage(enabled: boolean) {\n const task: ToggleStorageTask = {type: 'toggleStorage', payload: enabled};\n this.postMessage(task);\n this.postSWMessage(task);\n }\n\n public stopAll() {\n return this.performTaskWorkerVoid('stopAll');\n }\n\n public startAll() {\n return this.performTaskWorkerVoid('startAll');\n }\n\n public forceReconnectTimeout() {\n this.postMessage({type: 'online'});\n }\n\n public forceReconnect() {\n this.postMessage({type: 'forceReconnect'});\n }\n\n public getConfig() {\n if(this.getConfigPromise) return this.getConfigPromise;\n return this.getConfigPromise = this.invokeApi('help.getConfig').then(config => {\n rootScope.config = config;\n return config;\n });\n }\n}\n\nconst apiManagerProxy = new ApiManagerProxy();\nMOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;\nexport default apiManagerProxy;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Awaited } from \"../../types\";\r\nimport type { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow, hash_pbkdf2, rsaEncrypt, pqPrimeFactorization, gzipUncompress } from \"./crypto_utils\";\r\nimport type { computeSRP } from \"./srp\";\r\n\r\nexport type CryptoMethods = {\r\n 'sha1-hash': typeof sha1HashSync,\r\n 'sha256-hash': typeof sha256HashSync,\r\n 'pbkdf2': typeof hash_pbkdf2,\r\n 'aes-encrypt': typeof aesEncryptSync,\r\n 'aes-decrypt': typeof aesDecryptSync,\r\n 'rsa-encrypt': typeof rsaEncrypt,\r\n 'factorize': typeof pqPrimeFactorization,\r\n 'mod-pow': typeof bytesModPow,\r\n 'gzipUncompress': typeof gzipUncompress,\r\n 'computeSRP': typeof computeSRP\r\n};\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker(task: string, ...args: any[]): Promise;\r\n\r\n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\r\n return this.performTaskWorker>>(method, ...args as any[]);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport calcImageInBox from \"./calcImageInBox\";\r\nimport EventListenerBase from \"./eventListenerBase\";\r\n\r\nexport class MediaSize {\r\n constructor(public width = 0, public height = width) {\r\n\r\n }\r\n\r\n public aspect(boxSize: MediaSize, fitted: boolean) {\r\n return calcImageInBox(this.width, this.height, boxSize.width, boxSize.height, fitted);\r\n }\r\n\r\n public aspectFitted(boxSize: MediaSize) {\r\n return this.aspect(boxSize, true);\r\n }\r\n\r\n public aspectCovered(boxSize: MediaSize) {\r\n return this.aspect(boxSize, false);\r\n }\r\n}\r\n\r\nexport function makeMediaSize(width?: number, height?: number): MediaSize {\r\n return new MediaSize(width, height);\r\n}\r\n\r\ntype MediaTypeSizes = {\r\n regular: MediaSize,\r\n webpage: MediaSize,\r\n album: MediaSize,\r\n esgSticker: MediaSize,\r\n animatedSticker: MediaSize,\r\n staticSticker: MediaSize,\r\n emojiSticker: MediaSize,\r\n poll: MediaSize,\r\n round: MediaSize\r\n};\r\n\r\nexport enum ScreenSize {\r\n mobile,\r\n medium,\r\n large\r\n}\r\n\r\nconst MOBILE_SIZE = 600;\r\nconst MEDIUM_SIZE = 1275;\r\nconst LARGE_SIZE = 1680;\r\n\r\nclass MediaSizes extends EventListenerBase<{\r\n changeScreen: (from: ScreenSize, to: ScreenSize) => void,\r\n resize: () => void\r\n}> {\r\n private screenSizes: {key: ScreenSize, value: number}[] = [\r\n {key: ScreenSize.mobile, value: MOBILE_SIZE},\r\n {key: ScreenSize.medium, value: MEDIUM_SIZE},\r\n {key: ScreenSize.large, value: LARGE_SIZE}\r\n ];\r\n\r\n private sizes: {[k in 'desktop' | 'handhelds']: MediaTypeSizes} = {\r\n handhelds: {\r\n regular: makeMediaSize(270, 270),\r\n webpage: makeMediaSize(270, 200),\r\n album: makeMediaSize(270, 0),\r\n esgSticker: makeMediaSize(68, 68),\r\n animatedSticker: makeMediaSize(180, 180),\r\n staticSticker: makeMediaSize(180, 180),\r\n emojiSticker: makeMediaSize(112, 112),\r\n poll: makeMediaSize(240, 0),\r\n round: makeMediaSize(200, 200)\r\n },\r\n desktop: {\r\n regular: makeMediaSize(420, 340),\r\n webpage: makeMediaSize(420, 340),\r\n album: makeMediaSize(420, 0),\r\n esgSticker: makeMediaSize(80, 80),\r\n animatedSticker: makeMediaSize(200, 200),\r\n staticSticker: makeMediaSize(200, 200),\r\n emojiSticker: makeMediaSize(112, 112),\r\n poll: makeMediaSize(330, 0),\r\n round: makeMediaSize(280, 280)\r\n }\r\n };\r\n\r\n public isMobile = false;\r\n public active: MediaTypeSizes;\r\n public activeScreen: ScreenSize;\r\n private rAF: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n window.addEventListener('resize', () => {\r\n if(this.rAF) window.cancelAnimationFrame(this.rAF);\r\n this.rAF = window.requestAnimationFrame(() => {\r\n this.handleResize();\r\n this.rAF = 0;\r\n });\r\n });\r\n this.handleResize();\r\n }\r\n\r\n private handleResize = () => {\r\n const innerWidth = window.innerWidth;\r\n //this.isMobile = innerWidth <= 720;\r\n \r\n let activeScreen = this.screenSizes[0].key;\r\n for(let i = this.screenSizes.length - 1; i >= 0; --i) {\r\n if(this.screenSizes[i].value < innerWidth) {\r\n activeScreen = (this.screenSizes[i + 1] || this.screenSizes[i]).key;\r\n break;\r\n }\r\n }\r\n\r\n const wasScreen = this.activeScreen;\r\n this.activeScreen = activeScreen;\r\n this.isMobile = this.activeScreen === ScreenSize.mobile;\r\n this.active = this.isMobile ? this.sizes.handhelds : this.sizes.desktop;\r\n\r\n //console.time('esg');\r\n //const computedStyle = window.getComputedStyle(document.documentElement);\r\n //this.active.esgSticker.width = parseFloat(computedStyle.getPropertyValue('--esg-sticker-size'));\r\n //console.timeEnd('esg');\r\n\r\n if(wasScreen !== activeScreen) {\r\n //console.log('changeScreen', this.activeScreen, activeScreen);\r\n\r\n if(wasScreen !== undefined) {\r\n this.dispatchEvent('changeScreen', wasScreen, activeScreen);\r\n }\r\n }\r\n\r\n if(wasScreen !== undefined) {\r\n this.dispatchEvent('resize');\r\n }\r\n\r\n /* if(this.isMobile) {\r\n for(let i in this.active) {\r\n // @ts-ignore\r\n let size = this.active[i];\r\n size.width = innerWidth \r\n }\r\n } */\r\n };\r\n}\r\n\r\nconst mediaSizes = new MediaSizes();\r\nMOUNT_CLASS_TO.mediaSizes = mediaSizes;\r\nexport default mediaSizes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport I18n, { i18n } from \"../lib/langPack\";\r\nimport { capitalizeFirstLetter } from \"./string\";\r\n\r\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n\r\nexport const ONE_DAY = 86400;\r\n\r\n// https://stackoverflow.com/a/6117889\r\nexport const getWeekNumber = (date: Date) => {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNum = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7);\r\n};\r\n\r\nexport function formatDateAccordingToTodayNew(time: Date) {\r\n const today = new Date();\r\n const now = today.getTime() / 1000 | 0;\r\n const timestamp = time.getTime() / 1000 | 0;\r\n\r\n const options: Intl.DateTimeFormatOptions = {};\r\n if((now - timestamp) < ONE_DAY && today.getDate() === time.getDate()) { // if the same day\r\n options.hour = options.minute = '2-digit';\r\n } else if(today.getFullYear() !== time.getFullYear()) { // different year\r\n options.year = options.day = 'numeric';\r\n options.month = '2-digit';\r\n } else if((now - timestamp) < (ONE_DAY * 7) && getWeekNumber(today) === getWeekNumber(time)) { // current week\r\n options.weekday = 'short';\r\n } else { // same year\r\n options.month = 'short';\r\n options.day = 'numeric';\r\n }\r\n\r\n return new I18n.IntlDateElement({\r\n date: time,\r\n options\r\n }).element;\r\n}\r\n\r\nexport function formatFullSentTime(timestamp: number) {\r\n const date = new Date();\r\n const time = new Date(timestamp * 1000);\r\n const now = date.getTime() / 1000;\r\n\r\n const timeEl = formatTime(time);\r\n\r\n let dateEl: Node | string;\r\n if((now - timestamp) < ONE_DAY && date.getDate() === time.getDate()) { // if the same day\r\n dateEl = i18n('Date.Today');\r\n } else if((now - timestamp) < (ONE_DAY * 2) && (date.getDate() - 1) === time.getDate()) { // yesterday\r\n dateEl = capitalizeFirstLetter(I18n.format('Yesterday', true));\r\n } else if(date.getFullYear() !== time.getFullYear()) { // different year\r\n dateEl = new I18n.IntlDateElement({\r\n date: time,\r\n options: {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric'\r\n }\r\n }).element;\r\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate() + ', ' + time.getFullYear();\r\n } else {\r\n dateEl = new I18n.IntlDateElement({\r\n date: time,\r\n options: {\r\n month: 'short',\r\n day: 'numeric'\r\n }\r\n }).element;\r\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate();\r\n }\r\n\r\n const fragment = document.createDocumentFragment();\r\n fragment.append(dateEl, ' ', i18n('ScheduleController.at'), ' ', timeEl);\r\n return fragment;\r\n}\r\n\r\nexport function formatTime(date: Date) {\r\n return new I18n.IntlDateElement({\r\n date,\r\n options: {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n }\r\n }).element;\r\n}\r\n\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.formatDateAccordingToTodayNew = formatDateAccordingToTodayNew);\r\n\r\nexport const getFullDate = (date: Date, options: Partial<{\r\n noTime: true, \r\n noSeconds: true,\r\n monthAsNumber: true,\r\n leadingZero: true\r\n}> = {}) => {\r\n const joiner = options.monthAsNumber ? '.' : ' ';\r\n const time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + (options.noSeconds ? '' : ':' + ('0' + date.getSeconds()).slice(-2));\r\n\r\n return (options.leadingZero ? ('0' + date.getDate()).slice(-2) : date.getDate()) + \r\n joiner + (options.monthAsNumber ? ('0' + (date.getMonth() + 1)).slice(-2) : months[date.getMonth()]) + \r\n joiner + date.getFullYear() + \r\n (options.noTime ? '' : ', ' + time);\r\n};\r\n\r\nexport function tsNow(seconds?: true) {\r\n const t = Date.now();\r\n return seconds ? t / 1000 | 0 : t;\r\n}\r\n\r\n// https://github.com/DrKLO/Telegram/blob/d52b2c921abd3c1e8d6368858313ad0cb0468c07/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java\r\nconst minYear = 2013;\r\nconst yearPattern = new RegExp(\"20[0-9]{1,2}\");\r\nconst monthYearOrDayPattern = new RegExp(\"(\\\\w{3,}) ([0-9]{0,4})\", 'i');\r\nconst yearOrDayAndMonthPattern = new RegExp(\"([0-9]{0,4}) (\\\\w{2,})\", 'i');\r\nconst shortDate = new RegExp(\"^([0-9]{1,4})(\\\\.| |/|\\\\-)([0-9]{1,4})$\", 'i');\r\nconst longDate = new RegExp(\"^([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,4})$\", 'i');\r\nconst numberOfDaysEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\nexport type DateData = {\r\n title: string,\r\n minDate: number,\r\n maxDate: number,\r\n};\r\nexport function fillTipDates(query: string, dates: DateData[]) {\r\n const q = query.trim().toLowerCase();\r\n\r\n if(q.length < 3) {\r\n return;\r\n }\r\n\r\n if(\"today\".indexOf(q) === 0) {\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: 'Today',\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n if(\"yesterday\".indexOf(q) === 0) {\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime() - 86400000;\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 86400001;\r\n dates.push({\r\n title: 'Yesterday',\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n const dayOfWeek = getDayOfWeek(q);\r\n if(dayOfWeek >= 0) {\r\n const date = new Date();\r\n const now = date.getTime();\r\n const currentDay = date.getDay();\r\n const distance = dayOfWeek - currentDay;\r\n date.setDate(date.getDate() + distance);\r\n if(date.getTime() > now) {\r\n date.setTime(date.getTime() - 604800000);\r\n }\r\n const year = date.getFullYear()\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: formatWeekLong(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n let matches: any[];\r\n if((matches = shortDate.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[3];\r\n const k = parseInt(g1);\r\n const k1 = parseInt(g2);\r\n if(k > 0 && k <= 31) {\r\n if(k1 >= minYear && k <= 12) {\r\n const selectedYear = k1;\r\n const month = k - 1;\r\n createForMonthYear(dates, month, selectedYear);\r\n return;\r\n } else if (k1 <= 12) {\r\n const day = k - 1;\r\n const month = k1 - 1;\r\n createForDayMonth(dates, day, month);\r\n }\r\n } else if (k >= minYear && k1 <= 12) {\r\n const selectedYear = k;\r\n const month = k1 - 1;\r\n createForMonthYear(dates, month, selectedYear);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = longDate.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[3];\r\n const g3 = matches[5];\r\n if(!matches[2] === matches[4]) {\r\n return;\r\n }\r\n\r\n const day = parseInt(g1);\r\n const month = parseInt(g2) - 1;\r\n let year = parseInt(g3);\r\n if(year >= 10 && year <= 99) {\r\n year += 2000;\r\n }\r\n\r\n const currentYear = new Date().getFullYear();\r\n if(validDateForMonth(day - 1, month) && year >= minYear && year <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n \r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: formatterYearMax(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = yearPattern.exec(q)) !== null) {\r\n let selectedYear = +q;\r\n const currentYear = new Date().getFullYear();\r\n if(selectedYear < minYear) {\r\n selectedYear = minYear;\r\n for(let i = currentYear; i >= selectedYear; i--) {\r\n const date = new Date();\r\n date.setFullYear(i, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(i + 1, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: '' + i,\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n } else if(selectedYear <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(selectedYear, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(selectedYear + 1, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: '' + selectedYear,\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = monthYearOrDayPattern.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[2];\r\n const month = getMonth(g1);\r\n if(month >= 0) {\r\n const k = +g2;\r\n if(k > 0 && k <= 31) {\r\n const day = k - 1;\r\n createForDayMonth(dates, day, month);\r\n return;\r\n } else if(k >= minYear) {\r\n const selectedYear = k;\r\n createForMonthYear(dates, month, selectedYear);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if((matches = yearOrDayAndMonthPattern.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[2];\r\n const month = getMonth(g2);\r\n if(month >= 0) {\r\n const k = +g1;\r\n if(k > 0 && k <= 31) {\r\n const day = k - 1;\r\n createForDayMonth(dates, day, month);\r\n return;\r\n } else if (k >= minYear) {\r\n const selectedYear = k;\r\n createForMonthYear(dates, month, selectedYear);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction createForMonthYear(dates: DateData[], month: number, selectedYear: number) {\r\n const currentYear = new Date().getFullYear();\r\n const today = Date.now();\r\n if(selectedYear >= minYear && selectedYear <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(selectedYear, month, 1);\r\n date.setHours(0, 0, 0);\r\n const minDate = date.getTime();\r\n if(minDate > today) {\r\n return;\r\n }\r\n date.setMonth(date.getMonth() + 1);\r\n const maxDate = date.getTime() - 1;\r\n\r\n dates.push({\r\n title: formatterMonthYear(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n}\r\n\r\nfunction createForDayMonth(dates: DateData[], day: number, month: number) {\r\n if(validDateForMonth(day, month)) {\r\n const currentYear = new Date().getFullYear();\r\n const today = Date.now();\r\n \r\n for(let i = currentYear; i >= minYear; i--) {\r\n if(month === 1 && day === 28 && !isLeapYear(i)) {\r\n continue;\r\n }\r\n\r\n const date = new Date();\r\n date.setFullYear(i, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n \r\n const minDate = date.getTime();\r\n if(minDate > today) {\r\n continue;\r\n }\r\n\r\n date.setFullYear(i, month, day + 2);\r\n date.setHours(0, 0, 0);\r\n const maxDate = date.getTime() - 1;\r\n if(i === currentYear) {\r\n dates.push({\r\n title: formatterDayMonth(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n } else {\r\n dates.push({\r\n title: formatterYearMax(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction formatterMonthYear(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getFullYear();\r\n}\r\n\r\nfunction formatterDayMonth(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getDate();\r\n}\r\n\r\nfunction formatterYearMax(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\r\n}\r\n\r\nfunction formatWeekLong(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return days[date.getDay()];\r\n}\r\n\r\nfunction validDateForMonth(day: number, month: number) {\r\n if(month >= 0 && month < 12) {\r\n if(day >= 0 && day < numberOfDaysEachMonth[month]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isLeapYear(year: number) {\r\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\r\n}\r\n\r\nfunction getMonth(q: string) {\r\n /* String[] months = new String[]{\r\n LocaleController.getString(\"January\", R.string.January).toLowerCase(),\r\n LocaleController.getString(\"February\", R.string.February).toLowerCase(),\r\n LocaleController.getString(\"March\", R.string.March).toLowerCase(),\r\n LocaleController.getString(\"April\", R.string.April).toLowerCase(),\r\n LocaleController.getString(\"May\", R.string.May).toLowerCase(),\r\n LocaleController.getString(\"June\", R.string.June).toLowerCase(),\r\n LocaleController.getString(\"July\", R.string.July).toLowerCase(),\r\n LocaleController.getString(\"August\", R.string.August).toLowerCase(),\r\n LocaleController.getString(\"September\", R.string.September).toLowerCase(),\r\n LocaleController.getString(\"October\", R.string.October).toLowerCase(),\r\n LocaleController.getString(\"November\", R.string.November).toLowerCase(),\r\n LocaleController.getString(\"December\", R.string.December).toLowerCase()\r\n }; */\r\n\r\n /* String[] monthsEng = new String[12];\r\n Calendar c = Calendar.getInstance();\r\n for (int i = 1; i <= 12; i++) {\r\n c.set(0, 0, 0, 0, 0, 0);\r\n c.set(Calendar.MONTH, i);\r\n monthsEng[i - 1] = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH).toLowerCase();\r\n } */\r\n\r\n q = q.toLowerCase();\r\n for(let i = 0; i < 12; i++) {\r\n const month = months[i].toLowerCase();\r\n if(month.indexOf(q) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction getDayOfWeek(q: string) {\r\n const c = new Date();\r\n if(q.length <= 3) {\r\n return -1;\r\n }\r\n \r\n for(let i = 0; i < 7; i++) {\r\n c.setDate(c.getDate() + 1);\r\n \r\n if(formatWeekLong(c.getTime()).toLowerCase().indexOf(q) === 0) {\r\n return c.getDay();\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nMOUNT_CLASS_TO.fillTipDates = fillTipDates;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* export function stringMiddleOverflow(str: string, maxLength: number) {\r\n return str.length > maxLength ? str.slice(0, maxLength / 2 | 0) + '...' + str.slice(-Math.round(maxLength / 2)) : str; \r\n} */\r\n\r\nexport function limitSymbols(str: string, length: number, limitFrom = length + 10) {\r\n str = str.trim();\r\n if(str.length > limitFrom) {\r\n str = str.slice(0, length)/* .replace(/\\s*$/, '') */ + '...';\r\n }\r\n\r\n return str;\r\n}\r\n\r\n// credits to https://github.com/sindresorhus/escape-string-regexp/blob/master/index.js\r\nexport function escapeRegExp(str: string) {\r\n return str\r\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\r\n .replace(/-/g, '\\\\x2d');\r\n}\r\n\r\nexport function encodeEntities(value: string) {\r\n return value.replace(/&/g, '&').replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, (value) => {\r\n var hi = value.charCodeAt(0);\r\n var low = value.charCodeAt(1);\r\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\r\n }).replace(/([^\\#-~| |!])/g, (value) => { // non-alphanumeric\r\n return '&#' + value.charCodeAt(0) + ';';\r\n }).replace(//g, '>');\r\n}\r\n\r\nexport function splitStringByLength(str: string, maxLength: number) {\r\n if(str.length < maxLength) return [str];\r\n let length = 0, lastSliceStartIndex = 0, arrayIndex = 0;\r\n const delimiter = ' ';//'\\n';\r\n const out: string[] = [];\r\n\r\n const cut = (end?: number) => {\r\n let part = str.slice(lastSliceStartIndex, end);\r\n const _arrayIndex = arrayIndex++;\r\n if(part.length > maxLength) {\r\n let overflowPart = part.slice(maxLength);\r\n const splitted = splitStringByLength(overflowPart, maxLength);\r\n splitted.forEach(part => {\r\n out[arrayIndex++] = part;\r\n });\r\n\r\n part = part.slice(0, maxLength);\r\n }\r\n\r\n lastSliceStartIndex = end;\r\n length = 0;\r\n out[_arrayIndex] = (out[_arrayIndex] || '') + part;\r\n };\r\n\r\n let lastIndex = 0;\r\n do {\r\n let index = str.indexOf(delimiter, lastIndex);\r\n if(index === -1) {\r\n if(lastIndex !== (str.length - 1)) {\r\n cut();\r\n }\r\n\r\n break;\r\n }\r\n\r\n index += delimiter.length;\r\n\r\n const partLength = index - lastIndex;\r\n if((length + partLength) > maxLength) {\r\n cut(length);\r\n }\r\n \r\n lastIndex = index;\r\n length += partLength;\r\n } while(true);\r\n\r\n return out;\r\n}\r\n\r\n// https://stackoverflow.com/a/14824756\r\n/* export const checkRTL = (s: string) => { \r\n const ltrChars = 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF'+'\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF',\r\n rtlChars = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC',\r\n rtlDirCheck = new RegExp('^[^'+ltrChars+']*['+rtlChars+']');\r\n\r\n return rtlDirCheck.test(s);\r\n}; */\r\n\r\n//(window as any).checkRTL = checkRTL;\r\n\r\nexport function convertInputKeyToKey(inputKey: string) {\r\n const str = inputKey.replace('input', '');\r\n return (str[0].toLowerCase() + str.slice(1)) as T;\r\n}\r\n\r\nexport function convertKeyToInputKey(key: string) {\r\n key = key[0].toUpperCase() + key.slice(1);\r\n key = 'input' + key;\r\n return key;\r\n}\r\n\r\nexport function capitalizeFirstLetter(string: string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n","export const pause = (ms: number) => new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n});\r\n","// https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js\r\n\r\nexport function encodeEmoji(emojiText: string) {\r\n const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\r\n return codepoints;\r\n}\r\n\r\nconst vs16RegExp = /\\uFE0F/g;\r\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\r\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\r\n\r\nconst removeVS16s = (rawEmoji: string) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);\r\n\r\nexport function toCodePoints(unicodeSurrogates: string): Array {\r\n const points = [];\r\n let char = 0;\r\n let previous = 0;\r\n let i = 0;\r\n while(i < unicodeSurrogates.length) {\r\n char = unicodeSurrogates.charCodeAt(i++);\r\n if(previous) {\r\n points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));\r\n previous = 0;\r\n } else if (char > 0xd800 && char <= 0xdbff) {\r\n previous = char;\r\n } else {\r\n points.push(char.toString(16));\r\n }\r\n }\r\n\r\n if(points.length && points[0].length === 2) {\r\n points[0] = '00' + points[0];\r\n }\r\n\r\n return points;\r\n}\r\n\r\nexport function getEmojiToneIndex(input: string) {\r\n let match = input.match(/[\\uDFFB-\\uDFFF]/);\r\n return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0;\r\n}\r\n\r\nexport function getCountryEmoji(iso2: string) {\r\n return String.fromCharCode(55356, 56741 + iso2.charCodeAt(0), 55356, 56741 + iso2.charCodeAt(1));\r\n}\r\n\r\nexport function emojiFromCodePoints(codePoints: string) {\r\n return codePoints.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\r\n}"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/environment/webpSupport.ts","webpack:///./src/helpers/calcImageInBox.ts","webpack:///./src/lib/appManagers/appRuntimeManager.ts","webpack:///./src/lib/config.ts","webpack:///./src/lib/mtproto/singleInstance.ts","webpack:///./src/lib/webp/webp.worker.ts","webpack:///./src/lib/webp/webpWorkerController.ts","webpack:///./src/lib/langPack.ts","webpack:///./src/lib/mtproto/webPushApiManager.ts","webpack:///./src/lib/mtproto/telegramMeWebManager.ts","webpack:///./src/vendor/emoji/regex.ts","webpack:///./src/lib/richtextprocessor.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/mtprotoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/helpers/mediaSizes.ts","webpack:///./src/helpers/date.ts","webpack:///./src/helpers/string.ts","webpack:///./src/helpers/schedulers/pause.ts","webpack:///./src/vendor/emoji/index.ts"],"names":["IS_WEBP_SUPPORTED","document","createElement","toDataURL","startsWith","calcImageInBox","imageW","imageH","boxW","boxH","noZoom","boxedImageW","boxedImageH","appRuntimeManager","location","reload","e","window","close","focus","Config","Emoji","LatinizeMap","TLD","MediaSizes","singleInstance","log","clearInstance","this","masterInstance","deactivated","warn","delete","deactivateInstance","deactivateTimeout","idle","dispatchEvent","checkInstance","isIDLE","time","Date","now","newInstance","id","instanceID","get","then","curInstance","set","xt_instance","startAll","initial","clearTimeout","stopAll","setTimeout","started","reset","addEventListener","setInterval","documentElement","Worker_fn","Worker","webpWorkerController","convertPromises","worker","payload","data","fileName","indexOf","promise","bytes","resolve","reject","postMessage","init","hasOwnProperty","convertPromise","type","langPack","I18n","pluralRules","cacheLangPackPromise","loadLocalLangPack","defaultCode","langPackCode","lastRequestedLangCode","Promise","all","lang","langSign","countries","strings","formatLocalStrings","default","saveLangPack","_","from_version","lang_code","version","local","loadLangPack","langCode","requestedServerLanguage","invokeApiCacheable","lang_pack","hash","polyfillPromise","pushTo","i","v","push","key","value","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","forEach","l","concat","string","appVersion","langPackVersion","applyLangPack","Intl","PluralRules","err","console","error","split","clear","countriesList","length","country","name","langPackKey","default_name","lastAppliedLangCode","Array","from","querySelectorAll","element","instance","weakMap","update","superFormatter","input","args","indexHolder","out","lastIndex","replace","match","p1","p2","p3","p4","offset","slice","b","append","a","idx","lastIndexOf","text","url","wrappedUrl","wrapUrl","href","onclick","setAttribute","target","format","plain","str","select","regExp","Map","getCacheLangPack","finally","undefined","getStrings","invokeApi","keys","_Intl","Object","assign","WeakMap","IntlElementBase","options","property","classList","add","IntlElement","textContent","formatted","dataset","IntlDateElement","dateTimeFormat","DateTimeFormat","date","i18n","i18n_","_i18n","joinElementsWith","elements","joiner","arr","isLast","join","useLast","WebPushApiManager","isAvailable","isPushEnabled","localNotificationsAvailable","settings","isFirefox","navigator","userAgent","toLowerCase","userVisibleOnly","subscribe","serviceWorker","ready","reg","pushManager","subscription","pushSubscriptionNotify","catch","Notification","permission","isAliveNotify","baseUrl","ACTIONS_LANG_MAP","push_action_mute1d","push_action_settings","push_message_nopreview","action","task","localNotifications","postSWMessage","isAliveTO","getSubscription","setUpServiceWorkerChannel","unsubscribe","successful","newSettings","addServiceWorkerTaskListener","event","subscriptionObj","toJSON","endpoint","p256dh","auth","tokenType","tokenValue","JSON","stringify","webPushApiManager","TelegramMeWebManager","disabled","test","domains","hostname","canRedirect","curValue","ts","tgme_sync","path","encodeURIComponent","suffix","promises","map","script","onload","onerror","remove","src","body","appendChild","telegramMeWebManager","EmojiHelper","emojiMap","code","shortcuts","emojis","emojiData","alphaCharsRegExp","urlAlphanumericRegExpPart","urlRegExp","urlProtocolRegExpPart","urlAnyProtocolRegExp","RegExp","fullRegExp","emailRegExp","markdownRegExp","siteHashtags","Telegram","Twitter","Instagram","markdownEntities","passConflictingEntities","Set","RichTextProcessor","getEmojiSpritesheetCoords","emojiCode","unified","parseEntities","raw","entities","matchIndex","rawOffset","index","protocol","tld","substr","balanced","checkBrackets","emojiCoords","unicode","unsafe","findConflictingEntity","currentEntities","newEntity","find","currentEntity","has","mergeEntities","newEntities","filtered","filter","sort","entity","nextEntity","combineSameEntities","nextEntityIdx","findIndex","_i","splice","wrapRichText","lol","passEntities","contextSite","contextExternal","insertPart","startPart","endPart","part","unshift","noTextFormat","wrappingDraft","language","noLinks","bot","atPos","command","fromBot","entityText","masked","wrapped","currentContext","electronHelpers","contextUrl","hashtag","user_id","username","usedLength","urlLength","urlOpenBrackets","urlCloseBrackets","charAt","wrapEmojiText","isDraft","tgMeMatch","telescoPeMatch","tgMatch","matchUrlProtocol","getEmojiEntityFromEmoji","emoji","parseMarkdown","noTrim","pushedEntity","pushEntity","newTextParts","isSOH","newText","trim","diff","Math","max","fixEmoji","end","wrapDraftText","messageEntityTextUrl","messageEntityMentionName","replaceUrlEncodings","urlWithEncoded","decodeURIComponent","wrapPlainText","emojiTitle","matchUrl","matchEmail","getAbbreviation","onlyFirst","splitted","first","isUsernameValid","wrapSingleEmoji","dcId","logSuffix","super","debug","handleOpen","handleError","handleClose","removeListeners","handleMessage","byteLength","send","ws","logTypes","Error","Log","Debug","logger","connect","removeEventListener","WebSocket","binaryType","apiManagerProxy","method","performTaskWorker","afterMessageIdTemp","taskId","awaiting","pending","updatesProcessor","hashes","apiPromisesSingle","apiPromisesCacheable","isSWRegistered","sockets","taskListeners","taskListenersSW","postMessagesWaiting","onWorkerMessage","callback","progress","rootScope","finalizeTask","result","start","registerServiceWorker","addTaskListener","toggleStorage","sessionStorage","race","setAuthorized","pause","forceUnsubscribe","cacheName","caches","socketTask","socket","onOpen","onClose","onMessage","buffer","storageTask","res","performTaskWorkerVoid","forceReconnectTimeout","registerWorker","getConfig","register","scope","registration","installing","waiting","active","onServiceWorkerFail","releasePending","controller","responseTask","uploadFile","originalPayload","message","bind","isWebpSupported","onWorkerFirstMessage","once","deferred","taskName","params","o","prepareTempMessageId","messageId","queryJSON","cached","includes","q","cache","item","override","fulfilled","timeout","cacheSeconds","timestamp","verify","queueId","userAuth","dcID","dc_id","enabled","getConfigPromise","config","ScreenSize","MediaSize","width","height","boxSize","fitted","aspect","makeMediaSize","screenSizes","mobile","medium","large","sizes","handhelds","regular","webpage","album","esgSticker","animatedSticker","staticSticker","emojiSticker","poll","round","desktop","isMobile","handleResize","innerWidth","activeScreen","wasScreen","rAF","cancelAnimationFrame","requestAnimationFrame","mediaSizes","months","days","getWeekNumber","d","UTC","getFullYear","getMonth","getDate","dayNum","getUTCDay","setUTCDate","getUTCDate","yearStart","getUTCFullYear","ceil","getTime","formatDateAccordingToTodayNew","today","hour","minute","year","day","month","weekday","formatFullSentTime","timeEl","formatTime","dateEl","fragment","createDocumentFragment","getFullDate","monthAsNumber","getHours","getMinutes","noSeconds","getSeconds","leadingZero","noTime","tsNow","seconds","t","yearPattern","monthYearOrDayPattern","yearOrDayAndMonthPattern","shortDate","longDate","numberOfDaysEachMonth","fillTipDates","query","dates","setFullYear","setHours","minDate","maxDate","title","dayOfWeek","c","setDate","formatWeekLong","getDay","getDayOfWeek","distance","setTime","matches","exec","g1","g2","k","createForDayMonth","createForMonthYear","selectedYear","currentYear","g3","parseInt","validDateForMonth","formatterYearMax","k1","setMonth","formatterMonthYear","formatterDayMonth","limitSymbols","limitFrom","escapeRegExp","encodeEntities","charCodeAt","splitStringByLength","maxLength","lastSliceStartIndex","arrayIndex","cut","_arrayIndex","partLength","convertInputKeyToKey","inputKey","convertKeyToInputKey","toUpperCase","capitalizeFirstLetter","ms","encodeEmoji","emojiText","toCodePoints","removeVS16s","vs16RegExp","zeroWidthJoiner","String","fromCharCode","rawEmoji","unicodeSurrogates","points","char","previous","toString","getEmojiToneIndex","getCountryEmoji","iso2","emojiFromCodePoints","codePoints","reduce","prev","curr","fromCodePoint"],"mappings":"sFAAA,MAAMA,EAAoBC,SAASC,cAAc,UAAUC,UAAU,cAAcC,WAAW,mBAE/E,O,iCCFf,8CAce,SAASC,EAAeC,EAAgBC,EAAgBC,EAAcC,EAAcC,GAAS,GAC1G,GAAGJ,EAASE,GAAQD,EAASE,GAAQC,EACnC,OAAO,YAAcJ,EAAQC,GAG/B,IAAII,EAAcH,EACdI,EAAcH,EAsBlB,OApBIH,EAASC,EAAWC,EAAOC,EAC7BG,EAAeL,EAASC,EAAOF,EAAU,GAEzCK,EAAeL,EAASG,EAAOF,EAAU,EACtCI,EAAcH,IACfI,EAAeA,EAAcJ,EAAOG,EAAe,EACnDA,EAAcH,IASfE,GAAUC,GAAeL,GAAUM,GAAeL,IACnDI,EAAcL,EACdM,EAAcL,GAGT,YAAcI,EAAaC,GA1CpC,MA6CA,EAAeP,eAAiBA,G,iCCMhC,MAAMQ,EAAoB,IAxCnB,MACE,SACL,IACEC,SAASC,SACT,MAAMC,KAOH,QACL,IACEC,OAAOC,QACP,MAAMF,KAMH,QAeHC,OAAOE,UAME,O,iCCpDf,YAeO,MAYDC,EAAS,CACbC,MAb8C,CAAC,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,KAAK,KAAO,IAAI,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,IAAI,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,KAAK,KAAO,KAAK,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,KAAO,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM,OAAO,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,cAAc,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,MAAM,kBAAkB,MAAM,QAAQ,MAAM,kBAAkB,MAAM,4CAA4C,MAAM,4CAA4C,MAAM,4CAA4C,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,6BAA6B,KAAK,wCAAwC,KAAK,QAAQ,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,8BAA8B,KAAK,yCAAyC,KAAK,yCAAyC,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,6BAA6B,KAAK,6BAA6B,KAAK,wCAAwC,KAAK,wCAAwC,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,IAAI,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,8BAA8B,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,mBAAmB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,kBAAkB,KAAK,kBAAkB,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,IAAI,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,iBAAiB,KAAK,iBAAiB,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,KAAK,OAAO,MAAM,OAAO,MAAM,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,0CAA0C,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GActs7DC,YAJgD,CAAC,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAAK,MAAM,IAAK,MAAM,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,KAAK,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,MAAO,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,IAAK,MAAO,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IA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","file":"1.8ebe82cad4450b8187c1.chunk.js","sourcesContent":["const IS_WEBP_SUPPORTED = document.createElement('canvas').toDataURL('image/webp').startsWith('data:image/webp');\n\nexport default IS_WEBP_SUPPORTED;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { makeMediaSize } from \"./mediaSizes\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\nexport default function calcImageInBox(imageW: number, imageH: number, boxW: number, boxH: number, noZoom = true) {\r\n if(imageW < boxW && imageH < boxH && noZoom) {\r\n return makeMediaSize(imageW, imageH);\r\n }\r\n\r\n let boxedImageW = boxW;\r\n let boxedImageH = boxH;\r\n\r\n if((imageW / imageH) > (boxW / boxH)) {\r\n boxedImageH = (imageH * boxW / imageW) | 0;\r\n } else {\r\n boxedImageW = (imageW * boxH / imageH) | 0;\r\n if(boxedImageW > boxW) {\r\n boxedImageH = (boxedImageH * boxW / boxedImageW) | 0;\r\n boxedImageW = boxW;\r\n }\r\n }\r\n\r\n // if (Config.Navigator.retina) {\r\n // imageW = Math.floor(imageW / 2)\r\n // imageH = Math.floor(imageH / 2)\r\n // }\r\n\r\n if(noZoom && boxedImageW >= imageW && boxedImageH >= imageH) {\r\n boxedImageW = imageW;\r\n boxedImageH = imageH;\r\n }\r\n\r\n return makeMediaSize(boxedImageW, boxedImageH);\r\n}\r\n\r\nMOUNT_CLASS_TO.calcImageInBox = calcImageInBox;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport class AppRuntimeManager {\r\n public reload() {\r\n try {\r\n location.reload();\r\n } catch(e) {};\r\n\r\n // if(window.chrome && chrome.runtime && chrome.runtime.reload) {\r\n // chrome.runtime.reload();\r\n // }\r\n }\r\n\r\n public close() {\r\n try {\r\n window.close();\r\n } catch(e) {}\r\n }\r\n\r\n /**\r\n * Better to call from event\r\n */\r\n public focus() {\r\n // // @ts-ignore\r\n // if(window.navigator.mozApps && document.hidden) {\r\n // // Get app instance and launch it to bring app to foreground\r\n // // @ts-ignore\r\n // window.navigator.mozApps.getSelf().onsuccess = function() {\r\n // this.result.launch();\r\n // };\r\n // } else {\r\n // // @ts-ignore\r\n // if(window.chrome && chrome.app && chrome.app.window) {\r\n // // @ts-ignore\r\n // chrome.app.window.current().focus();\r\n // }\r\n\r\n window.focus();\r\n // }\r\n }\r\n}\r\n\r\nconst appRuntimeManager = new AppRuntimeManager();\r\nexport default appRuntimeManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport mediaSizes from '../helpers/mediaSizes';\r\n\r\n// !WARNING, ТУТ СЛОЖНО! по-хорошему, надо бы это переделать без fe0f, но они здесь необходимы чтобы отрендерить панель, и ниже дописаны 3 элемента которые не воспроизводятся без fe0f\r\nexport const Emoji: {[emoji: string]: number} = {\"2049\":62748,\"2122\":62776,\"2139\":62801,\"2194\":62678,\"2195\":62677,\"2196\":62676,\"2197\":62670,\"2198\":62672,\"2199\":62674,\"2328\":61155,\"2600\":4954,\"2601\":4962,\"2602\":4977,\"2603\":4982,\"2604\":4984,\"2611\":62764,\"2614\":4978,\"2615\":3750,\"2618\":2639,\"2620\":196,\"2622\":62667,\"2623\":62668,\"2626\":62697,\"2638\":62694,\"2639\":168,\"2648\":62702,\"2649\":62703,\"2650\":62710,\"2651\":62711,\"2652\":62712,\"2653\":62713,\"2660\":51057,\"2663\":51060,\"2665\":51058,\"2666\":51059,\"2668\":4832,\"2692\":61258,\"2693\":4887,\"2694\":61261,\"2696\":61272,\"2697\":61280,\"2699\":61270,\"2702\":61245,\"2705\":62763,\"2708\":4895,\"2709\":61206,\"2712\":61220,\"2714\":62765,\"2716\":62742,\"2721\":62693,\"2728\":5993,\"2733\":62771,\"2734\":62772,\"2744\":4981,\"2747\":62773,\"2753\":62749,\"2754\":62750,\"2755\":62751,\"2757\":62752,\"2763\":1127,\"2764\":1129,\"2795\":62743,\"2796\":62744,\"2797\":62745,\"2934\":62681,\"2935\":62682,\"3030\":62753,\"3297\":62825,\"3299\":62826,\"0023-20e3\":62777,\"002a-20e3\":62778,\"0030-20e3\":62779,\"0031-20e3\":62780,\"0032-20e3\":62781,\"0033-20e3\":62782,\"0034-20e3\":62783,\"0035-20e3\":62784,\"0036-20e3\":62785,\"0037-20e3\":62786,\"0038-20e3\":62787,\"0039-20e3\":62788,\"00a9\":62774,\"00ae\":62775,\"1f004\":51063,\"1f0cf\":51062,\"1f170\":62795,\"1f171\":62797,\"1f17e\":62806,\"1f17f\":62808,\"1f18e\":62796,\"1f191\":62798,\"1f192\":62799,\"1f193\":62800,\"1f194\":62802,\"1f195\":62804,\"1f196\":62805,\"1f197\":62807,\"1f198\":62809,\"1f199\":62810,\"1f19a\":62811,\"1f1e6-1f1e8\":71550,\"1f1e6-1f1e9\":71551,\"1f1e6-1f1ea\":71552,\"1f1e6-1f1eb\":71553,\"1f1e6-1f1ec\":71554,\"1f1e6-1f1ee\":71555,\"1f1e6-1f1f1\":71556,\"1f1e6-1f1f2\":71557,\"1f1e6-1f1f4\":71558,\"1f1e6-1f1f6\":71559,\"1f1e6-1f1f7\":71560,\"1f1e6-1f1f8\":71561,\"1f1e6-1f1f9\":71562,\"1f1e6-1f1fa\":71563,\"1f1e6-1f1fc\":71564,\"1f1e6-1f1fd\":71565,\"1f1e6-1f1ff\":71566,\"1f1e7-1f1e6\":71567,\"1f1e7-1f1e7\":71568,\"1f1e7-1f1e9\":71569,\"1f1e7-1f1ea\":71570,\"1f1e7-1f1eb\":71571,\"1f1e7-1f1ec\":71572,\"1f1e7-1f1ed\":71573,\"1f1e7-1f1ee\":71574,\"1f1e7-1f1ef\":71575,\"1f1e7-1f1f1\":71576,\"1f1e7-1f1f2\":71577,\"1f1e7-1f1f3\":71578,\"1f1e7-1f1f4\":71579,\"1f1e7-1f1f6\":71580,\"1f1e7-1f1f7\":71581,\"1f1e7-1f1f8\":71582,\"1f1e7-1f1f9\":71583,\"1f1e7-1f1fb\":71584,\"1f1e7-1f1fc\":71585,\"1f1e7-1f1fe\":71586,\"1f1e7-1f1ff\":71587,\"1f1e8-1f1e6\":71588,\"1f1e8-1f1e8\":71589,\"1f1e8-1f1e9\":71590,\"1f1e8-1f1eb\":71591,\"1f1e8-1f1ec\":71592,\"1f1e8-1f1ed\":71593,\"1f1e8-1f1ee\":71594,\"1f1e8-1f1f0\":71595,\"1f1e8-1f1f1\":71596,\"1f1e8-1f1f2\":71597,\"1f1e8-1f1f3\":71598,\"1f1e8-1f1f4\":71599,\"1f1e8-1f1f5\":71600,\"1f1e8-1f1f7\":71601,\"1f1e8-1f1fa\":71602,\"1f1e8-1f1fb\":71603,\"1f1e8-1f1fc\":71604,\"1f1e8-1f1fd\":71605,\"1f1e8-1f1fe\":71606,\"1f1e8-1f1ff\":71607,\"1f1e9-1f1ea\":71608,\"1f1e9-1f1ec\":71609,\"1f1e9-1f1ef\":71610,\"1f1e9-1f1f0\":71611,\"1f1e9-1f1f2\":71612,\"1f1e9-1f1f4\":71613,\"1f1e9-1f1ff\":71614,\"1f1ea-1f1e6\":71615,\"1f1ea-1f1e8\":71616,\"1f1ea-1f1ea\":71617,\"1f1ea-1f1ec\":71618,\"1f1ea-1f1ed\":71619,\"1f1ea-1f1f7\":71620,\"1f1ea-1f1f8\":71621,\"1f1ea-1f1f9\":71622,\"1f1ea-1f1fa\":71623,\"1f1eb-1f1ee\":71624,\"1f1eb-1f1ef\":71625,\"1f1eb-1f1f0\":71626,\"1f1eb-1f1f2\":71627,\"1f1eb-1f1f4\":71628,\"1f1eb-1f1f7\":71629,\"1f1ec-1f1e6\":71630,\"1f1ec-1f1e7\":71631,\"1f1ec-1f1e9\":71632,\"1f1ec-1f1ea\":71633,\"1f1ec-1f1eb\":71634,\"1f1ec-1f1ec\":71635,\"1f1ec-1f1ed\":71636,\"1f1ec-1f1ee\":71637,\"1f1ec-1f1f1\":71638,\"1f1ec-1f1f2\":71639,\"1f1ec-1f1f3\":71640,\"1f1ec-1f1f5\":71641,\"1f1ec-1f1f6\":71642,\"1f1ec-1f1f7\":71643,\"1f1ec-1f1f8\":71644,\"1f1ec-1f1f9\":71645,\"1f1ec-1f1fa\":71646,\"1f1ec-1f1fc\":71647,\"1f1ec-1f1fe\":71648,\"1f1ed-1f1f0\":71649,\"1f1ed-1f1f2\":71650,\"1f1ed-1f1f3\":71651,\"1f1ed-1f1f7\":71652,\"1f1ed-1f1f9\":71653,\"1f1ed-1f1fa\":71654,\"1f1ee-1f1e8\":71655,\"1f1ee-1f1e9\":71656,\"1f1ee-1f1ea\":71657,\"1f1ee-1f1f1\":71658,\"1f1ee-1f1f2\":71659,\"1f1ee-1f1f3\":71660,\"1f1ee-1f1f4\":71661,\"1f1ee-1f1f6\":71662,\"1f1ee-1f1f7\":71663,\"1f1ee-1f1f8\":71664,\"1f1ee-1f1f9\":71665,\"1f1ef-1f1ea\":71666,\"1f1ef-1f1f2\":71667,\"1f1ef-1f1f4\":71668,\"1f1ef-1f1f5\":71669,\"1f1f0-1f1ea\":71670,\"1f1f0-1f1ec\":71671,\"1f1f0-1f1ed\":71672,\"1f1f0-1f1ee\":71673,\"1f1f0-1f1f2\":71674,\"1f1f0-1f1f3\":71675,\"1f1f0-1f1f5\":71676,\"1f1f0-1f1f7\":71677,\"1f1f0-1f1fc\":71678,\"1f1f0-1f1fe\":71679,\"1f1f0-1f1ff\":71680,\"1f1f1-1f1e6\":71681,\"1f1f1-1f1e7\":71682,\"1f1f1-1f1e8\":71683,\"1f1f1-1f1ee\":71684,\"1f1f1-1f1f0\":71685,\"1f1f1-1f1f7\":71686,\"1f1f1-1f1f8\":71687,\"1f1f1-1f1f9\":71688,\"1f1f1-1f1fa\":71689,\"1f1f1-1f1fb\":71690,\"1f1f1-1f1fe\":71691,\"1f1f2-1f1e6\":71692,\"1f1f2-1f1e8\":71693,\"1f1f2-1f1e9\":71694,\"1f1f2-1f1ea\":71695,\"1f1f2-1f1eb\":71696,\"1f1f2-1f1ec\":71697,\"1f1f2-1f1ed\":71698,\"1f1f2-1f1f0\":71699,\"1f1f2-1f1f1\":71700,\"1f1f2-1f1f2\":71701,\"1f1f2-1f1f3\":71702,\"1f1f2-1f1f4\":71703,\"1f1f2-1f1f5\":71704,\"1f1f2-1f1f6\":71705,\"1f1f2-1f1f7\":71706,\"1f1f2-1f1f8\":71707,\"1f1f2-1f1f9\":71708,\"1f1f2-1f1fa\":71709,\"1f1f2-1f1fb\":71710,\"1f1f2-1f1fc\":71711,\"1f1f2-1f1fd\":71712,\"1f1f2-1f1fe\":71713,\"1f1f2-1f1ff\":71714,\"1f1f3-1f1e6\":71715,\"1f1f3-1f1e8\":71716,\"1f1f3-1f1ea\":71717,\"1f1f3-1f1eb\":71718,\"1f1f3-1f1ec\":71719,\"1f1f3-1f1ee\":71720,\"1f1f3-1f1f1\":71721,\"1f1f3-1f1f4\":71722,\"1f1f3-1f1f5\":71723,\"1f1f3-1f1f7\":71724,\"1f1f3-1f1fa\":71725,\"1f1f3-1f1ff\":71726,\"1f1f4-1f1f2\":71727,\"1f1f5-1f1e6\":71728,\"1f1f5-1f1ea\":71729,\"1f1f5-1f1eb\":71730,\"1f1f5-1f1ec\":71731,\"1f1f5-1f1ed\":71732,\"1f1f5-1f1f0\":71733,\"1f1f5-1f1f1\":71734,\"1f1f5-1f1f2\":71735,\"1f1f5-1f1f3\":71736,\"1f1f5-1f1f7\":71737,\"1f1f5-1f1f8\":71738,\"1f1f5-1f1f9\":71739,\"1f1f5-1f1fc\":71740,\"1f1f5-1f1fe\":71741,\"1f1f6-1f1e6\":71742,\"1f1f7-1f1ea\":71743,\"1f1f7-1f1f4\":71744,\"1f1f7-1f1f8\":71745,\"1f1f7-1f1fa\":71746,\"1f1f7-1f1fc\":71747,\"1f1f8-1f1e6\":71748,\"1f1f8-1f1e7\":71749,\"1f1f8-1f1e8\":71750,\"1f1f8-1f1e9\":71751,\"1f1f8-1f1ea\":71752,\"1f1f8-1f1ec\":71753,\"1f1f8-1f1ed\":71754,\"1f1f8-1f1ee\":71755,\"1f1f8-1f1ef\":71756,\"1f1f8-1f1f0\":71757,\"1f1f8-1f1f1\":71758,\"1f1f8-1f1f2\":71759,\"1f1f8-1f1f3\":71760,\"1f1f8-1f1f4\":71761,\"1f1f8-1f1f7\":71762,\"1f1f8-1f1f8\":71763,\"1f1f8-1f1f9\":71764,\"1f1f8-1f1fb\":71765,\"1f1f8-1f1fd\":71766,\"1f1f8-1f1fe\":71767,\"1f1f8-1f1ff\":71768,\"1f1f9-1f1e6\":71769,\"1f1f9-1f1e8\":71770,\"1f1f9-1f1e9\":71771,\"1f1f9-1f1eb\":71772,\"1f1f9-1f1ec\":71773,\"1f1f9-1f1ed\":71774,\"1f1f9-1f1ef\":71775,\"1f1f9-1f1f0\":71776,\"1f1f9-1f1f1\":71777,\"1f1f9-1f1f2\":71778,\"1f1f9-1f1f3\":71779,\"1f1f9-1f1f4\":71780,\"1f1f9-1f1f7\":71781,\"1f1f9-1f1f9\":71782,\"1f1f9-1f1fb\":71783,\"1f1f9-1f1fc\":71784,\"1f1f9-1f1ff\":71785,\"1f1fa-1f1e6\":71786,\"1f1fa-1f1ec\":71787,\"1f1fa-1f1f2\":71788,\"1f1fa-1f1f3\":71789,\"1f1fa-1f1f8\":71790,\"1f1fa-1f1fe\":71791,\"1f1fa-1f1ff\":71792,\"1f1fb-1f1e6\":71793,\"1f1fb-1f1e8\":71794,\"1f1fb-1f1ea\":71795,\"1f1fb-1f1ec\":71796,\"1f1fb-1f1ee\":71797,\"1f1fb-1f1f3\":71798,\"1f1fb-1f1fa\":71799,\"1f1fc-1f1eb\":71800,\"1f1fc-1f1f8\":71801,\"1f1fd-1f1f0\":71802,\"1f1fe-1f1ea\":71803,\"1f1fe-1f1f9\":71804,\"1f1ff-1f1e6\":71805,\"1f1ff-1f1f2\":71806,\"1f1ff-1f1fc\":71807,\"1f201\":62812,\"1f202\":62813,\"1f21a\":62819,\"1f22f\":62816,\"1f232\":62820,\"1f233\":62824,\"1f234\":62823,\"1f235\":62828,\"1f236\":62815,\"1f237\":62814,\"1f238\":62822,\"1f239\":62818,\"1f23a\":62827,\"1f250\":62817,\"1f251\":62821,\"1f300\":4974,\"1f301\":4824,\"1f302\":4976,\"1f303\":4825,\"1f304\":4827,\"1f305\":4828,\"1f306\":4829,\"1f307\":4830,\"1f308\":4975,\"1f309\":4831,\"1f30a\":4987,\"1f30b\":4782,\"1f30c\":4961,\"1f30d\":4773,\"1f30e\":4774,\"1f30f\":4775,\"1f310\":4776,\"1f311\":4941,\"1f312\":4942,\"1f313\":4943,\"1f314\":4944,\"1f315\":4945,\"1f316\":4946,\"1f317\":4947,\"1f318\":4948,\"1f319\":4949,\"1f31a\":4950,\"1f31b\":4951,\"1f31c\":4952,\"1f31d\":4955,\"1f31e\":4956,\"1f31f\":4959,\"1f320\":4960,\"1f321\":4953,\"1f324\":4965,\"1f325\":4966,\"1f326\":4967,\"1f327\":4968,\"1f328\":4969,\"1f329\":4970,\"1f32a\":4971,\"1f32b\":4972,\"1f32c\":4973,\"1f32d\":3694,\"1f32e\":3696,\"1f32f\":3697,\"1f330\":3677,\"1f331\":2631,\"1f332\":2633,\"1f333\":2634,\"1f334\":2635,\"1f335\":2636,\"1f336\":3668,\"1f337\":2630,\"1f338\":2622,\"1f339\":2625,\"1f33a\":2627,\"1f33b\":2628,\"1f33c\":2629,\"1f33d\":3667,\"1f33e\":2637,\"1f33f\":2638,\"1f340\":2640,\"1f341\":2641,\"1f342\":2642,\"1f343\":2643,\"1f344\":3675,\"1f345\":3660,\"1f346\":3664,\"1f347\":3644,\"1f348\":3645,\"1f349\":3646,\"1f34a\":3647,\"1f34b\":3648,\"1f34c\":3649,\"1f34d\":3650,\"1f34e\":3652,\"1f34f\":3653,\"1f350\":3654,\"1f351\":3655,\"1f352\":3656,\"1f353\":3657,\"1f354\":3691,\"1f355\":3693,\"1f356\":3687,\"1f357\":3688,\"1f358\":3713,\"1f359\":3714,\"1f35a\":3715,\"1f35b\":3716,\"1f35c\":3717,\"1f35d\":3718,\"1f35e\":3678,\"1f35f\":3692,\"1f360\":3719,\"1f361\":3725,\"1f362\":3720,\"1f363\":3721,\"1f364\":3722,\"1f365\":3723,\"1f366\":3734,\"1f367\":3735,\"1f368\":3736,\"1f369\":3737,\"1f36a\":3738,\"1f36b\":3743,\"1f36c\":3744,\"1f36d\":3745,\"1f36e\":3746,\"1f36f\":3747,\"1f370\":3740,\"1f371\":3712,\"1f372\":3704,\"1f373\":3702,\"1f374\":3769,\"1f375\":3752,\"1f376\":3753,\"1f377\":3755,\"1f378\":3756,\"1f379\":3757,\"1f37a\":3758,\"1f37b\":3759,\"1f37c\":3748,\"1f37d\":3768,\"1f37e\":3754,\"1f37f\":3708,\"1f380\":51004,\"1f381\":51005,\"1f382\":3739,\"1f383\":5988,\"1f384\":5989,\"1f385\":1490,\"1f386\":5990,\"1f387\":5991,\"1f388\":5994,\"1f389\":5995,\"1f38a\":5996,\"1f38b\":5997,\"1f38c\":71544,\"1f38d\":5998,\"1f38e\":5999,\"1f38f\":51000,\"1f390\":51001,\"1f391\":51002,\"1f392\":61096,\"1f393\":61109,\"1f396\":51009,\"1f397\":51006,\"1f399\":61129,\"1f39a\":61130,\"1f39b\":61131,\"1f39e\":61164,\"1f39f\":51007,\"1f3a0\":4833,\"1f3a1\":4834,\"1f3a2\":4835,\"1f3a3\":51036,\"1f3a4\":61132,\"1f3a5\":61163,\"1f3a6\":62733,\"1f3a7\":61133,\"1f3a8\":51067,\"1f3a9\":61108,\"1f3aa\":4837,\"1f3ab\":51008,\"1f3ac\":61166,\"1f3ad\":51065,\"1f3ae\":51049,\"1f3af\":51042,\"1f3b0\":51051,\"1f3b1\":51045,\"1f3b2\":51052,\"1f3b3\":51024,\"1f3b4\":51064,\"1f3b5\":61127,\"1f3b6\":61128,\"1f3b7\":61135,\"1f3b8\":61137,\"1f3b9\":61138,\"1f3ba\":61139,\"1f3bb\":61140,\"1f3bc\":61126,\"1f3bd\":51038,\"1f3be\":51022,\"1f3bf\":51039,\"1f3c0\":51018,\"1f3c1\":71542,\"1f3c2\":1562,\"1f3c3-200d-2640\":1546,\"1f3c3-200d-2642\":1545,\"1f3c3\":1544,\"1f3c4-200d-2640\":1568,\"1f3c4-200d-2642\":1567,\"1f3c4\":1566,\"1f3c5\":51011,\"1f3c6\":51010,\"1f3c7\":1560,\"1f3c8\":51020,\"1f3c9\":51021,\"1f3ca-200d-2640\":1574,\"1f3ca-200d-2642\":1573,\"1f3ca\":1572,\"1f3cb-200d-2640\":1580,\"1f3cb-200d-2642\":1579,\"1f3cb\":1578,\"1f3cc-200d-2640\":1565,\"1f3cc-200d-2642\":1564,\"1f3cc\":1563,\"1f3cd\":4868,\"1f3ce\":4867,\"1f3cf\":51025,\"1f3d0\":51019,\"1f3d1\":51026,\"1f3d2\":51027,\"1f3d3\":51029,\"1f3d4\":4780,\"1f3d5\":4784,\"1f3d6\":4785,\"1f3d7\":4791,\"1f3d8\":4796,\"1f3d9\":4826,\"1f3da\":4797,\"1f3db\":4790,\"1f3dc\":4786,\"1f3dd\":4787,\"1f3de\":4788,\"1f3df\":4789,\"1f3e0\":4798,\"1f3e1\":4799,\"1f3e2\":4800,\"1f3e3\":4801,\"1f3e4\":4802,\"1f3e5\":4803,\"1f3e6\":4804,\"1f3e7\":62643,\"1f3e8\":4805,\"1f3e9\":4806,\"1f3ea\":4807,\"1f3eb\":4808,\"1f3ec\":4809,\"1f3ed\":4810,\"1f3ee\":61177,\"1f3ef\":4811,\"1f3f0\":4812,\"1f3f3-200d-1f308\":71547,\"1f3f3-200d-26a7\":71548,\"1f3f3\":71546,\"1f3f4-200d-2620\":71549,\"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f\":71808,\"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f\":71809,\"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f\":71810,\"1f3f4\":71545,\"1f3f5\":2624,\"1f3f7\":61195,\"1f3f8\":51030,\"1f3f9\":61264,\"1f3fa\":3772,\"1f3fb\":9499,\"1f3fc\":9500,\"1f3fd\":9501,\"1f3fe\":9502,\"1f3ff\":9503,\"1f400\":2550,\"1f401\":2549,\"1f402\":2530,\"1f403\":2531,\"1f404\":2532,\"1f405\":2521,\"1f406\":2522,\"1f407\":2553,\"1f408-200d-2b1b\":2518,\"1f408\":2517,\"1f409\":2592,\"1f40a\":2587,\"1f40b\":2596,\"1f40c\":2605,\"1f40d\":2590,\"1f40e\":2524,\"1f40f\":2537,\"1f410\":2539,\"1f411\":2538,\"1f412\":2505,\"1f413\":2570,\"1f414\":2569,\"1f415-200d-1f9ba\":2511,\"1f415\":2509,\"1f416\":2534,\"1f417\":2535,\"1f418\":2544,\"1f419\":2603,\"1f41a\":2604,\"1f41b\":2607,\"1f41c\":2608,\"1f41d\":2609,\"1f41e\":2611,\"1f41f\":2599,\"1f420\":2600,\"1f421\":2601,\"1f422\":2588,\"1f423\":2571,\"1f424\":2572,\"1f425\":2573,\"1f426\":2574,\"1f427\":2575,\"1f428\":2560,\"1f429\":2512,\"1f42a\":2540,\"1f42b\":2541,\"1f42c\":2597,\"1f42d\":2548,\"1f42e\":2529,\"1f42f\":2520,\"1f430\":2552,\"1f431\":2516,\"1f432\":2591,\"1f433\":2595,\"1f434\":2523,\"1f435\":2504,\"1f436\":2508,\"1f437\":2533,\"1f438\":2586,\"1f439\":2551,\"1f43a\":2513,\"1f43b-200d-2744\":2559,\"1f43b\":2558,\"1f43c\":2561,\"1f43d\":2536,\"1f43e\":2567,\"1f43f\":2554,\"1f440\":1350,\"1f441-200d-1f5e8\":1147,\"1f441\":1351,\"1f442\":1342,\"1f443\":1344,\"1f444\":1353,\"1f445\":1352,\"1f446\":1318,\"1f447\":1320,\"1f448\":1316,\"1f449\":1317,\"1f44a\":1325,\"1f44b\":1303,\"1f44c\":1308,\"1f44d\":1322,\"1f44e\":1323,\"1f44f\":1328,\"1f450\":1330,\"1f451\":61106,\"1f452\":61107,\"1f453\":61072,\"1f454\":61077,\"1f455\":61078,\"1f456\":61079,\"1f457\":61084,\"1f458\":61085,\"1f459\":61090,\"1f45a\":61091,\"1f45b\":61092,\"1f45c\":61093,\"1f45d\":61094,\"1f45e\":61098,\"1f45f\":61099,\"1f460\":61102,\"1f461\":61103,\"1f462\":61105,\"1f463\":1649,\"1f464\":1646,\"1f465\":1647,\"1f466\":1356,\"1f467\":1357,\"1f468-200d-1f33e\":1423,\"1f468-200d-1f373\":1426,\"1f468-200d-1f37c\":1487,\"1f468-200d-1f393\":1414,\"1f468-200d-1f3a4\":1444,\"1f468-200d-1f3a8\":1447,\"1f468-200d-1f3eb\":1417,\"1f468-200d-1f3ed\":1432,\"1f468-200d-1f466-200d-1f466\":1636,\"1f468-200d-1f466\":1635,\"1f468-200d-1f467-200d-1f466\":1638,\"1f468-200d-1f467-200d-1f467\":1639,\"1f468-200d-1f467\":1637,\"1f468-200d-1f468-200d-1f466\":1625,\"1f468-200d-1f468-200d-1f466-200d-1f466\":1628,\"1f468-200d-1f468-200d-1f467\":1626,\"1f468-200d-1f468-200d-1f467-200d-1f466\":1627,\"1f468-200d-1f468-200d-1f467-200d-1f467\":1629,\"1f468-200d-1f469-200d-1f466\":1620,\"1f468-200d-1f469-200d-1f466-200d-1f466\":1623,\"1f468-200d-1f469-200d-1f467\":1621,\"1f468-200d-1f469-200d-1f467-200d-1f466\":1622,\"1f468-200d-1f469-200d-1f467-200d-1f467\":1624,\"1f468-200d-1f4bb\":1441,\"1f468-200d-1f4bc\":1435,\"1f468-200d-1f527\":1429,\"1f468-200d-1f52c\":1438,\"1f468-200d-1f680\":1453,\"1f468-200d-1f692\":1456,\"1f468-200d-1f9af\":1536,\"1f468-200d-1f9b0\":1362,\"1f468-200d-1f9b1\":1363,\"1f468-200d-1f9b2\":1365,\"1f468-200d-1f9b3\":1364,\"1f468-200d-1f9bc\":1539,\"1f468-200d-1f9bd\":1542,\"1f468-200d-2695\":1411,\"1f468-200d-2696\":1420,\"1f468-200d-2708\":1450,\"1f468-200d-2764-200d-1f468\":1617,\"1f468-200d-2764-200d-1f48b-200d-1f468\":1613,\"1f468\":1360,\"1f469-200d-1f33e\":1424,\"1f469-200d-1f373\":1427,\"1f469-200d-1f37c\":1486,\"1f469-200d-1f393\":1415,\"1f469-200d-1f3a4\":1445,\"1f469-200d-1f3a8\":1448,\"1f469-200d-1f3eb\":1418,\"1f469-200d-1f3ed\":1433,\"1f469-200d-1f466-200d-1f466\":1641,\"1f469-200d-1f466\":1640,\"1f469-200d-1f467-200d-1f466\":1643,\"1f469-200d-1f467-200d-1f467\":1644,\"1f469-200d-1f467\":1642,\"1f469-200d-1f469-200d-1f466\":1630,\"1f469-200d-1f469-200d-1f466-200d-1f466\":1633,\"1f469-200d-1f469-200d-1f467\":1631,\"1f469-200d-1f469-200d-1f467-200d-1f466\":1632,\"1f469-200d-1f469-200d-1f467-200d-1f467\":1634,\"1f469-200d-1f4bb\":1442,\"1f469-200d-1f4bc\":1436,\"1f469-200d-1f527\":1430,\"1f469-200d-1f52c\":1439,\"1f469-200d-1f680\":1454,\"1f469-200d-1f692\":1457,\"1f469-200d-1f9af\":1537,\"1f469-200d-1f9b0\":1367,\"1f469-200d-1f9b1\":1369,\"1f469-200d-1f9b2\":1373,\"1f469-200d-1f9b3\":1371,\"1f469-200d-1f9bc\":1540,\"1f469-200d-1f9bd\":1543,\"1f469-200d-2695\":1412,\"1f469-200d-2696\":1421,\"1f469-200d-2708\":1451,\"1f469-200d-2764-200d-1f468\":1616,\"1f469-200d-2764-200d-1f469\":1618,\"1f469-200d-2764-200d-1f48b-200d-1f468\":1612,\"1f469-200d-2764-200d-1f48b-200d-1f469\":1614,\"1f469\":1366,\"1f46a\":1619,\"1f46b\":1609,\"1f46c\":1610,\"1f46d\":1608,\"1f46e-200d-2640\":1460,\"1f46e-200d-2642\":1459,\"1f46e\":1458,\"1f46f-200d-2640\":1552,\"1f46f-200d-2642\":1551,\"1f46f\":1550,\"1f470-200d-2640\":1483,\"1f470-200d-2642\":1482,\"1f470\":1481,\"1f471-200d-2640\":1375,\"1f471-200d-2642\":1376,\"1f471\":1359,\"1f472\":1476,\"1f473-200d-2640\":1475,\"1f473-200d-2642\":1474,\"1f473\":1473,\"1f474\":1378,\"1f475\":1379,\"1f476\":1354,\"1f477-200d-2640\":1470,\"1f477-200d-2642\":1469,\"1f477\":1468,\"1f478\":1472,\"1f479\":199,\"1f47a\":1100,\"1f47b\":1101,\"1f47c\":1489,\"1f47d\":1102,\"1f47e\":1103,\"1f47f\":194,\"1f480\":195,\"1f481-200d-2640\":1394,\"1f481-200d-2642\":1393,\"1f481\":1392,\"1f482-200d-2640\":1466,\"1f482-200d-2642\":1465,\"1f482\":1464,\"1f483\":1547,\"1f484\":61114,\"1f485\":1335,\"1f486-200d-2640\":1522,\"1f486-200d-2642\":1521,\"1f486\":1520,\"1f487-200d-2640\":1525,\"1f487-200d-2642\":1524,\"1f487\":1523,\"1f488\":4836,\"1f489\":61287,\"1f48a\":61289,\"1f48b\":1117,\"1f48c\":1118,\"1f48d\":61115,\"1f48e\":61116,\"1f48f\":1611,\"1f490\":2621,\"1f491\":1615,\"1f492\":4813,\"1f493\":1123,\"1f494\":1128,\"1f495\":1125,\"1f496\":1121,\"1f497\":1122,\"1f498\":1119,\"1f499\":1133,\"1f49a\":1132,\"1f49b\":1131,\"1f49c\":1134,\"1f49d\":1120,\"1f49e\":1124,\"1f49f\":1126,\"1f4a0\":62859,\"1f4a1\":61175,\"1f4a2\":1139,\"1f4a3\":1145,\"1f4a4\":1151,\"1f4a5\":1140,\"1f4a6\":1142,\"1f4a7\":4986,\"1f4a8\":1143,\"1f4a9\":197,\"1f4aa\":1337,\"1f4ab\":1141,\"1f4ac\":1146,\"1f4ad\":1150,\"1f4ae\":2623,\"1f4af\":1138,\"1f4b0\":61196,\"1f4b1\":62754,\"1f4b2\":62755,\"1f4b3\":61203,\"1f4b4\":61198,\"1f4b5\":61199,\"1f4b6\":61200,\"1f4b7\":61201,\"1f4b8\":61202,\"1f4b9\":61205,\"1f4ba\":4900,\"1f4bb\":61152,\"1f4bc\":61226,\"1f4bd\":61158,\"1f4be\":61159,\"1f4bf\":61160,\"1f4c0\":61161,\"1f4c1\":61227,\"1f4c2\":61228,\"1f4c3\":61188,\"1f4c4\":61190,\"1f4c5\":61230,\"1f4c6\":61231,\"1f4c7\":61234,\"1f4c8\":61235,\"1f4c9\":61236,\"1f4ca\":61237,\"1f4cb\":61238,\"1f4cc\":61239,\"1f4cd\":61240,\"1f4ce\":61241,\"1f4cf\":61243,\"1f4d0\":61244,\"1f4d1\":61193,\"1f4d2\":61187,\"1f4d3\":61186,\"1f4d4\":61179,\"1f4d5\":61180,\"1f4d6\":61181,\"1f4d7\":61182,\"1f4d8\":61183,\"1f4d9\":61184,\"1f4da\":61185,\"1f4db\":62760,\"1f4dc\":61189,\"1f4dd\":61225,\"1f4de\":61147,\"1f4df\":61148,\"1f4e0\":61149,\"1f4e1\":61286,\"1f4e2\":61121,\"1f4e3\":61122,\"1f4e4\":61210,\"1f4e5\":61211,\"1f4e6\":61212,\"1f4e7\":61207,\"1f4e8\":61208,\"1f4e9\":61209,\"1f4ea\":61214,\"1f4eb\":61213,\"1f4ec\":61215,\"1f4ed\":61216,\"1f4ee\":61217,\"1f4ef\":61123,\"1f4f0\":61191,\"1f4f1\":61144,\"1f4f2\":61145,\"1f4f3\":62737,\"1f4f4\":62738,\"1f4f5\":62665,\"1f4f6\":62736,\"1f4f7\":61168,\"1f4f8\":61169,\"1f4f9\":61170,\"1f4fa\":61167,\"1f4fb\":61134,\"1f4fc\":61171,\"1f4fd\":61165,\"1f4ff\":61113,\"1f500\":62715,\"1f501\":62716,\"1f502\":62717,\"1f503\":62683,\"1f504\":62684,\"1f505\":62734,\"1f506\":62735,\"1f507\":61117,\"1f508\":61118,\"1f509\":61119,\"1f50a\":61120,\"1f50b\":61150,\"1f50c\":61151,\"1f50d\":61172,\"1f50e\":61173,\"1f50f\":61251,\"1f510\":61252,\"1f511\":61253,\"1f512\":61249,\"1f513\":61250,\"1f514\":61124,\"1f515\":61125,\"1f516\":61194,\"1f517\":61274,\"1f518\":62860,\"1f519\":62685,\"1f51a\":62686,\"1f51b\":62687,\"1f51c\":62688,\"1f51d\":62689,\"1f51e\":62666,\"1f51f\":62789,\"1f520\":62790,\"1f521\":62791,\"1f522\":62792,\"1f523\":62793,\"1f524\":62794,\"1f525\":4985,\"1f526\":61176,\"1f527\":61267,\"1f528\":61255,\"1f529\":61269,\"1f52a\":3771,\"1f52b\":61262,\"1f52c\":61284,\"1f52d\":61285,\"1f52e\":51046,\"1f52f\":62701,\"1f530\":62761,\"1f531\":62759,\"1f532\":62862,\"1f533\":62861,\"1f534\":62829,\"1f535\":62833,\"1f536\":62853,\"1f537\":62854,\"1f538\":62855,\"1f539\":62856,\"1f53a\":62857,\"1f53b\":62858,\"1f53c\":62725,\"1f53d\":62727,\"1f549\":62692,\"1f54a\":2576,\"1f54b\":4821,\"1f54c\":4817,\"1f54d\":4819,\"1f54e\":62700,\"1f550\":4919,\"1f551\":4921,\"1f552\":4923,\"1f553\":4925,\"1f554\":4927,\"1f555\":4929,\"1f556\":4931,\"1f557\":4933,\"1f558\":4935,\"1f559\":4937,\"1f55a\":4939,\"1f55b\":4917,\"1f55c\":4920,\"1f55d\":4922,\"1f55e\":4924,\"1f55f\":4926,\"1f560\":4928,\"1f561\":4930,\"1f562\":4932,\"1f563\":4934,\"1f564\":4936,\"1f565\":4938,\"1f566\":4940,\"1f567\":4918,\"1f56f\":61174,\"1f570\":4916,\"1f573\":1144,\"1f574\":1549,\"1f575-200d-2640\":1463,\"1f575-200d-2642\":1462,\"1f575\":1461,\"1f576\":61073,\"1f577\":2614,\"1f578\":2615,\"1f579\":51050,\"1f57a\":1548,\"1f587\":61242,\"1f58a\":61222,\"1f58b\":61221,\"1f58c\":61223,\"1f58d\":61224,\"1f590\":1305,\"1f595\":1319,\"1f596\":1307,\"1f5a4\":1136,\"1f5a5\":61153,\"1f5a8\":61154,\"1f5b1\":61156,\"1f5b2\":61157,\"1f5bc\":51066,\"1f5c2\":61229,\"1f5c3\":61246,\"1f5c4\":61247,\"1f5d1\":61248,\"1f5d2\":61232,\"1f5d3\":61233,\"1f5dc\":61271,\"1f5dd\":61254,\"1f5de\":61192,\"1f5e1\":61260,\"1f5e3\":1645,\"1f5e8\":1148,\"1f5ef\":1149,\"1f5f3\":61218,\"1f5fa\":4777,\"1f5fb\":4783,\"1f5fc\":4814,\"1f5fd\":4815,\"1f5fe\":4778,\"1f5ff\":61320,\"1f600\":11,\"1f601\":14,\"1f602\":18,\"1f603\":12,\"1f604\":13,\"1f605\":16,\"1f606\":15,\"1f607\":113,\"1f608\":193,\"1f609\":111,\"1f60a\":112,\"1f60b\":123,\"1f60c\":143,\"1f60d\":115,\"1f60e\":162,\"1f60f\":138,\"1f610\":135,\"1f611\":136,\"1f612\":139,\"1f613\":185,\"1f614\":144,\"1f615\":165,\"1f616\":182,\"1f617\":118,\"1f618\":117,\"1f619\":121,\"1f61a\":120,\"1f61b\":124,\"1f61c\":125,\"1f61d\":127,\"1f61e\":184,\"1f61f\":166,\"1f620\":191,\"1f621\":190,\"1f622\":179,\"1f623\":183,\"1f624\":189,\"1f625\":178,\"1f626\":174,\"1f627\":175,\"1f628\":176,\"1f629\":186,\"1f62a\":145,\"1f62b\":187,\"1f62c\":141,\"1f62d\":180,\"1f62e\":169,\"1f62f\":170,\"1f630\":177,\"1f631\":181,\"1f632\":171,\"1f633\":172,\"1f634\":147,\"1f635\":157,\"1f636\":137,\"1f637\":148,\"1f638\":1106,\"1f639\":1107,\"1f63a\":1105,\"1f63b\":1108,\"1f63c\":1109,\"1f63d\":1110,\"1f63e\":1113,\"1f63f\":1112,\"1f640\":1111,\"1f641\":167,\"1f642\":19,\"1f643\":110,\"1f644\":140,\"1f645-200d-2640\":1388,\"1f645-200d-2642\":1387,\"1f645\":1386,\"1f646-200d-2640\":1391,\"1f646-200d-2642\":1390,\"1f646\":1389,\"1f647-200d-2640\":1403,\"1f647-200d-2642\":1402,\"1f647\":1401,\"1f648\":1114,\"1f649\":1115,\"1f64a\":1116,\"1f64b-200d-2640\":1397,\"1f64b-200d-2642\":1396,\"1f64b\":1395,\"1f64c\":1329,\"1f64d-200d-2640\":1382,\"1f64d-200d-2642\":1381,\"1f64d\":1380,\"1f64e-200d-2640\":1385,\"1f64e-200d-2642\":1384,\"1f64e\":1383,\"1f64f\":1333,\"1f680\":4906,\"1f681\":4901,\"1f682\":4838,\"1f683\":4839,\"1f684\":4840,\"1f685\":4841,\"1f686\":4842,\"1f687\":4843,\"1f688\":4844,\"1f689\":4845,\"1f68a\":4846,\"1f68b\":4849,\"1f68c\":4850,\"1f68d\":4851,\"1f68e\":4852,\"1f68f\":4877,\"1f690\":4853,\"1f691\":4854,\"1f692\":4855,\"1f693\":4856,\"1f694\":4857,\"1f695\":4858,\"1f696\":4859,\"1f697\":4860,\"1f698\":4861,\"1f699\":4862,\"1f69a\":4864,\"1f69b\":4865,\"1f69c\":4866,\"1f69d\":4847,\"1f69e\":4848,\"1f69f\":4902,\"1f6a0\":4903,\"1f6a1\":4904,\"1f6a2\":4894,\"1f6a3-200d-2640\":1571,\"1f6a3-200d-2642\":1570,\"1f6a3\":1569,\"1f6a4\":4890,\"1f6a5\":4883,\"1f6a6\":4884,\"1f6a7\":4886,\"1f6a8\":4882,\"1f6a9\":71543,\"1f6aa\":61292,\"1f6ab\":62659,\"1f6ac\":61316,\"1f6ad\":62661,\"1f6ae\":62644,\"1f6af\":62662,\"1f6b0\":62645,\"1f6b1\":62663,\"1f6b2\":4873,\"1f6b3\":62660,\"1f6b4-200d-2640\":1583,\"1f6b4-200d-2642\":1582,\"1f6b4\":1581,\"1f6b5-200d-2640\":1586,\"1f6b5-200d-2642\":1585,\"1f6b5\":1584,\"1f6b6-200d-2640\":1528,\"1f6b6-200d-2642\":1527,\"1f6b6\":1526,\"1f6b7\":62664,\"1f6b8\":62657,\"1f6b9\":62647,\"1f6ba\":62648,\"1f6bb\":62649,\"1f6bc\":62650,\"1f6bd\":61299,\"1f6be\":62651,\"1f6bf\":61301,\"1f6c0\":1605,\"1f6c1\":61302,\"1f6c2\":62652,\"1f6c3\":62653,\"1f6c4\":62654,\"1f6c5\":62655,\"1f6cb\":61297,\"1f6cc\":1606,\"1f6cd\":61095,\"1f6ce\":4908,\"1f6cf\":61296,\"1f6d0\":62690,\"1f6d1\":4885,\"1f6d2\":61315,\"1f6d5\":4818,\"1f6d6\":4795,\"1f6d7\":61293,\"1f6e0\":61259,\"1f6e1\":61265,\"1f6e2\":4880,\"1f6e3\":4878,\"1f6e4\":4879,\"1f6e5\":4893,\"1f6e9\":4896,\"1f6eb\":4897,\"1f6ec\":4898,\"1f6f0\":4905,\"1f6f3\":4891,\"1f6f4\":4874,\"1f6f5\":4869,\"1f6f6\":4889,\"1f6f7\":51040,\"1f6f8\":4907,\"1f6f9\":4875,\"1f6fa\":4872,\"1f6fb\":4863,\"1f6fc\":4876,\"1f7e0\":62830,\"1f7e1\":62831,\"1f7e2\":62832,\"1f7e3\":62834,\"1f7e4\":62835,\"1f7e5\":62838,\"1f7e6\":62842,\"1f7e7\":62839,\"1f7e8\":62840,\"1f7e9\":62841,\"1f7ea\":62843,\"1f7eb\":62844,\"1f90c\":1309,\"1f90d\":1137,\"1f90e\":1135,\"1f90f\":1310,\"1f910\":133,\"1f911\":128,\"1f912\":149,\"1f913\":163,\"1f914\":132,\"1f915\":150,\"1f916\":1104,\"1f917\":129,\"1f918\":1314,\"1f919\":1315,\"1f91a\":1304,\"1f91b\":1326,\"1f91c\":1327,\"1f91d\":1332,\"1f91e\":1312,\"1f91f\":1313,\"1f920\":159,\"1f921\":198,\"1f922\":151,\"1f923\":17,\"1f924\":146,\"1f925\":142,\"1f926-200d-2640\":1406,\"1f926-200d-2642\":1405,\"1f926\":1404,\"1f927\":153,\"1f928\":134,\"1f929\":116,\"1f92a\":126,\"1f92b\":131,\"1f92c\":192,\"1f92d\":130,\"1f92e\":152,\"1f92f\":158,\"1f930\":1484,\"1f931\":1485,\"1f932\":1331,\"1f933\":1336,\"1f934\":1471,\"1f935-200d-2640\":1480,\"1f935-200d-2642\":1479,\"1f935\":1478,\"1f936\":1491,\"1f937-200d-2640\":1409,\"1f937-200d-2642\":1408,\"1f937\":1407,\"1f938-200d-2640\":1589,\"1f938-200d-2642\":1588,\"1f938\":1587,\"1f939-200d-2640\":1601,\"1f939-200d-2642\":1600,\"1f939\":1599,\"1f93a\":1559,\"1f93c-200d-2640\":1592,\"1f93c-200d-2642\":1591,\"1f93c\":1590,\"1f93d-200d-2640\":1595,\"1f93d-200d-2642\":1594,\"1f93d\":1593,\"1f93e-200d-2640\":1598,\"1f93e-200d-2642\":1597,\"1f93e\":1596,\"1f93f\":51037,\"1f940\":2626,\"1f941\":61142,\"1f942\":3760,\"1f943\":3761,\"1f944\":3770,\"1f945\":51033,\"1f947\":51012,\"1f948\":51013,\"1f949\":51014,\"1f94a\":51031,\"1f94b\":51032,\"1f94c\":51041,\"1f94d\":51028,\"1f94e\":51017,\"1f94f\":51023,\"1f950\":3679,\"1f951\":3663,\"1f952\":3670,\"1f953\":3690,\"1f954\":3665,\"1f955\":3666,\"1f956\":3680,\"1f957\":3707,\"1f958\":3703,\"1f959\":3699,\"1f95a\":3701,\"1f95b\":3749,\"1f95c\":3676,\"1f95d\":3659,\"1f95e\":3684,\"1f95f\":3726,\"1f960\":3727,\"1f961\":3728,\"1f962\":3767,\"1f963\":3706,\"1f964\":3762,\"1f965\":3662,\"1f966\":3672,\"1f967\":3742,\"1f968\":3682,\"1f969\":3689,\"1f96a\":3695,\"1f96b\":3711,\"1f96c\":3671,\"1f96d\":3651,\"1f96e\":3724,\"1f96f\":3683,\"1f970\":114,\"1f971\":188,\"1f972\":122,\"1f973\":160,\"1f974\":156,\"1f975\":154,\"1f976\":155,\"1f977\":1467,\"1f978\":161,\"1f97a\":173,\"1f97b\":61086,\"1f97c\":61075,\"1f97d\":61074,\"1f97e\":61100,\"1f97f\":61101,\"1f980\":3729,\"1f981\":2519,\"1f982\":2616,\"1f983\":2568,\"1f984\":2525,\"1f985\":2577,\"1f986\":2578,\"1f987\":2557,\"1f988\":2602,\"1f989\":2580,\"1f98a\":2514,\"1f98b\":2606,\"1f98c\":2527,\"1f98d\":2506,\"1f98e\":2589,\"1f98f\":2546,\"1f990\":3731,\"1f991\":3732,\"1f992\":2543,\"1f993\":2526,\"1f994\":2556,\"1f995\":2593,\"1f996\":2594,\"1f997\":2612,\"1f998\":2565,\"1f999\":2542,\"1f99a\":2584,\"1f99b\":2547,\"1f99c\":2585,\"1f99d\":2515,\"1f99e\":3730,\"1f99f\":2617,\"1f9a0\":2620,\"1f9a1\":2566,\"1f9a2\":2579,\"1f9a3\":2545,\"1f9a4\":2581,\"1f9a5\":2562,\"1f9a6\":2563,\"1f9a7\":2507,\"1f9a8\":2564,\"1f9a9\":2583,\"1f9aa\":3733,\"1f9ab\":2555,\"1f9ac\":2528,\"1f9ad\":2598,\"1f9ae\":2510,\"1f9af\":61273,\"1f9b4\":1349,\"1f9b5\":1340,\"1f9b6\":1341,\"1f9b7\":1348,\"1f9b8-200d-2640\":1495,\"1f9b8-200d-2642\":1494,\"1f9b8\":1493,\"1f9b9-200d-2640\":1498,\"1f9b9-200d-2642\":1497,\"1f9b9\":1496,\"1f9ba\":61076,\"1f9bb\":1343,\"1f9bc\":4871,\"1f9bd\":4870,\"1f9be\":1338,\"1f9bf\":1339,\"1f9c0\":3686,\"1f9c1\":3741,\"1f9c2\":3710,\"1f9c3\":3764,\"1f9c4\":3673,\"1f9c5\":3674,\"1f9c6\":3700,\"1f9c7\":3685,\"1f9c8\":3709,\"1f9c9\":3765,\"1f9ca\":3766,\"1f9cb\":3763,\"1f9cd-200d-2640\":1531,\"1f9cd-200d-2642\":1530,\"1f9cd\":1529,\"1f9ce-200d-2640\":1534,\"1f9ce-200d-2642\":1533,\"1f9ce\":1532,\"1f9cf-200d-2640\":1400,\"1f9cf-200d-2642\":1399,\"1f9cf\":1398,\"1f9d0\":164,\"1f9d1-200d-1f33e\":1422,\"1f9d1-200d-1f373\":1425,\"1f9d1-200d-1f37c\":1488,\"1f9d1-200d-1f384\":1492,\"1f9d1-200d-1f393\":1413,\"1f9d1-200d-1f3a4\":1443,\"1f9d1-200d-1f3a8\":1446,\"1f9d1-200d-1f3eb\":1416,\"1f9d1-200d-1f3ed\":1431,\"1f9d1-200d-1f4bb\":1440,\"1f9d1-200d-1f4bc\":1434,\"1f9d1-200d-1f527\":1428,\"1f9d1-200d-1f52c\":1437,\"1f9d1-200d-1f680\":1452,\"1f9d1-200d-1f692\":1455,\"1f9d1-200d-1f91d-200d-1f9d1\":1607,\"1f9d1-200d-1f9af\":1535,\"1f9d1-200d-1f9b0\":1368,\"1f9d1-200d-1f9b1\":1370,\"1f9d1-200d-1f9b2\":1374,\"1f9d1-200d-1f9b3\":1372,\"1f9d1-200d-1f9bc\":1538,\"1f9d1-200d-1f9bd\":1541,\"1f9d1-200d-2695\":1410,\"1f9d1-200d-2696\":1419,\"1f9d1-200d-2708\":1449,\"1f9d1\":1358,\"1f9d2\":1355,\"1f9d3\":1377,\"1f9d4\":1361,\"1f9d5\":1477,\"1f9d6-200d-2640\":1555,\"1f9d6-200d-2642\":1554,\"1f9d6\":1553,\"1f9d7-200d-2640\":1558,\"1f9d7-200d-2642\":1557,\"1f9d7\":1556,\"1f9d8-200d-2640\":1604,\"1f9d8-200d-2642\":1603,\"1f9d8\":1602,\"1f9d9-200d-2640\":1501,\"1f9d9-200d-2642\":1500,\"1f9d9\":1499,\"1f9da-200d-2640\":1504,\"1f9da-200d-2642\":1503,\"1f9da\":1502,\"1f9db-200d-2640\":1507,\"1f9db-200d-2642\":1506,\"1f9db\":1505,\"1f9dc-200d-2640\":1510,\"1f9dc-200d-2642\":1509,\"1f9dc\":1508,\"1f9dd-200d-2640\":1513,\"1f9dd-200d-2642\":1512,\"1f9dd\":1511,\"1f9de-200d-2640\":1516,\"1f9de-200d-2642\":1515,\"1f9de\":1514,\"1f9df-200d-2640\":1519,\"1f9df-200d-2642\":1518,\"1f9df\":1517,\"1f9e0\":1345,\"1f9e1\":1130,\"1f9e2\":61110,\"1f9e3\":61080,\"1f9e4\":61081,\"1f9e5\":61082,\"1f9e6\":61083,\"1f9e7\":51003,\"1f9e8\":5992,\"1f9e9\":51053,\"1f9ea\":61281,\"1f9eb\":61282,\"1f9ec\":61283,\"1f9ed\":4779,\"1f9ee\":61162,\"1f9ef\":61314,\"1f9f0\":61277,\"1f9f1\":4792,\"1f9f2\":61278,\"1f9f3\":4909,\"1f9f4\":61305,\"1f9f5\":51068,\"1f9f6\":51070,\"1f9f7\":61306,\"1f9f8\":51054,\"1f9f9\":61307,\"1f9fa\":61308,\"1f9fb\":61309,\"1f9fc\":61311,\"1f9fd\":61313,\"1f9fe\":61204,\"1f9ff\":51048,\"1fa70\":61104,\"1fa71\":61087,\"1fa72\":61088,\"1fa73\":61089,\"1fa74\":61097,\"1fa78\":61288,\"1fa79\":61290,\"1fa7a\":61291,\"1fa80\":51043,\"1fa81\":51044,\"1fa82\":4899,\"1fa83\":61263,\"1fa84\":51047,\"1fa85\":51055,\"1fa86\":51056,\"1fa90\":4957,\"1fa91\":61298,\"1fa92\":61304,\"1fa93\":61256,\"1fa94\":61178,\"1fa95\":61141,\"1fa96\":61111,\"1fa97\":61136,\"1fa98\":61143,\"1fa99\":61197,\"1fa9a\":61266,\"1fa9b\":61268,\"1fa9c\":61279,\"1fa9d\":61276,\"1fa9e\":61294,\"1fa9f\":61295,\"1faa0\":61300,\"1faa1\":51069,\"1faa2\":51071,\"1faa3\":61310,\"1faa4\":61303,\"1faa5\":61312,\"1faa6\":61318,\"1faa7\":61321,\"1faa8\":4793,\"1fab0\":2618,\"1fab1\":2619,\"1fab2\":2610,\"1fab3\":2613,\"1fab4\":2632,\"1fab5\":4794,\"1fab6\":2582,\"1fac0\":1346,\"1fac1\":1347,\"1fac2\":1648,\"1fad0\":3658,\"1fad1\":3669,\"1fad2\":3661,\"1fad3\":3681,\"1fad4\":3698,\"1fad5\":3705,\"1fad6\":3751,\"203c\":62747,\"21a9\":62679,\"21aa\":62680,\"231a\":4912,\"231b\":4910,\"23cf\":62732,\"23e9\":62719,\"23ea\":62723,\"23eb\":62726,\"23ec\":62728,\"23ed\":62720,\"23ee\":62724,\"23ef\":62721,\"23f0\":4913,\"23f1\":4914,\"23f2\":4915,\"23f3\":4911,\"23f8\":62729,\"23f9\":62730,\"23fa\":62731,\"24c2\":62803,\"25aa\":62851,\"25ab\":62852,\"25b6\":62718,\"25c0\":62722,\"25fb\":62848,\"25fc\":62847,\"25fd\":62850,\"25fe\":62849,\"260e\":61146,\"261d\":1321,\"262a\":62698,\"262e\":62699,\"262f\":62695,\"263a\":119,\"264a\":62704,\"264b\":62705,\"264c\":62706,\"264d\":62707,\"264e\":62708,\"264f\":62709,\"265f\":51061,\"267b\":62757,\"267e\":62746,\"267f\":62646,\"269b\":62691,\"269c\":62758,\"26a0\":62656,\"26a1\":4980,\"26a7\":62741,\"26aa\":62837,\"26ab\":62836,\"26b0\":61317,\"26b1\":61319,\"26bd\":51015,\"26be\":51016,\"26c4\":4983,\"26c5\":4963,\"26c8\":4964,\"26ce\":62714,\"26cf\":61257,\"26d1\":61112,\"26d3\":61275,\"26d4\":62658,\"26e9\":4820,\"26ea\":4816,\"26f0\":4781,\"26f1\":4979,\"26f2\":4822,\"26f3\":51034,\"26f4\":4892,\"26f5\":4888,\"26f7\":1561,\"26f8\":51035,\"26f9-200d-2640\":1577,\"26f9-200d-2642\":1576,\"26f9\":1575,\"26fa\":4823,\"26fd\":4881,\"270a\":1324,\"270b\":1306,\"270c\":1311,\"270d\":1334,\"270f\":61219,\"271d\":62696,\"274c\":62766,\"274e\":62767,\"27a1\":62671,\"27b0\":62768,\"27bf\":62769,\"2b05\":62675,\"2b06\":62669,\"2b07\":62673,\"2b1b\":62845,\"2b1c\":62846,\"2b50\":4958,\"2b55\":62762,\"303d\":62770,\"1f385-1f3fb\":0,\"1f385-1f3fc\":0,\"1f385-1f3fd\":0,\"1f385-1f3fe\":0,\"1f385-1f3ff\":0,\"1f3c2-1f3fb\":0,\"1f3c2-1f3fc\":0,\"1f3c2-1f3fd\":0,\"1f3c2-1f3fe\":0,\"1f3c2-1f3ff\":0,\"1f3c3-1f3fb-200d-2640\":0,\"1f3c3-1f3fc-200d-2640\":0,\"1f3c3-1f3fd-200d-2640\":0,\"1f3c3-1f3fe-200d-2640\":0,\"1f3c3-1f3ff-200d-2640\":0,\"1f3c3-1f3fb-200d-2642\":0,\"1f3c3-1f3fc-200d-2642\":0,\"1f3c3-1f3fd-200d-2642\":0,\"1f3c3-1f3fe-200d-2642\":0,\"1f3c3-1f3ff-200d-2642\":0,\"1f3c3-1f3fb\":0,\"1f3c3-1f3fc\":0,\"1f3c3-1f3fd\":0,\"1f3c3-1f3fe\":0,\"1f3c3-1f3ff\":0,\"1f3c4-1f3fb-200d-2640\":0,\"1f3c4-1f3fc-200d-2640\":0,\"1f3c4-1f3fd-200d-2640\":0,\"1f3c4-1f3fe-200d-2640\":0,\"1f3c4-1f3ff-200d-2640\":0,\"1f3c4-1f3fb-200d-2642\":0,\"1f3c4-1f3fc-200d-2642\":0,\"1f3c4-1f3fd-200d-2642\":0,\"1f3c4-1f3fe-200d-2642\":0,\"1f3c4-1f3ff-200d-2642\":0,\"1f3c4-1f3fb\":0,\"1f3c4-1f3fc\":0,\"1f3c4-1f3fd\":0,\"1f3c4-1f3fe\":0,\"1f3c4-1f3ff\":0,\"1f3c7-1f3fb\":0,\"1f3c7-1f3fc\":0,\"1f3c7-1f3fd\":0,\"1f3c7-1f3fe\":0,\"1f3c7-1f3ff\":0,\"1f3ca-1f3fb-200d-2640\":0,\"1f3ca-1f3fc-200d-2640\":0,\"1f3ca-1f3fd-200d-2640\":0,\"1f3ca-1f3fe-200d-2640\":0,\"1f3ca-1f3ff-200d-2640\":0,\"1f3ca-1f3fb-200d-2642\":0,\"1f3ca-1f3fc-200d-2642\":0,\"1f3ca-1f3fd-200d-2642\":0,\"1f3ca-1f3fe-200d-2642\":0,\"1f3ca-1f3ff-200d-2642\":0,\"1f3ca-1f3fb\":0,\"1f3ca-1f3fc\":0,\"1f3ca-1f3fd\":0,\"1f3ca-1f3fe\":0,\"1f3ca-1f3ff\":0,\"1f3cb-1f3fb-200d-2640\":0,\"1f3cb-1f3fc-200d-2640\":0,\"1f3cb-1f3fd-200d-2640\":0,\"1f3cb-1f3fe-200d-2640\":0,\"1f3cb-1f3ff-200d-2640\":0,\"1f3cb-1f3fb-200d-2642\":0,\"1f3cb-1f3fc-200d-2642\":0,\"1f3cb-1f3fd-200d-2642\":0,\"1f3cb-1f3fe-200d-2642\":0,\"1f3cb-1f3ff-200d-2642\":0,\"1f3cb-1f3fb\":0,\"1f3cb-1f3fc\":0,\"1f3cb-1f3fd\":0,\"1f3cb-1f3fe\":0,\"1f3cb-1f3ff\":0,\"1f3cc-1f3fb-200d-2640\":0,\"1f3cc-1f3fc-200d-2640\":0,\"1f3cc-1f3fd-200d-2640\":0,\"1f3cc-1f3fe-200d-2640\":0,\"1f3cc-1f3ff-200d-2640\":0,\"1f3cc-1f3fb-200d-2642\":0,\"1f3cc-1f3fc-200d-2642\":0,\"1f3cc-1f3fd-200d-2642\":0,\"1f3cc-1f3fe-200d-2642\":0,\"1f3cc-1f3ff-200d-2642\":0,\"1f3cc-1f3fb\":0,\"1f3cc-1f3fc\":0,\"1f3cc-1f3fd\":0,\"1f3cc-1f3fe\":0,\"1f3cc-1f3ff\":0,\"1f442-1f3fb\":0,\"1f442-1f3fc\":0,\"1f442-1f3fd\":0,\"1f442-1f3fe\":0,\"1f442-1f3ff\":0,\"1f443-1f3fb\":0,\"1f443-1f3fc\":0,\"1f443-1f3fd\":0,\"1f443-1f3fe\":0,\"1f443-1f3ff\":0,\"1f446-1f3fb\":0,\"1f446-1f3fc\":0,\"1f446-1f3fd\":0,\"1f446-1f3fe\":0,\"1f446-1f3ff\":0,\"1f447-1f3fb\":0,\"1f447-1f3fc\":0,\"1f447-1f3fd\":0,\"1f447-1f3fe\":0,\"1f447-1f3ff\":0,\"1f448-1f3fb\":0,\"1f448-1f3fc\":0,\"1f448-1f3fd\":0,\"1f448-1f3fe\":0,\"1f448-1f3ff\":0,\"1f449-1f3fb\":0,\"1f449-1f3fc\":0,\"1f449-1f3fd\":0,\"1f449-1f3fe\":0,\"1f449-1f3ff\":0,\"1f44a-1f3fb\":0,\"1f44a-1f3fc\":0,\"1f44a-1f3fd\":0,\"1f44a-1f3fe\":0,\"1f44a-1f3ff\":0,\"1f44b-1f3fb\":0,\"1f44b-1f3fc\":0,\"1f44b-1f3fd\":0,\"1f44b-1f3fe\":0,\"1f44b-1f3ff\":0,\"1f44c-1f3fb\":0,\"1f44c-1f3fc\":0,\"1f44c-1f3fd\":0,\"1f44c-1f3fe\":0,\"1f44c-1f3ff\":0,\"1f44d-1f3fb\":0,\"1f44d-1f3fc\":0,\"1f44d-1f3fd\":0,\"1f44d-1f3fe\":0,\"1f44d-1f3ff\":0,\"1f44e-1f3fb\":0,\"1f44e-1f3fc\":0,\"1f44e-1f3fd\":0,\"1f44e-1f3fe\":0,\"1f44e-1f3ff\":0,\"1f44f-1f3fb\":0,\"1f44f-1f3fc\":0,\"1f44f-1f3fd\":0,\"1f44f-1f3fe\":0,\"1f44f-1f3ff\":0,\"1f450-1f3fb\":0,\"1f450-1f3fc\":0,\"1f450-1f3fd\":0,\"1f450-1f3fe\":0,\"1f450-1f3ff\":0,\"1f466-1f3fb\":0,\"1f466-1f3fc\":0,\"1f466-1f3fd\":0,\"1f466-1f3fe\":0,\"1f466-1f3ff\":0,\"1f467-1f3fb\":0,\"1f467-1f3fc\":0,\"1f467-1f3fd\":0,\"1f467-1f3fe\":0,\"1f467-1f3ff\":0,\"1f468-1f3fb-200d-1f33e\":0,\"1f468-1f3fc-200d-1f33e\":0,\"1f468-1f3fd-200d-1f33e\":0,\"1f468-1f3fe-200d-1f33e\":0,\"1f468-1f3ff-200d-1f33e\":0,\"1f468-1f3fb-200d-1f373\":0,\"1f468-1f3fc-200d-1f373\":0,\"1f468-1f3fd-200d-1f373\":0,\"1f468-1f3fe-200d-1f373\":0,\"1f468-1f3ff-200d-1f373\":0,\"1f468-1f3fb-200d-1f37c\":0,\"1f468-1f3fc-200d-1f37c\":0,\"1f468-1f3fd-200d-1f37c\":0,\"1f468-1f3fe-200d-1f37c\":0,\"1f468-1f3ff-200d-1f37c\":0,\"1f468-1f3fb-200d-1f393\":0,\"1f468-1f3fc-200d-1f393\":0,\"1f468-1f3fd-200d-1f393\":0,\"1f468-1f3fe-200d-1f393\":0,\"1f468-1f3ff-200d-1f393\":0,\"1f468-1f3fb-200d-1f3a4\":0,\"1f468-1f3fc-200d-1f3a4\":0,\"1f468-1f3fd-200d-1f3a4\":0,\"1f468-1f3fe-200d-1f3a4\":0,\"1f468-1f3ff-200d-1f3a4\":0,\"1f468-1f3fb-200d-1f3a8\":0,\"1f468-1f3fc-200d-1f3a8\":0,\"1f468-1f3fd-200d-1f3a8\":0,\"1f468-1f3fe-200d-1f3a8\":0,\"1f468-1f3ff-200d-1f3a8\":0,\"1f468-1f3fb-200d-1f3eb\":0,\"1f468-1f3fc-200d-1f3eb\":0,\"1f468-1f3fd-200d-1f3eb\":0,\"1f468-1f3fe-200d-1f3eb\":0,\"1f468-1f3ff-200d-1f3eb\":0,\"1f468-1f3fb-200d-1f3ed\":0,\"1f468-1f3fc-200d-1f3ed\":0,\"1f468-1f3fd-200d-1f3ed\":0,\"1f468-1f3fe-200d-1f3ed\":0,\"1f468-1f3ff-200d-1f3ed\":0,\"1f468-1f3fb-200d-1f4bb\":0,\"1f468-1f3fc-200d-1f4bb\":0,\"1f468-1f3fd-200d-1f4bb\":0,\"1f468-1f3fe-200d-1f4bb\":0,\"1f468-1f3ff-200d-1f4bb\":0,\"1f468-1f3fb-200d-1f4bc\":0,\"1f468-1f3fc-200d-1f4bc\":0,\"1f468-1f3fd-200d-1f4bc\":0,\"1f468-1f3fe-200d-1f4bc\":0,\"1f468-1f3ff-200d-1f4bc\":0,\"1f468-1f3fb-200d-1f527\":0,\"1f468-1f3fc-200d-1f527\":0,\"1f468-1f3fd-200d-1f527\":0,\"1f468-1f3fe-200d-1f527\":0,\"1f468-1f3ff-200d-1f527\":0,\"1f468-1f3fb-200d-1f52c\":0,\"1f468-1f3fc-200d-1f52c\":0,\"1f468-1f3fd-200d-1f52c\":0,\"1f468-1f3fe-200d-1f52c\":0,\"1f468-1f3ff-200d-1f52c\":0,\"1f468-1f3fb-200d-1f680\":0,\"1f468-1f3fc-200d-1f680\":0,\"1f468-1f3fd-200d-1f680\":0,\"1f468-1f3fe-200d-1f680\":0,\"1f468-1f3ff-200d-1f680\":0,\"1f468-1f3fb-200d-1f692\":0,\"1f468-1f3fc-200d-1f692\":0,\"1f468-1f3fd-200d-1f692\":0,\"1f468-1f3fe-200d-1f692\":0,\"1f468-1f3ff-200d-1f692\":0,\"1f468-1f3fb-200d-1f9af\":0,\"1f468-1f3fc-200d-1f9af\":0,\"1f468-1f3fd-200d-1f9af\":0,\"1f468-1f3fe-200d-1f9af\":0,\"1f468-1f3ff-200d-1f9af\":0,\"1f468-1f3fb-200d-1f9b0\":0,\"1f468-1f3fc-200d-1f9b0\":0,\"1f468-1f3fd-200d-1f9b0\":0,\"1f468-1f3fe-200d-1f9b0\":0,\"1f468-1f3ff-200d-1f9b0\":0,\"1f468-1f3fb-200d-1f9b1\":0,\"1f468-1f3fc-200d-1f9b1\":0,\"1f468-1f3fd-200d-1f9b1\":0,\"1f468-1f3fe-200d-1f9b1\":0,\"1f468-1f3ff-200d-1f9b1\":0,\"1f468-1f3fb-200d-1f9b2\":0,\"1f468-1f3fc-200d-1f9b2\":0,\"1f468-1f3fd-200d-1f9b2\":0,\"1f468-1f3fe-200d-1f9b2\":0,\"1f468-1f3ff-200d-1f9b2\":0,\"1f468-1f3fb-200d-1f9b3\":0,\"1f468-1f3fc-200d-1f9b3\":0,\"1f468-1f3fd-200d-1f9b3\":0,\"1f468-1f3fe-200d-1f9b3\":0,\"1f468-1f3ff-200d-1f9b3\":0,\"1f468-1f3fb-200d-1f9bc\":0,\"1f468-1f3fc-200d-1f9bc\":0,\"1f468-1f3fd-200d-1f9bc\":0,\"1f468-1f3fe-200d-1f9bc\":0,\"1f468-1f3ff-200d-1f9bc\":0,\"1f468-1f3fb-200d-1f9bd\":0,\"1f468-1f3fc-200d-1f9bd\":0,\"1f468-1f3fd-200d-1f9bd\":0,\"1f468-1f3fe-200d-1f9bd\":0,\"1f468-1f3ff-200d-1f9bd\":0,\"1f468-1f3fb-200d-2695\":0,\"1f468-1f3fc-200d-2695\":0,\"1f468-1f3fd-200d-2695\":0,\"1f468-1f3fe-200d-2695\":0,\"1f468-1f3ff-200d-2695\":0,\"1f468-1f3fb-200d-2696\":0,\"1f468-1f3fc-200d-2696\":0,\"1f468-1f3fd-200d-2696\":0,\"1f468-1f3fe-200d-2696\":0,\"1f468-1f3ff-200d-2696\":0,\"1f468-1f3fb-200d-2708\":0,\"1f468-1f3fc-200d-2708\":0,\"1f468-1f3fd-200d-2708\":0,\"1f468-1f3fe-200d-2708\":0,\"1f468-1f3ff-200d-2708\":0,\"1f468-1f3fb\":0,\"1f468-1f3fc\":0,\"1f468-1f3fd\":0,\"1f468-1f3fe\":0,\"1f468-1f3ff\":0,\"1f469-1f3fb-200d-1f33e\":0,\"1f469-1f3fc-200d-1f33e\":0,\"1f469-1f3fd-200d-1f33e\":0,\"1f469-1f3fe-200d-1f33e\":0,\"1f469-1f3ff-200d-1f33e\":0,\"1f469-1f3fb-200d-1f373\":0,\"1f469-1f3fc-200d-1f373\":0,\"1f469-1f3fd-200d-1f373\":0,\"1f469-1f3fe-200d-1f373\":0,\"1f469-1f3ff-200d-1f373\":0,\"1f469-1f3fb-200d-1f37c\":0,\"1f469-1f3fc-200d-1f37c\":0,\"1f469-1f3fd-200d-1f37c\":0,\"1f469-1f3fe-200d-1f37c\":0,\"1f469-1f3ff-200d-1f37c\":0,\"1f469-1f3fb-200d-1f393\":0,\"1f469-1f3fc-200d-1f393\":0,\"1f469-1f3fd-200d-1f393\":0,\"1f469-1f3fe-200d-1f393\":0,\"1f469-1f3ff-200d-1f393\":0,\"1f469-1f3fb-200d-1f3a4\":0,\"1f469-1f3fc-200d-1f3a4\":0,\"1f469-1f3fd-200d-1f3a4\":0,\"1f469-1f3fe-200d-1f3a4\":0,\"1f469-1f3ff-200d-1f3a4\":0,\"1f469-1f3fb-200d-1f3a8\":0,\"1f469-1f3fc-200d-1f3a8\":0,\"1f469-1f3fd-200d-1f3a8\":0,\"1f469-1f3fe-200d-1f3a8\":0,\"1f469-1f3ff-200d-1f3a8\":0,\"1f469-1f3fb-200d-1f3eb\":0,\"1f469-1f3fc-200d-1f3eb\":0,\"1f469-1f3fd-200d-1f3eb\":0,\"1f469-1f3fe-200d-1f3eb\":0,\"1f469-1f3ff-200d-1f3eb\":0,\"1f469-1f3fb-200d-1f3ed\":0,\"1f469-1f3fc-200d-1f3ed\":0,\"1f469-1f3fd-200d-1f3ed\":0,\"1f469-1f3fe-200d-1f3ed\":0,\"1f469-1f3ff-200d-1f3ed\":0,\"1f469-1f3fb-200d-1f4bb\":0,\"1f469-1f3fc-200d-1f4bb\":0,\"1f469-1f3fd-200d-1f4bb\":0,\"1f469-1f3fe-200d-1f4bb\":0,\"1f469-1f3ff-200d-1f4bb\":0,\"1f469-1f3fb-200d-1f4bc\":0,\"1f469-1f3fc-200d-1f4bc\":0,\"1f469-1f3fd-200d-1f4bc\":0,\"1f469-1f3fe-200d-1f4bc\":0,\"1f469-1f3ff-200d-1f4bc\":0,\"1f469-1f3fb-200d-1f527\":0,\"1f469-1f3fc-200d-1f527\":0,\"1f469-1f3fd-200d-1f527\":0,\"1f469-1f3fe-200d-1f527\":0,\"1f469-1f3ff-200d-1f527\":0,\"1f469-1f3fb-200d-1f52c\":0,\"1f469-1f3fc-200d-1f52c\":0,\"1f469-1f3fd-200d-1f52c\":0,\"1f469-1f3fe-200d-1f52c\":0,\"1f469-1f3ff-200d-1f52c\":0,\"1f469-1f3fb-200d-1f680\":0,\"1f469-1f3fc-200d-1f680\":0,\"1f469-1f3fd-200d-1f680\":0,\"1f469-1f3fe-200d-1f680\":0,\"1f469-1f3ff-200d-1f680\":0,\"1f469-1f3fb-200d-1f692\":0,\"1f469-1f3fc-200d-1f692\":0,\"1f469-1f3fd-200d-1f692\":0,\"1f469-1f3fe-200d-1f692\":0,\"1f469-1f3ff-200d-1f692\":0,\"1f469-1f3fb-200d-1f9af\":0,\"1f469-1f3fc-200d-1f9af\":0,\"1f469-1f3fd-200d-1f9af\":0,\"1f469-1f3fe-200d-1f9af\":0,\"1f469-1f3ff-200d-1f9af\":0,\"1f469-1f3fb-200d-1f9b0\":0,\"1f469-1f3fc-200d-1f9b0\":0,\"1f469-1f3fd-200d-1f9b0\":0,\"1f469-1f3fe-200d-1f9b0\":0,\"1f469-1f3ff-200d-1f9b0\":0,\"1f469-1f3fb-200d-1f9b1\":0,\"1f469-1f3fc-200d-1f9b1\":0,\"1f469-1f3fd-200d-1f9b1\":0,\"1f469-1f3fe-200d-1f9b1\":0,\"1f469-1f3ff-200d-1f9b1\":0,\"1f469-1f3fb-200d-1f9b2\":0,\"1f469-1f3fc-200d-1f9b2\":0,\"1f469-1f3fd-200d-1f9b2\":0,\"1f469-1f3fe-200d-1f9b2\":0,\"1f469-1f3ff-200d-1f9b2\":0,\"1f469-1f3fb-200d-1f9b3\":0,\"1f469-1f3fc-200d-1f9b3\":0,\"1f469-1f3fd-200d-1f9b3\":0,\"1f469-1f3fe-200d-1f9b3\":0,\"1f469-1f3ff-200d-1f9b3\":0,\"1f469-1f3fb-200d-1f9bc\":0,\"1f469-1f3fc-200d-1f9bc\":0,\"1f469-1f3fd-200d-1f9bc\":0,\"1f469-1f3fe-200d-1f9bc\":0,\"1f469-1f3ff-200d-1f9bc\":0,\"1f469-1f3fb-200d-1f9bd\":0,\"1f469-1f3fc-200d-1f9bd\":0,\"1f469-1f3fd-200d-1f9bd\":0,\"1f469-1f3fe-200d-1f9bd\":0,\"1f469-1f3ff-200d-1f9bd\":0,\"1f469-1f3fb-200d-2695\":0,\"1f469-1f3fc-200d-2695\":0,\"1f469-1f3fd-200d-2695\":0,\"1f469-1f3fe-200d-2695\":0,\"1f469-1f3ff-200d-2695\":0,\"1f469-1f3fb-200d-2696\":0,\"1f469-1f3fc-200d-2696\":0,\"1f469-1f3fd-200d-2696\":0,\"1f469-1f3fe-200d-2696\":0,\"1f469-1f3ff-200d-2696\":0,\"1f469-1f3fb-200d-2708\":0,\"1f469-1f3fc-200d-2708\":0,\"1f469-1f3fd-200d-2708\":0,\"1f469-1f3fe-200d-2708\":0,\"1f469-1f3ff-200d-2708\":0,\"1f469-1f3fb\":0,\"1f469-1f3fc\":0,\"1f469-1f3fd\":0,\"1f469-1f3fe\":0,\"1f469-1f3ff\":0,\"1f46b-1f3fb\":0,\"1f46b-1f3fc\":0,\"1f46b-1f3fd\":0,\"1f46b-1f3fe\":0,\"1f46b-1f3ff\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe\":0,\"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd\":0,\"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe\":0,\"1f46c-1f3fb\":0,\"1f46c-1f3fc\":0,\"1f46c-1f3fd\":0,\"1f46c-1f3fe\":0,\"1f46c-1f3ff\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe\":0,\"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd\":0,\"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe\":0,\"1f46d-1f3fb\":0,\"1f46d-1f3fc\":0,\"1f46d-1f3fd\":0,\"1f46d-1f3fe\":0,\"1f46d-1f3ff\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe\":0,\"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd\":0,\"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe\":0,\"1f46e-1f3fb-200d-2640\":0,\"1f46e-1f3fc-200d-2640\":0,\"1f46e-1f3fd-200d-2640\":0,\"1f46e-1f3fe-200d-2640\":0,\"1f46e-1f3ff-200d-2640\":0,\"1f46e-1f3fb-200d-2642\":0,\"1f46e-1f3fc-200d-2642\":0,\"1f46e-1f3fd-200d-2642\":0,\"1f46e-1f3fe-200d-2642\":0,\"1f46e-1f3ff-200d-2642\":0,\"1f46e-1f3fb\":0,\"1f46e-1f3fc\":0,\"1f46e-1f3fd\":0,\"1f46e-1f3fe\":0,\"1f46e-1f3ff\":0,\"1f470-1f3fb-200d-2640\":0,\"1f470-1f3fc-200d-2640\":0,\"1f470-1f3fd-200d-2640\":0,\"1f470-1f3fe-200d-2640\":0,\"1f470-1f3ff-200d-2640\":0,\"1f470-1f3fb-200d-2642\":0,\"1f470-1f3fc-200d-2642\":0,\"1f470-1f3fd-200d-2642\":0,\"1f470-1f3fe-200d-2642\":0,\"1f470-1f3ff-200d-2642\":0,\"1f470-1f3fb\":0,\"1f470-1f3fc\":0,\"1f470-1f3fd\":0,\"1f470-1f3fe\":0,\"1f470-1f3ff\":0,\"1f471-1f3fb-200d-2640\":0,\"1f471-1f3fc-200d-2640\":0,\"1f471-1f3fd-200d-2640\":0,\"1f471-1f3fe-200d-2640\":0,\"1f471-1f3ff-200d-2640\":0,\"1f471-1f3fb-200d-2642\":0,\"1f471-1f3fc-200d-2642\":0,\"1f471-1f3fd-200d-2642\":0,\"1f471-1f3fe-200d-2642\":0,\"1f471-1f3ff-200d-2642\":0,\"1f471-1f3fb\":0,\"1f471-1f3fc\":0,\"1f471-1f3fd\":0,\"1f471-1f3fe\":0,\"1f471-1f3ff\":0,\"1f472-1f3fb\":0,\"1f472-1f3fc\":0,\"1f472-1f3fd\":0,\"1f472-1f3fe\":0,\"1f472-1f3ff\":0,\"1f473-1f3fb-200d-2640\":0,\"1f473-1f3fc-200d-2640\":0,\"1f473-1f3fd-200d-2640\":0,\"1f473-1f3fe-200d-2640\":0,\"1f473-1f3ff-200d-2640\":0,\"1f473-1f3fb-200d-2642\":0,\"1f473-1f3fc-200d-2642\":0,\"1f473-1f3fd-200d-2642\":0,\"1f473-1f3fe-200d-2642\":0,\"1f473-1f3ff-200d-2642\":0,\"1f473-1f3fb\":0,\"1f473-1f3fc\":0,\"1f473-1f3fd\":0,\"1f473-1f3fe\":0,\"1f473-1f3ff\":0,\"1f474-1f3fb\":0,\"1f474-1f3fc\":0,\"1f474-1f3fd\":0,\"1f474-1f3fe\":0,\"1f474-1f3ff\":0,\"1f475-1f3fb\":0,\"1f475-1f3fc\":0,\"1f475-1f3fd\":0,\"1f475-1f3fe\":0,\"1f475-1f3ff\":0,\"1f476-1f3fb\":0,\"1f476-1f3fc\":0,\"1f476-1f3fd\":0,\"1f476-1f3fe\":0,\"1f476-1f3ff\":0,\"1f477-1f3fb-200d-2640\":0,\"1f477-1f3fc-200d-2640\":0,\"1f477-1f3fd-200d-2640\":0,\"1f477-1f3fe-200d-2640\":0,\"1f477-1f3ff-200d-2640\":0,\"1f477-1f3fb-200d-2642\":0,\"1f477-1f3fc-200d-2642\":0,\"1f477-1f3fd-200d-2642\":0,\"1f477-1f3fe-200d-2642\":0,\"1f477-1f3ff-200d-2642\":0,\"1f477-1f3fb\":0,\"1f477-1f3fc\":0,\"1f477-1f3fd\":0,\"1f477-1f3fe\":0,\"1f477-1f3ff\":0,\"1f478-1f3fb\":0,\"1f478-1f3fc\":0,\"1f478-1f3fd\":0,\"1f478-1f3fe\":0,\"1f478-1f3ff\":0,\"1f47c-1f3fb\":0,\"1f47c-1f3fc\":0,\"1f47c-1f3fd\":0,\"1f47c-1f3fe\":0,\"1f47c-1f3ff\":0,\"1f481-1f3fb-200d-2640\":0,\"1f481-1f3fc-200d-2640\":0,\"1f481-1f3fd-200d-2640\":0,\"1f481-1f3fe-200d-2640\":0,\"1f481-1f3ff-200d-2640\":0,\"1f481-1f3fb-200d-2642\":0,\"1f481-1f3fc-200d-2642\":0,\"1f481-1f3fd-200d-2642\":0,\"1f481-1f3fe-200d-2642\":0,\"1f481-1f3ff-200d-2642\":0,\"1f481-1f3fb\":0,\"1f481-1f3fc\":0,\"1f481-1f3fd\":0,\"1f481-1f3fe\":0,\"1f481-1f3ff\":0,\"1f482-1f3fb-200d-2640\":0,\"1f482-1f3fc-200d-2640\":0,\"1f482-1f3fd-200d-2640\":0,\"1f482-1f3fe-200d-2640\":0,\"1f482-1f3ff-200d-2640\":0,\"1f482-1f3fb-200d-2642\":0,\"1f482-1f3fc-200d-2642\":0,\"1f482-1f3fd-200d-2642\":0,\"1f482-1f3fe-200d-2642\":0,\"1f482-1f3ff-200d-2642\":0,\"1f482-1f3fb\":0,\"1f482-1f3fc\":0,\"1f482-1f3fd\":0,\"1f482-1f3fe\":0,\"1f482-1f3ff\":0,\"1f483-1f3fb\":0,\"1f483-1f3fc\":0,\"1f483-1f3fd\":0,\"1f483-1f3fe\":0,\"1f483-1f3ff\":0,\"1f485-1f3fb\":0,\"1f485-1f3fc\":0,\"1f485-1f3fd\":0,\"1f485-1f3fe\":0,\"1f485-1f3ff\":0,\"1f486-1f3fb-200d-2640\":0,\"1f486-1f3fc-200d-2640\":0,\"1f486-1f3fd-200d-2640\":0,\"1f486-1f3fe-200d-2640\":0,\"1f486-1f3ff-200d-2640\":0,\"1f486-1f3fb-200d-2642\":0,\"1f486-1f3fc-200d-2642\":0,\"1f486-1f3fd-200d-2642\":0,\"1f486-1f3fe-200d-2642\":0,\"1f486-1f3ff-200d-2642\":0,\"1f486-1f3fb\":0,\"1f486-1f3fc\":0,\"1f486-1f3fd\":0,\"1f486-1f3fe\":0,\"1f486-1f3ff\":0,\"1f487-1f3fb-200d-2640\":0,\"1f487-1f3fc-200d-2640\":0,\"1f487-1f3fd-200d-2640\":0,\"1f487-1f3fe-200d-2640\":0,\"1f487-1f3ff-200d-2640\":0,\"1f487-1f3fb-200d-2642\":0,\"1f487-1f3fc-200d-2642\":0,\"1f487-1f3fd-200d-2642\":0,\"1f487-1f3fe-200d-2642\":0,\"1f487-1f3ff-200d-2642\":0,\"1f487-1f3fb\":0,\"1f487-1f3fc\":0,\"1f487-1f3fd\":0,\"1f487-1f3fe\":0,\"1f487-1f3ff\":0,\"1f4aa-1f3fb\":0,\"1f4aa-1f3fc\":0,\"1f4aa-1f3fd\":0,\"1f4aa-1f3fe\":0,\"1f4aa-1f3ff\":0,\"1f574-1f3fb\":0,\"1f574-1f3fc\":0,\"1f574-1f3fd\":0,\"1f574-1f3fe\":0,\"1f574-1f3ff\":0,\"1f575-1f3fb-200d-2640\":0,\"1f575-1f3fc-200d-2640\":0,\"1f575-1f3fd-200d-2640\":0,\"1f575-1f3fe-200d-2640\":0,\"1f575-1f3ff-200d-2640\":0,\"1f575-1f3fb-200d-2642\":0,\"1f575-1f3fc-200d-2642\":0,\"1f575-1f3fd-200d-2642\":0,\"1f575-1f3fe-200d-2642\":0,\"1f575-1f3ff-200d-2642\":0,\"1f575-1f3fb\":0,\"1f575-1f3fc\":0,\"1f575-1f3fd\":0,\"1f575-1f3fe\":0,\"1f575-1f3ff\":0,\"1f57a-1f3fb\":0,\"1f57a-1f3fc\":0,\"1f57a-1f3fd\":0,\"1f57a-1f3fe\":0,\"1f57a-1f3ff\":0,\"1f590-1f3fb\":0,\"1f590-1f3fc\":0,\"1f590-1f3fd\":0,\"1f590-1f3fe\":0,\"1f590-1f3ff\":0,\"1f595-1f3fb\":0,\"1f595-1f3fc\":0,\"1f595-1f3fd\":0,\"1f595-1f3fe\":0,\"1f595-1f3ff\":0,\"1f596-1f3fb\":0,\"1f596-1f3fc\":0,\"1f596-1f3fd\":0,\"1f596-1f3fe\":0,\"1f596-1f3ff\":0,\"1f645-1f3fb-200d-2640\":0,\"1f645-1f3fc-200d-2640\":0,\"1f645-1f3fd-200d-2640\":0,\"1f645-1f3fe-200d-2640\":0,\"1f645-1f3ff-200d-2640\":0,\"1f645-1f3fb-200d-2642\":0,\"1f645-1f3fc-200d-2642\":0,\"1f645-1f3fd-200d-2642\":0,\"1f645-1f3fe-200d-2642\":0,\"1f645-1f3ff-200d-2642\":0,\"1f645-1f3fb\":0,\"1f645-1f3fc\":0,\"1f645-1f3fd\":0,\"1f645-1f3fe\":0,\"1f645-1f3ff\":0,\"1f646-1f3fb-200d-2640\":0,\"1f646-1f3fc-200d-2640\":0,\"1f646-1f3fd-200d-2640\":0,\"1f646-1f3fe-200d-2640\":0,\"1f646-1f3ff-200d-2640\":0,\"1f646-1f3fb-200d-2642\":0,\"1f646-1f3fc-200d-2642\":0,\"1f646-1f3fd-200d-2642\":0,\"1f646-1f3fe-200d-2642\":0,\"1f646-1f3ff-200d-2642\":0,\"1f646-1f3fb\":0,\"1f646-1f3fc\":0,\"1f646-1f3fd\":0,\"1f646-1f3fe\":0,\"1f646-1f3ff\":0,\"1f647-1f3fb-200d-2640\":0,\"1f647-1f3fc-200d-2640\":0,\"1f647-1f3fd-200d-2640\":0,\"1f647-1f3fe-200d-2640\":0,\"1f647-1f3ff-200d-2640\":0,\"1f647-1f3fb-200d-2642\":0,\"1f647-1f3fc-200d-2642\":0,\"1f647-1f3fd-200d-2642\":0,\"1f647-1f3fe-200d-2642\":0,\"1f647-1f3ff-200d-2642\":0,\"1f647-1f3fb\":0,\"1f647-1f3fc\":0,\"1f647-1f3fd\":0,\"1f647-1f3fe\":0,\"1f647-1f3ff\":0,\"1f64b-1f3fb-200d-2640\":0,\"1f64b-1f3fc-200d-2640\":0,\"1f64b-1f3fd-200d-2640\":0,\"1f64b-1f3fe-200d-2640\":0,\"1f64b-1f3ff-200d-2640\":0,\"1f64b-1f3fb-200d-2642\":0,\"1f64b-1f3fc-200d-2642\":0,\"1f64b-1f3fd-200d-2642\":0,\"1f64b-1f3fe-200d-2642\":0,\"1f64b-1f3ff-200d-2642\":0,\"1f64b-1f3fb\":0,\"1f64b-1f3fc\":0,\"1f64b-1f3fd\":0,\"1f64b-1f3fe\":0,\"1f64b-1f3ff\":0,\"1f64c-1f3fb\":0,\"1f64c-1f3fc\":0,\"1f64c-1f3fd\":0,\"1f64c-1f3fe\":0,\"1f64c-1f3ff\":0,\"1f64d-1f3fb-200d-2640\":0,\"1f64d-1f3fc-200d-2640\":0,\"1f64d-1f3fd-200d-2640\":0,\"1f64d-1f3fe-200d-2640\":0,\"1f64d-1f3ff-200d-2640\":0,\"1f64d-1f3fb-200d-2642\":0,\"1f64d-1f3fc-200d-2642\":0,\"1f64d-1f3fd-200d-2642\":0,\"1f64d-1f3fe-200d-2642\":0,\"1f64d-1f3ff-200d-2642\":0,\"1f64d-1f3fb\":0,\"1f64d-1f3fc\":0,\"1f64d-1f3fd\":0,\"1f64d-1f3fe\":0,\"1f64d-1f3ff\":0,\"1f64e-1f3fb-200d-2640\":0,\"1f64e-1f3fc-200d-2640\":0,\"1f64e-1f3fd-200d-2640\":0,\"1f64e-1f3fe-200d-2640\":0,\"1f64e-1f3ff-200d-2640\":0,\"1f64e-1f3fb-200d-2642\":0,\"1f64e-1f3fc-200d-2642\":0,\"1f64e-1f3fd-200d-2642\":0,\"1f64e-1f3fe-200d-2642\":0,\"1f64e-1f3ff-200d-2642\":0,\"1f64e-1f3fb\":0,\"1f64e-1f3fc\":0,\"1f64e-1f3fd\":0,\"1f64e-1f3fe\":0,\"1f64e-1f3ff\":0,\"1f64f-1f3fb\":0,\"1f64f-1f3fc\":0,\"1f64f-1f3fd\":0,\"1f64f-1f3fe\":0,\"1f64f-1f3ff\":0,\"1f6a3-1f3fb-200d-2640\":0,\"1f6a3-1f3fc-200d-2640\":0,\"1f6a3-1f3fd-200d-2640\":0,\"1f6a3-1f3fe-200d-2640\":0,\"1f6a3-1f3ff-200d-2640\":0,\"1f6a3-1f3fb-200d-2642\":0,\"1f6a3-1f3fc-200d-2642\":0,\"1f6a3-1f3fd-200d-2642\":0,\"1f6a3-1f3fe-200d-2642\":0,\"1f6a3-1f3ff-200d-2642\":0,\"1f6a3-1f3fb\":0,\"1f6a3-1f3fc\":0,\"1f6a3-1f3fd\":0,\"1f6a3-1f3fe\":0,\"1f6a3-1f3ff\":0,\"1f6b4-1f3fb-200d-2640\":0,\"1f6b4-1f3fc-200d-2640\":0,\"1f6b4-1f3fd-200d-2640\":0,\"1f6b4-1f3fe-200d-2640\":0,\"1f6b4-1f3ff-200d-2640\":0,\"1f6b4-1f3fb-200d-2642\":0,\"1f6b4-1f3fc-200d-2642\":0,\"1f6b4-1f3fd-200d-2642\":0,\"1f6b4-1f3fe-200d-2642\":0,\"1f6b4-1f3ff-200d-2642\":0,\"1f6b4-1f3fb\":0,\"1f6b4-1f3fc\":0,\"1f6b4-1f3fd\":0,\"1f6b4-1f3fe\":0,\"1f6b4-1f3ff\":0,\"1f6b5-1f3fb-200d-2640\":0,\"1f6b5-1f3fc-200d-2640\":0,\"1f6b5-1f3fd-200d-2640\":0,\"1f6b5-1f3fe-200d-2640\":0,\"1f6b5-1f3ff-200d-2640\":0,\"1f6b5-1f3fb-200d-2642\":0,\"1f6b5-1f3fc-200d-2642\":0,\"1f6b5-1f3fd-200d-2642\":0,\"1f6b5-1f3fe-200d-2642\":0,\"1f6b5-1f3ff-200d-2642\":0,\"1f6b5-1f3fb\":0,\"1f6b5-1f3fc\":0,\"1f6b5-1f3fd\":0,\"1f6b5-1f3fe\":0,\"1f6b5-1f3ff\":0,\"1f6b6-1f3fb-200d-2640\":0,\"1f6b6-1f3fc-200d-2640\":0,\"1f6b6-1f3fd-200d-2640\":0,\"1f6b6-1f3fe-200d-2640\":0,\"1f6b6-1f3ff-200d-2640\":0,\"1f6b6-1f3fb-200d-2642\":0,\"1f6b6-1f3fc-200d-2642\":0,\"1f6b6-1f3fd-200d-2642\":0,\"1f6b6-1f3fe-200d-2642\":0,\"1f6b6-1f3ff-200d-2642\":0,\"1f6b6-1f3fb\":0,\"1f6b6-1f3fc\":0,\"1f6b6-1f3fd\":0,\"1f6b6-1f3fe\":0,\"1f6b6-1f3ff\":0,\"1f6c0-1f3fb\":0,\"1f6c0-1f3fc\":0,\"1f6c0-1f3fd\":0,\"1f6c0-1f3fe\":0,\"1f6c0-1f3ff\":0,\"1f6cc-1f3fb\":0,\"1f6cc-1f3fc\":0,\"1f6cc-1f3fd\":0,\"1f6cc-1f3fe\":0,\"1f6cc-1f3ff\":0,\"1f90c-1f3fb\":0,\"1f90c-1f3fc\":0,\"1f90c-1f3fd\":0,\"1f90c-1f3fe\":0,\"1f90c-1f3ff\":0,\"1f90f-1f3fb\":0,\"1f90f-1f3fc\":0,\"1f90f-1f3fd\":0,\"1f90f-1f3fe\":0,\"1f90f-1f3ff\":0,\"1f918-1f3fb\":0,\"1f918-1f3fc\":0,\"1f918-1f3fd\":0,\"1f918-1f3fe\":0,\"1f918-1f3ff\":0,\"1f919-1f3fb\":0,\"1f919-1f3fc\":0,\"1f919-1f3fd\":0,\"1f919-1f3fe\":0,\"1f919-1f3ff\":0,\"1f91a-1f3fb\":0,\"1f91a-1f3fc\":0,\"1f91a-1f3fd\":0,\"1f91a-1f3fe\":0,\"1f91a-1f3ff\":0,\"1f91b-1f3fb\":0,\"1f91b-1f3fc\":0,\"1f91b-1f3fd\":0,\"1f91b-1f3fe\":0,\"1f91b-1f3ff\":0,\"1f91c-1f3fb\":0,\"1f91c-1f3fc\":0,\"1f91c-1f3fd\":0,\"1f91c-1f3fe\":0,\"1f91c-1f3ff\":0,\"1f91e-1f3fb\":0,\"1f91e-1f3fc\":0,\"1f91e-1f3fd\":0,\"1f91e-1f3fe\":0,\"1f91e-1f3ff\":0,\"1f91f-1f3fb\":0,\"1f91f-1f3fc\":0,\"1f91f-1f3fd\":0,\"1f91f-1f3fe\":0,\"1f91f-1f3ff\":0,\"1f926-1f3fb-200d-2640\":0,\"1f926-1f3fc-200d-2640\":0,\"1f926-1f3fd-200d-2640\":0,\"1f926-1f3fe-200d-2640\":0,\"1f926-1f3ff-200d-2640\":0,\"1f926-1f3fb-200d-2642\":0,\"1f926-1f3fc-200d-2642\":0,\"1f926-1f3fd-200d-2642\":0,\"1f926-1f3fe-200d-2642\":0,\"1f926-1f3ff-200d-2642\":0,\"1f926-1f3fb\":0,\"1f926-1f3fc\":0,\"1f926-1f3fd\":0,\"1f926-1f3fe\":0,\"1f926-1f3ff\":0,\"1f930-1f3fb\":0,\"1f930-1f3fc\":0,\"1f930-1f3fd\":0,\"1f930-1f3fe\":0,\"1f930-1f3ff\":0,\"1f931-1f3fb\":0,\"1f931-1f3fc\":0,\"1f931-1f3fd\":0,\"1f931-1f3fe\":0,\"1f931-1f3ff\":0,\"1f932-1f3fb\":0,\"1f932-1f3fc\":0,\"1f932-1f3fd\":0,\"1f932-1f3fe\":0,\"1f932-1f3ff\":0,\"1f933-1f3fb\":0,\"1f933-1f3fc\":0,\"1f933-1f3fd\":0,\"1f933-1f3fe\":0,\"1f933-1f3ff\":0,\"1f934-1f3fb\":0,\"1f934-1f3fc\":0,\"1f934-1f3fd\":0,\"1f934-1f3fe\":0,\"1f934-1f3ff\":0,\"1f935-1f3fb-200d-2640\":0,\"1f935-1f3fc-200d-2640\":0,\"1f935-1f3fd-200d-2640\":0,\"1f935-1f3fe-200d-2640\":0,\"1f935-1f3ff-200d-2640\":0,\"1f935-1f3fb-200d-2642\":0,\"1f935-1f3fc-200d-2642\":0,\"1f935-1f3fd-200d-2642\":0,\"1f935-1f3fe-200d-2642\":0,\"1f935-1f3ff-200d-2642\":0,\"1f935-1f3fb\":0,\"1f935-1f3fc\":0,\"1f935-1f3fd\":0,\"1f935-1f3fe\":0,\"1f935-1f3ff\":0,\"1f936-1f3fb\":0,\"1f936-1f3fc\":0,\"1f936-1f3fd\":0,\"1f936-1f3fe\":0,\"1f936-1f3ff\":0,\"1f937-1f3fb-200d-2640\":0,\"1f937-1f3fc-200d-2640\":0,\"1f937-1f3fd-200d-2640\":0,\"1f937-1f3fe-200d-2640\":0,\"1f937-1f3ff-200d-2640\":0,\"1f937-1f3fb-200d-2642\":0,\"1f937-1f3fc-200d-2642\":0,\"1f937-1f3fd-200d-2642\":0,\"1f937-1f3fe-200d-2642\":0,\"1f937-1f3ff-200d-2642\":0,\"1f937-1f3fb\":0,\"1f937-1f3fc\":0,\"1f937-1f3fd\":0,\"1f937-1f3fe\":0,\"1f937-1f3ff\":0,\"1f938-1f3fb-200d-2640\":0,\"1f938-1f3fc-200d-2640\":0,\"1f938-1f3fd-200d-2640\":0,\"1f938-1f3fe-200d-2640\":0,\"1f938-1f3ff-200d-2640\":0,\"1f938-1f3fb-200d-2642\":0,\"1f938-1f3fc-200d-2642\":0,\"1f938-1f3fd-200d-2642\":0,\"1f938-1f3fe-200d-2642\":0,\"1f938-1f3ff-200d-2642\":0,\"1f938-1f3fb\":0,\"1f938-1f3fc\":0,\"1f938-1f3fd\":0,\"1f938-1f3fe\":0,\"1f938-1f3ff\":0,\"1f939-1f3fb-200d-2640\":0,\"1f939-1f3fc-200d-2640\":0,\"1f939-1f3fd-200d-2640\":0,\"1f939-1f3fe-200d-2640\":0,\"1f939-1f3ff-200d-2640\":0,\"1f939-1f3fb-200d-2642\":0,\"1f939-1f3fc-200d-2642\":0,\"1f939-1f3fd-200d-2642\":0,\"1f939-1f3fe-200d-2642\":0,\"1f939-1f3ff-200d-2642\":0,\"1f939-1f3fb\":0,\"1f939-1f3fc\":0,\"1f939-1f3fd\":0,\"1f939-1f3fe\":0,\"1f939-1f3ff\":0,\"1f93d-1f3fb-200d-2640\":0,\"1f93d-1f3fc-200d-2640\":0,\"1f93d-1f3fd-200d-2640\":0,\"1f93d-1f3fe-200d-2640\":0,\"1f93d-1f3ff-200d-2640\":0,\"1f93d-1f3fb-200d-2642\":0,\"1f93d-1f3fc-200d-2642\":0,\"1f93d-1f3fd-200d-2642\":0,\"1f93d-1f3fe-200d-2642\":0,\"1f93d-1f3ff-200d-2642\":0,\"1f93d-1f3fb\":0,\"1f93d-1f3fc\":0,\"1f93d-1f3fd\":0,\"1f93d-1f3fe\":0,\"1f93d-1f3ff\":0,\"1f93e-1f3fb-200d-2640\":0,\"1f93e-1f3fc-200d-2640\":0,\"1f93e-1f3fd-200d-2640\":0,\"1f93e-1f3fe-200d-2640\":0,\"1f93e-1f3ff-200d-2640\":0,\"1f93e-1f3fb-200d-2642\":0,\"1f93e-1f3fc-200d-2642\":0,\"1f93e-1f3fd-200d-2642\":0,\"1f93e-1f3fe-200d-2642\":0,\"1f93e-1f3ff-200d-2642\":0,\"1f93e-1f3fb\":0,\"1f93e-1f3fc\":0,\"1f93e-1f3fd\":0,\"1f93e-1f3fe\":0,\"1f93e-1f3ff\":0,\"1f977-1f3fb\":0,\"1f977-1f3fc\":0,\"1f977-1f3fd\":0,\"1f977-1f3fe\":0,\"1f977-1f3ff\":0,\"1f9b5-1f3fb\":0,\"1f9b5-1f3fc\":0,\"1f9b5-1f3fd\":0,\"1f9b5-1f3fe\":0,\"1f9b5-1f3ff\":0,\"1f9b6-1f3fb\":0,\"1f9b6-1f3fc\":0,\"1f9b6-1f3fd\":0,\"1f9b6-1f3fe\":0,\"1f9b6-1f3ff\":0,\"1f9b8-1f3fb-200d-2640\":0,\"1f9b8-1f3fc-200d-2640\":0,\"1f9b8-1f3fd-200d-2640\":0,\"1f9b8-1f3fe-200d-2640\":0,\"1f9b8-1f3ff-200d-2640\":0,\"1f9b8-1f3fb-200d-2642\":0,\"1f9b8-1f3fc-200d-2642\":0,\"1f9b8-1f3fd-200d-2642\":0,\"1f9b8-1f3fe-200d-2642\":0,\"1f9b8-1f3ff-200d-2642\":0,\"1f9b8-1f3fb\":0,\"1f9b8-1f3fc\":0,\"1f9b8-1f3fd\":0,\"1f9b8-1f3fe\":0,\"1f9b8-1f3ff\":0,\"1f9b9-1f3fb-200d-2640\":0,\"1f9b9-1f3fc-200d-2640\":0,\"1f9b9-1f3fd-200d-2640\":0,\"1f9b9-1f3fe-200d-2640\":0,\"1f9b9-1f3ff-200d-2640\":0,\"1f9b9-1f3fb-200d-2642\":0,\"1f9b9-1f3fc-200d-2642\":0,\"1f9b9-1f3fd-200d-2642\":0,\"1f9b9-1f3fe-200d-2642\":0,\"1f9b9-1f3ff-200d-2642\":0,\"1f9b9-1f3fb\":0,\"1f9b9-1f3fc\":0,\"1f9b9-1f3fd\":0,\"1f9b9-1f3fe\":0,\"1f9b9-1f3ff\":0,\"1f9bb-1f3fb\":0,\"1f9bb-1f3fc\":0,\"1f9bb-1f3fd\":0,\"1f9bb-1f3fe\":0,\"1f9bb-1f3ff\":0,\"1f9cd-1f3fb-200d-2640\":0,\"1f9cd-1f3fc-200d-2640\":0,\"1f9cd-1f3fd-200d-2640\":0,\"1f9cd-1f3fe-200d-2640\":0,\"1f9cd-1f3ff-200d-2640\":0,\"1f9cd-1f3fb-200d-2642\":0,\"1f9cd-1f3fc-200d-2642\":0,\"1f9cd-1f3fd-200d-2642\":0,\"1f9cd-1f3fe-200d-2642\":0,\"1f9cd-1f3ff-200d-2642\":0,\"1f9cd-1f3fb\":0,\"1f9cd-1f3fc\":0,\"1f9cd-1f3fd\":0,\"1f9cd-1f3fe\":0,\"1f9cd-1f3ff\":0,\"1f9ce-1f3fb-200d-2640\":0,\"1f9ce-1f3fc-200d-2640\":0,\"1f9ce-1f3fd-200d-2640\":0,\"1f9ce-1f3fe-200d-2640\":0,\"1f9ce-1f3ff-200d-2640\":0,\"1f9ce-1f3fb-200d-2642\":0,\"1f9ce-1f3fc-200d-2642\":0,\"1f9ce-1f3fd-200d-2642\":0,\"1f9ce-1f3fe-200d-2642\":0,\"1f9ce-1f3ff-200d-2642\":0,\"1f9ce-1f3fb\":0,\"1f9ce-1f3fc\":0,\"1f9ce-1f3fd\":0,\"1f9ce-1f3fe\":0,\"1f9ce-1f3ff\":0,\"1f9cf-1f3fb-200d-2640\":0,\"1f9cf-1f3fc-200d-2640\":0,\"1f9cf-1f3fd-200d-2640\":0,\"1f9cf-1f3fe-200d-2640\":0,\"1f9cf-1f3ff-200d-2640\":0,\"1f9cf-1f3fb-200d-2642\":0,\"1f9cf-1f3fc-200d-2642\":0,\"1f9cf-1f3fd-200d-2642\":0,\"1f9cf-1f3fe-200d-2642\":0,\"1f9cf-1f3ff-200d-2642\":0,\"1f9cf-1f3fb\":0,\"1f9cf-1f3fc\":0,\"1f9cf-1f3fd\":0,\"1f9cf-1f3fe\":0,\"1f9cf-1f3ff\":0,\"1f9d1-1f3fb-200d-1f33e\":0,\"1f9d1-1f3fc-200d-1f33e\":0,\"1f9d1-1f3fd-200d-1f33e\":0,\"1f9d1-1f3fe-200d-1f33e\":0,\"1f9d1-1f3ff-200d-1f33e\":0,\"1f9d1-1f3fb-200d-1f373\":0,\"1f9d1-1f3fc-200d-1f373\":0,\"1f9d1-1f3fd-200d-1f373\":0,\"1f9d1-1f3fe-200d-1f373\":0,\"1f9d1-1f3ff-200d-1f373\":0,\"1f9d1-1f3fb-200d-1f37c\":0,\"1f9d1-1f3fc-200d-1f37c\":0,\"1f9d1-1f3fd-200d-1f37c\":0,\"1f9d1-1f3fe-200d-1f37c\":0,\"1f9d1-1f3ff-200d-1f37c\":0,\"1f9d1-1f3fb-200d-1f384\":0,\"1f9d1-1f3fc-200d-1f384\":0,\"1f9d1-1f3fd-200d-1f384\":0,\"1f9d1-1f3fe-200d-1f384\":0,\"1f9d1-1f3ff-200d-1f384\":0,\"1f9d1-1f3fb-200d-1f393\":0,\"1f9d1-1f3fc-200d-1f393\":0,\"1f9d1-1f3fd-200d-1f393\":0,\"1f9d1-1f3fe-200d-1f393\":0,\"1f9d1-1f3ff-200d-1f393\":0,\"1f9d1-1f3fb-200d-1f3a4\":0,\"1f9d1-1f3fc-200d-1f3a4\":0,\"1f9d1-1f3fd-200d-1f3a4\":0,\"1f9d1-1f3fe-200d-1f3a4\":0,\"1f9d1-1f3ff-200d-1f3a4\":0,\"1f9d1-1f3fb-200d-1f3a8\":0,\"1f9d1-1f3fc-200d-1f3a8\":0,\"1f9d1-1f3fd-200d-1f3a8\":0,\"1f9d1-1f3fe-200d-1f3a8\":0,\"1f9d1-1f3ff-200d-1f3a8\":0,\"1f9d1-1f3fb-200d-1f3eb\":0,\"1f9d1-1f3fc-200d-1f3eb\":0,\"1f9d1-1f3fd-200d-1f3eb\":0,\"1f9d1-1f3fe-200d-1f3eb\":0,\"1f9d1-1f3ff-200d-1f3eb\":0,\"1f9d1-1f3fb-200d-1f3ed\":0,\"1f9d1-1f3fc-200d-1f3ed\":0,\"1f9d1-1f3fd-200d-1f3ed\":0,\"1f9d1-1f3fe-200d-1f3ed\":0,\"1f9d1-1f3ff-200d-1f3ed\":0,\"1f9d1-1f3fb-200d-1f4bb\":0,\"1f9d1-1f3fc-200d-1f4bb\":0,\"1f9d1-1f3fd-200d-1f4bb\":0,\"1f9d1-1f3fe-200d-1f4bb\":0,\"1f9d1-1f3ff-200d-1f4bb\":0,\"1f9d1-1f3fb-200d-1f4bc\":0,\"1f9d1-1f3fc-200d-1f4bc\":0,\"1f9d1-1f3fd-200d-1f4bc\":0,\"1f9d1-1f3fe-200d-1f4bc\":0,\"1f9d1-1f3ff-200d-1f4bc\":0,\"1f9d1-1f3fb-200d-1f527\":0,\"1f9d1-1f3fc-200d-1f527\":0,\"1f9d1-1f3fd-200d-1f527\":0,\"1f9d1-1f3fe-200d-1f527\":0,\"1f9d1-1f3ff-200d-1f527\":0,\"1f9d1-1f3fb-200d-1f52c\":0,\"1f9d1-1f3fc-200d-1f52c\":0,\"1f9d1-1f3fd-200d-1f52c\":0,\"1f9d1-1f3fe-200d-1f52c\":0,\"1f9d1-1f3ff-200d-1f52c\":0,\"1f9d1-1f3fb-200d-1f680\":0,\"1f9d1-1f3fc-200d-1f680\":0,\"1f9d1-1f3fd-200d-1f680\":0,\"1f9d1-1f3fe-200d-1f680\":0,\"1f9d1-1f3ff-200d-1f680\":0,\"1f9d1-1f3fb-200d-1f692\":0,\"1f9d1-1f3fc-200d-1f692\":0,\"1f9d1-1f3fd-200d-1f692\":0,\"1f9d1-1f3fe-200d-1f692\":0,\"1f9d1-1f3ff-200d-1f692\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe\":0,\"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff\":0,\"1f9d1-1f3fb-200d-1f9af\":0,\"1f9d1-1f3fc-200d-1f9af\":0,\"1f9d1-1f3fd-200d-1f9af\":0,\"1f9d1-1f3fe-200d-1f9af\":0,\"1f9d1-1f3ff-200d-1f9af\":0,\"1f9d1-1f3fb-200d-1f9b0\":0,\"1f9d1-1f3fc-200d-1f9b0\":0,\"1f9d1-1f3fd-200d-1f9b0\":0,\"1f9d1-1f3fe-200d-1f9b0\":0,\"1f9d1-1f3ff-200d-1f9b0\":0,\"1f9d1-1f3fb-200d-1f9b1\":0,\"1f9d1-1f3fc-200d-1f9b1\":0,\"1f9d1-1f3fd-200d-1f9b1\":0,\"1f9d1-1f3fe-200d-1f9b1\":0,\"1f9d1-1f3ff-200d-1f9b1\":0,\"1f9d1-1f3fb-200d-1f9b2\":0,\"1f9d1-1f3fc-200d-1f9b2\":0,\"1f9d1-1f3fd-200d-1f9b2\":0,\"1f9d1-1f3fe-200d-1f9b2\":0,\"1f9d1-1f3ff-200d-1f9b2\":0,\"1f9d1-1f3fb-200d-1f9b3\":0,\"1f9d1-1f3fc-200d-1f9b3\":0,\"1f9d1-1f3fd-200d-1f9b3\":0,\"1f9d1-1f3fe-200d-1f9b3\":0,\"1f9d1-1f3ff-200d-1f9b3\":0,\"1f9d1-1f3fb-200d-1f9bc\":0,\"1f9d1-1f3fc-200d-1f9bc\":0,\"1f9d1-1f3fd-200d-1f9bc\":0,\"1f9d1-1f3fe-200d-1f9bc\":0,\"1f9d1-1f3ff-200d-1f9bc\":0,\"1f9d1-1f3fb-200d-1f9bd\":0,\"1f9d1-1f3fc-200d-1f9bd\":0,\"1f9d1-1f3fd-200d-1f9bd\":0,\"1f9d1-1f3fe-200d-1f9bd\":0,\"1f9d1-1f3ff-200d-1f9bd\":0,\"1f9d1-1f3fb-200d-2695\":0,\"1f9d1-1f3fc-200d-2695\":0,\"1f9d1-1f3fd-200d-2695\":0,\"1f9d1-1f3fe-200d-2695\":0,\"1f9d1-1f3ff-200d-2695\":0,\"1f9d1-1f3fb-200d-2696\":0,\"1f9d1-1f3fc-200d-2696\":0,\"1f9d1-1f3fd-200d-2696\":0,\"1f9d1-1f3fe-200d-2696\":0,\"1f9d1-1f3ff-200d-2696\":0,\"1f9d1-1f3fb-200d-2708\":0,\"1f9d1-1f3fc-200d-2708\":0,\"1f9d1-1f3fd-200d-2708\":0,\"1f9d1-1f3fe-200d-2708\":0,\"1f9d1-1f3ff-200d-2708\":0,\"1f9d1-1f3fb\":0,\"1f9d1-1f3fc\":0,\"1f9d1-1f3fd\":0,\"1f9d1-1f3fe\":0,\"1f9d1-1f3ff\":0,\"1f9d2-1f3fb\":0,\"1f9d2-1f3fc\":0,\"1f9d2-1f3fd\":0,\"1f9d2-1f3fe\":0,\"1f9d2-1f3ff\":0,\"1f9d3-1f3fb\":0,\"1f9d3-1f3fc\":0,\"1f9d3-1f3fd\":0,\"1f9d3-1f3fe\":0,\"1f9d3-1f3ff\":0,\"1f9d4-1f3fb\":0,\"1f9d4-1f3fc\":0,\"1f9d4-1f3fd\":0,\"1f9d4-1f3fe\":0,\"1f9d4-1f3ff\":0,\"1f9d5-1f3fb\":0,\"1f9d5-1f3fc\":0,\"1f9d5-1f3fd\":0,\"1f9d5-1f3fe\":0,\"1f9d5-1f3ff\":0,\"1f9d6-1f3fb-200d-2640\":0,\"1f9d6-1f3fc-200d-2640\":0,\"1f9d6-1f3fd-200d-2640\":0,\"1f9d6-1f3fe-200d-2640\":0,\"1f9d6-1f3ff-200d-2640\":0,\"1f9d6-1f3fb-200d-2642\":0,\"1f9d6-1f3fc-200d-2642\":0,\"1f9d6-1f3fd-200d-2642\":0,\"1f9d6-1f3fe-200d-2642\":0,\"1f9d6-1f3ff-200d-2642\":0,\"1f9d6-1f3fb\":0,\"1f9d6-1f3fc\":0,\"1f9d6-1f3fd\":0,\"1f9d6-1f3fe\":0,\"1f9d6-1f3ff\":0,\"1f9d7-1f3fb-200d-2640\":0,\"1f9d7-1f3fc-200d-2640\":0,\"1f9d7-1f3fd-200d-2640\":0,\"1f9d7-1f3fe-200d-2640\":0,\"1f9d7-1f3ff-200d-2640\":0,\"1f9d7-1f3fb-200d-2642\":0,\"1f9d7-1f3fc-200d-2642\":0,\"1f9d7-1f3fd-200d-2642\":0,\"1f9d7-1f3fe-200d-2642\":0,\"1f9d7-1f3ff-200d-2642\":0,\"1f9d7-1f3fb\":0,\"1f9d7-1f3fc\":0,\"1f9d7-1f3fd\":0,\"1f9d7-1f3fe\":0,\"1f9d7-1f3ff\":0,\"1f9d8-1f3fb-200d-2640\":0,\"1f9d8-1f3fc-200d-2640\":0,\"1f9d8-1f3fd-200d-2640\":0,\"1f9d8-1f3fe-200d-2640\":0,\"1f9d8-1f3ff-200d-2640\":0,\"1f9d8-1f3fb-200d-2642\":0,\"1f9d8-1f3fc-200d-2642\":0,\"1f9d8-1f3fd-200d-2642\":0,\"1f9d8-1f3fe-200d-2642\":0,\"1f9d8-1f3ff-200d-2642\":0,\"1f9d8-1f3fb\":0,\"1f9d8-1f3fc\":0,\"1f9d8-1f3fd\":0,\"1f9d8-1f3fe\":0,\"1f9d8-1f3ff\":0,\"1f9d9-1f3fb-200d-2640\":0,\"1f9d9-1f3fc-200d-2640\":0,\"1f9d9-1f3fd-200d-2640\":0,\"1f9d9-1f3fe-200d-2640\":0,\"1f9d9-1f3ff-200d-2640\":0,\"1f9d9-1f3fb-200d-2642\":0,\"1f9d9-1f3fc-200d-2642\":0,\"1f9d9-1f3fd-200d-2642\":0,\"1f9d9-1f3fe-200d-2642\":0,\"1f9d9-1f3ff-200d-2642\":0,\"1f9d9-1f3fb\":0,\"1f9d9-1f3fc\":0,\"1f9d9-1f3fd\":0,\"1f9d9-1f3fe\":0,\"1f9d9-1f3ff\":0,\"1f9da-1f3fb-200d-2640\":0,\"1f9da-1f3fc-200d-2640\":0,\"1f9da-1f3fd-200d-2640\":0,\"1f9da-1f3fe-200d-2640\":0,\"1f9da-1f3ff-200d-2640\":0,\"1f9da-1f3fb-200d-2642\":0,\"1f9da-1f3fc-200d-2642\":0,\"1f9da-1f3fd-200d-2642\":0,\"1f9da-1f3fe-200d-2642\":0,\"1f9da-1f3ff-200d-2642\":0,\"1f9da-1f3fb\":0,\"1f9da-1f3fc\":0,\"1f9da-1f3fd\":0,\"1f9da-1f3fe\":0,\"1f9da-1f3ff\":0,\"1f9db-1f3fb-200d-2640\":0,\"1f9db-1f3fc-200d-2640\":0,\"1f9db-1f3fd-200d-2640\":0,\"1f9db-1f3fe-200d-2640\":0,\"1f9db-1f3ff-200d-2640\":0,\"1f9db-1f3fb-200d-2642\":0,\"1f9db-1f3fc-200d-2642\":0,\"1f9db-1f3fd-200d-2642\":0,\"1f9db-1f3fe-200d-2642\":0,\"1f9db-1f3ff-200d-2642\":0,\"1f9db-1f3fb\":0,\"1f9db-1f3fc\":0,\"1f9db-1f3fd\":0,\"1f9db-1f3fe\":0,\"1f9db-1f3ff\":0,\"1f9dc-1f3fb-200d-2640\":0,\"1f9dc-1f3fc-200d-2640\":0,\"1f9dc-1f3fd-200d-2640\":0,\"1f9dc-1f3fe-200d-2640\":0,\"1f9dc-1f3ff-200d-2640\":0,\"1f9dc-1f3fb-200d-2642\":0,\"1f9dc-1f3fc-200d-2642\":0,\"1f9dc-1f3fd-200d-2642\":0,\"1f9dc-1f3fe-200d-2642\":0,\"1f9dc-1f3ff-200d-2642\":0,\"1f9dc-1f3fb\":0,\"1f9dc-1f3fc\":0,\"1f9dc-1f3fd\":0,\"1f9dc-1f3fe\":0,\"1f9dc-1f3ff\":0,\"1f9dd-1f3fb-200d-2640\":0,\"1f9dd-1f3fc-200d-2640\":0,\"1f9dd-1f3fd-200d-2640\":0,\"1f9dd-1f3fe-200d-2640\":0,\"1f9dd-1f3ff-200d-2640\":0,\"1f9dd-1f3fb-200d-2642\":0,\"1f9dd-1f3fc-200d-2642\":0,\"1f9dd-1f3fd-200d-2642\":0,\"1f9dd-1f3fe-200d-2642\":0,\"1f9dd-1f3ff-200d-2642\":0,\"1f9dd-1f3fb\":0,\"1f9dd-1f3fc\":0,\"1f9dd-1f3fd\":0,\"1f9dd-1f3fe\":0,\"1f9dd-1f3ff\":0,\"261d-1f3fb\":0,\"261d-1f3fc\":0,\"261d-1f3fd\":0,\"261d-1f3fe\":0,\"261d-1f3ff\":0,\"26f9-1f3fb-200d-2640\":0,\"26f9-1f3fc-200d-2640\":0,\"26f9-1f3fd-200d-2640\":0,\"26f9-1f3fe-200d-2640\":0,\"26f9-1f3ff-200d-2640\":0,\"26f9-1f3fb-200d-2642\":0,\"26f9-1f3fc-200d-2642\":0,\"26f9-1f3fd-200d-2642\":0,\"26f9-1f3fe-200d-2642\":0,\"26f9-1f3ff-200d-2642\":0,\"26f9-1f3fb\":0,\"26f9-1f3fc\":0,\"26f9-1f3fd\":0,\"26f9-1f3fe\":0,\"26f9-1f3ff\":0,\"270a-1f3fb\":0,\"270a-1f3fc\":0,\"270a-1f3fd\":0,\"270a-1f3fe\":0,\"270a-1f3ff\":0,\"270b-1f3fb\":0,\"270b-1f3fc\":0,\"270b-1f3fd\":0,\"270b-1f3fe\":0,\"270b-1f3ff\":0,\"270c-1f3fb\":0,\"270c-1f3fc\":0,\"270c-1f3fd\":0,\"270c-1f3fe\":0,\"270c-1f3ff\":0,\"270d-1f3fb\":0,\"270d-1f3fc\":0,\"270d-1f3fd\":0,\"270d-1f3fe\":0,\"270d-1f3ff\":0};\r\n\r\n/* Emoji[\"00a9-fe0f\"] = 6362;\r\nEmoji[\"00ae-fe0f\"] = 6363;\r\nEmoji[\"2122-fe0f\"] = 6364; */\r\n\r\n// From https://github.com/stephenmathieson/node-tlds/blob/master/index.js\r\nexport const TLD = ['abogado', 'ac', 'academy', 'accountants', 'active', 'actor', 'ad', 'adult', 'ae', 'aero', 'af', 'ag', 'agency', 'ai', 'airforce', 'al', 'allfinanz', 'alsace', 'am', 'amsterdam', 'an', 'android', 'ao', 'apartments', 'aq', 'aquarelle', 'ar', 'archi', 'army', 'arpa', 'as', 'asia', 'associates', 'at', 'attorney', 'au', 'auction', 'audio', 'autos', 'aw', 'ax', 'axa', 'az', 'ba', 'band', 'bank', 'bar', 'barclaycard', 'barclays', 'bargains', 'bayern', 'bb', 'bd', 'be', 'beer', 'berlin', 'best', 'bf', 'bg', 'bh', 'bi', 'bid', 'bike', 'bingo', 'bio', 'biz', 'bj', 'black', 'blackfriday', 'bloomberg', 'blue', 'bm', 'bmw', 'bn', 'bnpparibas', 'bo', 'boo', 'boutique', 'br', 'brussels', 'bs', 'bt', 'budapest', 'build', 'builders', 'business', 'buzz', 'bv', 'bw', 'by', 'bz', 'bzh', 'ca', 'cab', 'cal', 'camera', 'camp', 'cancerresearch', 'canon', 'capetown', 'capital', 'caravan', 'cards', 'care', 'career', 'careers', 'cartier', 'casa', 'cash', 'cat', 'catering', 'cc', 'cd', 'center', 'ceo', 'cern', 'cf', 'cg', 'ch', 'channel', 'chat', 'cheap', 'christmas', 'chrome', 'church', 'ci', 'citic', 'city', 'ck', 'cl', 'claims', 'cleaning', 'click', 'clinic', 'clothing', 'club', 'cm', 'cn', 'co', 'coach', 'codes', 'coffee', 'college', 'cologne', 'com', 'community', 'company', 'computer', 'condos', 'construction', 'consulting', 'contractors', 'cooking', 'cool', 'coop', 'country', 'cr', 'credit', 'creditcard', 'cricket', 'crs', 'cruises', 'cu', 'cuisinella', 'cv', 'cw', 'cx', 'cy', 'cymru', 'cz', 'dabur', 'dad', 'dance', 'dating', 'day', 'dclk', 'de', 'deals', 'degree', 'delivery', 'democrat', 'dental', 'dentist', 'desi', 'design', 'dev', 'diamonds', 'diet', 'digital', 'direct', 'directory', 'discount', 'dj', 'dk', 'dm', 'dnp', 'do', 'docs', 'domains', 'doosan', 'durban', 'dvag', 'dz', 'eat', 'ec', 'edu', 'education', 'ee', 'eg', 'email', 'emerck', 'energy', 'engineer', 'engineering', 'enterprises', 'equipment', 'er', 'es', 'esq', 'estate', 'et', 'eu', 'eurovision', 'eus', 'events', 'everbank', 'exchange', 'expert', 'exposed', 'fail', 'farm', 'fashion', 'feedback', 'fi', 'finance', 'financial', 'firmdale', 'fish', 'fishing', 'fit', 'fitness', 'fj', 'fk', 'flights', 'florist', 'flowers', 'flsmidth', 'fly', 'fm', 'fo', 'foo', 'forsale', 'foundation', 'fr', 'frl', 'frogans', 'fund', 'furniture', 'futbol', 'ga', 'gal', 'gallery', 'garden', 'gb', 'gbiz', 'gd', 'ge', 'gent', 'gf', 'gg', 'ggee', 'gh', 'gi', 'gift', 'gifts', 'gives', 'gl', 'glass', 'gle', 'global', 'globo', 'gm', 'gmail', 'gmo', 'gmx', 'gn', 'goog', 'google', 'gop', 'gov', 'gp', 'gq', 'gr', 'graphics', 'gratis', 'green', 'gripe', 'gs', 'gt', 'gu', 'guide', 'guitars', 'guru', 'gw', 'gy', 'hamburg', 'hangout', 'haus', 'healthcare', 'help', 'here', 'hermes', 'hiphop', 'hiv', 'hk', 'hm', 'hn', 'holdings', 'holiday', 'homes', 'horse', 'host', 'hosting', 'house', 'how', 'hr', 'ht', 'hu', 'ibm', 'id', 'ie', 'ifm', 'il', 'im', 'immo', 'immobilien', 'in', 'industries', 'info', 'ing', 'ink', 'institute', 'insure', 'int', 'international', 'investments', 'io', 'iq', 'ir', 'irish', 'is', 'it', 'iwc', 'jcb', 'je', 'jetzt', 'jm', 'jo', 'jobs', 'joburg', 'jp', 'juegos', 'kaufen', 'kddi', 'ke', 'kg', 'kh', 'ki', 'kim', 'kitchen', 'kiwi', 'km', 'kn', 'koeln', 'kp', 'kr', 'krd', 'kred', 'kw', 'ky', 'kyoto', 'kz', 'la', 'lacaixa', 'land', 'lat', 'latrobe', 'lawyer', 'lb', 'lc', 'lds', 'lease', 'legal', 'lgbt', 'li', 'lidl', 'life', 'lighting', 'limited', 'limo', 'link', 'lk', 'loans', 'london', 'lotte', 'lotto', 'lr', 'ls', 'lt', 'ltda', 'lu', 'luxe', 'luxury', 'lv', 'ly', 'ma', 'madrid', 'maison', 'management', 'mango', 'market', 'marketing', 'marriott', 'mc', 'md', 'me', 'media', 'meet', 'melbourne', 'meme', 'memorial', 'menu', 'mg', 'mh', 'miami', 'mil', 'mini', 'mk', 'ml', 'mm', 'mn', 'mo', 'mobi', 'moda', 'moe', 'monash', 'money', 'mormon', 'mortgage', 'moscow', 'motorcycles', 'mov', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nagoya', 'name', 'navy', 'nc', 'ne', 'net', 'network', 'neustar', 'new', 'nexus', 'nf', 'ng', 'ngo', 'nhk', 'ni', 'nico', 'ninja', 'nl', 'no', 'np', 'nr', 'nra', 'nrw', 'ntt', 'nu', 'nyc', 'nz', 'okinawa', 'om', 'one', 'ong', 'onl', 'ooo', 'org', 'organic', 'osaka', 'otsuka', 'ovh', 'pa', 'paris', 'partners', 'parts', 'party', 'pe', 'pf', 'pg', 'ph', 'pharmacy', 'photo', 'photography', 'photos', 'physio', 'pics', 'pictures', 'pink', 'pizza', 'pk', 'pl', 'place', 'plumbing', 'pm', 'pn', 'pohl', 'poker', 'porn', 'post', 'pr', 'praxi', 'press', 'pro', 'prod', 'productions', 'prof', 'properties', 'property', 'ps', 'pt', 'pub', 'pw', 'py', 'qa', 'qpon', 'quebec', 're', 'realtor', 'recipes', 'red', 'rehab', 'reise', 'reisen', 'reit', 'ren', 'rentals', 'repair', 'report', 'republican', 'rest', 'restaurant', 'reviews', 'rich', 'rio', 'rip', 'ro', 'rocks', 'rodeo', 'rs', 'rsvp', 'ru', 'ruhr', 'rw', 'ryukyu', 'sa', 'saarland', 'sale', 'samsung', 'sarl', 'saxo', 'sb', 'sc', 'sca', 'scb', 'schmidt', 'schule', 'schwarz', 'science', 'scot', 'sd', 'se', 'services', 'sew', 'sexy', 'sg', 'sh', 'shiksha', 'shoes', 'shriram', 'si', 'singles', 'sj', 'sk', 'sky', 'sl', 'sm', 'sn', 'so', 'social', 'software', 'sohu', 'solar', 'solutions', 'soy', 'space', 'spiegel', 'sr', 'st', 'style', 'su', 'supplies', 'supply', 'support', 'surf', 'surgery', 'suzuki', 'sv', 'sx', 'sy', 'sydney', 'systems', 'sz', 'taipei', 'tatar', 'tattoo', 'tax', 'tc', 'td', 'technology', 'tel', 'temasek', 'tennis', 'tf', 'tg', 'th', 'tienda', 'tips', 'tires', 'tirol', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'today', 'tokyo', 'tools', 'top', 'toshiba', 'town', 'toys', 'tp', 'tr', 'trade', 'training', 'travel', 'trust', 'tt', 'tui', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'university', 'uno', 'uol', 'us', 'uy', 'uz', 'va', 'vacations', 'vc', 've', 'vegas', 'ventures', 'versicherung', 'vet', 'vg', 'vi', 'viajes', 'video', 'villas', 'vision', 'vlaanderen', 'vn', 'vodka', 'vote', 'voting', 'voto', 'voyage', 'vu', 'wales', 'wang', 'watch', 'webcam', 'website', 'wed', 'wedding', 'wf', 'whoswho', 'wien', 'wiki', 'williamhill', 'wme', 'work', 'works', 'world', 'ws', 'wtc', 'wtf', '佛山', '集团', '在线', '한국', 'ভারত', '八卦', 'موقع', '公益', '公司', '移动', '我爱你', 'москва', 'қаз', 'онлайн', 'сайт', 'срб', '淡马锡', 'орг', '삼성', 'சிங்கப்பூர்', '商标', '商店', '商城', 'дети', 'мкд', '中文网', '中信', '中国', '中國', '谷歌', 'భారత్', 'ලංකා', 'ભારત', 'भारत', '网店', 'संगठन', '网络', 'укр', '香港', '台湾', '台灣', '手机', 'мон', 'الجزائر', 'عمان', 'ایران', 'امارات', 'بازار', 'الاردن', 'بھارت', 'المغرب', 'السعودية', 'مليسيا', 'شبكة', 'გე', '机构', '组织机构', 'ไทย', 'سورية', 'рус', 'рф', 'تونس', 'みんな', 'グーグル', '世界', 'ਭਾਰਤ', '网址', '游戏', 'vermögensberater', 'vermögensberatung', '企业', 'مصر', 'قطر', '广东', 'இலங்கை', 'இந்தியா', '新加坡', 'فلسطين', '政务', 'xxx', 'xyz', 'yachts', 'yandex', 'ye', 'yoga', 'yokohama', 'youtube', 'yt', 'za', 'zip', 'zm', 'zone', 'zuerich', 'zw'];\r\n\r\n// From https://raw.githubusercontent.com/FGRibreau/latenize/master/latinize_map.js\r\nexport const LatinizeMap: {[k: string]: string} = {'Á': 'A','Ă': 'A','Ắ': 'A','Ặ': 'A','Ằ': 'A','Ẳ': 'A','Ẵ': 'A','Ǎ': 'A','Â': 'A','Ấ': 'A','Ậ': 'A','Ầ': 'A','Ẩ': 'A','Ẫ': 'A','Ä': 'A','Ǟ': 'A','Ȧ': 'A','Ǡ': 'A','Ạ': 'A','Ȁ': 'A','À': 'A','Ả': 'A','Ȃ': 'A','Ā': 'A','Ą': 'A','Å': 'A','Ǻ': 'A','Ḁ': 'A','Ⱥ': 'A','Ã': 'A','Ꜳ': 'AA','Æ': 'AE','Ǽ': 'AE','Ǣ': 'AE','Ꜵ': 'AO','Ꜷ': 'AU','Ꜹ': 'AV','Ꜻ': 'AV','Ꜽ': 'AY','Ḃ': 'B','Ḅ': 'B','Ɓ': 'B','Ḇ': 'B','Ƀ': 'B','Ƃ': 'B','Ć': 'C','Č': 'C','Ç': 'C','Ḉ': 'C','Ĉ': 'C','Ċ': 'C','Ƈ': 'C','Ȼ': 'C','Ď': 'D','Ḑ': 'D','Ḓ': 'D','Ḋ': 'D','Ḍ': 'D','Ɗ': 'D','Ḏ': 'D','Dz': 'D','Dž': 'D','Đ': 'D','Ƌ': 'D','DZ': 'DZ','DŽ': 'DZ','É': 'E','Ĕ': 'E','Ě': 'E','Ȩ': 'E','Ḝ': 'E','Ê': 'E','Ế': 'E','Ệ': 'E','Ề': 'E','Ể': 'E','Ễ': 'E','Ḙ': 'E','Ë': 'E','Ė': 'E','Ẹ': 'E','Ȅ': 'E','È': 'E','Ẻ': 'E','Ȇ': 'E','Ē': 'E','Ḗ': 'E','Ḕ': 'E','Ę': 'E','Ɇ': 'E','Ẽ': 'E','Ḛ': 'E','Ꝫ': 'ET','Ḟ': 'F','Ƒ': 'F','Ǵ': 'G','Ğ': 'G','Ǧ': 'G','Ģ': 'G','Ĝ': 'G','Ġ': 'G','Ɠ': 'G','Ḡ': 'G','Ǥ': 'G','Ḫ': 'H','Ȟ': 'H','Ḩ': 'H','Ĥ': 'H','Ⱨ': 'H','Ḧ': 'H','Ḣ': 'H','Ḥ': 'H','Ħ': 'H','Í': 'I','Ĭ': 'I','Ǐ': 'I','Î': 'I','Ï': 'I','Ḯ': 'I','İ': 'I','Ị': 'I','Ȉ': 'I','Ì': 'I','Ỉ': 'I','Ȋ': 'I','Ī': 'I','Į': 'I','Ɨ': 'I','Ĩ': 'I','Ḭ': 'I','Ꝺ': 'D','Ꝼ': 'F','Ᵹ': 'G','Ꞃ': 'R','Ꞅ': 'S','Ꞇ': 'T','Ꝭ': 'IS','Ĵ': 'J','Ɉ': 'J','Ḱ': 'K','Ǩ': 'K','Ķ': 'K','Ⱪ': 'K','Ꝃ': 'K','Ḳ': 'K','Ƙ': 'K','Ḵ': 'K','Ꝁ': 'K','Ꝅ': 'K','Ĺ': 'L','Ƚ': 'L','Ľ': 'L','Ļ': 'L','Ḽ': 'L','Ḷ': 'L','Ḹ': 'L','Ⱡ': 'L','Ꝉ': 'L','Ḻ': 'L','Ŀ': 'L','Ɫ': 'L','Lj': 'L','Ł': 'L','LJ': 'LJ','Ḿ': 'M','Ṁ': 'M','Ṃ': 'M','Ɱ': 'M','Ń': 'N','Ň': 'N','Ņ': 'N','Ṋ': 'N','Ṅ': 'N','Ṇ': 'N','Ǹ': 'N','Ɲ': 'N','Ṉ': 'N','Ƞ': 'N','Nj': 'N','Ñ': 'N','NJ': 'NJ','Ó': 'O','Ŏ': 'O','Ǒ': 'O','Ô': 'O','Ố': 'O','Ộ': 'O','Ồ': 'O','Ổ': 'O','Ỗ': 'O','Ö': 'O','Ȫ': 'O','Ȯ': 'O','Ȱ': 'O','Ọ': 'O','Ő': 'O','Ȍ': 'O','Ò': 'O','Ỏ': 'O','Ơ': 'O','Ớ': 'O','Ợ': 'O','Ờ': 'O','Ở': 'O','Ỡ': 'O','Ȏ': 'O','Ꝋ': 'O','Ꝍ': 'O','Ō': 'O','Ṓ': 'O','Ṑ': 'O','Ɵ': 'O','Ǫ': 'O','Ǭ': 'O','Ø': 'O','Ǿ': 'O','Õ': 'O','Ṍ': 'O','Ṏ': 'O','Ȭ': 'O','Ƣ': 'OI','Ꝏ': 'OO','Ɛ': 'E','Ɔ': 'O','Ȣ': 'OU','Ṕ': 'P','Ṗ': 'P','Ꝓ': 'P','Ƥ': 'P','Ꝕ': 'P','Ᵽ': 'P','Ꝑ': 'P','Ꝙ': 'Q','Ꝗ': 'Q','Ŕ': 'R','Ř': 'R','Ŗ': 'R','Ṙ': 'R','Ṛ': 'R','Ṝ': 'R','Ȑ': 'R','Ȓ': 'R','Ṟ': 'R','Ɍ': 'R','Ɽ': 'R','Ꜿ': 'C','Ǝ': 'E','Ś': 'S','Ṥ': 'S','Š': 'S','Ṧ': 'S','Ş': 'S','Ŝ': 'S','Ș': 'S','Ṡ': 'S','Ṣ': 'S','Ṩ': 'S','ẞ': 'SS','Ť': 'T','Ţ': 'T','Ṱ': 'T','Ț': 'T','Ⱦ': 'T','Ṫ': 'T','Ṭ': 'T','Ƭ': 'T','Ṯ': 'T','Ʈ': 'T','Ŧ': 'T','Ɐ': 'A','Ꞁ': 'L','Ɯ': 'M','Ʌ': 'V','Ꜩ': 'TZ','Ú': 'U','Ŭ': 'U','Ǔ': 'U','Û': 'U','Ṷ': 'U','Ü': 'U','Ǘ': 'U','Ǚ': 'U','Ǜ': 'U','Ǖ': 'U','Ṳ': 'U','Ụ': 'U','Ű': 'U','Ȕ': 'U','Ù': 'U','Ủ': 'U','Ư': 'U','Ứ': 'U','Ự': 'U','Ừ': 'U','Ử': 'U','Ữ': 'U','Ȗ': 'U','Ū': 'U','Ṻ': 'U','Ų': 'U','Ů': 'U','Ũ': 'U','Ṹ': 'U','Ṵ': 'U','Ꝟ': 'V','Ṿ': 'V','Ʋ': 'V','Ṽ': 'V','Ꝡ': 'VY','Ẃ': 'W','Ŵ': 'W','Ẅ': 'W','Ẇ': 'W','Ẉ': 'W','Ẁ': 'W','Ⱳ': 'W','Ẍ': 'X','Ẋ': 'X','Ý': 'Y','Ŷ': 'Y','Ÿ': 'Y','Ẏ': 'Y','Ỵ': 'Y','Ỳ': 'Y','Ƴ': 'Y','Ỷ': 'Y','Ỿ': 'Y','Ȳ': 'Y','Ɏ': 'Y','Ỹ': 'Y','Ź': 'Z','Ž': 'Z','Ẑ': 'Z','Ⱬ': 'Z','Ż': 'Z','Ẓ': 'Z','Ȥ': 'Z','Ẕ': 'Z','Ƶ': 'Z','IJ': 'IJ','Œ': 'OE','ᴀ': 'A','ᴁ': 'AE','ʙ': 'B','ᴃ': 'B','ᴄ': 'C','ᴅ': 'D','ᴇ': 'E','ꜰ': 'F','ɢ': 'G','ʛ': 'G','ʜ': 'H','ɪ': 'I','ʁ': 'R','ᴊ': 'J','ᴋ': 'K','ʟ': 'L','ᴌ': 'L','ᴍ': 'M','ɴ': 'N','ᴏ': 'O','ɶ': 'OE','ᴐ': 'O','ᴕ': 'OU','ᴘ': 'P','ʀ': 'R','ᴎ': 'N','ᴙ': 'R','ꜱ': 'S','ᴛ': 'T','ⱻ': 'E','ᴚ': 'R','ᴜ': 'U','ᴠ': 'V','ᴡ': 'W','ʏ': 'Y','ᴢ': 'Z','á': 'a','ă': 'a','ắ': 'a','ặ': 'a','ằ': 'a','ẳ': 'a','ẵ': 'a','ǎ': 'a','â': 'a','ấ': 'a','ậ': 'a','ầ': 'a','ẩ': 'a','ẫ': 'a','ä': 'a','ǟ': 'a','ȧ': 'a','ǡ': 'a','ạ': 'a','ȁ': 'a','à': 'a','ả': 'a','ȃ': 'a','ā': 'a','ą': 'a','ᶏ': 'a','ẚ': 'a','å': 'a','ǻ': 'a','ḁ': 'a','ⱥ': 'a','ã': 'a','ꜳ': 'aa','æ': 'ae','ǽ': 'ae','ǣ': 'ae','ꜵ': 'ao','ꜷ': 'au','ꜹ': 'av','ꜻ': 'av','ꜽ': 'ay','ḃ': 'b','ḅ': 'b','ɓ': 'b','ḇ': 'b','ᵬ': 'b','ᶀ': 'b','ƀ': 'b','ƃ': 'b','ɵ': 'o','ć': 'c','č': 'c','ç': 'c','ḉ': 'c','ĉ': 'c','ɕ': 'c','ċ': 'c','ƈ': 'c','ȼ': 'c','ď': 'd','ḑ': 'd','ḓ': 'd','ȡ': 'd','ḋ': 'd','ḍ': 'd','ɗ': 'd','ᶑ': 'd','ḏ': 'd','ᵭ': 'd','ᶁ': 'd','đ': 'd','ɖ': 'd','ƌ': 'd','ı': 'i','ȷ': 'j','ɟ': 'j','ʄ': 'j','dz': 'dz','dž': 'dz','é': 'e','ĕ': 'e','ě': 'e','ȩ': 'e','ḝ': 'e','ê': 'e','ế': 'e','ệ': 'e','ề': 'e','ể': 'e','ễ': 'e','ḙ': 'e','ë': 'e','ė': 'e','ẹ': 'e','ȅ': 'e','è': 'e','ẻ': 'e','ȇ': 'e','ē': 'e','ḗ': 'e','ḕ': 'e','ⱸ': 'e','ę': 'e','ᶒ': 'e','ɇ': 'e','ẽ': 'e','ḛ': 'e','ꝫ': 'et','ḟ': 'f','ƒ': 'f','ᵮ': 'f','ᶂ': 'f','ǵ': 'g','ğ': 'g','ǧ': 'g','ģ': 'g','ĝ': 'g','ġ': 'g','ɠ': 'g','ḡ': 'g','ᶃ': 'g','ǥ': 'g','ḫ': 'h','ȟ': 'h','ḩ': 'h','ĥ': 'h','ⱨ': 'h','ḧ': 'h','ḣ': 'h','ḥ': 'h','ɦ': 'h','ẖ': 'h','ħ': 'h','ƕ': 'hv','í': 'i','ĭ': 'i','ǐ': 'i','î': 'i','ï': 'i','ḯ': 'i','ị': 'i','ȉ': 'i','ì': 'i','ỉ': 'i','ȋ': 'i','ī': 'i','į': 'i','ᶖ': 'i','ɨ': 'i','ĩ': 'i','ḭ': 'i','ꝺ': 'd','ꝼ': 'f','ᵹ': 'g','ꞃ': 'r','ꞅ': 's','ꞇ': 't','ꝭ': 'is','ǰ': 'j','ĵ': 'j','ʝ': 'j','ɉ': 'j','ḱ': 'k','ǩ': 'k','ķ': 'k','ⱪ': 'k','ꝃ': 'k','ḳ': 'k','ƙ': 'k','ḵ': 'k','ᶄ': 'k','ꝁ': 'k','ꝅ': 'k','ĺ': 'l','ƚ': 'l','ɬ': 'l','ľ': 'l','ļ': 'l','ḽ': 'l','ȴ': 'l','ḷ': 'l','ḹ': 'l','ⱡ': 'l','ꝉ': 'l','ḻ': 'l','ŀ': 'l','ɫ': 'l','ᶅ': 'l','ɭ': 'l','ł': 'l','lj': 'lj','ſ': 's','ẜ': 's','ẛ': 's','ẝ': 's','ḿ': 'm','ṁ': 'm','ṃ': 'm','ɱ': 'm','ᵯ': 'm','ᶆ': 'm','ń': 'n','ň': 'n','ņ': 'n','ṋ': 'n','ȵ': 'n','ṅ': 'n','ṇ': 'n','ǹ': 'n','ɲ': 'n','ṉ': 'n','ƞ': 'n','ᵰ': 'n','ᶇ': 'n','ɳ': 'n','ñ': 'n','nj': 'nj','ó': 'o','ŏ': 'o','ǒ': 'o','ô': 'o','ố': 'o','ộ': 'o','ồ': 'o','ổ': 'o','ỗ': 'o','ö': 'o','ȫ': 'o','ȯ': 'o','ȱ': 'o','ọ': 'o','ő': 'o','ȍ': 'o','ò': 'o','ỏ': 'o','ơ': 'o','ớ': 'o','ợ': 'o','ờ': 'o','ở': 'o','ỡ': 'o','ȏ': 'o','ꝋ': 'o','ꝍ': 'o','ⱺ': 'o','ō': 'o','ṓ': 'o','ṑ': 'o','ǫ': 'o','ǭ': 'o','ø': 'o','ǿ': 'o','õ': 'o','ṍ': 'o','ṏ': 'o','ȭ': 'o','ƣ': 'oi','ꝏ': 'oo','ɛ': 'e','ᶓ': 'e','ɔ': 'o','ᶗ': 'o','ȣ': 'ou','ṕ': 'p','ṗ': 'p','ꝓ': 'p','ƥ': 'p','ᵱ': 'p','ᶈ': 'p','ꝕ': 'p','ᵽ': 'p','ꝑ': 'p','ꝙ': 'q','ʠ': 'q','ɋ': 'q','ꝗ': 'q','ŕ': 'r','ř': 'r','ŗ': 'r','ṙ': 'r','ṛ': 'r','ṝ': 'r','ȑ': 'r','ɾ': 'r','ᵳ': 'r','ȓ': 'r','ṟ': 'r','ɼ': 'r','ᵲ': 'r','ᶉ': 'r','ɍ': 'r','ɽ': 'r','ↄ': 'c','ꜿ': 'c','ɘ': 'e','ɿ': 'r','ś': 's','ṥ': 's','š': 's','ṧ': 's','ş': 's','ŝ': 's','ș': 's','ṡ': 's','ṣ': 's','ṩ': 's','ʂ': 's','ᵴ': 's','ᶊ': 's','ȿ': 's','ɡ': 'g','ß': 'ss','ᴑ': 'o','ᴓ': 'o','ᴝ': 'u','ť': 't','ţ': 't','ṱ': 't','ț': 't','ȶ': 't','ẗ': 't','ⱦ': 't','ṫ': 't','ṭ': 't','ƭ': 't','ṯ': 't','ᵵ': 't','ƫ': 't','ʈ': 't','ŧ': 't','ᵺ': 'th','ɐ': 'a','ᴂ': 'ae','ǝ': 'e','ᵷ': 'g','ɥ': 'h','ʮ': 'h','ʯ': 'h','ᴉ': 'i','ʞ': 'k','ꞁ': 'l','ɯ': 'm','ɰ': 'm','ᴔ': 'oe','ɹ': 'r','ɻ': 'r','ɺ': 'r','ⱹ': 'r','ʇ': 't','ʌ': 'v','ʍ': 'w','ʎ': 'y','ꜩ': 'tz','ú': 'u','ŭ': 'u','ǔ': 'u','û': 'u','ṷ': 'u','ü': 'u','ǘ': 'u','ǚ': 'u','ǜ': 'u','ǖ': 'u','ṳ': 'u','ụ': 'u','ű': 'u','ȕ': 'u','ù': 'u','ủ': 'u','ư': 'u','ứ': 'u','ự': 'u','ừ': 'u','ử': 'u','ữ': 'u','ȗ': 'u','ū': 'u','ṻ': 'u','ų': 'u','ᶙ': 'u','ů': 'u','ũ': 'u','ṹ': 'u','ṵ': 'u','ᵫ': 'ue','ꝸ': 'um','ⱴ': 'v','ꝟ': 'v','ṿ': 'v','ʋ': 'v','ᶌ': 'v','ⱱ': 'v','ṽ': 'v','ꝡ': 'vy','ẃ': 'w','ŵ': 'w','ẅ': 'w','ẇ': 'w','ẉ': 'w','ẁ': 'w','ⱳ': 'w','ẘ': 'w','ẍ': 'x','ẋ': 'x','ᶍ': 'x','ý': 'y','ŷ': 'y','ÿ': 'y','ẏ': 'y','ỵ': 'y','ỳ': 'y','ƴ': 'y','ỷ': 'y','ỿ': 'y','ȳ': 'y','ẙ': 'y','ɏ': 'y','ỹ': 'y','ź': 'z','ž': 'z','ẑ': 'z','ʑ': 'z','ⱬ': 'z','ż': 'z','ẓ': 'z','ȥ': 'z','ẕ': 'z','ᵶ': 'z','ᶎ': 'z','ʐ': 'z','ƶ': 'z','ɀ': 'z','ff': 'ff','ffi': 'ffi','ffl': 'ffl','fi': 'fi','fl': 'fl','ij': 'ij','œ': 'oe','st': 'st','ₐ': 'a','ₑ': 'e','ᵢ': 'i','ⱼ': 'j','ₒ': 'o','ᵣ': 'r','ᵤ': 'u','ᵥ': 'v','ₓ': 'x','Ё': 'YO', 'Й': 'I', 'Ц': 'TS', 'У': 'U', 'К': 'K', 'Е': 'E', 'Н': 'N', 'Г': 'G', 'Ш': 'SH', 'Щ': 'SCH', 'З': 'Z', 'Х': 'H', 'Ъ': '', 'ё': 'yo', 'й': 'i', 'ц': 'ts', 'у': 'u', 'к': 'k', 'е': 'e', 'н': 'n', 'г': 'g', 'ш': 'sh', 'щ': 'sch', 'з': 'z', 'х': 'h', 'ъ': '', 'Ф': 'F', 'Ы': 'I', 'В': 'V', 'А': 'A', 'П': 'P', 'Р': 'R', 'О': 'O', 'Л': 'L', 'Д': 'D', 'Ж': 'ZH', 'Э': 'E', 'ф': 'f', 'ы': 'i', 'в': 'v', 'а': 'a', 'п': 'p', 'р': 'r', 'о': 'o', 'л': 'l', 'д': 'd', 'ж': 'zh', 'э': 'e', 'Я': 'Ya', 'Ч': 'CH', 'С': 'S', 'М': 'M', 'И': 'I', 'Т': 'T', 'Ь': '', 'Б': 'B', 'Ю': 'YU', 'я': 'ya', 'ч': 'ch', 'с': 's', 'м': 'm', 'и': 'i', 'т': 't', 'ь': '', 'б': 'b', 'ю': 'yu'};\r\n\r\nconst Config = {\r\n Emoji,\r\n LatinizeMap,\r\n TLD,\r\n MediaSizes: mediaSizes\r\n};\r\nMOUNT_CLASS_TO.Config = Config;\r\nexport default Config;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport { nextRandomUint } from \"../../helpers/random\";\nimport { logger } from \"../logger\";\nimport rootScope from \"../rootScope\";\nimport sessionStorage from \"../sessionStorage\";\nimport apiManager from \"./mtprotoworker\";\n\nexport type AppInstance = {\n id: number,\n idle: boolean,\n time: number\n};\n\nconst CHECK_INSTANCE_INTERVAL = 5000; \nconst DEACTIVATE_TIMEOUT = 30000;\nconst MULTIPLE_TABS_THRESHOLD = 20000;\n\nexport class SingleInstance {\n private instanceID: number;\n private started: boolean;\n private masterInstance: boolean;\n private deactivateTimeout: number;\n private deactivated: boolean;\n private initial: boolean;\n private log = logger('INSTANCE');\n\n public start() {\n if(!this.started/* && !Config.Navigator.mobile && !Config.Modes.packed */) {\n this.started = true;\n\n this.reset();\n //IdleManager.start();\n\n rootScope.addEventListener('idle', this.checkInstance);\n setInterval(this.checkInstance, CHECK_INSTANCE_INTERVAL);\n this.checkInstance();\n\n try {\n document.documentElement.addEventListener('beforeunload', this.clearInstance);\n } catch(e) {}\n }\n }\n\n public reset() {\n this.instanceID = nextRandomUint(32);\n this.masterInstance = false;\n if(this.deactivateTimeout) clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n this.deactivated = false;\n this.initial = false;\n }\n\n public clearInstance = () => {\n if(this.masterInstance && !this.deactivated) {\n this.log.warn('clear master instance');\n sessionStorage.delete('xt_instance');\n }\n };\n\n public activateInstance() {\n if(this.deactivated) {\n this.reset();\n this.checkInstance(false);\n rootScope.dispatchEvent('instance_activated');\n }\n }\n\n public deactivateInstance = () => {\n if(this.masterInstance || this.deactivated) {\n return false;\n }\n\n this.log('deactivate');\n this.deactivateTimeout = 0;\n this.deactivated = true;\n this.clearInstance();\n //$modalStack.dismissAll();\n\n //document.title = _('inactive_tab_title_raw')\n\n rootScope.idle.deactivated = true;\n rootScope.dispatchEvent('instance_deactivated');\n };\n\n public checkInstance = (idle = rootScope.idle && rootScope.idle.isIDLE) => {\n if(this.deactivated) {\n return false;\n }\n \n const time = Date.now();\n const newInstance: AppInstance = {\n id: this.instanceID, \n idle, \n time\n };\n\n sessionStorage.get('xt_instance', false).then((curInstance: AppInstance) => {\n // this.log('check instance', newInstance, curInstance)\n if(!idle ||\n !curInstance ||\n curInstance.id === this.instanceID ||\n curInstance.time < (time - MULTIPLE_TABS_THRESHOLD)) {\n sessionStorage.set({xt_instance: newInstance});\n\n if(!this.masterInstance) {\n apiManager.startAll();\n if(!this.initial) {\n this.initial = true;\n } else {\n this.log.warn('now master instance', newInstance);\n }\n\n this.masterInstance = true;\n }\n\n if(this.deactivateTimeout) {\n clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n }\n } else {\n if(this.masterInstance) {\n apiManager.stopAll();\n this.log.warn('now idle instance', newInstance);\n if(!this.deactivateTimeout) {\n this.deactivateTimeout = window.setTimeout(this.deactivateInstance, DEACTIVATE_TIMEOUT);\n }\n\n this.masterInstance = false;\n }\n }\n });\n };\n}\n\nconst singleInstance = new SingleInstance();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.singleInstance = singleInstance);\nexport default singleInstance;\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"webp.worker.bd598dc02a03fd59d71a.bundle.worker.js\");\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport WebpWorker from 'worker-loader!./webp.worker';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport apiManagerProxy from '../mtproto/mtprotoworker';\r\n\r\nexport type WebpConvertTask = {\r\n type: 'convertWebp', \r\n payload: {\r\n fileName: string, \r\n bytes: Uint8Array\r\n }\r\n};\r\n\r\nexport class WebpWorkerController {\r\n private worker: Worker;\r\n private convertPromises: {[fileName: string]: CancellablePromise} = {};\r\n \r\n private init() {\r\n this.worker = new WebpWorker();\r\n this.worker.addEventListener('message', (e) => {\r\n const payload = (e.data as WebpConvertTask).payload;\r\n\r\n if(payload.fileName.indexOf('main-') === 0) {\r\n const promise = this.convertPromises[payload.fileName];\r\n if(promise) {\r\n payload.bytes ? promise.resolve(payload.bytes) : promise.reject();\r\n delete this.convertPromises[payload.fileName];\r\n }\r\n } else {\r\n apiManagerProxy.postMessage(e.data);\r\n }\r\n });\r\n }\r\n\r\n public postMessage(data: WebpConvertTask) {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n this.worker.postMessage(data);\r\n }\r\n\r\n public convert(fileName: string, bytes: Uint8Array) {\r\n fileName = 'main-' + fileName;\r\n\r\n if(this.convertPromises.hasOwnProperty(fileName)) {\r\n return this.convertPromises[fileName];\r\n }\r\n \r\n const convertPromise = deferredPromise();\r\n\r\n this.postMessage({type: 'convertWebp', payload: {fileName, bytes}});\r\n\r\n return this.convertPromises[fileName] = convertPromise;\r\n }\r\n}\r\n\r\nconst webpWorkerController = new WebpWorkerController();\r\nMOUNT_CLASS_TO.webpWorkerController = webpWorkerController;\r\nexport default webpWorkerController;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG, { MOUNT_CLASS_TO } from \"../config/debug\";\nimport { safeAssign } from \"../helpers/object\";\nimport { capitalizeFirstLetter } from \"../helpers/string\";\nimport type lang from \"../lang\";\nimport type langSign from \"../langSign\";\nimport { HelpCountriesList, HelpCountry, LangPackDifference, LangPackString } from \"../layer\";\nimport apiManager from \"./mtproto/mtprotoworker\";\nimport stateStorage from \"./stateStorage\";\nimport App from \"../config/app\";\nimport rootScope from \"./rootScope\";\nimport RichTextProcessor from \"./richtextprocessor\";\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n \"messageActionChatCreate\": \"ActionCreateGroup\",\n \"messageActionChatCreateYou\": \"ActionYouCreateGroup\",\n\t\"messageActionChatEditTitle\": \"ActionChangedTitle\",\n\t\"messageActionChatEditPhoto\": \"ActionChangedPhoto\",\n\t\"messageActionChatEditVideo\": \"ActionChangedVideo\",\n\t\"messageActionChatDeletePhoto\": \"ActionRemovedPhoto\",\n\t\"messageActionChatReturn\": \"ActionAddUserSelf\",\n\t\"messageActionChatReturnYou\": \"ActionAddUserSelfYou\",\n\t\"messageActionChatJoined\": \"ActionAddUserSelfMega\",\n\t\"messageActionChatJoinedYou\": \"ChannelMegaJoined\",\n \"messageActionChatAddUser\": \"ActionAddUser\",\n \"messageActionChatAddUsers\": \"ActionAddUser\",\n\t\"messageActionChatLeave\": \"ActionLeftUser\",\n\t\"messageActionChatLeaveYou\": \"YouLeft\",\n\t\"messageActionChatDeleteUser\": \"ActionKickUser\",\n\t\"messageActionChatJoinedByLink\": \"ActionInviteUser\",\n \"messageActionPinMessage\": \"ActionPinnedNoText\",\n \"messageActionContactSignUp\": \"Chat.Service.PeerJoinedTelegram\",\n\t\"messageActionChannelCreate\": \"ActionCreateChannel\",\n\t\"messageActionChannelEditTitle\": \"Chat.Service.Channel.UpdatedTitle\",\n\t\"messageActionChannelEditPhoto\": \"Chat.Service.Channel.UpdatedPhoto\",\n\t\"messageActionChannelEditVideo\": \"Chat.Service.Channel.UpdatedVideo\",\n \"messageActionChannelDeletePhoto\": \"Chat.Service.Channel.RemovedPhoto\",\n \"messageActionHistoryClear\": \"HistoryCleared\",\n\t\"messageActionDiscussionStarted\": \"DiscussionStarted\",\n\n \"messageActionChannelMigrateFrom\": \"ActionMigrateFromGroup\",\n\n \"messageActionPhoneCall.in_ok\": \"ChatList.Service.Call.incoming\",\n\t\"messageActionPhoneCall.out_ok\": \"ChatList.Service.Call.outgoing\",\n\t\"messageActionPhoneCall.in_missed\": \"ChatList.Service.Call.Missed\",\n\t\"messageActionPhoneCall.out_missed\": \"ChatList.Service.Call.Cancelled\",\n\n\t\"messageActionGroupCall.started\": \"ActionGroupCallJustStarted\",\n\t\"messageActionGroupCall.started_by\": \"ActionGroupCallStarted\",\n\t\"messageActionGroupCall.started_byYou\": \"ActionGroupCallStartedByYou\",\n\t\"messageActionGroupCall.ended\": \"ActionGroupCallEnded\",\n\t\"messageActionGroupCall.ended_by\": \"Chat.Service.VoiceChatFinished\",\n\t\"messageActionGroupCall.ended_byYou\": \"Chat.Service.VoiceChatFinishedYou\",\n\n\t\"messageActionBotAllowed\": \"Chat.Service.BotPermissionAllowed\"\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | Node;\nexport type FormatterArguments = FormatterArgument[];\n\nnamespace I18n {\n\texport const strings: Map = new Map();\n\texport const countriesList: HelpCountry[] = [];\n\tlet pluralRules: Intl.PluralRules;\n\n\tlet cacheLangPackPromise: Promise;\n\texport let lastRequestedLangCode: string;\n\texport let lastAppliedLangCode: string;\n\texport let requestedServerLanguage = false;\n\texport function getCacheLangPack(): Promise {\n\t\tif(cacheLangPackPromise) return cacheLangPackPromise;\n\t\treturn cacheLangPackPromise = Promise.all([\n\t\t\tstateStorage.get('langPack') as Promise,\n\t\t\tpolyfillPromise\n\t\t]).then(([langPack]) => {\n\t\t\tif(!langPack/* || true */) {\n\t\t\t\treturn loadLocalLangPack();\n\t\t\t} else if(DEBUG && false) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t}/* else if(langPack.appVersion !== App.langPackVersion) {\n\t\t\t\treturn getLangPack(langPack.lang_code);\n\t\t\t} */\n\t\t\t\n\t\t\tif(!lastRequestedLangCode) {\n\t\t\t\tlastRequestedLangCode = langPack.lang_code;\n\t\t\t}\n\t\t\t\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t}).finally(() => {\n\t\t\tcacheLangPackPromise = undefined;\n\t\t});\n\t}\n\n\texport function loadLocalLangPack() {\n\t\tconst defaultCode = App.langPackCode;\n\t\tlastRequestedLangCode = defaultCode;\n\t\treturn Promise.all([\n\t\t\timport('../lang'),\n\t\t\timport('../langSign'),\n\t\t\timport('../countries')\n\t\t]).then(([lang, langSign, countries]) => {\n\t\t\tconst strings: LangPackString[] = [];\n\t\t\tformatLocalStrings(lang.default, strings);\n\t\t\tformatLocalStrings(langSign.default, strings);\n\n\t\t\tconst langPack: LangPackDifference = {\n\t\t\t\t_: 'langPackDifference',\n\t\t\t\tfrom_version: 0,\n\t\t\t\tlang_code: defaultCode,\n\t\t\t\tstrings,\n\t\t\t\tversion: 0,\n\t\t\t\tlocal: true,\n\t\t\t\tcountries: countries.default\n\t\t\t};\n\t\t\treturn saveLangPack(langPack);\n\t\t});\n\t}\n\n\texport function loadLangPack(langCode: string) {\n\t\trequestedServerLanguage = true;\n\t\treturn Promise.all([\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: App.langPack\n\t\t\t}),\n\t\t\tapiManager.invokeApiCacheable('langpack.getLangPack', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\tlang_pack: 'android'\n\t\t\t}),\n\t\t\timport('../lang'),\n\t\t\timport('../langSign'),\n\t\t\tapiManager.invokeApiCacheable('help.getCountriesList', {\n\t\t\t\tlang_code: langCode,\n\t\t\t\thash: 0\n\t\t\t}) as Promise,\n\t\t\tpolyfillPromise,\n\t\t]);\n\t}\n\n\texport function getStrings(langCode: string, strings: string[]) {\n\t\treturn apiManager.invokeApi('langpack.getStrings', {\n\t\t\tlang_pack: App.langPack,\n\t\t\tlang_code: langCode,\n\t\t\tkeys: strings\n\t\t});\n\t}\n\n\texport function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n\t\tfor(const i in strings) {\n\t\t\t// @ts-ignore\n\t\t\tconst v = strings[i];\n\t\t\tif(typeof(v) === 'string') {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackString',\n\t\t\t\t\tkey: i,\n\t\t\t\t\tvalue: v\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpushTo.push({\n\t\t\t\t\t_: 'langPackStringPluralized',\n\t\t\t\t\tkey: i,\n\t\t\t\t\t...v\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn pushTo;\n\t}\n\n\texport function getLangPack(langCode: string) {\n\t\tlastRequestedLangCode = langCode;\n\t\treturn loadLangPack(langCode).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n\t\t\tlet strings: LangPackString[] = [];\n\n\t\t\t[localLangPack1, localLangPack2].forEach(l => {\n\t\t\t\tformatLocalStrings(l.default as any, strings);\n\t\t\t});\n\n\t\t\tstrings = strings.concat(langPack1.strings);\n\n\t\t\tfor(const string of langPack2.strings) {\n\t\t\t\tstrings.push(string);\n\t\t\t}\n\n\t\t\tlangPack1.strings = strings;\n\t\t\tlangPack1.countries = countries;\n\t\t\treturn saveLangPack(langPack1);\n\t\t});\n\t}\n\n\texport function saveLangPack(langPack: LangPackDifference) {\n\t\tlangPack.appVersion = App.langPackVersion;\n\n\t\treturn stateStorage.set({langPack}).then(() => {\n\t\t\tapplyLangPack(langPack);\n\t\t\treturn langPack;\n\t\t});\n\t}\n\n\texport const polyfillPromise = (function checkIfPolyfillNeeded() {\n\t\tif(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n\t\t\treturn Promise.resolve();\n\t\t} else {\n\t\t\treturn import('./pluralPolyfill').then((_Intl) => {\n\t\t\t\t(window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n\t\t\t});\n\t\t}\n\t})();\n\t\n\texport function applyLangPack(langPack: LangPackDifference) {\n\t\tif(langPack.lang_code !== lastRequestedLangCode) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tpluralRules = new Intl.PluralRules(langPack.lang_code);\n\t\t} catch(err) {\n\t\t\tconsole.error('pluralRules error', err);\n\t\t\tpluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n\t\t}\n\n\t\tstrings.clear();\n\n\t\tfor(const string of langPack.strings) {\n\t\t\tstrings.set(string.key as LangPackKey, string);\n\t\t}\n\n\t\tif(langPack.countries) {\n\t\t\tcountriesList.length = 0;\n\t\t\tcountriesList.push(...langPack.countries.countries);\n\n\t\t\tlangPack.countries.countries.forEach(country => {\n\t\t\t\tif(country.name) {\n\t\t\t\t\tconst langPackKey: any = country.default_name;\n\t\t\t\t\tstrings.set(langPackKey, {\n\t\t\t\t\t\t_: 'langPackString',\n\t\t\t\t\t\tkey: langPackKey,\n\t\t\t\t\t\tvalue: country.name\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif(lastAppliedLangCode !== langPack.lang_code) {\n\t\t\trootScope.dispatchEvent('language_change', langPack.lang_code);\n\t\t\tlastAppliedLangCode = langPack.lang_code;\n\t\t}\n\n\t\tconst elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n\t\telements.forEach(element => {\n\t\t\tconst instance = weakMap.get(element);\n\n\t\t\tif(instance) {\n\t\t\t\tinstance.update();\n\t\t\t}\n\t\t});\n\t}\n\n\texport function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}) {\n\t\tlet out: FormatterArguments = [];\n\t\tconst regExp = /(\\*\\*)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n\t\tlet lastIndex = 0;\n\t\tinput.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n\t\t\t//console.table({match, p1, p2, offset, string});\n\n\t\t\tout.push(string.slice(lastIndex, offset));\n\n\t\t\tif(p1) {\n\t\t\t\t//offset += p1.length;\n\t\t\t\tswitch(p1) {\n\t\t\t\t\tcase '**': {\n\t\t\t\t\t\tconst b = document.createElement('b');\n\t\t\t\t\t\tb.append(...superFormatter(p2, args, indexHolder));\n\t\t\t\t\t\tout.push(b);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if(p3) {\n\t\t\t\tout.push(document.createElement('br'));\n\t\t\t} else if(p4) {\n\t\t\t\tconst a = document.createElement('a');\n\n\t\t\t\tconst idx = p4.lastIndexOf(']');\n\t\t\t\tconst text = p4.slice(1, idx);\n\t\t\t\ta.append(...superFormatter(text, args, indexHolder));\n\n\t\t\t\tconst url = p4.slice(idx + 2, p4.length - 1);\n\t\t\t\tif(url) {\n\t\t\t\t\tconst wrappedUrl = RichTextProcessor.wrapUrl(url);\n\t\t\t\t\ta.href = wrappedUrl.url;\n\t\t\t\t\tif(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n\t\t\t\t\ta.target = '_blank';\n\t\t\t\t}\n\n\t\t\t\tout.push(a);\n\t\t\t} else if(args) {\n\t\t\t\tout.push(args[indexHolder.i++]);\n\t\t\t}\n\n\t\t\tlastIndex = offset + match.length;\n\t\t\treturn '';\n\t\t});\n\t\n\t\tif(lastIndex !== input.length) {\n\t\t\tout.push(input.slice(lastIndex));\n\t\t}\n\n\t\treturn out;\n\t}\n\t\n\texport function format(key: LangPackKey, plain: true, args?: any[]): string;\n\texport function format(key: LangPackKey, plain?: false, args?: any[]): FormatterArguments;\n\texport function format(key: LangPackKey, plain = false, args?: any[]): FormatterArguments | string {\n\t\tconst str = strings.get(key);\n\t\tlet input: string;\n\t\tif(str) {\n\t\t\tif(str._ === 'langPackStringPluralized' && args?.length) {\n\t\t\t\tlet v = args[0] as number | string;\n\t\t\t\tif(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n\t\t\t\tconst s = pluralRules.select(v);\n\t\t\t\t// @ts-ignore\n\t\t\t\tinput = str[s + '_value'] || str['other_value'];\n\t\t\t} else if(str._ === 'langPackString') {\n\t\t\t\tinput = str.value;\n\t\t\t} else {\n\t\t\t\t//input = '[' + key + ']';\n\t\t\t\tinput = key;\n\t\t\t}\n\t\t} else {\n\t\t\t//input = '[' + key + ']';\n\t\t\tinput = key;\n\t\t}\n\t\t\n\t\tif(plain) {\n\t\t\tif(args?.length) {\n\t\t\t\tconst regExp = /un\\d|%\\d\\$.|%./g;\n\t\t\t\tlet i = 0;\n\t\t\t\tinput = input.replace(regExp, (match, offset, string) => {\n\t\t\t\t\treturn '' + args[i++];\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn input;\n\t\t} else {\n\t\t\treturn superFormatter(input, args);\n\t\t}\n\t}\n\n\texport const weakMap: WeakMap> = new WeakMap();\n\n\texport type IntlElementBaseOptions = {\n\t\telement?: HTMLElement,\n\t\tproperty?: /* 'innerText' | */'innerHTML' | 'placeholder',\n\t};\n\n\tabstract class IntlElementBase {\n\t\tpublic element: IntlElementBaseOptions['element'];\n\t\tpublic property: IntlElementBaseOptions['property'] = 'innerHTML';\n\t\n\t\tconstructor(options: Options) {\n\t\t\tthis.element = options.element || document.createElement('span');\n\t\t\tthis.element.classList.add('i18n');\n\t\t\t\n\t\t\tthis.update(options);\n\t\t\tweakMap.set(this.element, this);\n\t\t}\n\n\t\tabstract update(options?: Options): void;\n\t}\n\n\texport type IntlElementOptions = IntlElementBaseOptions & {\n\t\tkey: LangPackKey,\n\t\targs?: FormatterArguments\n\t};\n\texport class IntlElement extends IntlElementBase {\n\t\tpublic key: IntlElementOptions['key'];\n\t\tpublic args: IntlElementOptions['args'];\n\n\t\tpublic update(options?: IntlElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\tif(this.property === 'innerHTML') {\n\t\t\t\tthis.element.textContent = '';\n\t\t\t\tthis.element.append(...format(this.key, false, this.args));\n\t\t\t} else {\n\t\t\t\t// @ts-ignore\n\t\t\t\tconst v = this.element[this.property];\n\t\t\t\tconst formatted = format(this.key, true, this.args);\n\n\t\t\t\t// * hasOwnProperty won't work here\n\t\t\t\tif(v === undefined) this.element.dataset[this.property] = formatted;\n\t\t\t\telse (this.element as HTMLInputElement)[this.property] = formatted;\n\t\t\t}\n\t\t}\n\t}\n\n\texport type IntlDateElementOptions = IntlElementBaseOptions & {\n\t\tdate: Date,\n\t\toptions: Intl.DateTimeFormatOptions\n\t};\n\texport class IntlDateElement extends IntlElementBase {\n\t\tpublic date: IntlDateElementOptions['date'];\n\t\tpublic options: IntlDateElementOptions['options'];\n\n\t\tpublic update(options?: IntlDateElementOptions) {\n\t\t\tsafeAssign(this, options);\n\t\n\t\t\t//var options = { month: 'long', day: 'numeric' };\n\t\t\t\n\t\t\t// * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n\t\t\tconst dateTimeFormat = new Intl.DateTimeFormat(lastRequestedLangCode + '-u-hc-h23', this.options);\n\t\t\t\n\t\t\t(this.element as any)[this.property] = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n\t\t}\n\t}\n\n\texport function i18n(key: LangPackKey, args?: any[]) {\n\t\treturn new IntlElement({key, args}).element;\n\t}\n\t\n\texport function i18n_(options: IntlElementOptions) {\n\t\treturn new IntlElement(options).element;\n\t}\n\n\texport function _i18n(element: HTMLElement, key: LangPackKey, args?: any[], property?: IntlElementOptions['property']) {\n\t\treturn new IntlElement({element, key, args, property}).element;\n\t}\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n\tconst arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n\treturn arr;\n}\n\nexport function join(elements: (Node | string)[], useLast = true) {\n\treturn joinElementsWith(elements, (isLast) => i18n(isLast && useLast ? 'WordDelimiterLast' : 'WordDelimiter'));\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { NotificationSettings } from \"../appManagers/appNotificationsManager\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport { copy } from \"../../helpers/object\";\r\nimport { logger } from \"../logger\";\r\nimport rootScope from \"../rootScope\";\r\nimport { ServiceWorkerNotificationsClearTask, ServiceWorkerPingTask, ServiceWorkerPushClickTask } from \"../serviceWorker/index.service\";\r\nimport apiManager from \"./mtprotoworker\";\r\nimport I18n, { LangPackKey } from \"../langPack\";\r\nimport { IS_MOBILE } from \"../../environment/userAgent\";\r\nimport appRuntimeManager from \"../appManagers/appRuntimeManager\";\r\n\r\nexport type PushSubscriptionNotifyType = 'init' | 'subscribe' | 'unsubscribe';\r\nexport type PushSubscriptionNotifyEvent = `push_${PushSubscriptionNotifyType}`;\r\n\r\nexport type PushSubscriptionNotify = {\r\n tokenType: number,\r\n tokenValue: string\r\n};\r\n\r\nexport class WebPushApiManager {\r\n public isAvailable = true;\r\n private isPushEnabled = false;\r\n private localNotificationsAvailable = true;\r\n private started = false;\r\n private settings: NotificationSettings & {baseUrl?: string} = {} as any;\r\n private isAliveTO: any;\r\n private isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n private userVisibleOnly = this.isFirefox ? false : true;\r\n private log = logger('PM');\r\n\r\n constructor() {\r\n if(!('PushManager' in window) ||\r\n !('Notification' in window) ||\r\n !('serviceWorker' in navigator)) {\r\n this.log.warn('Push messaging is not supported.');\r\n this.isAvailable = false;\r\n this.localNotificationsAvailable = false;\r\n }\r\n\r\n if(this.isAvailable && Notification.permission === 'denied') {\r\n this.log.warn('The user has blocked notifications.');\r\n }\r\n }\r\n\r\n public start() {\r\n if(!this.started) {\r\n this.started = true;\r\n this.getSubscription();\r\n this.setUpServiceWorkerChannel();\r\n }\r\n }\r\n\r\n public setLocalNotificationsDisabled() {\r\n this.localNotificationsAvailable = false;\r\n }\r\n\r\n public getSubscription() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.isPushEnabled = !!subscription;\r\n this.pushSubscriptionNotify('init', subscription);\r\n }).catch((err) => {\r\n this.log.error('Error during getSubscription()', err);\r\n });\r\n });\r\n }\r\n\r\n public subscribe = () => {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.subscribe({userVisibleOnly: this.userVisibleOnly}).then((subscription) => {\r\n // The subscription was successful\r\n this.isPushEnabled = true;\r\n this.pushSubscriptionNotify('subscribe', subscription);\r\n }).catch((e) => {\r\n if(Notification.permission === 'denied') {\r\n this.log('Permission for Notifications was denied');\r\n } else {\r\n this.log('Unable to subscribe to push.', e);\r\n if(!this.userVisibleOnly) {\r\n this.userVisibleOnly = true;\r\n setTimeout(this.subscribe, 0);\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n public unsubscribe() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n \r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.isPushEnabled = false;\r\n\r\n if(subscription) {\r\n this.pushSubscriptionNotify('unsubscribe', subscription);\r\n\r\n setTimeout(() => {\r\n subscription.unsubscribe().then((successful) => {\r\n this.isPushEnabled = false;\r\n }).catch((e) => {\r\n this.log.error('Unsubscription error: ', e);\r\n });\r\n }, 3000);\r\n }\r\n }).catch((e) => {\r\n this.log.error('Error thrown while unsubscribing from ' +\r\n 'push messaging.', e);\r\n });\r\n });\r\n }\r\n\r\n public forceUnsubscribe() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n navigator.serviceWorker.ready.then((reg) => {\r\n reg.pushManager.getSubscription().then((subscription) => {\r\n this.log.warn('force unsubscribe', subscription);\r\n if(subscription) {\r\n subscription.unsubscribe().then((successful) => {\r\n this.log.warn('force unsubscribe successful', successful);\r\n this.isPushEnabled = false;\r\n }).catch((e) => {\r\n this.log.error('Unsubscription error: ', e);\r\n });\r\n }\r\n }).catch((e) => {\r\n this.log.error('Error thrown while unsubscribing from ' +\r\n 'push messaging.', e);\r\n });\r\n });\r\n }\r\n\r\n public isAliveNotify = () => {\r\n if(!this.isAvailable || rootScope.idle && rootScope.idle.deactivated) {\r\n return;\r\n }\r\n\r\n this.settings.baseUrl = (location.href || '').replace(/#.*$/, '') + '#/im';\r\n\r\n const lang: ServiceWorkerPingTask['payload']['lang'] = {} as any;\r\n const ACTIONS_LANG_MAP: Record = {\r\n push_action_mute1d: IS_MOBILE ? 'PushNotification.Action.Mute1d.Mobile' : 'PushNotification.Action.Mute1d',\r\n push_action_settings: IS_MOBILE ? 'PushNotification.Action.Settings.Mobile' : 'PushNotification.Action.Settings',\r\n push_message_nopreview: 'PushNotification.Message.NoPreview'\r\n };\r\n\r\n for(const action in ACTIONS_LANG_MAP) {\r\n lang[action as keyof typeof ACTIONS_LANG_MAP] = I18n.format(ACTIONS_LANG_MAP[action as keyof typeof ACTIONS_LANG_MAP], true);\r\n }\r\n\r\n const task: ServiceWorkerPingTask = {\r\n type: 'ping',\r\n payload: {\r\n localNotifications: this.localNotificationsAvailable,\r\n lang: lang,\r\n settings: this.settings\r\n }\r\n };\r\n\r\n apiManager.postSWMessage(task);\r\n\r\n this.isAliveTO = setTimeout(this.isAliveNotify, 10000);\r\n }\r\n\r\n public setSettings(newSettings: WebPushApiManager['settings']) {\r\n this.settings = copy(newSettings);\r\n clearTimeout(this.isAliveTO);\r\n this.isAliveNotify();\r\n }\r\n\r\n public hidePushNotifications() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n const task: ServiceWorkerNotificationsClearTask = {type: 'notifications_clear'};\r\n apiManager.postSWMessage(task);\r\n }\r\n\r\n public setUpServiceWorkerChannel() {\r\n if(!this.isAvailable) {\r\n return;\r\n }\r\n\r\n apiManager.addServiceWorkerTaskListener('push_click', (task: ServiceWorkerPushClickTask) => {\r\n if(rootScope.idle && rootScope.idle.deactivated) {\r\n appRuntimeManager.reload();\r\n return;\r\n }\r\n\r\n rootScope.dispatchEvent('push_notification_click', task.payload);\r\n });\r\n\r\n navigator.serviceWorker.ready.then(this.isAliveNotify);\r\n }\r\n\r\n public pushSubscriptionNotify(event: PushSubscriptionNotifyType, subscription?: PushSubscription) {\r\n if(subscription) {\r\n const subscriptionObj: PushSubscriptionJSON = subscription.toJSON();\r\n if(!subscriptionObj ||\r\n !subscriptionObj.endpoint ||\r\n !subscriptionObj.keys ||\r\n !subscriptionObj.keys.p256dh ||\r\n !subscriptionObj.keys.auth) {\r\n this.log.warn('Invalid push subscription', subscriptionObj);\r\n this.unsubscribe();\r\n this.isAvailable = false;\r\n this.pushSubscriptionNotify(event);\r\n return;\r\n }\r\n \r\n this.log.warn('Push', event, subscriptionObj);\r\n rootScope.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, {\r\n tokenType: 10,\r\n tokenValue: JSON.stringify(subscriptionObj)\r\n });\r\n } else {\r\n this.log.warn('Push', event, false);\r\n rootScope.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, false as any);\r\n }\r\n }\r\n}\r\n\r\nconst webPushApiManager = new WebPushApiManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.webPushApiManager = webPushApiManager);\r\nexport default webPushApiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport App from \"../../config/app\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { tsNow } from \"../../helpers/date\";\r\nimport sessionStorage from '../sessionStorage';\r\n\r\nexport class TelegramMeWebManager {\r\n private disabled = /* false && */(Modes.test || App.domains.indexOf(location.hostname) === -1);\r\n\r\n public setAuthorized(canRedirect: boolean) {\r\n if(this.disabled) {\r\n return;\r\n }\r\n\r\n return sessionStorage.get('tgme_sync').then((curValue) => {\r\n const ts = tsNow(true);\r\n if(canRedirect &&\r\n curValue &&\r\n curValue.canRedirect === canRedirect &&\r\n (curValue.ts + 86400) > ts) {\r\n return;\r\n }\r\n\r\n sessionStorage.set({\r\n tgme_sync: {\r\n canRedirect, \r\n ts\r\n }\r\n });\r\n\r\n const path = `_websync_?authed=${canRedirect ? '1' : '0'}&version=${encodeURIComponent(App.version + ' ' + App.suffix)}`;\r\n const urls = [\r\n '//telegram.me/' + path,\r\n '//t.me/' + path\r\n ];\r\n\r\n const promises = urls.map(url => {\r\n const script = document.createElement('script');\r\n const promise = new Promise((resolve) => {\r\n script.onload = script.onerror = () => {\r\n script.remove();\r\n resolve();\r\n };\r\n });\r\n script.src = url;\r\n document.body.appendChild(script);\r\n return promise;\r\n });\r\n\r\n return Promise.all(promises);\r\n });\r\n }\r\n}\r\n\r\nconst telegramMeWebManager = new TelegramMeWebManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.telegramMeWebManager = telegramMeWebManager);\r\nexport default telegramMeWebManager;\r\n","// Copyright Twitter Inc. Licensed under MIT\r\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\r\n\r\nconst originalString = \"((?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d])|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f?|\\u2696\\ufe0f?|\\u2708\\ufe0f?|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)(?:(?:\\ud83c[\\udffb-\\udfff]|\\ufe0f?)\\u200d[\\u2640\\u2642]\\ufe0f?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f?|(?:\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d[\\udc68\\udc69]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f?\\u200d\\u26a7\\ufe0f?|\\ud83c\\udff3\\ufe0f?\\u200d\\ud83c\\udf08|\\ud83c\\udff4\\u200d\\u2620\\ufe0f?|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f?|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f?|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f?|\\ud83e\\uddde\\u200d\\u2640\\ufe0f?|\\ud83e\\uddde\\u200d\\u2642\\ufe0f?|\\ud83e\\udddf\\u200d\\u2640\\ufe0f?|\\ud83e\\udddf\\u200d\\u2642\\ufe0f?|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f?\\u20e3|(?:[©®\\u2122\\u265f]\\ufe0f?)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f?|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f?|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd1d\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78\\udd7a-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcb\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7a\\ude80-\\ude86\\ude90-\\udea8\\udeb0-\\udeb6\\udec0-\\udec2\\uded0-\\uded6]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f)\";\r\nexport default originalString;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Config from './config';\n\nimport emojiRegExp from '../vendor/emoji/regex';\nimport { encodeEmoji, toCodePoints } from '../vendor/emoji';\nimport { MessageEntity } from '../layer';\nimport { encodeEntities } from '../helpers/string';\nimport { IS_SAFARI } from '../environment/userAgent';\nimport { MOUNT_CLASS_TO } from '../config/debug';\nimport IS_EMOJI_SUPPORTED from '../environment/emojiSupport';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nconst emojiData = Config.Emoji;\n\nconst alphaCharsRegExp = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nconst alphaNumericRegExp = '0-9\\_' + alphaCharsRegExp;\nconst domainAddChars = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nconst urlAlphanumericRegExpPart = '[' + alphaCharsRegExp + '0-9]';\nconst urlProtocolRegExpPart = '((?:https?|ftp)://|mailto:)?';\nconst urlRegExp = urlProtocolRegExpPart +\n // user:pass authentication\n '(?:' + urlAlphanumericRegExpPart + '{1,64}(?::' + urlAlphanumericRegExpPart + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}' +\n '|' +\n // host name\n urlAlphanumericRegExpPart + '[' + alphaCharsRegExp + domainAddChars + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + urlAlphanumericRegExpPart + '[' + alphaCharsRegExp + domainAddChars + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + alphaCharsRegExp + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nconst urlProtocolRegExp = new RegExp('^' + urlProtocolRegExpPart.slice(0, -1), 'i');\nconst urlAnyProtocolRegExp = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nconst usernameRegExp = '[a-zA-Z\\\\d_]{5,32}';\nconst botCommandRegExp = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + usernameRegExp + '))?(\\\\b|$)';\nconst fullRegExp = new RegExp('(^| )(@)(' + usernameRegExp + ')|(' + urlRegExp + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + alphaNumericRegExp + ']{2,64})|(^|\\\\s)' + botCommandRegExp, 'i');\nconst emailRegExp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n//const markdownTestRegExp = /[`_*@~]/;\nconst markdownRegExp = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nconst siteHashtags: {[siteName: string]: string} = {\n Telegram: 'tg://search_hashtag?hashtag={1}',\n Twitter: 'https://twitter.com/hashtag/{1}',\n Instagram: 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\nconst siteMentions: {[siteName: string]: string} = {\n Telegram: '#/im?p=%40{1}',\n Twitter: 'https://twitter.com/{1}',\n Instagram: 'https://instagram.com/{1}/',\n GitHub: 'https://github.com/{1}'\n};\nconst markdownEntities: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline'\n};\n\nconst passConflictingEntities: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(let i in markdownEntities) {\n passConflictingEntities.add(markdownEntities[i]);\n}\n\nnamespace RichTextProcessor {\n export function getEmojiSpritesheetCoords(emojiCode: string) {\n let unified = encodeEmoji(emojiCode).replace(/-?fe0f/g, '');\n \n /* if(unified === '1f441-200d-1f5e8') {\n //unified = '1f441-fe0f-200d-1f5e8-fe0f';\n unified = '1f441-fe0f-200d-1f5e8';\n } */\n \n if(!emojiData.hasOwnProperty(unified) \n // && !emojiData.hasOwnProperty(unified.replace(/-?fe0f$/, ''))\n ) {\n //console.error('lol', unified);\n return null;\n }\n \n return unified;\n }\n\n export function parseEntities(text: string) {\n let match: any;\n let raw = text;\n const entities: MessageEntity[] = [];\n let matchIndex;\n let rawOffset = 0;\n // var start = tsNow()\n fullRegExp.lastIndex = 0;\n while((match = raw.match(fullRegExp))) {\n matchIndex = rawOffset + match.index;\n \n //console.log('parseEntities match:', match);\n \n if(match[3]) { // mentions\n entities.push({\n _: 'messageEntityMention',\n offset: matchIndex + match[1].length,\n length: match[2].length + match[3].length\n });\n } else if(match[4]) {\n if(emailRegExp.test(match[4])) { // email\n entities.push({\n _: 'messageEntityEmail',\n offset: matchIndex,\n length: match[4].length\n });\n } else {\n let url: string;\n let protocol = match[5];\n const tld = match[6];\n // let excluded = '';\n if(tld) { // URL\n if(!protocol && (tld.substr(0, 4) === 'xn--' || Config.TLD.indexOf(tld.toLowerCase()) !== -1)) {\n protocol = 'http://';\n }\n \n if(protocol) {\n const balanced = checkBrackets(match[4]);\n if(balanced.length !== match[4].length) {\n // excluded = match[4].substring(balanced.length);\n match[4] = balanced;\n }\n \n url = (match[5] ? '' : protocol) + match[4];\n }\n } else { // IP address\n url = (match[5] ? '' : 'http://') + match[4];\n }\n \n if(url) {\n entities.push({\n _: 'messageEntityUrl',\n offset: matchIndex,\n length: match[4].length\n });\n }\n }\n } else if(match[7]) { // New line\n entities.push({\n _: 'messageEntityLinebreak',\n offset: matchIndex,\n length: 1\n });\n } else if(match[8]) { // Emoji\n //console.log('hit', match[8]);\n const emojiCoords = getEmojiSpritesheetCoords(match[8]);\n if(emojiCoords) {\n entities.push({\n _: 'messageEntityEmoji',\n offset: matchIndex,\n length: match[8].length,\n unicode: emojiCoords\n });\n }\n } else if(match[11]) { // Hashtag\n entities.push({\n _: 'messageEntityHashtag',\n offset: matchIndex + (match[10] ? match[10].length : 0),\n length: match[11].length\n });\n } else if(match[13]) { // Bot command\n entities.push({\n _: 'messageEntityBotCommand',\n offset: matchIndex + (match[11] ? match[11].length : 0) + (match[12] ? match[12].length : 0),\n length: 1 + match[13].length + (match[14] ? 1 + match[14].length : 0),\n unsafe: true\n });\n }\n \n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n }\n \n // if (entities.length) {\n // console.log('parse entities', text, entities.slice())\n // }\n return entities;\n }\n\n /* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n } */\n\n export function parseMarkdown(raw: string, currentEntities: MessageEntity[], noTrim?: boolean): string {\n   /* if(!markdownTestRegExp.test(text)) {\n return noTrim ? text : text.trim();\n } */\n\n const entities: MessageEntity[] = [];\n let pushedEntity = false;\n const pushEntity = (entity: MessageEntity) => !findConflictingEntity(currentEntities, entity) ? (entities.push(entity), pushedEntity = true) : pushedEntity = false;\n\n const newTextParts: string[] = [];\n let rawOffset = 0, match;\n while(match = raw.match(markdownRegExp)) {\n const matchIndex = rawOffset + match.index;\n newTextParts.push(raw.substr(0, match.index));\n const text = (match[3] || match[8] || match[11] || match[13]);\n rawOffset -= text.length;\n //text = text.replace(/^\\s+|\\s+$/g, '');\n rawOffset += text.length;\n\n let entity: MessageEntity;\n pushedEntity = false;\n if(text.match(/^`*$/)) {\n newTextParts.push(match[0]);\n } else if(match[3]) { // pre\n entity = {\n _: 'messageEntityPre',\n language: '',\n offset: matchIndex + match[1].length,\n length: text.length\n };\n\n if(pushEntity(entity)) {\n if(match[5] === '\\n') {\n match[5] = '';\n rawOffset -= 1;\n }\n \n newTextParts.push(match[1] + text + match[5]);\n \n rawOffset -= match[2].length + match[4].length;\n }\n } else if(match[7]) { // code|italic|bold\n const isSOH = match[6] === '\\x01';\n\n entity = {\n _: markdownEntities[match[7]] as (MessageEntity.messageEntityBold | MessageEntity.messageEntityCode | MessageEntity.messageEntityItalic)['_'],\n //offset: matchIndex + match[6].length,\n offset: matchIndex + (isSOH ? 0 : match[6].length),\n length: text.length\n };\n\n if(pushEntity(entity)) {\n if(!isSOH) {\n newTextParts.push(match[6] + text + match[9]);\n } else {\n newTextParts.push(text);\n }\n \n rawOffset -= match[7].length * 2 + (isSOH ? 2 : 0);\n }\n } else if(match[11]) { // custom mention\n entity = {\n _: 'messageEntityMentionName',\n user_id: +match[10],\n offset: matchIndex,\n length: text.length\n };\n \n if(pushEntity(entity)) {\n newTextParts.push(text);\n \n rawOffset -= match[0].length - text.length;\n }\n } else if(match[12]) { // text url\n entity = {\n _: 'messageEntityTextUrl',\n url: match[14],\n offset: matchIndex,\n length: text.length\n };\n \n if(pushEntity(entity)) {\n newTextParts.push(text);\n\n rawOffset -= match[12].length - text.length;\n }\n }\n\n if(!pushedEntity) {\n newTextParts.push(match[0]);\n }\n\n raw = raw.substr(match.index + match[0].length);\n rawOffset += match.index + match[0].length;\n }\n\n newTextParts.push(raw);\n let newText = newTextParts.join('');\n if(!newText.replace(/\\s+/g, '').length) {\n newText = raw;\n entities.splice(0, entities.length);\n }\n\n if(!entities.length && !noTrim) {\n newText = newText.trim();\n }\n\n mergeEntities(currentEntities, entities);\n combineSameEntities(currentEntities);\n\n let length = newText.length;\n if(!noTrim) {\n // trim left\n newText = newText.replace(/^\\s*/, '');\n\n let diff = length - newText.length;\n if(diff) {\n currentEntities.forEach(entity => {\n entity.offset = Math.max(0, entity.offset - diff);\n });\n }\n\n // trim right\n newText = newText.replace(/\\s*$/, '');\n diff = length - newText.length;\n length = newText.length;\n if(diff) {\n currentEntities.forEach(entity => {\n if((entity.offset + entity.length) > length) {\n entity.length = length - entity.offset;\n }\n });\n }\n }\n\n return newText;\n }\n\n export function findConflictingEntity(currentEntities: MessageEntity[], newEntity: MessageEntity) {\n return currentEntities.find(currentEntity => {\n const isConflictingTypes = newEntity._ === currentEntity._ || \n (!passConflictingEntities.has(newEntity._) && !passConflictingEntities.has(currentEntity._));\n\n if(!isConflictingTypes) {\n return false;\n }\n\n const isConflictingOffset = newEntity.offset >= currentEntity.offset && \n (newEntity.length + newEntity.offset) <= (currentEntity.length + currentEntity.offset);\n\n return isConflictingOffset;\n });\n }\n\n export function mergeEntities(currentEntities: MessageEntity[], newEntities: MessageEntity[]) {\n const filtered = newEntities.filter(e => {\n return !findConflictingEntity(currentEntities, e);\n });\n\n currentEntities.push(...filtered);\n currentEntities.sort((a, b) => a.offset - b.offset);\n\n if(!IS_EMOJI_SUPPORTED) { // fix splitted emoji. messageEntityTextUrl can split the emoji if starts before its end (e.g. on fe0f)\n for(let i = 0; i < currentEntities.length; ++i) {\n const entity = currentEntities[i];\n if(entity._ === 'messageEntityEmoji') {\n const nextEntity = currentEntities[i + 1];\n if(nextEntity && nextEntity.offset < (entity.offset + entity.length)) {\n entity.length = nextEntity.offset - entity.offset;\n }\n }\n }\n }\n\n return currentEntities;\n }\n\n export function combineSameEntities(entities: MessageEntity[]) {\n //entities = entities.slice();\n for(let i = 0; i < entities.length; ++i) {\n const entity = entities[i];\n\n let nextEntityIdx = -1;\n do {\n nextEntityIdx = entities.findIndex((e, _i) => _i !== i && e._ === entity._ && (e.offset - entity.length) === entity.offset);\n if(nextEntityIdx !== -1) {\n const nextEntity = entities[nextEntityIdx];\n entity.length += nextEntity.length;\n entities.splice(nextEntityIdx, 1);\n }\n } while(nextEntityIdx !== -1);\n }\n //return entities;\n }\n\n export function wrapRichText(text: string, options: Partial<{\n entities: MessageEntity[],\n contextSite: string,\n highlightUsername: string,\n noLinks: true,\n noLinebreaks: true,\n noCommands: true,\n wrappingDraft: boolean,\n //mustWrapEmoji: boolean,\n fromBot: boolean,\n noTextFormat: true,\n passEntities: Partial<{\n [_ in MessageEntity['_']]: boolean\n }>,\n\n contextHashtag?: string,\n }> = {}) {\n if(!text) {\n return '';\n }\n\n const lol: {\n part: string,\n offset: number\n }[] = [];\n const entities = options.entities || parseEntities(text);\n\n const passEntities: typeof options.passEntities = options.passEntities || {};\n const contextSite = options.contextSite || 'Telegram';\n const contextExternal = contextSite !== 'Telegram';\n\n const insertPart = (entity: MessageEntity, startPart: string, endPart?: string) => {\n lol.push({part: startPart, offset: entity.offset});\n\n if(endPart) {\n lol.unshift({part: endPart, offset: entity.offset + entity.length});\n }\n };\n\n for(let i = 0, length = entities.length; i < length; ++i) {\n const entity = entities[i];\n switch(entity._) {\n case 'messageEntityBold': {\n if(!options.noTextFormat) {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n }\n\n break;\n }\n\n case 'messageEntityItalic': {\n if(!options.noTextFormat) {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n }\n\n break;\n }\n\n case 'messageEntityStrike': {\n if(options.wrappingDraft) {\n const styleName = IS_SAFARI ? 'text-decoration' : 'text-decoration-line';\n insertPart(entity, ``, '');\n } else {\n insertPart(entity, '', '');\n }\n\n break;\n }\n\n case 'messageEntityUnderline': {\n if(options.wrappingDraft) {\n const styleName = IS_SAFARI ? 'text-decoration' : 'text-decoration-line';\n insertPart(entity, ``, '');\n } else {\n insertPart(entity, '', '');\n }\n\n break;\n }\n \n case 'messageEntityCode': {\n if(options.wrappingDraft) {\n insertPart(entity, '', '');\n } else {\n insertPart(entity, '', '');\n }\n \n break;\n }\n \n case 'messageEntityPre': {\n if(!options.noTextFormat) {\n insertPart(entity, `
`, '
');\n }\n \n break;\n }\n\n case 'messageEntityHighlight': {\n insertPart(entity, '', '');\n break;\n }\n\n case 'messageEntityBotCommand': {\n // if(!(options.noLinks || options.noCommands || contextExternal)/* && !entity.unsafe */) {\n if(!options.noLinks && passEntities[entity._]) {\n const entityText = text.substr(entity.offset, entity.length);\n let command = entityText.substr(1);\n let bot: string | boolean;\n let atPos: number;\n if((atPos = command.indexOf('@')) !== -1) {\n bot = command.substr(atPos + 1);\n command = command.substr(0, atPos);\n } else {\n bot = options.fromBot;\n }\n\n insertPart(entity, ``, ``);\n }\n\n break;\n }\n\n case 'messageEntityEmoji': {\n //if(!(options.wrappingDraft && IS_EMOJI_SUPPORTED)) { // * fix safari emoji\n if(!IS_EMOJI_SUPPORTED) { // no wrapping needed\n // if(IS_EMOJI_SUPPORTED) { // ! contenteditable=\"false\" нужен для поля ввода, иначе там будет меняться шрифт в Safari, или же рендерить смайлик напрямую, без контейнера\n // insertPart(entity, '', '');\n // } else {\n insertPart(entity, `\"`,`);\n // }\n //} else if(options.mustWrapEmoji) {\n } else if(!options.wrappingDraft) {\n insertPart(entity, '', '');\n } else if(!IS_SAFARI) {\n insertPart(entity, '', '');\n }\n /* if(!IS_EMOJI_SUPPORTED) {\n insertPart(entity, `\"`,`);\n } */\n\n break;\n }\n \n case 'messageEntityCaret': {\n insertPart(entity, '');\n break;\n }\n\n /* case 'messageEntityLinebreak': {\n if(options.noLinebreaks) {\n insertPart(entity, ' ');\n } else {\n insertPart(entity, '
');\n }\n \n break;\n } */\n\n case 'messageEntityUrl':\n case 'messageEntityTextUrl': {\n if(!(options.noLinks && !passEntities[entity._])) {\n const entityText = text.substr(entity.offset, entity.length);\n\n // let inner: string;\n let url: string = (entity as MessageEntity.messageEntityTextUrl).url || entityText;\n let masked = false;\n let onclick: string;\n\n const wrapped = wrapUrl(url, true);\n url = wrapped.url;\n onclick = wrapped.onclick;\n\n if(entity._ === 'messageEntityTextUrl') {\n const nextEntity = entities[i + 1];\n if(nextEntity?._ === 'messageEntityUrl' && \n nextEntity.length === entity.length && \n nextEntity.offset === entity.offset) {\n i++;\n }\n\n if(url !== entityText) {\n masked = true;\n }\n } else {\n //inner = encodeEntities(replaceUrlEncodings(entityText));\n }\n\n const currentContext = !!onclick;\n if(!onclick && masked && !currentContext) {\n onclick = 'showMaskedAlert';\n }\n\n if(options.wrappingDraft) {\n onclick = undefined;\n }\n\n const href = (currentContext || typeof electronHelpers === 'undefined') \n ? encodeEntities(url)\n : `javascript:electronHelpers.openExternal('${encodeEntities(url)}');`;\n\n const target = (currentContext || typeof electronHelpers !== 'undefined')\n ? '' : ' target=\"_blank\" rel=\"noopener noreferrer\"';\n\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityEmail': {\n if(!options.noLinks) {\n const entityText = text.substr(entity.offset, entity.length);\n insertPart(entity, ``, '');\n }\n\n break;\n }\n \n case 'messageEntityHashtag': {\n const contextUrl = !options.noLinks && siteHashtags[contextSite];\n if(contextUrl) {\n const entityText = text.substr(entity.offset, entity.length);\n const hashtag = entityText.substr(1);\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityMentionName': {\n if(!(options.noLinks && !passEntities[entity._])) {\n insertPart(entity, ``, '');\n }\n\n break;\n }\n\n case 'messageEntityMention': {\n // const contextUrl = !options.noLinks && siteMentions[contextSite];\n if(!options.noLinks) {\n const entityText = text.substr(entity.offset, entity.length);\n const username = entityText.substr(1);\n\n const {url, onclick} = wrapUrl('t.me/' + username);\n\n // insertPart(entity, ``, '');\n insertPart(entity, ``, '');\n }\n \n break;\n }\n }\n }\n\n lol.sort((a, b) => a.offset - b.offset);\n\n const arr: string[] = [];\n let usedLength = 0;\n for(const {part, offset} of lol) {\n if(offset > usedLength) {\n arr.push(encodeEntities(text.slice(usedLength, offset)));\n usedLength = offset;\n }\n\n arr.push(part);\n }\n\n if(usedLength < text.length) {\n arr.push(encodeEntities(text.slice(usedLength)));\n }\n\n return arr.join('');\n }\n\n export function fixEmoji(text: string, entities?: MessageEntity[]) {\n /* if(!IS_EMOJI_SUPPORTED) {\n return text;\n } */\n // '$`\\ufe0f'\n\n text = text.replace(/[\\u2640\\u2642\\u2764](?!\\ufe0f)/g, (match, offset, string) => {\n if(entities) {\n const length = match.length;\n\n offset += length;\n entities.forEach(entity => {\n const end = entity.offset + entity.length;\n if(end === offset) { // current entity\n entity.length += length;\n } else if(end > offset) {\n entity.offset += length;\n }\n });\n }\n \n // console.log([match, offset, string]);\n return match + '\\ufe0f';\n });\n\n return text;\n }\n\n export function wrapDraftText(text: string, options: Partial<{\n entities: MessageEntity[]\n }> = {}) {\n if(!text) {\n return '';\n }\n\n return wrapRichText(text, {\n entities: options.entities, \n noLinks: true,\n wrappingDraft: true,\n passEntities: {\n messageEntityTextUrl: true,\n messageEntityMentionName: true\n }\n });\n }\n\n export function checkBrackets(url: string) {\n var urlLength = url.length;\n var urlOpenBrackets = url.split('(').length - 1;\n var urlCloseBrackets = url.split(')').length - 1;\n while(urlCloseBrackets > urlOpenBrackets &&\n url.charAt(urlLength - 1) === ')') {\n url = url.substr(0, urlLength - 1)\n urlCloseBrackets--;\n urlLength--;\n }\n if(urlOpenBrackets > urlCloseBrackets) {\n url = url.replace(/\\)+$/, '');\n }\n return url;\n }\n \n export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n }\n \n export function wrapPlainText(text: string) {\n if(IS_EMOJI_SUPPORTED) {\n return text;\n }\n \n if(!text || !text.length) {\n return '';\n }\n \n text = text.replace(/\\ufe0f/g, '');\n var match;\n var raw = text;\n const arr: string[] = [];\n let emojiTitle;\n fullRegExp.lastIndex = 0;\n while((match = raw.match(fullRegExp))) {\n arr.push(raw.substr(0, match.index))\n if(match[8]) {\n // @ts-ignore\n const emojiCode = EmojiHelper.emojiMap[match[8]];\n if(emojiCode &&\n // @ts-ignore\n (emojiTitle = emojiData[emojiCode][1][0])) {\n arr.push(':' + emojiTitle + ':');\n } else {\n arr.push(match[0]);\n }\n } else {\n arr.push(match[0]);\n }\n \n raw = raw.substr(match.index + match[0].length);\n }\n arr.push(raw);\n return arr.join('');\n }\n\n export function wrapEmojiText(text: string, isDraft = false) {\n if(!text) return '';\n \n let entities = parseEntities(text).filter(e => e._ === 'messageEntityEmoji');\n return wrapRichText(text, {entities, wrappingDraft: isDraft});\n }\n\n export function wrapUrl(url: string, unsafe?: number | boolean): {url: string, onclick: string} {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n \n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: string;\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?t(?:elegram)?\\.me\\/(.+)/))) {\n const fullPath = tgMeMatch[1];\n const path = fullPath.split('/');\n switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n onclick = path[0];\n break;\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1];\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n \n return {url, onclick};\n }\n\n export function matchUrlProtocol(text: string) {\n return !text ? null : text.match(urlAnyProtocolRegExp);\n }\n \n export function matchUrl(text: string) {\n return !text ? null : text.match(urlRegExp);\n }\n\n export function matchEmail(text: string) {\n return !text ? null : text.match(emailRegExp);\n }\n\n export function getAbbreviation(str: string, onlyFirst = false) {\n const splitted = str.trim().split(' ');\n if(!splitted[0]) return '';\n\n const first = [...splitted[0]][0];\n\n if(onlyFirst || splitted.length === 1) return wrapEmojiText(first);\n\n const last = [...splitted[splitted.length - 1]][0];\n\n return wrapEmojiText(first + last);\n }\n\n export function isUsernameValid(username: string) {\n return ((username.length >= 5 && username.length <= 32) || !username.length) && /^[a-zA-Z0-9_]*$/.test(username);\n }\n\n export function getEmojiEntityFromEmoji(emoji: string): MessageEntity.messageEntityEmoji {\n return {\n _: 'messageEntityEmoji',\n offset: 0,\n length: emoji.length,\n unicode: toCodePoints(emoji).join('-').replace(/-?fe0f/g, '')\n };\n }\n\n export function wrapSingleEmoji(emoji: string) {\n return wrapRichText(emoji, {\n entities: [getEmojiEntityFromEmoji(emoji)]\n });\n }\n}\n\nMOUNT_CLASS_TO.RichTextProcessor = RichTextProcessor;\n\nexport {RichTextProcessor};\nexport default RichTextProcessor;\n\n","export default function Worker_fn() {\n return new Worker(__webpack_public_path__ + \"mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js\");\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { LocalStorageProxyTask, LocalStorageProxyTaskResponse } from '../localStorage';\n//import type { LocalStorageProxyDeleteTask, LocalStorageProxySetTask } from '../storage';\nimport type { Awaited, InvokeApiOptions, WorkerTaskVoidTemplate } from '../../types';\nimport type { Config, InputFile, MethodDeclMap } from '../../layer';\nimport MTProtoWorker from 'worker-loader!./mtproto.worker';\n//import './mtproto.worker';\nimport { isObject } from '../../helpers/object';\nimport CryptoWorkerMethods from '../crypto/crypto_methods';\nimport { logger } from '../logger';\nimport rootScope from '../rootScope';\nimport webpWorkerController from '../webp/webpWorkerController';\nimport { ApiFileManager, DownloadOptions } from './apiFileManager';\nimport type { RequestFilePartTask, RequestFilePartTaskResponse, ServiceWorkerTask } from '../serviceWorker/index.service';\nimport { UserAuth } from './mtproto_config';\nimport type { MTMessage } from './networker';\nimport DEBUG, { MOUNT_CLASS_TO } from '../../config/debug';\nimport Socket from './transports/websocket';\nimport singleInstance from './singleInstance';\nimport sessionStorage from '../sessionStorage';\nimport webPushApiManager from './webPushApiManager';\nimport AppStorage from '../storage';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport { SocketProxyTask } from './transports/socketProxied';\nimport telegramMeWebManager from './telegramMeWebManager';\nimport { CacheStorageDbName } from '../cacheStorage';\nimport { pause } from '../../helpers/schedulers/pause';\nimport IS_WEBP_SUPPORTED from '../../environment/webpSupport';\n\ntype Task = {\n taskId: number,\n task: string,\n args: any[]\n};\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport interface ToggleStorageTask extends WorkerTaskVoidTemplate {\n type: 'toggleStorage',\n payload: boolean\n};\n\nexport class ApiManagerProxy extends CryptoWorkerMethods {\n public worker: /* Window */Worker;\n private afterMessageIdTemp = 0;\n\n private taskId = 0;\n private awaiting: {\n [id: number]: {\n resolve: any,\n reject: any,\n taskName: string\n }\n } = {} as any;\n private pending: Array = [];\n\n public updatesProcessor: (obj: any) => void = null;\n\n private log = logger('API-PROXY');\n\n private hashes: {[method: string]: HashOptions} = {};\n\n private apiPromisesSingle: {\n [q: string]: Promise\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise,\n fulfilled: boolean,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n private isSWRegistered = true;\n\n private debug = DEBUG /* && false */;\n\n private sockets: Map = new Map();\n\n private taskListeners: {[taskType: string]: (task: any) => void} = {};\n private taskListenersSW: {[taskType: string]: (task: any) => void} = {};\n\n public onServiceWorkerFail: () => void;\n\n private postMessagesWaiting: any[][] = [];\n\n private getConfigPromise: Promise;\n\n constructor() {\n super();\n this.log('constructor');\n\n singleInstance.start();\n\n this.registerServiceWorker();\n\n this.addTaskListener('clear', () => {\n const toClear: CacheStorageDbName[] = ['cachedFiles', 'cachedStreamChunks'];\n Promise.all([\n AppStorage.toggleStorage(false), \n sessionStorage.clear(),\n Promise.race([\n telegramMeWebManager.setAuthorized(false),\n pause(3000)\n ]),\n webPushApiManager.forceUnsubscribe(),\n Promise.all(toClear.map(cacheName => caches.delete(cacheName)))\n ]).finally(() => {\n appRuntimeManager.reload();\n });\n });\n\n this.addTaskListener('connectionStatusChange', (task: any) => {\n rootScope.dispatchEvent('connection_status_change', task.payload);\n });\n\n this.addTaskListener('convertWebp', (task) => {\n webpWorkerController.postMessage(task);\n });\n\n this.addTaskListener('socketProxy', (task: SocketProxyTask) => {\n const socketTask = task.payload;\n const id = socketTask.id;\n //console.log('socketProxy', socketTask, id);\n\n if(socketTask.type === 'send') {\n const socket = this.sockets.get(id);\n socket.send(socketTask.payload);\n } else if(socketTask.type === 'close') { // will remove from map in onClose\n const socket = this.sockets.get(id);\n socket.close();\n } else if(socketTask.type === 'setup') {\n const socket = new Socket(socketTask.payload.dcId, socketTask.payload.url, socketTask.payload.logSuffix);\n \n const onOpen = () => {\n //console.log('socketProxy onOpen');\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'open',\n id\n }\n });\n };\n const onClose = () => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'close',\n id\n }\n });\n\n socket.removeEventListener('open', onOpen);\n socket.removeEventListener('close', onClose);\n socket.removeEventListener('message', onMessage);\n this.sockets.delete(id);\n };\n const onMessage = (buffer: ArrayBuffer) => {\n this.postMessage({\n type: 'socketProxy', \n payload: {\n type: 'message',\n id,\n payload: buffer\n }\n });\n };\n\n socket.addEventListener('open', onOpen);\n socket.addEventListener('close', onClose);\n socket.addEventListener('message', onMessage);\n this.sockets.set(id, socket);\n }\n });\n\n this.addTaskListener('localStorageProxy', (task: LocalStorageProxyTask) => {\n const storageTask = task.payload;\n // @ts-ignore\n sessionStorage[storageTask.type](...storageTask.args).then(res => {\n this.postMessage({\n type: 'localStorageProxy',\n id: task.id,\n payload: res\n } as LocalStorageProxyTaskResponse);\n });\n });\n\n rootScope.addEventListener('language_change', (language) => {\n this.performTaskWorkerVoid('setLanguage', language);\n });\n\n window.addEventListener('online', (event) => {\n this.forceReconnectTimeout();\n });\n\n \n this.registerWorker();\n \n\n setTimeout(() => {\n this.getConfig();\n }, 5000);\n }\n\n public isServiceWorkerOnline() {\n return this.isSWRegistered;\n }\n\n private registerServiceWorker() {\n if(!('serviceWorker' in navigator)) return;\n \n const worker = navigator.serviceWorker;\n worker.register('./sw.js', {scope: './'}).then(registration => {\n this.log('SW registered', registration);\n this.isSWRegistered = true;\n\n const sw = registration.installing || registration.waiting || registration.active;\n sw.addEventListener('statechange', (e) => {\n this.log('SW statechange', e);\n });\n\n //this.postSWMessage = worker.controller.postMessage.bind(worker.controller);\n\n \n \n \n \n }, (err) => {\n this.isSWRegistered = false;\n this.log.error('SW registration failed!', err);\n\n if(this.onServiceWorkerFail) {\n this.onServiceWorkerFail();\n }\n });\n\n worker.addEventListener('controllerchange', () => {\n this.log.warn('controllerchange');\n this.releasePending();\n\n worker.controller.addEventListener('error', (e) => {\n this.log.error('controller error:', e);\n });\n });\n\n \n \n \n worker.addEventListener('message', (e) => {\n const task: ServiceWorkerTask = e.data;\n if(!isObject(task)) {\n return;\n }\n\n const callback = this.taskListenersSW[task.type];\n if(callback) {\n callback(task);\n }\n });\n\n this.addServiceWorkerTaskListener('requestFilePart', (task: RequestFilePartTask) => {\n const responseTask: RequestFilePartTaskResponse = {\n type: task.type,\n id: task.id\n };\n \n this.performTaskWorker>>('requestFilePart', ...task.payload)\n .then((uploadFile) => {\n responseTask.payload = uploadFile;\n this.postSWMessage(responseTask);\n }, (err) => {\n responseTask.originalPayload = task.payload;\n responseTask.error = err;\n this.postSWMessage(responseTask);\n });\n });\n\n \n\n worker.addEventListener('messageerror', (e) => {\n this.log.error('SW messageerror:', e);\n });\n }\n\n public postMessage(...args: any[]) {\n this.postMessagesWaiting.push(args);\n }\n\n public postSWMessage(message: any) {\n if(navigator.serviceWorker.controller) {\n navigator.serviceWorker.controller.postMessage(message);\n }\n }\n\n private onWorkerFirstMessage(worker: any) {\n if(!this.worker) {\n this.worker = worker;\n this.log('set webWorker');\n\n this.postMessage = this.worker.postMessage.bind(this.worker);\n\n this.postMessagesWaiting.forEach(args => this.postMessage(...args));\n this.postMessagesWaiting.length = 0;\n\n const isWebpSupported = IS_WEBP_SUPPORTED;\n this.log('WebP supported:', isWebpSupported);\n this.postMessage({type: 'webpSupport', payload: isWebpSupported});\n this.postMessage({type: 'userAgent', payload: navigator.userAgent});\n\n this.releasePending();\n }\n }\n\n public addTaskListener(name: keyof ApiManagerProxy['taskListeners'], callback: ApiManagerProxy['taskListeners'][typeof name]) {\n this.taskListeners[name] = callback;\n }\n\n public addServiceWorkerTaskListener(name: keyof ApiManagerProxy['taskListenersSW'], callback: ApiManagerProxy['taskListenersSW'][typeof name]) {\n this.taskListenersSW[name] = callback;\n }\n\n private onWorkerMessage = (e: MessageEvent) => {\n //this.log('got message from worker:', e.data);\n\n const task = e.data;\n\n if(!isObject(task)) {\n return;\n }\n\n const callback = this.taskListeners[task.type];\n if(callback) {\n callback(task);\n return;\n }\n\n if(task.update) {\n if(this.updatesProcessor) {\n this.updatesProcessor(task.update);\n }\n } else if(task.progress) {\n rootScope.dispatchEvent('download_progress', task.progress);\n } else if(task.hasOwnProperty('result') || task.hasOwnProperty('error')) {\n this.finalizeTask(task.taskId, task.result, task.error);\n }\n };\n\n \n private registerWorker() {\n // return;\n\n const worker = new MTProtoWorker();\n //const worker = window;\n worker.addEventListener('message', this.onWorkerFirstMessage.bind(this, worker), {once: true});\n worker.addEventListener('message', this.onWorkerMessage);\n\n worker.addEventListener('error', (err) => {\n this.log.error('WORKER ERROR', err);\n });\n }\n \n\n private finalizeTask(taskId: number, result: any, error: any) {\n const deferred = this.awaiting[taskId];\n if(deferred !== undefined) {\n this.debug && this.log.debug('done', deferred.taskName, result, error);\n error ? deferred.reject(error) : deferred.resolve(result);\n delete this.awaiting[taskId];\n }\n }\n\n public performTaskWorkerVoid(task: string, ...args: any[]) {\n const params = {\n task,\n taskId: this.taskId,\n args\n };\n\n this.pending.push(params);\n this.releasePending();\n\n this.taskId++;\n }\n\n public performTaskWorker(task: string, ...args: any[]) {\n this.debug && this.log.debug('start', task, args);\n\n return new Promise((resolve, reject) => {\n this.awaiting[this.taskId] = {resolve, reject, taskName: task};\n this.performTaskWorkerVoid(task, ...args);\n });\n }\n\n private releasePending() {\n //return;\n\n if(this.postMessage) {\n this.debug && this.log.debug('releasing tasks, length:', this.pending.length);\n this.pending.forEach(pending => {\n this.postMessage(pending);\n });\n \n this.debug && this.log.debug('released tasks');\n this.pending.length = 0;\n }\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n //console.log('will invokeApi:', method, params, options);\n return this.performTaskWorker('invokeApi', method, params, options);\n }\n\n public invokeApiAfter(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n \n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n //console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable(method: T, params: Omit = {} as any, options: InvokeApiOptions = {}): Promise {\n //console.log('will invokeApi:', method, params, options);\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n (params as any).hash = cached.hash;\n }\n }\n\n return this.invokeApi(method, params, options).then((result: any) => {\n if(result._.includes('NotModified')) {\n this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n \n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n \n if(!this.hashes[method]) this.hashes[method] = {};\n this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n return result;\n });\n }\n\n public invokeApiSingle(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise {\n const q = method + '-' + JSON.stringify(params);\n if(this.apiPromisesSingle[q]) {\n return this.apiPromisesSingle[q];\n }\n\n return this.apiPromisesSingle[q] = this.invokeApi(method, params, options).finally(() => {\n delete this.apiPromisesSingle[q];\n });\n }\n\n public invokeApiCacheable(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean}> = {}): Promise {\n const cache = this.apiPromisesCacheable[method] ?? (this.apiPromisesCacheable[method] = {});\n const queryJSON = JSON.stringify(params);\n const item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n return item.promise;\n }\n\n if(options.override) {\n if(item && item.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = window.setTimeout(() => {\n delete cache[queryJSON];\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n }\n }\n }\n\n /* private computeHash(smth: any[]) {\n smth = smth.slice().sort((a, b) => a.id - b.id);\n //return smth.reduce((hash, v) => (((hash * 0x4F25) & 0x7FFFFFFF) + v.id) & 0x7FFFFFFF, 0);\n return smth.reduce((hash, v) => ((hash * 20261) + 0x80000000 + v.id) % 0x80000000, 0);\n } */\n\n public setBaseDcId(dcId: number) {\n return this.performTaskWorker('setBaseDcId', dcId);\n }\n\n public setQueueId(queueId: number) {\n return this.performTaskWorker('setQueueId', queueId);\n }\n\n public setUserAuth(userAuth: UserAuth | number) {\n if(typeof(userAuth) === 'number') {\n userAuth = {dcID: 0, date: Date.now() / 1000 | 0, id: userAuth};\n }\n \n rootScope.dispatchEvent('user_auth', userAuth);\n return this.performTaskWorker('setUserAuth', userAuth);\n }\n\n public getNetworker(dc_id: number, options?: InvokeApiOptions) {\n return this.performTaskWorker('getNetworker', dc_id, options);\n }\n\n public logOut(): Promise {\n // AppStorage.toggleStorage(false);\n return this.performTaskWorker('logOut');\n }\n\n public cancelDownload(fileName: string) {\n return this.performTaskWorker('cancelDownload', fileName);\n }\n\n public downloadFile(options: DownloadOptions) {\n return this.performTaskWorker('downloadFile', options);\n }\n\n public uploadFile(options: {file: Blob | File, fileName: string}) {\n return this.performTaskWorker('uploadFile', options);\n }\n\n public toggleStorage(enabled: boolean) {\n const task: ToggleStorageTask = {type: 'toggleStorage', payload: enabled};\n this.postMessage(task);\n this.postSWMessage(task);\n }\n\n public stopAll() {\n return this.performTaskWorkerVoid('stopAll');\n }\n\n public startAll() {\n return this.performTaskWorkerVoid('startAll');\n }\n\n public forceReconnectTimeout() {\n this.postMessage({type: 'online'});\n }\n\n public forceReconnect() {\n this.postMessage({type: 'forceReconnect'});\n }\n\n public getConfig() {\n if(this.getConfigPromise) return this.getConfigPromise;\n return this.getConfigPromise = this.invokeApi('help.getConfig').then(config => {\n rootScope.config = config;\n return config;\n });\n }\n}\n\nconst apiManagerProxy = new ApiManagerProxy();\nMOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;\nexport default apiManagerProxy;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Awaited } from \"../../types\";\r\nimport type { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow, hash_pbkdf2, rsaEncrypt, pqPrimeFactorization, gzipUncompress } from \"./crypto_utils\";\r\nimport type { computeSRP } from \"./srp\";\r\n\r\nexport type CryptoMethods = {\r\n 'sha1-hash': typeof sha1HashSync,\r\n 'sha256-hash': typeof sha256HashSync,\r\n 'pbkdf2': typeof hash_pbkdf2,\r\n 'aes-encrypt': typeof aesEncryptSync,\r\n 'aes-decrypt': typeof aesDecryptSync,\r\n 'rsa-encrypt': typeof rsaEncrypt,\r\n 'factorize': typeof pqPrimeFactorization,\r\n 'mod-pow': typeof bytesModPow,\r\n 'gzipUncompress': typeof gzipUncompress,\r\n 'computeSRP': typeof computeSRP\r\n};\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker(task: string, ...args: any[]): Promise;\r\n\r\n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\r\n return this.performTaskWorker>>(method, ...args as any[]);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport calcImageInBox from \"./calcImageInBox\";\r\nimport EventListenerBase from \"./eventListenerBase\";\r\n\r\nexport class MediaSize {\r\n constructor(public width = 0, public height = width) {\r\n\r\n }\r\n\r\n public aspect(boxSize: MediaSize, fitted: boolean) {\r\n return calcImageInBox(this.width, this.height, boxSize.width, boxSize.height, fitted);\r\n }\r\n\r\n public aspectFitted(boxSize: MediaSize) {\r\n return this.aspect(boxSize, true);\r\n }\r\n\r\n public aspectCovered(boxSize: MediaSize) {\r\n return this.aspect(boxSize, false);\r\n }\r\n}\r\n\r\nexport function makeMediaSize(width?: number, height?: number): MediaSize {\r\n return new MediaSize(width, height);\r\n}\r\n\r\ntype MediaTypeSizes = {\r\n regular: MediaSize,\r\n webpage: MediaSize,\r\n album: MediaSize,\r\n esgSticker: MediaSize,\r\n animatedSticker: MediaSize,\r\n staticSticker: MediaSize,\r\n emojiSticker: MediaSize,\r\n poll: MediaSize,\r\n round: MediaSize\r\n};\r\n\r\nexport enum ScreenSize {\r\n mobile,\r\n medium,\r\n large\r\n}\r\n\r\nconst MOBILE_SIZE = 600;\r\nconst MEDIUM_SIZE = 1275;\r\nconst LARGE_SIZE = 1680;\r\n\r\nclass MediaSizes extends EventListenerBase<{\r\n changeScreen: (from: ScreenSize, to: ScreenSize) => void,\r\n resize: () => void\r\n}> {\r\n private screenSizes: {key: ScreenSize, value: number}[] = [\r\n {key: ScreenSize.mobile, value: MOBILE_SIZE},\r\n {key: ScreenSize.medium, value: MEDIUM_SIZE},\r\n {key: ScreenSize.large, value: LARGE_SIZE}\r\n ];\r\n\r\n private sizes: {[k in 'desktop' | 'handhelds']: MediaTypeSizes} = {\r\n handhelds: {\r\n regular: makeMediaSize(270, 270),\r\n webpage: makeMediaSize(270, 200),\r\n album: makeMediaSize(270, 0),\r\n esgSticker: makeMediaSize(68, 68),\r\n animatedSticker: makeMediaSize(180, 180),\r\n staticSticker: makeMediaSize(180, 180),\r\n emojiSticker: makeMediaSize(112, 112),\r\n poll: makeMediaSize(240, 0),\r\n round: makeMediaSize(200, 200)\r\n },\r\n desktop: {\r\n regular: makeMediaSize(420, 340),\r\n webpage: makeMediaSize(420, 340),\r\n album: makeMediaSize(420, 0),\r\n esgSticker: makeMediaSize(80, 80),\r\n animatedSticker: makeMediaSize(200, 200),\r\n staticSticker: makeMediaSize(200, 200),\r\n emojiSticker: makeMediaSize(112, 112),\r\n poll: makeMediaSize(330, 0),\r\n round: makeMediaSize(280, 280)\r\n }\r\n };\r\n\r\n public isMobile = false;\r\n public active: MediaTypeSizes;\r\n public activeScreen: ScreenSize;\r\n private rAF: number;\r\n\r\n constructor() {\r\n super();\r\n\r\n window.addEventListener('resize', () => {\r\n if(this.rAF) window.cancelAnimationFrame(this.rAF);\r\n this.rAF = window.requestAnimationFrame(() => {\r\n this.handleResize();\r\n this.rAF = 0;\r\n });\r\n });\r\n this.handleResize();\r\n }\r\n\r\n private handleResize = () => {\r\n const innerWidth = window.innerWidth;\r\n //this.isMobile = innerWidth <= 720;\r\n \r\n let activeScreen = this.screenSizes[0].key;\r\n for(let i = this.screenSizes.length - 1; i >= 0; --i) {\r\n if(this.screenSizes[i].value < innerWidth) {\r\n activeScreen = (this.screenSizes[i + 1] || this.screenSizes[i]).key;\r\n break;\r\n }\r\n }\r\n\r\n const wasScreen = this.activeScreen;\r\n this.activeScreen = activeScreen;\r\n this.isMobile = this.activeScreen === ScreenSize.mobile;\r\n this.active = this.isMobile ? this.sizes.handhelds : this.sizes.desktop;\r\n\r\n //console.time('esg');\r\n //const computedStyle = window.getComputedStyle(document.documentElement);\r\n //this.active.esgSticker.width = parseFloat(computedStyle.getPropertyValue('--esg-sticker-size'));\r\n //console.timeEnd('esg');\r\n\r\n if(wasScreen !== activeScreen) {\r\n //console.log('changeScreen', this.activeScreen, activeScreen);\r\n\r\n if(wasScreen !== undefined) {\r\n this.dispatchEvent('changeScreen', wasScreen, activeScreen);\r\n }\r\n }\r\n\r\n if(wasScreen !== undefined) {\r\n this.dispatchEvent('resize');\r\n }\r\n\r\n /* if(this.isMobile) {\r\n for(let i in this.active) {\r\n // @ts-ignore\r\n let size = this.active[i];\r\n size.width = innerWidth \r\n }\r\n } */\r\n };\r\n}\r\n\r\nconst mediaSizes = new MediaSizes();\r\nMOUNT_CLASS_TO.mediaSizes = mediaSizes;\r\nexport default mediaSizes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport I18n, { i18n } from \"../lib/langPack\";\r\nimport { capitalizeFirstLetter } from \"./string\";\r\n\r\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\r\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\r\n\r\nexport const ONE_DAY = 86400;\r\n\r\n// https://stackoverflow.com/a/6117889\r\nexport const getWeekNumber = (date: Date) => {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const dayNum = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\r\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7);\r\n};\r\n\r\nexport function formatDateAccordingToTodayNew(time: Date) {\r\n const today = new Date();\r\n const now = today.getTime() / 1000 | 0;\r\n const timestamp = time.getTime() / 1000 | 0;\r\n\r\n const options: Intl.DateTimeFormatOptions = {};\r\n if((now - timestamp) < ONE_DAY && today.getDate() === time.getDate()) { // if the same day\r\n options.hour = options.minute = '2-digit';\r\n } else if(today.getFullYear() !== time.getFullYear()) { // different year\r\n options.year = options.day = 'numeric';\r\n options.month = '2-digit';\r\n } else if((now - timestamp) < (ONE_DAY * 7) && getWeekNumber(today) === getWeekNumber(time)) { // current week\r\n options.weekday = 'short';\r\n } else { // same year\r\n options.month = 'short';\r\n options.day = 'numeric';\r\n }\r\n\r\n return new I18n.IntlDateElement({\r\n date: time,\r\n options\r\n }).element;\r\n}\r\n\r\nexport function formatFullSentTime(timestamp: number) {\r\n const date = new Date();\r\n const time = new Date(timestamp * 1000);\r\n const now = date.getTime() / 1000;\r\n\r\n const timeEl = formatTime(time);\r\n\r\n let dateEl: Node | string;\r\n if((now - timestamp) < ONE_DAY && date.getDate() === time.getDate()) { // if the same day\r\n dateEl = i18n('Date.Today');\r\n } else if((now - timestamp) < (ONE_DAY * 2) && (date.getDate() - 1) === time.getDate()) { // yesterday\r\n dateEl = capitalizeFirstLetter(I18n.format('Yesterday', true));\r\n } else if(date.getFullYear() !== time.getFullYear()) { // different year\r\n dateEl = new I18n.IntlDateElement({\r\n date: time,\r\n options: {\r\n month: 'short',\r\n day: 'numeric',\r\n year: 'numeric'\r\n }\r\n }).element;\r\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate() + ', ' + time.getFullYear();\r\n } else {\r\n dateEl = new I18n.IntlDateElement({\r\n date: time,\r\n options: {\r\n month: 'short',\r\n day: 'numeric'\r\n }\r\n }).element;\r\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate();\r\n }\r\n\r\n const fragment = document.createDocumentFragment();\r\n fragment.append(dateEl, ' ', i18n('ScheduleController.at'), ' ', timeEl);\r\n return fragment;\r\n}\r\n\r\nexport function formatTime(date: Date) {\r\n return new I18n.IntlDateElement({\r\n date,\r\n options: {\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n }\r\n }).element;\r\n}\r\n\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.formatDateAccordingToTodayNew = formatDateAccordingToTodayNew);\r\n\r\nexport const getFullDate = (date: Date, options: Partial<{\r\n noTime: true, \r\n noSeconds: true,\r\n monthAsNumber: true,\r\n leadingZero: true\r\n}> = {}) => {\r\n const joiner = options.monthAsNumber ? '.' : ' ';\r\n const time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + (options.noSeconds ? '' : ':' + ('0' + date.getSeconds()).slice(-2));\r\n\r\n return (options.leadingZero ? ('0' + date.getDate()).slice(-2) : date.getDate()) + \r\n joiner + (options.monthAsNumber ? ('0' + (date.getMonth() + 1)).slice(-2) : months[date.getMonth()]) + \r\n joiner + date.getFullYear() + \r\n (options.noTime ? '' : ', ' + time);\r\n};\r\n\r\nexport function tsNow(seconds?: true) {\r\n const t = Date.now();\r\n return seconds ? t / 1000 | 0 : t;\r\n}\r\n\r\n// https://github.com/DrKLO/Telegram/blob/d52b2c921abd3c1e8d6368858313ad0cb0468c07/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java\r\nconst minYear = 2013;\r\nconst yearPattern = new RegExp(\"20[0-9]{1,2}\");\r\nconst monthYearOrDayPattern = new RegExp(\"(\\\\w{3,}) ([0-9]{0,4})\", 'i');\r\nconst yearOrDayAndMonthPattern = new RegExp(\"([0-9]{0,4}) (\\\\w{2,})\", 'i');\r\nconst shortDate = new RegExp(\"^([0-9]{1,4})(\\\\.| |/|\\\\-)([0-9]{1,4})$\", 'i');\r\nconst longDate = new RegExp(\"^([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,4})$\", 'i');\r\nconst numberOfDaysEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\nexport type DateData = {\r\n title: string,\r\n minDate: number,\r\n maxDate: number,\r\n};\r\nexport function fillTipDates(query: string, dates: DateData[]) {\r\n const q = query.trim().toLowerCase();\r\n\r\n if(q.length < 3) {\r\n return;\r\n }\r\n\r\n if(\"today\".indexOf(q) === 0) {\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: 'Today',\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n if(\"yesterday\".indexOf(q) === 0) {\r\n const date = new Date();\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime() - 86400000;\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 86400001;\r\n dates.push({\r\n title: 'Yesterday',\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n const dayOfWeek = getDayOfWeek(q);\r\n if(dayOfWeek >= 0) {\r\n const date = new Date();\r\n const now = date.getTime();\r\n const currentDay = date.getDay();\r\n const distance = dayOfWeek - currentDay;\r\n date.setDate(date.getDate() + distance);\r\n if(date.getTime() > now) {\r\n date.setTime(date.getTime() - 604800000);\r\n }\r\n const year = date.getFullYear()\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: formatWeekLong(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n let matches: any[];\r\n if((matches = shortDate.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[3];\r\n const k = parseInt(g1);\r\n const k1 = parseInt(g2);\r\n if(k > 0 && k <= 31) {\r\n if(k1 >= minYear && k <= 12) {\r\n const selectedYear = k1;\r\n const month = k - 1;\r\n createForMonthYear(dates, month, selectedYear);\r\n return;\r\n } else if (k1 <= 12) {\r\n const day = k - 1;\r\n const month = k1 - 1;\r\n createForDayMonth(dates, day, month);\r\n }\r\n } else if (k >= minYear && k1 <= 12) {\r\n const selectedYear = k;\r\n const month = k1 - 1;\r\n createForMonthYear(dates, month, selectedYear);\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = longDate.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[3];\r\n const g3 = matches[5];\r\n if(!matches[2] === matches[4]) {\r\n return;\r\n }\r\n\r\n const day = parseInt(g1);\r\n const month = parseInt(g2) - 1;\r\n let year = parseInt(g3);\r\n if(year >= 10 && year <= 99) {\r\n year += 2000;\r\n }\r\n\r\n const currentYear = new Date().getFullYear();\r\n if(validDateForMonth(day - 1, month) && year >= minYear && year <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(year, month, day);\r\n date.setHours(0, 0, 0);\r\n \r\n const minDate = date.getTime();\r\n date.setFullYear(year, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: formatterYearMax(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n return;\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = yearPattern.exec(q)) !== null) {\r\n let selectedYear = +q;\r\n const currentYear = new Date().getFullYear();\r\n if(selectedYear < minYear) {\r\n selectedYear = minYear;\r\n for(let i = currentYear; i >= selectedYear; i--) {\r\n const date = new Date();\r\n date.setFullYear(i, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(i + 1, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: '' + i,\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n } else if(selectedYear <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(selectedYear, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const minDate = date.getTime();\r\n date.setFullYear(selectedYear + 1, 0, 1);\r\n date.setHours(0, 0, 0);\r\n\r\n const maxDate = date.getTime() - 1;\r\n dates.push({\r\n title: '' + selectedYear,\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n\r\n return;\r\n }\r\n\r\n if((matches = monthYearOrDayPattern.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[2];\r\n const month = getMonth(g1);\r\n if(month >= 0) {\r\n const k = +g2;\r\n if(k > 0 && k <= 31) {\r\n const day = k - 1;\r\n createForDayMonth(dates, day, month);\r\n return;\r\n } else if(k >= minYear) {\r\n const selectedYear = k;\r\n createForMonthYear(dates, month, selectedYear);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if((matches = yearOrDayAndMonthPattern.exec(q)) !== null) {\r\n const g1 = matches[1];\r\n const g2 = matches[2];\r\n const month = getMonth(g2);\r\n if(month >= 0) {\r\n const k = +g1;\r\n if(k > 0 && k <= 31) {\r\n const day = k - 1;\r\n createForDayMonth(dates, day, month);\r\n return;\r\n } else if (k >= minYear) {\r\n const selectedYear = k;\r\n createForMonthYear(dates, month, selectedYear);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction createForMonthYear(dates: DateData[], month: number, selectedYear: number) {\r\n const currentYear = new Date().getFullYear();\r\n const today = Date.now();\r\n if(selectedYear >= minYear && selectedYear <= currentYear) {\r\n const date = new Date();\r\n date.setFullYear(selectedYear, month, 1);\r\n date.setHours(0, 0, 0);\r\n const minDate = date.getTime();\r\n if(minDate > today) {\r\n return;\r\n }\r\n date.setMonth(date.getMonth() + 1);\r\n const maxDate = date.getTime() - 1;\r\n\r\n dates.push({\r\n title: formatterMonthYear(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n}\r\n\r\nfunction createForDayMonth(dates: DateData[], day: number, month: number) {\r\n if(validDateForMonth(day, month)) {\r\n const currentYear = new Date().getFullYear();\r\n const today = Date.now();\r\n \r\n for(let i = currentYear; i >= minYear; i--) {\r\n if(month === 1 && day === 28 && !isLeapYear(i)) {\r\n continue;\r\n }\r\n\r\n const date = new Date();\r\n date.setFullYear(i, month, day + 1);\r\n date.setHours(0, 0, 0);\r\n \r\n const minDate = date.getTime();\r\n if(minDate > today) {\r\n continue;\r\n }\r\n\r\n date.setFullYear(i, month, day + 2);\r\n date.setHours(0, 0, 0);\r\n const maxDate = date.getTime() - 1;\r\n if(i === currentYear) {\r\n dates.push({\r\n title: formatterDayMonth(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n } else {\r\n dates.push({\r\n title: formatterYearMax(minDate),\r\n minDate,\r\n maxDate\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction formatterMonthYear(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getFullYear();\r\n}\r\n\r\nfunction formatterDayMonth(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getDate();\r\n}\r\n\r\nfunction formatterYearMax(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\r\n}\r\n\r\nfunction formatWeekLong(timestamp: number) {\r\n const date = new Date(timestamp);\r\n return days[date.getDay()];\r\n}\r\n\r\nfunction validDateForMonth(day: number, month: number) {\r\n if(month >= 0 && month < 12) {\r\n if(day >= 0 && day < numberOfDaysEachMonth[month]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isLeapYear(year: number) {\r\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\r\n}\r\n\r\nfunction getMonth(q: string) {\r\n /* String[] months = new String[]{\r\n LocaleController.getString(\"January\", R.string.January).toLowerCase(),\r\n LocaleController.getString(\"February\", R.string.February).toLowerCase(),\r\n LocaleController.getString(\"March\", R.string.March).toLowerCase(),\r\n LocaleController.getString(\"April\", R.string.April).toLowerCase(),\r\n LocaleController.getString(\"May\", R.string.May).toLowerCase(),\r\n LocaleController.getString(\"June\", R.string.June).toLowerCase(),\r\n LocaleController.getString(\"July\", R.string.July).toLowerCase(),\r\n LocaleController.getString(\"August\", R.string.August).toLowerCase(),\r\n LocaleController.getString(\"September\", R.string.September).toLowerCase(),\r\n LocaleController.getString(\"October\", R.string.October).toLowerCase(),\r\n LocaleController.getString(\"November\", R.string.November).toLowerCase(),\r\n LocaleController.getString(\"December\", R.string.December).toLowerCase()\r\n }; */\r\n\r\n /* String[] monthsEng = new String[12];\r\n Calendar c = Calendar.getInstance();\r\n for (int i = 1; i <= 12; i++) {\r\n c.set(0, 0, 0, 0, 0, 0);\r\n c.set(Calendar.MONTH, i);\r\n monthsEng[i - 1] = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH).toLowerCase();\r\n } */\r\n\r\n q = q.toLowerCase();\r\n for(let i = 0; i < 12; i++) {\r\n const month = months[i].toLowerCase();\r\n if(month.indexOf(q) === 0) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction getDayOfWeek(q: string) {\r\n const c = new Date();\r\n if(q.length <= 3) {\r\n return -1;\r\n }\r\n \r\n for(let i = 0; i < 7; i++) {\r\n c.setDate(c.getDate() + 1);\r\n \r\n if(formatWeekLong(c.getTime()).toLowerCase().indexOf(q) === 0) {\r\n return c.getDay();\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nMOUNT_CLASS_TO.fillTipDates = fillTipDates;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* export function stringMiddleOverflow(str: string, maxLength: number) {\r\n return str.length > maxLength ? str.slice(0, maxLength / 2 | 0) + '...' + str.slice(-Math.round(maxLength / 2)) : str; \r\n} */\r\n\r\nexport function limitSymbols(str: string, length: number, limitFrom = length + 10) {\r\n str = str.trim();\r\n if(str.length > limitFrom) {\r\n str = str.slice(0, length)/* .replace(/\\s*$/, '') */ + '...';\r\n }\r\n\r\n return str;\r\n}\r\n\r\n// credits to https://github.com/sindresorhus/escape-string-regexp/blob/master/index.js\r\nexport function escapeRegExp(str: string) {\r\n return str\r\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\r\n .replace(/-/g, '\\\\x2d');\r\n}\r\n\r\nexport function encodeEntities(value: string) {\r\n return value.replace(/&/g, '&').replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, (value) => {\r\n var hi = value.charCodeAt(0);\r\n var low = value.charCodeAt(1);\r\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\r\n }).replace(/([^\\#-~| |!])/g, (value) => { // non-alphanumeric\r\n return '&#' + value.charCodeAt(0) + ';';\r\n }).replace(//g, '>');\r\n}\r\n\r\nexport function splitStringByLength(str: string, maxLength: number) {\r\n if(str.length < maxLength) return [str];\r\n let length = 0, lastSliceStartIndex = 0, arrayIndex = 0;\r\n const delimiter = ' ';//'\\n';\r\n const out: string[] = [];\r\n\r\n const cut = (end?: number) => {\r\n let part = str.slice(lastSliceStartIndex, end);\r\n const _arrayIndex = arrayIndex++;\r\n if(part.length > maxLength) {\r\n let overflowPart = part.slice(maxLength);\r\n const splitted = splitStringByLength(overflowPart, maxLength);\r\n splitted.forEach(part => {\r\n out[arrayIndex++] = part;\r\n });\r\n\r\n part = part.slice(0, maxLength);\r\n }\r\n\r\n lastSliceStartIndex = end;\r\n length = 0;\r\n out[_arrayIndex] = (out[_arrayIndex] || '') + part;\r\n };\r\n\r\n let lastIndex = 0;\r\n do {\r\n let index = str.indexOf(delimiter, lastIndex);\r\n if(index === -1) {\r\n if(lastIndex !== (str.length - 1)) {\r\n cut();\r\n }\r\n\r\n break;\r\n }\r\n\r\n index += delimiter.length;\r\n\r\n const partLength = index - lastIndex;\r\n if((length + partLength) > maxLength) {\r\n cut(length);\r\n }\r\n \r\n lastIndex = index;\r\n length += partLength;\r\n } while(true);\r\n\r\n return out;\r\n}\r\n\r\n// https://stackoverflow.com/a/14824756\r\n/* export const checkRTL = (s: string) => { \r\n const ltrChars = 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF'+'\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF',\r\n rtlChars = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC',\r\n rtlDirCheck = new RegExp('^[^'+ltrChars+']*['+rtlChars+']');\r\n\r\n return rtlDirCheck.test(s);\r\n}; */\r\n\r\n//(window as any).checkRTL = checkRTL;\r\n\r\nexport function convertInputKeyToKey(inputKey: string) {\r\n const str = inputKey.replace('input', '');\r\n return (str[0].toLowerCase() + str.slice(1)) as T;\r\n}\r\n\r\nexport function convertKeyToInputKey(key: string) {\r\n key = key[0].toUpperCase() + key.slice(1);\r\n key = 'input' + key;\r\n return key;\r\n}\r\n\r\nexport function capitalizeFirstLetter(string: string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n}\r\n","export const pause = (ms: number) => new Promise((resolve) => {\r\n setTimeout(resolve, ms);\r\n});\r\n","// https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js\r\n\r\nexport function encodeEmoji(emojiText: string) {\r\n const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\r\n return codepoints;\r\n}\r\n\r\nconst vs16RegExp = /\\uFE0F/g;\r\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\r\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\r\n\r\nconst removeVS16s = (rawEmoji: string) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);\r\n\r\nexport function toCodePoints(unicodeSurrogates: string): Array {\r\n const points = [];\r\n let char = 0;\r\n let previous = 0;\r\n let i = 0;\r\n while(i < unicodeSurrogates.length) {\r\n char = unicodeSurrogates.charCodeAt(i++);\r\n if(previous) {\r\n points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));\r\n previous = 0;\r\n } else if (char > 0xd800 && char <= 0xdbff) {\r\n previous = char;\r\n } else {\r\n points.push(char.toString(16));\r\n }\r\n }\r\n\r\n if(points.length && points[0].length === 2) {\r\n points[0] = '00' + points[0];\r\n }\r\n\r\n return points;\r\n}\r\n\r\nexport function getEmojiToneIndex(input: string) {\r\n let match = input.match(/[\\uDFFB-\\uDFFF]/);\r\n return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0;\r\n}\r\n\r\nexport function getCountryEmoji(iso2: string) {\r\n return String.fromCharCode(55356, 56741 + iso2.charCodeAt(0), 55356, 56741 + iso2.charCodeAt(1));\r\n}\r\n\r\nexport function emojiFromCodePoints(codePoints: string) {\r\n return codePoints.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\r\n}"],"sourceRoot":""} \ No newline at end of file diff --git a/public/15.04217e6c6e21ea0189db.chunk.js b/public/15.04217e6c6e21ea0189db.chunk.js deleted file mode 100644 index 428b2f62..00000000 --- a/public/15.04217e6c6e21ea0189db.chunk.js +++ /dev/null @@ -1,2 +0,0 @@ -(this.webpackJsonp=this.webpackJsonp||[]).push([[15],{104:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(49);class n{constructor(e,t){this.inputField=e,this.size=t,this.max=45,this.needFrame=0,this.container=document.createElement("div"),this.container.classList.add("media-sticker-wrapper");const s=e.input;s.addEventListener("blur",()=>{this.playAnimation(0)}),s.addEventListener("input",t=>{this.playAnimation(e.value.length)})}playAnimation(e){if(!this.animation)return;let t;(e=Math.min(e,30))?(t=Math.round(Math.min(this.max,e)*(165/this.max)+11.33),this.idleAnimation&&(this.idleAnimation.stop(!0),this.idleAnimation.canvas.style.display="none"),this.animation.canvas.style.display=""):t=0;const s=this.needFrame>t?-1:1;this.animation.setDirection(s),0!==this.needFrame&&0===t&&this.animation.setSpeed(7),this.needFrame=t,this.animation.play()}load(){return this.loadPromise?this.loadPromise:this.loadPromise=Promise.all([i.b.loadAnimationFromURL({container:this.container,loop:!0,autoplay:!0,width:this.size,height:this.size},"assets/img/TwoFactorSetupMonkeyIdle.tgs").then(e=>(this.idleAnimation=e,this.inputField.value.length||e.play(),i.b.waitForFirstFrame(e))),i.b.loadAnimationFromURL({container:this.container,loop:!1,autoplay:!1,width:this.size,height:this.size},"assets/img/TwoFactorSetupMonkeyTracking.tgs").then(e=>(this.animation=e,this.inputField.value.length||(this.animation.canvas.style.display="none"),this.animation.addEventListener("enterFrame",e=>{(1===this.animation.direction&&e>=this.needFrame||-1===this.animation.direction&&e<=this.needFrame)&&(this.animation.setSpeed(1),this.animation.pause()),0===e&&0===this.needFrame&&this.idleAnimation&&(this.idleAnimation.canvas.style.display="",this.idleAnimation.play(),this.animation.canvas.style.display="none")}),i.b.waitForFirstFrame(e)))])}remove(){this.animation&&this.animation.remove(),this.idleAnimation&&this.idleAnimation.remove()}}},105:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(38);class n extends i.b{constructor(e){super(Object.assign({plainText:!0},e));const t=this.input;t.type="tel",t.setAttribute("required",""),t.autocomplete="off";let s=0;this.input.addEventListener("input",t=>{this.input.classList.remove("error"),this.setLabel();const i=this.value.replace(/\D/g,"").slice(0,e.length);this.setValueSilently(i);const n=this.value.length;if(n===e.length)e.onFill(this.value);else if(n===s)return;s=n})}}},138:function(e,t,s){"use strict";s.r(t),s.d(t,"AppDialogsManager",(function(){return Fo}));var i=s(39),n=s(67),a=s(15),o=s(41),r=s(46),l=s(28),c=s(4),d=s(110),h=s(0);var u=!!document.createElement("video").canPlayType("video/quicktime")||h.IS_SAFARI||h.IS_APPLE_MOBILE,p=s(113);const m=new Set(["image/jpeg","image/png","image/gif","image/bmp","video/mp4","video/webm"]);u&&m.add("video/quicktime"),p.a&&m.add("image/webp");var g=m;function b(e,t){e.setAttribute("dir","auto"),e.innerHTML=t}var v=s(37),f=s(97),y=s(56);function w(e){Object(y.d)(e.history,(t,s,i)=>{t.action.photo||(i.splice(s,1),void 0!==e.count&&--e.count)})}var L=s(32);class S{constructor(e){this.previous=[],this.next=[],this.reverse=!1,this.loadCount=50,this.loadWhenLeft=20,this.loadedAllUp=!1,this.loadedAllDown=!1,Object(L.g)(this,e)}setTargets(e,t,s){this.previous=e,this.next=t,this.reverse=s}get index(){return void 0!==this.count?this.previous.length:-1}reset(e=!1){this.current=void 0,this.previous=[],this.next=[],this.loadedAllUp=this.loadedAllDown=e,this.loadPromiseUp=this.loadPromiseDown=null}go(e,t=!0){let s,i;if(e>0){if(s=this.next.splice(0,e),i=s.pop(),!i)return;this.previous.push(this.current,...s)}else{if(s=this.previous.splice(this.previous.length+e,-e),i=s.shift(),!i)return;this.next.unshift(...s,this.current)}return this.next.length0),this.current}load(e){if(e&&this.loadedAllDown)return Promise.resolve();if(!e&&this.loadedAllUp)return Promise.resolve();if(e&&this.loadPromiseDown)return this.loadPromiseDown;if(!e&&this.loadPromiseUp)return this.loadPromiseUp;let t;t=e?this.reverse?this.previous[0]:this.next[this.next.length-1]:this.reverse?this.next[this.next.length-1]:this.previous[0];const s=this.loadMore(t,e,this.loadCount).then(t=>{if(e&&this.loadPromiseDown!==s||!e&&this.loadPromiseUp!==s)return;t.items.length{const s=this.processItem?this.processItem(t):t;s&&(e?this.reverse?this.previous.unshift(s):this.next.push(s):this.reverse?this.next.push(s):this.previous.unshift(s))}),this.onLoadedMore&&this.onLoadedMore()},()=>{}).then(()=>{e?this.loadPromiseDown=null:this.loadPromiseUp=null});return e?this.loadPromiseDown=s:this.loadPromiseUp=s,s}}class E extends S{constructor(e={}){super(Object.assign(Object.assign({},e),{loadMore:(e,t,s)=>{var n;const a=t?0:s;let o=null===(n=this.current)||void 0===n?void 0:n.mid;return e&&(o=e.mid),t||(o=f.a.incrementMessageId(o,1)),i.a.getSearch(Object.assign(Object.assign({},this.searchContext),{peerId:this.searchContext.peerId||(null==e?void 0:e.peerId),maxId:o,limit:a?0:s,backLimit:a})).then(e=>("inputMessagesFilterChatPhotos"===this.searchContext.inputFilter._&&w(e),e.next_rate&&(this.searchContext.nextRate=e.next_rate),{count:e.count,items:e.history}))},processItem:t=>{if(this.filterMids([t.mid]).length)return e.processItem(t)}})),this.onHistoryDelete=({peerId:e,msgs:t})=>{const s=s=>s.peerId===e&&t.has(s.mid),i=(e,t,i)=>{s(e)&&i.splice(t,1)};Object(y.d)(this.previous,i),Object(y.d)(this.next,i),this.current&&s(this.current)&&(this.go(1)?this.previous.splice(this.previous.length-1,1):this.go(-1)?this.next.splice(0,1):this.onEmptied&&this.onEmptied())},this.onHistoryMultiappend=e=>{if(void 0!==this.searchContext.folderId)return;if(!this.loadedAllUp||this.loadPromiseUp)return;const t=e[this.searchContext.peerId];if(!t)return;const s=Array.from(t).sort((e,t)=>e-t),i=this.filterMids(s).map(e=>this.processItem(e)).filter(Boolean);i.length&&this.next.push(...i)},this.onMessageSent=({message:e})=>{this.onHistoryMultiappend({[e.peerId]:new Set([e.mid])})},a.default.addEventListener("history_delete",this.onHistoryDelete),a.default.addEventListener("history_multiappend",this.onHistoryMultiappend),a.default.addEventListener("message_sent",this.onMessageSent)}filterMids(e){const t=this.searchContext.isScheduled?i.a.getScheduledMessagesStorage(this.searchContext.peerId):i.a.getMessagesStorage(this.searchContext.peerId);return i.a.filterMessagesByInputFilter(this.searchContext.inputFilter._,e,t,e.length)}setSearchContext(e){this.searchContext=e,void 0!==this.searchContext.folderId&&(this.loadedAllUp=!0,void 0===this.searchContext.nextRate&&(this.loadedAllDown=!0)),"inputMessagesFilterChatPhotos"===this.searchContext.inputFilter._&&(this.loadedAllUp=!0),this.searchContext.useSearch||(this.loadedAllDown=this.loadedAllUp=!0)}reset(){super.reset(),this.searchContext=void 0}cleanup(){this.reset(),a.default.removeEventListener("history_delete",this.onHistoryDelete),a.default.removeEventListener("history_multiappend",this.onHistoryMultiappend),a.default.removeEventListener("message_sent",this.onMessageSent),this.onEmptied=void 0}}var M=s(61),I=s(68),C=s(63),k=s(16),T=s(36),P=s(45),x=s(34),A=s(14);class O{constructor(e,t,s=!0,i,n=!0,a=!0,o){this.name=e,this.type=t,this.clearable=s,this.autonomous=a,this.onFound=o,this.list=Do.createChatList(),this.container=document.createElement("div"),i&&(this.container.className=i),e&&(this.nameEl=document.createElement("div"),this.nameEl.classList.add("search-group__name"),"string"==typeof e&&this.nameEl.append(Object(A.i18n)(e)),this.container.append(this.nameEl)),this.container.classList.add("search-group","search-group-"+t),this.container.append(this.list),this.container.style.display="none",n&&Do.setListClickListener(this.list,o,void 0,a)}clear(){this.container.style.display="none",this.clearable&&(this.list.innerHTML="")}setActive(){this.container.style.display=""}toggle(){this.list.childElementCount?this.setActive():this.clear()}}class _{constructor(e,t,s,i){this.container=e,this.searchInput=t,this.searchGroups=s,this.onSearch=i,this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1,this.searchPromise=null,this.searchTimeout=0,this.query="",this.listsContainer=null,this.peerId=0,this.threadId=0,this.scrollable=new P.b(this.container),this.listsContainer=this.scrollable.container;for(let e in this.searchGroups)this.listsContainer.append(this.searchGroups[e].container);this.searchGroups.messages&&this.scrollable.setVirtualContainer(this.searchGroups.messages.list),this.searchInput.onChange=e=>{this.query=e,this.reset(!1),this.searchMore()},this.scrollable.onScrolledBottom=()=>{this.query.trim()&&(this.searchTimeout||(this.searchTimeout=window.setTimeout(()=>{this.searchMore(),this.searchTimeout=0},0)))}}reset(e=!0){e&&(this.searchInput.value="",this.query="",this.peerId=0,this.threadId=0),this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1;for(let e in this.searchGroups)this.searchGroups[e].clear();this.searchPromise=null}beginSearch(e=0,t=0,s=""){this.peerId=e,this.threadId=t,this.query!==s&&(this.searchInput.inputField.value=s),this.searchInput.input.focus()}searchMore(){if(this.searchPromise)return this.searchPromise;const e=this.query;if(!e.trim())return void(this.onSearch&&this.onSearch(0));if(-1!==this.foundCount&&this.loadedCount>=this.foundCount)return Promise.resolve();const t=this.minMsgId||0;return this.searchPromise=i.a.getSearch({peerId:this.peerId,query:e,inputFilter:{_:"inputMessagesFilterEmpty"},maxId:t,limit:20,threadId:this.threadId}).then(t=>{if(this.searchPromise=null,this.searchInput.value!==e)return;const{count:s,history:i}=t;i.length&&i[0].mid===this.minMsgId&&i.shift();const n=this.searchGroups.messages;i.forEach(t=>{const s=this.peerId?t.fromId:t.peerId,{dialog:i,dom:n}=Do.addDialogNew({dialog:s,container:this.scrollable,drawStatus:!1,avatarSize:54,meAsSaved:!1});t.peerId!==s&&(n.listEl.dataset.peerId=""+t.peerId),Do.setLastMessage(i,t,n,e)}),n.toggle(),this.minMsgId=i.length&&i[i.length-1].mid,-1===this.loadedCount&&(this.loadedCount=0),this.loadedCount+=i.length,-1===this.foundCount&&(this.foundCount=s,n.nameEl&&Object(x.a)(n.nameEl,Object(A.i18n)(s?"Chat.Search.MessagesFound":"Chat.Search.NoMessagesFound",[s])),this.onSearch&&this.onSearch(this.foundCount))}).catch(e=>{console.error("search error",e),this.searchPromise=null})}}var F=s(38);class j{constructor(e,t){this.prevValue="",this.timeout=0,this.onInput=()=>{if(!this.onChange)return;let e=this.value;e!==this.prevValue&&(this.prevValue=e,clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.onChange(e)},200))},this.onClearClick=()=>{this.value="",this.onChange&&this.onChange(""),this.onClear&&this.onClear()},this.inputField=new F.b({placeholder:e,plainText:!0}),this.container=this.inputField.container,this.container.classList.remove("input-field"),this.container.classList.add("input-search"),this.onChange=t,this.input=this.inputField.input,this.input.classList.add("input-search-input");const s=document.createElement("i");s.classList.add("tgico","tgico-search"),this.clearBtn=document.createElement("i"),this.clearBtn.classList.add("tgico","btn-icon","tgico-close"),this.input.addEventListener("input",this.onInput),this.clearBtn.addEventListener("click",this.onClearClick),this.container.append(s,this.clearBtn)}get value(){return this.inputField.value}set value(e){this.prevValue=e,clearTimeout(this.timeout),this.inputField.value=e}remove(){clearTimeout(this.timeout),this.input.removeEventListener("input",this.onInput),this.clearBtn.removeEventListener("click",this.onClearClick)}}var D=s(116),B=s(44),R=s(52),H=s(84),U=s(31);var N=(e,t={})=>Object(U.a)("btn-icon",Object.assign({icon:e||void 0},t)),z=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class V{constructor(e,t){this._constructor(e,t)}_constructor(e,t=!0){this.slider=e,this.destroyable=t,this.container=document.createElement("div"),this.container.classList.add("tabs-tab","sidebar-slider-item"),this.header=document.createElement("div"),this.header.classList.add("sidebar-header"),this.closeBtn=N("left sidebar-close-button",{noRipple:!0}),this.title=document.createElement("div"),this.title.classList.add("sidebar-header__title"),this.header.append(this.closeBtn,this.title),this.content=document.createElement("div"),this.content.classList.add("sidebar-content"),this.scrollable=new P.b(this.content,void 0,void 0,!0),this.container.append(this.header,this.content),this.slider.addTab(this),this.listenerSetter=new H.a}close(){return this.slider.closeTab(this)}open(...e){return z(this,void 0,void 0,(function*(){if(this.init)try{const e=this.init();this.init=null,e instanceof Promise&&(yield e)}catch(e){console.error("open tab error",e)}return this.slider.selectTab(this)}))}init(){}onCloseAfterTimeout(){this.destroyable&&(this.slider.tabs.delete(this),this.container.remove()),this.listenerSetter&&this.listenerSetter.removeAll()}setTitle(e){this.title.innerHTML="",this.title.append(Object(A.i18n)(e))}}class W extends V{constructor(e){super(e),this.eventListener=new R.a}onCloseAfterTimeout(){return this.eventListener.dispatchEvent("destroy"),this.eventListener.cleanup(),super.onCloseAfterTimeout()}}class K{constructor(e){this.historyTabIds=[],this.canHideFirst=!1,this.onCloseBtnClick=()=>{B.a.findItemByType(this.navigationType)?B.a.back(this.navigationType):this.historyTabIds.length&&this.closeTab(this.historyTabIds[this.historyTabIds.length-1])},this.closeTab=(e,t,s)=>{if(void 0!==e&&this.historyTabIds[this.historyTabIds.length-1]!==e)return!1;const i=this.historyTabIds.pop();this.onCloseTab(i,t,s);const n=this.historyTabIds[this.historyTabIds.length-1];return this._selectTab(void 0!==n?n instanceof V?n.container:n:this.canHideFirst?-1:0,t),!0},Object(L.g)(this,e),this.tabs||(this.tabs=new Map),this.tabsContainer=this.sidebarEl.querySelector(".sidebar-slider"),this._selectTab=Object(D.a)(this.tabsContainer,"navigation",250),this.canHideFirst||this._selectTab(0),Array.from(this.sidebarEl.querySelectorAll(".sidebar-close-button")).forEach(e=>{Object(l.b)(e,this.onCloseBtnClick)})}selectTab(e){if(this.historyTabIds[this.historyTabIds.length-1]===e)return!1;const t=e instanceof V?e:this.tabs.get(e);return t&&(t.onOpen&&t.onOpen(),t.onOpenAfterTimeout&&setTimeout(()=>{t.onOpenAfterTimeout()},250)),B.a.pushItem({type:this.navigationType,onPop:e=>(this.closeTab(void 0,e,!0),!0)}),this.historyTabIds.push(e),this._selectTab(e instanceof V?e.container:e),!0}removeTabFromHistory(e){this.historyTabIds.findAndSplice(t=>t===e),this.onCloseTab(e,void 0)}sliceTabsUntilTab(e,t){for(let s=this.historyTabIds.length-1;s>=0;--s){const i=this.historyTabIds[s];if(i!==t){if(i instanceof e)break;this.removeTabFromHistory(i)}}}getTab(e){return this.historyTabIds.find(t=>t instanceof e)}isTabExists(e){return!!this.getTab(e)}onCloseTab(e,t,s){s||B.a.removeByType(this.navigationType,!0);const i=e instanceof V?e:this.tabs.get(e);i&&(i.onClose&&i.onClose(),i.onCloseAfterTimeout&&setTimeout(()=>{i.onCloseAfterTimeout()},250))}addTab(e){e.container.parentElement||(this.tabsContainer.append(e.container),e.closeBtn&&e.closeBtn.addEventListener("click",this.onCloseBtnClick))}}var G=s(43),q=s(131);class Q{constructor(e){this.container=document.createElement("div"),this.container.classList.add("avatar-edit"),this.canvas=document.createElement("canvas"),this.canvas.classList.add("avatar-edit-canvas"),this.icon=document.createElement("span"),this.icon.classList.add("tgico","tgico-cameraadd"),this.container.append(this.canvas,this.icon),this.container.addEventListener("click",()=>{(new q.a).open(this.canvas,e)})}clear(){this.canvas.getContext("2d").clearRect(0,0,this.canvas.width,this.canvas.height)}}var $=(e={})=>Object(U.a)("btn-circle btn-corner z-depth-1"+(e.className?" "+e.className:""),e);class Y extends V{constructor(){super(...arguments),this.searchGroup=new O(!0,"contacts",!0,"new-group-members disable-hover",!1),this.uploadAvatar=null}init(){this.container.classList.add("new-group-container"),this.setTitle("NewGroup"),this.avatarEdit=new Q(e=>{this.uploadAvatar=e});const e=document.createElement("div");e.classList.add("input-wrapper"),this.groupNameInputField=new F.b({label:"CreateGroup.NameHolder",maxLength:128}),e.append(this.groupNameInputField.container),this.groupNameInputField.input.addEventListener("input",()=>{const e=this.groupNameInputField.value;this.nextBtn.classList.toggle("is-visible",!!e.length&&!this.groupNameInputField.input.classList.contains("error"))}),this.nextBtn=$({icon:"arrow_next"}),this.nextBtn.addEventListener("click",()=>{const e=this.groupNameInputField.value;this.nextBtn.disabled=!0,G.a.createChat(e,this.userIds).then(e=>{this.uploadAvatar&&this.uploadAvatar().then(t=>{G.a.editPhoto(e,t)}),ln.removeTabFromHistory(this),ln.selectTab(0)})});const t=document.createElement("div");t.classList.add("chatlist-container"),t.append(this.searchGroup.container),this.content.append(this.nextBtn),this.scrollable.append(this.avatarEdit.container,e,t)}onCloseAfterTimeout(){this.searchGroup.clear(),this.avatarEdit.clear(),this.uploadAvatar=null,this.groupNameInputField.value="",this.nextBtn.disabled=!1}open(e){const t=super.open();return t.then(()=>{this.userIds=e,this.userIds.forEach(e=>{let{dom:t}=Do.addDialogNew({dialog:e,container:this.searchGroup.list,drawStatus:!1,rippleEnabled:!1,avatarSize:48});t.lastMessageSpan.append(T.a.getUserStatusString(e))}),this.searchGroup.nameEl.textContent="",this.searchGroup.nameEl.append(Object(A.i18n)("Members",[this.userIds.length])),this.searchGroup.setActive()}),t}}var X=s(73),J=s(40),Z=s(29),ee=s(115),te=s(70),se=s(33),ie=s(17),ne=s(94),ae=s(87),oe=s(42),re=s(51),le=s(49),ce=s(139),de=s(27),he=s(65),ue=s(47),pe=s(1),me=s(99),ge=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const be=(()=>{try{return h.IS_SAFARI&&+navigator.userAgent.match(/ Version\/(\d+)/)[1]<14}catch(e){return!1}})();const ve=new class{constructor(){if(this.media=new Map,this.scheduled=new Map,this.mediaDetails=new Map,this.waitingMediaForLoad=new Map,this.waitingScheduledMediaForLoad=new Map,this.waitingDocumentsForLoad={},this._volume=1,this._muted=!1,this._playbackRate=1,this.seekBackward=e=>{const t=this.playingMedia;t&&(t.currentTime=Math.max(0,t.currentTime-(e.seekOffset||10)))},this.seekForward=e=>{const t=this.playingMedia;t&&(t.currentTime=Math.min(t.duration,t.currentTime+(e.seekOffset||10)))},this.seekTo=e=>{const t=this.playingMedia;t&&(t.currentTime=e.seekTime)},this.onMediaDocumentLoad=e=>{const t=this.mediaDetails.get(e),s=M.a.getDoc(t.docId);"audio"===s.type&&s.supportsStreaming&&be&&this.handleSafariStreamable(e);const i=he.a.getCacheContext(s);e.src=i.url;const n=this.waitingDocumentsForLoad[s.id];n&&(n.delete(e),n.size||delete this.waitingDocumentsForLoad[s.id])},this.onPlay=e=>{const t=e.target,s=this.mediaDetails.get(t),{peerId:n,mid:o}=s,r=this.getMessageByMedia(t);if(this.playingMedia!==t){this.stop();const e=e=>e.mid===o&&e.peerId===n;if(!this.listLoader.current||!e(this.listLoader.current)){let t,s=this.listLoader.previous.findIndex(e);-1!==s?t=-(this.listLoader.previous.length-s):(s=this.listLoader.next.findIndex(e),-1!==s&&(t=s+1)),-1!==s?t&&this.listLoader.go(t,!1):this.setTargets({peerId:n,mid:o})}this.setMedia(t,r)}setTimeout(()=>{a.default.dispatchEvent("media_play",{doc:i.a.getMediaFromMessage(r),message:r,media:t})},0)},this.onPause=e=>{a.default.dispatchEvent("media_pause")},this.onEnded=e=>{e.isTrusted&&(this.onPause(e),this.next())},this.play=()=>this.toggle(!0),this.pause=()=>this.toggle(!1),this.stop=()=>{const e=this.playingMedia;if(!e)return!1;e.paused||e.pause(),e.currentTime=0,Object(ue.a)(e,"ended");const t=this.mediaDetails.get(e);if(null==t?void 0:t.clean){e.src="";const s=t.peerId,i=t.isScheduled?this.scheduled:this.media,n=i.get(s);n&&(n.delete(t.mid),n.size||i.delete(s)),e.remove(),this.mediaDetails.delete(e)}return this.playingMedia=void 0,!0},this.playItem=e=>{const{peerId:t,mid:s}=e,i=this.searchContext.isScheduled;this.getMedia(t,s,i).play(),setTimeout(()=>{this.resolveWaitingForLoadMedia(t,s,i)},0)},this.next=()=>!this.lockedSwitchers&&this.listLoader.go(1),this.previous=()=>{const e=this.playingMedia;return e&&e.currentTime>5?(e.currentTime=0,void this.toggle(!0)):!this.lockedSwitchers&&this.listLoader.go(-1)},this.container=document.createElement("div"),this.container.style.cssText="display: none;",document.body.append(this.container),navigator.mediaSession){const e={play:this.play,pause:this.pause,stop:this.stop,seekbackward:this.seekBackward,seekforward:this.seekForward,seekto:this.seekTo,previoustrack:this.previous,nexttrack:this.next};for(const t in e)try{navigator.mediaSession.setActionHandler(t,e[t])}catch(e){console.warn("MediaSession action is not supported:",t)}}a.default.addEventListener("document_downloaded",e=>{const t=this.waitingDocumentsForLoad[e.id];if(t)for(const e of t)this.onMediaDocumentLoad(e)});const e={};["volume","muted","playbackRate"].forEach(t=>{const s="_"+t;e[t]={get:()=>this[s],set:e=>{this[s]!==e&&(this[s]=e,this.playingMedia&&(this.playingMedia[t]=e),this.dispatchPlaybackParams())}}}),Object.defineProperties(this,e)}dispatchPlaybackParams(){const{volume:e,muted:t,playbackRate:s}=this;a.default.dispatchEvent("media_playback_params",{volume:e,muted:t,playbackRate:s})}addMedia(e,t,s){const{peerId:n,mid:o}=e,r=!!e.pFlags.is_scheduled?this.scheduled:this.media;let l=r.get(e.peerId);l||r.set(e.peerId,l=new Map);let c=l.get(o);if(c)return c;const d=i.a.getMediaFromMessage(e);l.set(o,c=document.createElement("round"===d.type||"video"===d.type?"video":"audio")),"round"===d.type&&c.setAttribute("playsinline","true");const h={peerId:n,mid:o,docId:d.id,clean:s,isScheduled:e.pFlags.is_scheduled};this.mediaDetails.set(c,h),c.volume=1,this.container.append(c),c.addEventListener("play",this.onPlay),c.addEventListener("pause",this.onPause),c.addEventListener("ended",this.onEnded),"audio"!==d.type&&(null==e?void 0:e.pFlags.media_unread)&&e.fromId!==a.default.myId&&c.addEventListener("timeupdate",()=>{i.a.readMessages(n,[o])},{once:!0});const u=Object(oe.a)();if(t)u.resolve();else{const t=e.pFlags.is_scheduled?this.waitingScheduledMediaForLoad:this.waitingMediaForLoad;let s=t.get(n);s||t.set(n,s=new Map),s.set(o,u)}return u.then(()=>{const e=he.a.getCacheContext(d);if(d.supportsStreaming||e.url)this.onMediaDocumentLoad(c);else{let e=this.waitingDocumentsForLoad[d.id];e||(e=this.waitingDocumentsForLoad[d.id]=new Set),e.add(c),M.a.downloadDoc(d)}}),c}getMedia(e,t,s){const i=(s?this.scheduled:this.media).get(e);return null==i?void 0:i.get(t)}handleSafariStreamable(e){e.addEventListener("play",()=>{const t=e.currentTime;e.addEventListener("progress",()=>{e.currentTime=e.duration-1,e.addEventListener("progress",()=>{e.currentTime=t,e.paused||e.play()},{once:!0})},{once:!0})})}resolveWaitingForLoadMedia(e,t,s){const i=s?this.waitingScheduledMediaForLoad:this.waitingMediaForLoad,n=i.get(e);if(!n)return;const a=n.get(t);a&&(a.resolve(),n.delete(t),n.size||i.delete(e))}isSafariBuffering(e){return!!e.safariBuffering}setSafariBuffering(e,t){e.safariBuffering=t}setNewMediadata(e,t=this.playingMedia){var s;return ge(this,void 0,void 0,(function*(){yield Object(me.d)(t,void 0,!1);const i=e.media.document,n=[],a="voice"===i.type||"round"===i.type;let l="",c="";if(null===(s=i.thumbs)||void 0===s?void 0:s.length){const s=i.thumbs[i.thumbs.length-1];if(!s.bytes){const a=he.a.getCacheContext(i,s.type);if(a.url)n.push({src:a.url,sizes:`${s.w}x${s.h}`,type:"image/jpeg"});else{r.a.preloadPhoto(i,s).then(()=>{this.playingMedia===t&&a.url&&this.setNewMediadata(e)})}}}else if(a){const s=e.fromId||e.peerId,a=o.a.getPeerPhoto(s);if(a){const i=d.a.loadAvatar(s,a,"photo_small");if(i.cached){const e=yield i.loadPromise;n.push({src:e,sizes:"160x160",type:"image/jpeg"})}else i.loadPromise.then(s=>{this.playingMedia===t&&s&&this.setNewMediadata(e)})}l=o.a.getPeerTitle(s,!0,!1),c=A.default.format("voice"===i.type?"AttachAudio":"AttachRound",!0)}if(!a){const e=i.attributes.find(e=>"documentAttributeAudio"===e._);l=e&&e.title||i.file_name,c=e&&e.performer}n.length||(h.IS_APPLE?pe.IS_TOUCH_SUPPORTED?n.push({src:"assets/img/apple-touch-icon-precomposed.png",sizes:"180x180",type:"image/png"}):n.push({src:"assets/img/apple-touch-icon.png",sizes:"180x180",type:"image/png"}):[72,96,144,192,256,384,512].forEach(e=>{const t=`${e}x${e}`;n.push({src:`assets/img/android-chrome-${t}.png`,sizes:t,type:"image/png"})}));const u=new MediaMetadata({title:l,artist:c,artwork:n});navigator.mediaSession.metadata=u}))}getMessageByMedia(e){const t=this.mediaDetails.get(e),{peerId:s,mid:n}=t;return t.isScheduled?i.a.getScheduledMessageByPeer(s,n):i.a.getMessageByPeer(s,n)}toggle(e){return!!this.playingMedia&&(void 0===e&&(e=this.playingMedia.paused),this.playingMedia.paused===e&&(e?this.playingMedia.play():this.playingMedia.pause(),!0))}willBePlayed(e){this.willBePlayedMedia=e}setSearchContext(e){return!Object(L.b)(this.searchContext,e)&&(this.searchContext=Object(L.a)(e),!0)}getSearchContext(){return this.searchContext}setTargets(e,t,s){this.listLoader?this.listLoader.reset():(this.listLoader=new E({loadCount:10,loadWhenLeft:5,processItem:e=>(this.addMedia(e,!1),{peerId:e.peerId,mid:e.mid}),onJump:(e,t)=>{this.playItem(e)}}),this.listLoader.onEmptied=this.stop);const i=void 0===this.searchContext.folderId;t?this.listLoader.setTargets(t,s,i):this.listLoader.reverse=i,this.listLoader.setSearchContext(this.searchContext),this.listLoader.current=e,this.listLoader.load(!0),this.listLoader.load(!1)}setMedia(e,t){this.playingMedia=e,this.playingMedia.volume=this.volume,this.playingMedia.muted=this.muted,this.playingMedia.playbackRate=this.playbackRate,"mediaSession"in navigator&&this.setNewMediadata(t)}setSingleMedia(e,t){const s=this.playingMedia,i=this.pause();return this.willBePlayed(void 0),this.setMedia(e,t),this.toggleSwitchers(!1),()=>{this.toggleSwitchers(!0),s&&(this.mediaDetails.get(s)?this.setMedia(s,this.getMessageByMedia(s)):this.next()||this.previous()),this.playingMedia===e&&this.stop(),i&&this.play()}}toggleSwitchers(e){this.lockedSwitchers=!e}};de.a.appMediaPlaybackController=ve;var fe=ve,ye=s(98);function we(e,t,s,i){const n=e=>{s({x:e.pageX,y:e.pageY,event:e})},a=t=>{document.removeEventListener("mousemove",n),e.addEventListener("mousedown",o,{once:!0}),i&&i({x:t.pageX,y:t.pageY,event:t})},o=s=>{0===s.button?(t({x:s.pageX,y:s.pageY,event:s}),n(s),document.addEventListener("mousemove",n),document.addEventListener("mouseup",a,{once:!0})):e.addEventListener("mousedown",o,{once:!0})};e.addEventListener("mousedown",o,{once:!0});const r=e=>{e.preventDefault(),s({x:e.touches[0].clientX,y:e.touches[0].clientY,isTouch:!0,event:e})},l=t=>{document.removeEventListener("touchmove",r),e.addEventListener("touchstart",c,{passive:!1,once:!0}),i&&i({x:t.touches[0].clientX,y:t.touches[0].clientY,isTouch:!0,event:t})},c=e=>{t({x:e.touches[0].clientX,y:e.touches[0].clientY,isTouch:!0,event:e}),r(e),document.addEventListener("touchmove",r,{passive:!1}),document.addEventListener("touchend",l,{passive:!1,once:!0})};return e.addEventListener("touchstart",c,{passive:!1,once:!0}),()=>{e.removeEventListener("mousedown",o),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",a),e.removeEventListener("touchstart",c),document.removeEventListener("touchmove",r),document.removeEventListener("touchend",l)}}class Le{constructor(e,t=0){this.mousedown=!1,this.events={},this.withTransition=!1,this.useTransform=!1,this.vertical=!1,this.onMouseMove=e=>{this.scrub(e)},this.onMouseDown=e=>{var t;this.rect=this.container.getBoundingClientRect(),this.mousedown=!0,this.scrub(e),this.container.classList.add("is-focused"),(null===(t=this.events)||void 0===t?void 0:t.onMouseDown)&&this.events.onMouseDown(e)},this.onMouseUp=e=>{var t;this.mousedown=!1,this.container.classList.remove("is-focused"),(null===(t=this.events)||void 0===t?void 0:t.onMouseUp)&&this.events.onMouseUp(e)},this.onInput=()=>{var e;const t=+this.seek.value;this.setFilled(t),(null===(e=this.events)||void 0===e?void 0:e.onScrub)&&this.events.onScrub(t)},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("progress-line"),this.useTransform?this.container.classList.add("use-transform"):this.withTransition&&this.container.classList.add("with-transition"),this.filled=document.createElement("div"),this.filled.classList.add("progress-line__filled");const s=this.seek=document.createElement("input");s.classList.add("progress-line__seek"),s.type="range",s.step=""+this.step,s.min=""+this.min,s.max=""+this.max,s.value=""+t,t&&this.setProgress(t);const i=""+this.step,n=i.indexOf(".");this.decimals=-1===n?0:i.length-n-1,this.container.append(this.filled,s)}get value(){return+this.seek.value}setHandlers(e){this.events=e}setListeners(){this.seek.addEventListener("input",this.onInput),this._removeListeners=we(this.container,this.onMouseDown,this.onMouseMove,this.onMouseUp)}setProgress(e){this.seek.value=""+e,this.setFilled(+this.seek.value)}addProgress(e){this.seek.value=""+(+this.seek.value+e),this.setFilled(+this.seek.value)}setFilled(e){let t=(e-this.min)/(this.max-this.min);t=Object(C.a)(t,0,1),this.useTransform?this.filled.style.transform=`scaleX(${t})`:this.filled.style.width=100*t+"%"}scrub(e){var t;const s=this.vertical?this.rect.height:this.rect.width,i=Object(C.a)(this.vertical?-(e.y-this.rect.bottom):e.x-this.rect.left,0,s);let n=this.min+i/s*(this.max-this.min);return n-this.min<(this.max-this.min)/2&&(n-=this.step/10),n=+n.toFixed(this.decimals),n=Object(C.a)(n,this.min,this.max),this.setProgress(n),(null===(t=this.events)||void 0===t?void 0:t.onScrub)&&this.events.onScrub(n),n}removeListeners(){this._removeListeners&&(this._removeListeners(),this._removeListeners=null),this.seek.removeEventListener("input",this.onInput),this.events={}}}const Se=e=>{if(e.element)return e.element;const{icon:t,text:s,onClick:i}=e,n=document.createElement("div");n.className="btn-menu-item"+(t?" tgico-"+t:""),Object(ie.ripple)(n);const a=s?Object(A.i18n)(s):document.createElement("span");e.regularText&&(a.innerHTML=e.regularText),a.classList.add("btn-menu-item-text"),n.append(a),e.checkboxField&&(n.append(e.checkboxField.label),Object(l.b)(n,()=>{e.checkboxField.checked=!e.checkboxField.checked},e.options));const o=!!e.checkboxField||!!e.keepOpen;return Object(l.b)(n,"click"!==l.a||o?e=>{Object(c.a)(e),i(e),o||Object(se.c)()}:i,e.options),e.element=n};var Ee=(e,t)=>{const s=document.createElement("div");s.classList.add("btn-menu"),t&&e.forEach(e=>{e.options?e.options.listenerSetter=t:e.options={listenerSetter:t}});const i=e.map(Se);return s.append(...i),s};const Me=(e,t,s)=>{((null==s?void 0:s.listenerSetter)?s.listenerSetter.add(e):e.addEventListener.bind(e))(l.a,s=>{if(!e.classList.contains("btn-menu-toggle"))return!1;const i=e.querySelector(".btn-menu");Object(c.a)(s),e.classList.contains("menu-open")?Object(se.c)():(t&&t(s),Object(se.d)(i))})};var Ie=(e={},t,s,i)=>{e.asDiv=!0;const n=N("more btn-menu-toggle",e),a=Ee(s,e.listenerSetter);return a.classList.add(t),Me(n,i,e),n.append(a),n},Ce=s(5);class ke extends Le{constructor(e,t,s,i){super({step:1e3/60/1e3,min:0,max:1,withTransition:s,useTransform:i},0),this.progressRAF=0,this.onLoadedData=()=>{this.max=this.media.duration,this.seek.setAttribute("max",""+this.max)},this.onEnded=()=>{this.setProgress()},this.onPlay=()=>{let e=()=>{this.setProgress(),this.progressRAF=this.media.paused?0:window.requestAnimationFrame(e)};this.progressRAF&&window.cancelAnimationFrame(this.progressRAF),this.streamable&&this.setLoadProgress(),this.progressRAF=window.requestAnimationFrame(e)},this.onTimeUpdate=()=>{this.media.paused&&(this.setProgress(),this.streamable&&this.setLoadProgress())},this.onProgress=e=>{this.setLoadProgress()},e&&this.setMedia(e,t)}setMedia(e,t=!1){this.media&&this.removeListeners(),t&&!this.filledLoad?(this.filledLoad=document.createElement("div"),this.filledLoad.classList.add("progress-line__filled","progress-line__loaded"),this.container.prepend(this.filledLoad)):this.filledLoad&&this.filledLoad.classList.toggle("hide",!t),this.media=e,this.streamable=t,(!e.paused||e.currentTime>0)&&this.onPlay();let s=!1;this.setSeekMax(),this.setListeners(),this.setHandlers({onMouseDown:()=>{s=!this.media.paused,s&&this.media.pause()},onMouseUp:e=>{s&&this.media.play()}})}scrub(e){const t=super.scrub(e);return this.media.currentTime=t,t}setLoadProgress(){if(fe.isSafariBuffering(this.media))return;const e=this.media.buffered,t=e.length,s=this.media.currentTime;let i=0,n=0;for(let a=0;a=t&&t>=i&&(i=t,n=e.end(a))}const a=this.media.duration?n/this.media.duration:0;this.filledLoad.style.width=100*a+"%"}setSeekMax(){this.max=this.media.duration||0,this.max>0?this.onLoadedData():this.media.addEventListener("loadeddata",this.onLoadedData)}setProgress(){if(fe.isSafariBuffering(this.media))return;const e=this.media.currentTime;super.setProgress(e)}setListeners(){super.setListeners(),this.media.addEventListener("ended",this.onEnded),this.media.addEventListener("play",this.onPlay),this.media.addEventListener("timeupdate",this.onTimeUpdate),this.streamable&&this.media.addEventListener("progress",this.onProgress)}removeListeners(){super.removeListeners(),this.media.removeEventListener("loadeddata",this.onLoadedData),this.media.removeEventListener("ended",this.onEnded),this.media.removeEventListener("play",this.onPlay),this.media.removeEventListener("timeupdate",this.onTimeUpdate),this.streamable&&this.media.removeEventListener("progress",this.onProgress),this.progressRAF&&(window.cancelAnimationFrame(this.progressRAF),this.progressRAF=0)}}class Te extends Le{constructor(e,t=!1){super({step:.01,min:0,max:1,vertical:t},1),this.listenerSetter=e,this.vertical=t,this.onMuteClick=e=>{e&&Object(c.a)(e),fe.muted=!fe.muted},this.setVolume=()=>{const{volume:e,muted:t}=fe;let s;s=!e||t?"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z":e>.5?"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z":e>0&&e<.25?"M7 9v6h4l5 5V4l-5 5H7z":"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z";try{this.volumeSvg.innerHTML=``}catch(e){}this.mousedown||this.setProgress(t?0:e)},this.setListeners(),this.setHandlers({onScrub:e=>{const t=Math.max(Math.min(e,1),0);fe.muted=!1,fe.volume=t}}),this.btn=document.createElement("div"),this.btn.classList.add("player-volume"),this.btn.innerHTML='\n \n ',this.btn.classList.add("btn-icon"),this.volumeSvg=this.btn.firstElementChild,this.btn.append(this.container),Object(l.b)(this.volumeSvg,this.onMuteClick,{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("media_playback_params",this.setVolume),this.setVolume()}}class Pe extends R.a{constructor(e,t=!1,s=!1,i){if(super(!1),this.video=e,this.showControlsTimeout=0,this.hideControls=()=>{clearTimeout(this.showControlsTimeout),this.showControlsTimeout=0;const e=this.wrapper.classList.contains("show-controls");if(!1!==this.controlsLocked){if(this.video.paused||!e||this.controlsLocked)return}else if(!e)return;this.dispatchEvent("toggleControls",!1),this.wrapper.classList.remove("show-controls")},this.showControls=(e=!0)=>{this.showControlsTimeout?(clearTimeout(this.showControlsTimeout),this.showControlsTimeout=0):this.wrapper.classList.contains("show-controls")||!1===this.controlsLocked||(this.dispatchEvent("toggleControls",!0),this.wrapper.classList.add("show-controls")),e&&!this.controlsLocked&&(this.showControlsTimeout=window.setTimeout(this.hideControls,3e3))},this.toggleControls=e=>{const t=this.wrapper.classList.contains("show-controls");if(void 0===e)t?this.hideControls():this.showControls();else{if(e===t)return;!1===e?this.hideControls():this.showControls()}},this.onFullScreen=()=>{null!==document.webkitFullscreenElement||this.wrapper.classList.remove("ckin__fullscreen")},this.wrapper=document.createElement("div"),this.wrapper.classList.add("ckin__player"),this.listenerSetter=new H.a,e.parentNode.insertBefore(this.wrapper,e),this.wrapper.appendChild(e),this.skin="default",this.stylePlayer(i),"default"===this.skin){const t=this.wrapper.querySelector(".default__controls.ckin__controls");this.progress=new ke(e,s),t.prepend(this.progress.container)}if(t){e.play().catch(t=>{"NotAllowedError"===t.name&&(e.muted=!0,e.autoplay=!0,e.play())}).finally(()=>{this.wrapper.classList.toggle("is-playing",!this.video.paused)})}}stylePlayer(e){const{wrapper:t,video:s,skin:i}=this;t.classList.add(i);const n=this.buildControls();let o;if(t.insertAdjacentHTML("beforeend",n),"default"===i){const e=t.querySelectorAll(".toggle"),i=t.querySelector(".fullscreen"),n=t.querySelector("#time-elapsed");o=t.querySelector("#time-duration"),o.innerHTML=String(0|s.duration).toHHMMSS();const r=new Te(this.listenerSetter);t.querySelector(".left-controls").insertBefore(r.btn,n.parentElement),Array.from(e).forEach(e=>{this.listenerSetter.add(e)("click",()=>{this.togglePlay()})}),this.listenerSetter.add(s)("click",()=>{pe.IS_TOUCH_SUPPORTED||this.togglePlay()}),pe.IS_TOUCH_SUPPORTED?this.listenerSetter.add(t)("click",()=>{this.toggleControls()}):(this.listenerSetter.add(this.wrapper)("mousemove",()=>{this.showControls()}),this.listenerSetter.add(this.wrapper)("mouseenter",()=>{this.showControls(!1)}),this.listenerSetter.add(this.wrapper)("mouseleave",e=>{Object(Ce.a)(e.relatedTarget,"media-viewer-caption")?this.showControls(!1):this.hideControls()}),this.listenerSetter.add(document)("keydown",e=>{if(a.default.overlaysActive>1)return;let t=!0;return"KeyF"===e.code?this.toggleFullScreen(i):"KeyM"===e.code?fe.muted=!fe.muted:"Space"===e.code?this.togglePlay():e.altKey&&"Equal"===e.code?fe.playbackRate+=.25:e.altKey&&"Minus"===e.code?fe.playbackRate-=.25:t=!1,t?(Object(c.a)(e),!1):void 0})),this.listenerSetter.add(s)("dblclick",()=>{pe.IS_TOUCH_SUPPORTED||this.toggleFullScreen(i)}),this.listenerSetter.add(i)("click",e=>{this.toggleFullScreen(i)}),"webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange".split(" ").forEach(e=>{this.listenerSetter.add(t)(e,this.onFullScreen,!1)}),this.listenerSetter.add(s)("timeupdate",()=>{n.innerHTML=String(0|s.currentTime).toHHMMSS()}),this.listenerSetter.add(s)("play",()=>{this.wrapper.classList.add("played")},{once:!0}),this.listenerSetter.add(s)("pause",()=>{this.showControls(!1)})}this.listenerSetter.add(s)("play",()=>{this.wrapper.classList.add("is-playing")}),this.listenerSetter.add(s)("pause",()=>{this.wrapper.classList.remove("is-playing")}),s.duration||e?o.innerHTML=String(Math.round(s.duration||e)).toHHMMSS():Object(me.d)(s).then(()=>{o.innerHTML=String(Math.round(s.duration)).toHHMMSS()})}lockControls(e){this.controlsLocked=e,this.wrapper.classList.toggle("disable-hover",!1===e),this.toggleControls(e)}togglePlay(){this.video[this.video.paused?"play":"pause"]()}buildControls(){const e=this.skin;if("default"===e)return`\n \n
\n
\n
\n
\n \n
\n \n / \n \n
\n
\n
\n \n \n
\n
\n
`}setBtnMenuToggle(){const e=[.25,.5,1,1.25,1.5,2].map(e=>({regularText:1===e?"Normal":""+e,onClick:()=>this.video.playbackRate=e})),t=Ee(e),s=this.wrapper.querySelector(".settings");t.classList.add("top-left"),Me(s),s.append(t)}static isFullScreen(){return!!(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)}toggleFullScreen(e){const t=this.wrapper;if(h.IS_APPLE_MOBILE){const e=this.video;return e.webkitEnterFullscreen(),void e.enterFullscreen()}Pe.isFullScreen()?(t.classList.remove("ckin__fullscreen"),document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen(),e.classList.remove("tgico-smallscreen"),e.classList.add("tgico-fullscreen"),e.setAttribute("title","Full Screen")):(t.classList.add("ckin__fullscreen"),t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen(),e.classList.remove("tgico-fullscreen"),e.classList.add("tgico-smallscreen"),e.setAttribute("title","Exit Full Screen"))}removeListeners(){super.cleanup(),this.listenerSetter.removeAll(),this.progress.removeListeners()}}var xe=s(108),Ae=s(100),Oe=s(107),_e=s(35);function Fe(e){return function(e,t){let s,i=!1;return(...n)=>{s=n,i||(i=!0,e(()=>{i=!1,t(...s)}))}}(_e.b,e)}function je(e){e.classList.add("is-voice");const t=e.message,s=i.a.getMediaFromMessage(t);t.pFlags.out&&e.classList.add("is-out");const n=v.b.isMobile?16:23,a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.classList.add("audio-waveform"),a.setAttributeNS(null,"width","150"),a.setAttributeNS(null,"height",""+n),a.setAttributeNS(null,"viewBox","0 0 150 "+n);const o=document.createElement("div");o.classList.add("audio-time"),e.append(a,o);let r=s.attributes.find(e=>"documentAttributeAudio"===e._).waveform||new Uint8Array([]);r=function(e){e instanceof Uint8Array||(e=new Uint8Array(e));const t=8*e.length/5|0;if(!t)return new Uint8Array([]);let s;try{const i=new DataView(e.buffer);s=new Uint8Array(t);for(let e=0;e>n&31}}catch(e){s=new Uint8Array([])}return s}(r.slice(0,63));const d=Math.max(...r),h=r.length?r.length:100,u=Math.min(37,h);let p=0;const m=n-4;let g="";for(let e=0,t=0,s=0;e=h){s=s+u-h,s<(u+1)/2&&p\n `,t+=4,p=s<(u+1)/2?0:i}else p{let t=e.audio;const s=()=>{const e=t.currentTime===t.duration?0:Math.ceil(t.currentTime/t.duration*u);b.forEach((t,s)=>t.classList.toggle("active",s0&&t.currentTime!==t.duration)&&s();const i=Fe(s);return e.addAudioListener("timeupdate",i),e.addAudioListener("ended",i),e.readyPromise.then(()=>{let e=!1,s=!1;function i(e){let s;if(e instanceof MouseEvent)s=e.offsetX;else{const t=e.target.getBoundingClientRect();s=e.targetTouches[0].pageX-t.left}const i=s/150*t.duration;t.currentTime=i}f.addEventListener("mouseleave",i=>{e&&(t.play(),e=!1),s=!1}),f.addEventListener("mousemove",t=>{s=!0,e&&i(t)}),f.addEventListener("mousedown",s=>{s.preventDefault(),0===s.button&&(t.paused||t.pause(),i(s),e=!0)}),f.addEventListener("mouseup",i=>{s&&e&&(t.play(),e=!1)}),Object(l.b)(f,e=>{Object(c.a)(e),t.paused||i(e)})},Ae.a),()=>{f.remove(),f=null,t=null}}}function De(e=!0){const t=new ye.a({cancelable:!0,tryAgainOnFail:e});return t.construct(),e||(t.circle.setAttributeNS(null,"r","23"),t.totalLength=143.58203125),t}a.default.addEventListener("messages_media_read",({mids:e,peerId:t})=>{e.forEach(e=>{const s=`[data-mid="${e}"][data-peer-id="${t}"]`;Array.from(document.querySelectorAll(`audio-element.is-unread${s}, .media-round.is-unread${s}`)).forEach(e=>{e.classList.remove("is-unread")})})});const Be=(e,t)=>{let s,i;const n=Object(Ce.a)(e,e.classList.contains("search-super-item")?"tabs-tab":"bubbles-inner");if(n){const t=':not([data-is-outgoing="1"])',a=".audio:not(.is-voice)"+t;let o;o=e.matches(a)?a:`.audio.is-voice${t}, .media-round${t}`;const r=Array.from(n.querySelectorAll(o)),l=r.indexOf(e),c=r.map(e=>({peerId:+e.dataset.peerId,mid:+e.dataset.mid}));s=c.slice(0,l),i=c.slice(l+1)}return[s,i]};class Re extends HTMLElement{constructor(){super(...arguments),this.withTime=!1,this.voiceAsMusic=!1,this.showSender=!1,this.listenerSetter=new H.a}render(){var e;this.classList.add("audio"),this.dataset.mid=""+this.message.mid,this.dataset.peerId=""+this.message.peerId;const t=i.a.getMediaFromMessage(this.message),s="voice"===t.type,n=!this.voiceAsMusic&&s,a=this.message.pFlags.is_outgoing,o=a&&this.preloader,r=String(0|t.duration).toHHMMSS();this.innerHTML='\n
\n
\n
\n
\n
\n
';const d=this.firstElementChild,u=document.createElement("div");u.classList.add("audio-download");"audio"!==t.type&&this.message&&this.message.pFlags.media_unread&&this.classList.add("is-unread"),o&&(this.classList.add("is-outgoing"),this.append(u));const p=n?je(this):function(e){const t=e.withTime,s=e.message,n=i.a.getMediaFromMessage(s),a="voice"===n.type||"round"===n.type,o=document.createElement("div");if(o.classList.add("audio-description"),!a){const a=[];n.audioPerformer&&a.push(Object(Oe.a)(n.audioPerformer)),t?a.push(Object(re.c)(s.date)):a.length||a.push(Object(C.b)(n.size)),e.showSender&&a.push(i.a.wrapSenderToPeer(s)),o.append(...Object(A.joinElementsWith)(a," • "))}e.insertAdjacentHTML("beforeend",'\n
\n
\n
\n
');const r=e.querySelector(".audio-title"),l=new xe.a;l.dataset.fontWeight=e.dataset.fontWeight,a?l.append(i.a.wrapSenderToPeer(s)):l.innerHTML=n.audioTitle||n.fileName,r.append(l),e.showSender&&r.append(i.a.wrapSentTime(s));const c=e.querySelector(".audio-subtitle");return c.append(o),()=>{let t=!1,s=new ke(e.audio,n.supportsStreaming);e.addAudioListener("ended",()=>{e.classList.remove("audio-show-progress"),c.lastChild.replaceWith(o),t=!1});const i=()=>{t||(e.classList.add("audio-show-progress"),t=!0,s&&c.lastChild.replaceWith(s.container))};return e.addAudioListener("play",i),(!e.audio.paused||e.audio.currentTime>0)&&i(),()=>{s.removeListeners(),s.container.remove(),s=null}}}(this),m=this.querySelector(".audio-time");m.innerHTML=r;const g=this.onLoad=e=>{this.onLoad=void 0;const t=this.audio=fe.addMedia(this.message,e),s=this.readyPromise=Object(oe.a)();this.audio.readyState>=this.audio.HAVE_CURRENT_DATA?s.resolve():this.addAudioListener("canplay",()=>s.resolve(),{once:!0}),this.onTypeDisconnect=p();const i=()=>String(0|t.currentTime).toHHMMSS()+(n?" / "+r:""),a=()=>{m.innerText=i(),d.classList.toggle("playing",!t.paused)};(!t.paused||t.currentTime>0&&t.currentTime!==t.duration)&&a();const o=(e,s=t.paused)=>{if(e&&Object(c.a)(e),s){if(fe.setSearchContext(this.searchContext)){const[e,t]=Be(this,this.searchContext.useSearch);fe.setTargets({peerId:this.message.peerId,mid:this.message.mid},e,t)}t.play().catch(()=>{})}else t.pause()};return Object(l.b)(d,e=>o(e),{listenerSetter:this.listenerSetter}),this.addAudioListener("ended",()=>{d.classList.remove("playing"),m.innerText=r}),this.addAudioListener("timeupdate",()=>{!t.currentTime&&t.paused||fe.isSafariBuffering(t)||(m.innerText=i())}),this.addAudioListener("pause",()=>{d.classList.remove("playing")}),this.addAudioListener("play",a),o};if(a)o&&(this.dataset.isOutgoing="1",this.preloader.attach(u,!1));else{let s=this.preloader;if(g("audio"!==t.type&&!this.noAutoDownload),t.thumbs){const e=[],s=ys({photo:t,message:null,container:d,boxWidth:48,boxHeight:48,loadPromises:this.loadPromises,withoutPreloader:!0,lazyLoadQueue:this.lazyLoadQueue});d.style.width=d.style.height="",s.images.thumb&&e.push(s.images.thumb),s.images.full&&e.push(s.images.full),this.classList.add("audio-with-thumb"),e.forEach(e=>e.classList.add("audio-thumb"))}const i=e=>{if(this.audio.src)return;fe.resolveWaitingForLoadMedia(this.message.peerId,this.message.mid,this.message.pFlags.is_scheduled);const i=()=>{e&&(fe.willBePlayed(this.audio),h.IS_SAFARI&&!this.audio.autoplay&&(this.audio.autoplay=!0))};if(i(),!s)if(t.supportsStreaming){let e;this.classList.add("corner-download");const t=()=>{const t=De(!1),s=Object(oe.a)();s.notifyAll({done:75,total:100}),s.catch(()=>{this.audio.pause(),fe.willBePlayed(void 0)}),s.cancel=()=>{s.cancel=Ae.a;const e=new Error;e.type="CANCELED",s.reject(e)},t.attach(u,!1,s),e=this.addAudioListener("pause",()=>{s.cancel()},{once:!0}),i()},s=this.addAudioListener("play",t);this.readyPromise.then(()=>{this.listenerSetter.remove(s),this.listenerSetter.remove(e)})}else{s=De(),e||(this.readyPromise=Object(oe.a)());const n=()=>{i();const n=M.a.downloadDoc(t);return e||n.then(()=>{this.readyPromise.resolve()}),s.attach(u,!1,n),{download:n}};s.setDownloadFunction(n),n()}this.append(u),this.classList.add("downloading"),this.readyPromise.then(()=>{this.classList.remove("downloading"),u.classList.add("downloaded"),setTimeout(()=>{u.remove()},200),fe.willBePlayedMedia===this.audio&&(this.audio.play(),fe.willBePlayed(void 0))})};(null===(e=this.audio)||void 0===e?void 0:e.src)||("audio"===t.type||this.noAutoDownload?Object(l.b)(d,()=>{i(!0)},{once:!0,capture:!0,passive:!1,listenerSetter:this.listenerSetter}):i(!1))}}get addAudioListener(){return this.listenerSetter.add(this.audio)}disconnectedCallback(){this.isConnected||(this.onTypeDisconnect&&(this.onTypeDisconnect(),this.onTypeDisconnect=null),this.readyPromise&&this.readyPromise.reject(),this.listenerSetter.removeAll(),this.listenerSetter=null,this.preloader=null)}}customElements.define("audio-element",Re);class He{constructor(e,t){this.className=e,this.fill=t,this.container=document.createElement("div"),this.container.className=e,this.border=document.createElement("div"),this.border.classList.add(e+"-border"),this.content=document.createElement("div"),this.content.classList.add(e+"-content"),this.title=document.createElement("div"),this.title.classList.add(e+"-title"),this.title.setAttribute("dir","auto"),this.subtitle=document.createElement("div"),this.subtitle.classList.add(e+"-subtitle"),this.subtitle.setAttribute("dir","auto"),this.content.append(this.title,this.subtitle),this.container.append(this.border,this.content)}}function Ue(e){var t;let{title:s,titleEl:n,subtitle:a,subtitleEl:o,mediaEl:l,message:c,loadPromises:d}=e;void 0!==s&&("string"==typeof s&&(s=Object(X.f)(s,140),s=Z.a.wrapEmojiText(s)),Object(x.a)(n,s)),d||(d=[]);let h=c&&c.media,u=!1,p=!1;const m=l?Array.from(l.children).slice():[];let g;if(h&&l){if(o.textContent="",o.append(i.a.wrapMessageForReply(c)),h.webpage&&(h=h.webpage),h.photo||h.document&&-1!==["video","sticker","gif","round","photo"].indexOf(h.document.type)){g=mo.chat.bubbles.getMiddleware();const e=mo.chat.bubbles.lazyLoadQueue;if("sticker"===(null===(t=h.document)||void 0===t?void 0:t.type))u=!0,Ls({doc:h.document,div:l,lazyLoadQueue:e,group:ho,width:32,height:32,middleware:g,loadPromises:d});else{const t=h.photo||h.document;p="round"===t.type;try{ys({photo:t,container:l,boxWidth:32,boxHeight:32,size:r.a.choosePhotoSize(t,32,32),middleware:g,lazyLoadQueue:e,noBlur:!0,withoutPreloader:!0,loadPromises:d}),u=!0}catch(e){}}}}else c?(o.textContent="",o.append(i.a.wrapMessageForReply(c,c.message&&Object(X.f)(c.message,140)))):("string"==typeof a&&(a=Object(X.f)(a,140),a=Z.a.wrapEmojiText(a)),Object(x.a)(o,a||""));return Promise.all(d).then(()=>{g&&!g()||(m.forEach(e=>e.remove()),l&&l.classList.toggle("is-round",p))}),u}class Ne extends He{constructor(e){super(e,(e,t="",s)=>{this.mediaEl||(this.mediaEl=document.createElement("div"),this.mediaEl.classList.add(this.className+"-media"));const i=Ue({title:e,titleEl:this.title,subtitle:t,subtitleEl:this.subtitle,mediaEl:this.mediaEl,message:s});this.container.classList.toggle("is-media",i),i?this.content.prepend(this.mediaEl):this.mediaEl.remove()}),this.className=e}}const ze=0,Ve=1,We=2,Ke=4,Ge=8;class qe{constructor(e,t,s,i,n=t){this.sizes=e,this.maxWidth=t,this.minWidth=s,this.spacing=i,this.maxHeight=n,this.count=e.length,this.ratios=qe.countRatios(e),this.proportions=qe.countProportions(this.ratios),this.averageRatio=Object(y.a)(this.ratios,1)/this.count,this.maxSizeRatio=t/this.maxHeight}layout(){return this.count?this.count>=5||this.ratios.find(e=>e>2)?new Qe(this.ratios,this.averageRatio,this.maxWidth,this.minWidth,this.spacing).layout():2===this.count?this.layoutTwo():3===this.count?this.layoutThree():this.layoutFour():[]}layoutTwo(){return"ww"===this.proportions&&this.averageRatio>1.4*this.maxSizeRatio&&this.ratios[1]-this.ratios[0]<.2?this.layoutTwoTopBottom():"ww"===this.proportions||"qq"===this.proportions?this.layoutTwoLeftRightEqual():this.layoutTwoLeftRight()}layoutThree(){return"n"===this.proportions[0]?this.layoutThreeLeftAndOther():this.layoutThreeTopAndOther()}layoutFour(){return"w"===this.proportions[0]?this.layoutFourTopAndOther():this.layoutFourLeftAndOther()}layoutTwoTopBottom(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],Math.min(e/this.ratios[1],(this.maxHeight-this.spacing)/2)));return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:e,height:t},sides:Ge|Ke|We}]}layoutTwoLeftRightEqual(){const e=(this.maxWidth-this.spacing)/2,t=Math.round(Math.min(e/this.ratios[0],Math.min(e/this.ratios[1],1*this.maxHeight)));return[{geometry:{x:0,y:0,width:e,height:t},sides:Ve|Ge|Ke},{geometry:{x:e+this.spacing,y:0,width:e,height:t},sides:Ve|We|Ke}]}layoutTwoLeftRight(){const e=Math.round(1.5*this.minWidth),t=Math.min(Math.round(Math.max(.4*(this.maxWidth-this.spacing),(this.maxWidth-this.spacing)/this.ratios[0]/(1/this.ratios[0]+1/this.ratios[1]))),this.maxWidth-this.spacing-e),s=this.maxWidth-t-this.spacing,i=Math.min(this.maxHeight,Math.round(Math.min(s/this.ratios[0],t/this.ratios[1])));return[{geometry:{x:0,y:0,width:s,height:i},sides:Ve|Ge|Ke},{geometry:{x:s+this.spacing,y:0,width:t,height:i},sides:Ve|We|Ke}]}layoutThreeLeftAndOther(){const e=this.maxHeight,t=Math.round(Math.min((this.maxHeight-this.spacing)/2,this.ratios[1]*(this.maxWidth-this.spacing)/(this.ratios[2]+this.ratios[1]))),s=e-t-this.spacing,i=Math.max(this.minWidth,Math.round(Math.min((this.maxWidth-this.spacing)/2,Math.min(t*this.ratios[2],s*this.ratios[1])))),n=Math.min(Math.round(e*this.ratios[0]),this.maxWidth-this.spacing-i);return[{geometry:{x:0,y:0,width:n,height:e},sides:Ve|Ge|Ke},{geometry:{x:n+this.spacing,y:0,width:i,height:s},sides:Ve|We},{geometry:{x:n+this.spacing,y:s+this.spacing,width:i,height:t},sides:Ke|We}]}layoutThreeTopAndOther(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],.66*(this.maxHeight-this.spacing))),s=(this.maxWidth-this.spacing)/2,i=Math.min(this.maxHeight-t-this.spacing,Math.round(Math.min(s/this.ratios[1],s/this.ratios[2]))),n=e-s-this.spacing;return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:s,height:i},sides:Ke|Ge},{geometry:{x:s+this.spacing,y:t+this.spacing,width:n,height:i},sides:Ke|We}]}layoutFourTopAndOther(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],.66*(this.maxHeight-this.spacing))),s=Math.round((this.maxWidth-2*this.spacing)/(this.ratios[1]+this.ratios[2]+this.ratios[3])),i=Math.max(this.minWidth,Math.round(Math.min(.4*(this.maxWidth-2*this.spacing),s*this.ratios[1]))),n=Math.round(Math.max(Math.max(1*this.minWidth,.33*(this.maxWidth-2*this.spacing)),s*this.ratios[3])),a=e-i-n-2*this.spacing,o=Math.min(this.maxHeight-t-this.spacing,s);return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:i,height:o},sides:Ke|Ge},{geometry:{x:i+this.spacing,y:t+this.spacing,width:a,height:o},sides:Ke},{geometry:{x:i+this.spacing+a+this.spacing,y:t+this.spacing,width:n,height:o},sides:We|Ke}]}layoutFourLeftAndOther(){const e=this.maxHeight,t=Math.round(Math.min(e*this.ratios[0],.6*(this.maxWidth-this.spacing))),s=Math.round((this.maxHeight-2*this.spacing)/(1/this.ratios[1]+1/this.ratios[2]+1/this.ratios[3])),i=Math.round(s/this.ratios[1]),n=Math.round(s/this.ratios[2]),a=e-i-n-2*this.spacing,o=Math.max(this.minWidth,Math.min(this.maxWidth-t-this.spacing,s));return[{geometry:{x:0,y:0,width:t,height:e},sides:Ve|Ge|Ke},{geometry:{x:t+this.spacing,y:0,width:o,height:i},sides:Ve|We},{geometry:{x:t+this.spacing,y:i+this.spacing,width:o,height:n},sides:We},{geometry:{x:t+this.spacing,y:i+n+2*this.spacing,width:o,height:a},sides:Ke|We}]}static countRatios(e){return e.map(e=>e.w/e.h)}static countProportions(e){return e.map(e=>e>1.2?"w":e<.8?"n":"q").join("")}}class Qe{constructor(e,t,s,i,n,a=4*s/3){this.averageRatio=t,this.maxWidth=s,this.minWidth=i,this.spacing=n,this.maxHeight=a,this.ratios=Qe.cropRatios(e,t),this.count=e.length}static cropRatios(e,t){return e.map(e=>t>1.1?Object(C.a)(e,1,2.75):Object(C.a)(e,.6667,1))}layout(){let e=new Array(this.count),t=[];const s=(e,t)=>{const s=this.ratios.slice(e,e+t),i=Object(y.a)(s,0);return(this.maxWidth-(t-1)*this.spacing)/i},i=e=>{let i=[],n=0;for(let t of e)i.push(s(n,t)),n+=t;t.push({lineCounts:e,heights:i})};for(let e=1;e!==this.count;++e){const t=this.count-e;e>3||t>3||i([e,t])}for(let e=1;e!==this.count-1;++e)for(let t=1;t!==this.count-e;++t){const s=this.count-e-t;e>3||t>(this.averageRatio<.85?4:3)||s>3||i([e,t,s])}for(let e=1;e!==this.count-1;++e)for(let t=1;t!==this.count-e;++t)for(let s=1;s!==this.count-e-t;++s){const n=this.count-e-t-s;e>3||t>3||s>3||n>3||i([e,t,s,n])}let n=null,a=0;for(const e of t){const{heights:t,lineCounts:s}=e,i=s.length,o=Object(y.a)(t,0)+this.spacing*(i-1),r=Math.min(...t),l=(Math.max(...t),r{for(let e=1;e!==i;++e)if(s[e-1]>s[e])return 1.5;return 1})(),d=Math.abs(o-this.maxHeight)*l*c;(!n||d{if(this.uploadAvatar)return!0;let e=0,t=0,s=0;return this.inputFields.forEach(i=>{i.isValid()&&(++e,i.required&&++s),i.required&&++t}),t===s&&e>0},this.handleChange=()=>{this.nextBtn.classList.toggle("is-visible",this.isChanged())},Object(L.g)(this,e),this.nextBtn?this.nextBtn.classList.contains("btn-corner")||(this.handleChange=()=>{this.nextBtn.toggleAttribute("disabled",!this.isChanged()||this.disabled)}):this.nextBtn=$({icon:"check"}),e.withoutAvatar||(this.avatarElem=document.createElement("avatar-element"),this.avatarElem.classList.add("avatar-placeholder","avatar-"+this.avatarSize),this.avatarElem.setAttribute("peer",""+this.peerId),e.doNotEditAvatar||(this.avatarEdit=new Q(e=>{this.uploadAvatar=e,this.handleChange(),this.avatarElem.remove()}),this.avatarEdit.container.append(this.avatarElem))),this.inputFields.forEach(e=>{this.listenerSetter.add(e.input)("input",this.handleChange)}),this.handleChange()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this.inputFields.forEach(t=>t.input.toggleAttribute("disabled",e)),this.handleChange()}lockWithPromise(e,t=!1){this.disabled=!0,e.then(()=>{t&&(this.disabled=!1)},()=>{this.disabled=!1})}}class Je{constructor(e={}){this.freezed=!1,this.container=document.createElement(e.radioField||e.checkboxField?"label":"div"),this.container.classList.add("row"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("row-subtitle"),this.subtitle.setAttribute("dir","auto"),e.subtitle?"string"==typeof e.subtitle?b(this.subtitle,e.subtitle):this.subtitle.append(e.subtitle):e.subtitleLangKey&&this.subtitle.append(Object(A.i18n)(e.subtitleLangKey,e.subtitleLangArgs)),this.container.append(this.subtitle);let t=!!e.havePadding;if(e.radioField||e.checkboxField){if(t=!0,e.radioField&&(this.radioField=e.radioField,this.container.append(this.radioField.label)),e.checkboxField){this.checkboxField=e.checkboxField;const t=e.checkboxField.label.classList.contains("checkbox-field-toggle");t?(this.container.classList.add("row-with-toggle"),e.titleRight=this.checkboxField.label):this.container.append(this.checkboxField.label),e.noCheckboxSubtitle||t||this.checkboxField.input.addEventListener("change",()=>{Object(x.a)(this.subtitle,Object(A.i18n)(this.checkboxField.input.checked?"Checkbox.Enabled":"Checkbox.Disabled"))})}(e.radioField||e.checkboxField).label.classList.add("disable-hover")}if(e.title||e.titleLangKey){let t;if(e.titleRight?(t=document.createElement("div"),t.classList.add("row-title-row"),this.container.append(t)):t=this.container,this.title=document.createElement("div"),this.title.classList.add("row-title"),this.title.setAttribute("dir","auto"),e.title?this.title.innerHTML=e.title:this.title.append(Object(A.i18n)(e.titleLangKey)),t.append(this.title),e.titleRight){const s=document.createElement("div");s.classList.add("row-title","row-title-right"),"string"==typeof e.titleRight?s.innerHTML=e.titleRight:s.append(e.titleRight),t.append(s)}}e.icon&&(t=!0,this.title.classList.add("tgico","tgico-"+e.icon),this.container.classList.add("row-with-icon")),t&&this.container.classList.add("row-with-padding"),e.navigationTab&&(e.clickable=()=>e.navigationTab.open()),(e.clickable||e.radioField||e.checkboxField)&&("function"==typeof e.clickable&&this.container.addEventListener("click",t=>{this.freezed||e.clickable(t)}),this.container.classList.add("row-clickable","hover-effect"),e.noRipple||Object(ie.ripple)(this.container,void 0,void 0,!0))}}const Ze=(e,t)=>function(e,t){const s=document.createElement("form");return e.forEach(e=>{const{container:i,input:n}=e;s.append(i),n.addEventListener("change",()=>{n.checked&&t(n.value)})}),s}(e.map(e=>({container:e.container,input:e.radioField.input})),t);function et(e){navigator.clipboard?navigator.clipboard.writeText(e):function(e){var t=document.createElement("textarea");t.value=e,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch(e){}document.body.removeChild(t)}(e)}var tt=s(62);class st{constructor(e){const t=this.label=document.createElement("label");t.classList.add("radio-field");const s=this.input=document.createElement("input");s.type="radio",s.name="input-radio-"+e.name,e.value&&(s.value=e.value,e.stateKey&&(k.default.getState().then(t=>{s.checked=Object(L.d)(t,e.stateKey)===e.value}),s.addEventListener("change",()=>{k.default.setByKey(e.stateKey,e.value)})));const i=this.main=document.createElement("div");i.classList.add("radio-field-main"),e.text?i.innerHTML=e.text:e.langKey&&Object(A._i18n)(i,e.langKey),t.append(s,i)}get checked(){return this.input.checked}set checked(e){this.setValueSilently(e);const t=new Event("change",{bubbles:!0,cancelable:!0});this.input.dispatchEvent(t)}setValueSilently(e){this.input.checked=e}}const it=document.createElement("div");function nt(e){Object(x.a)(it,e),document.body.append(it),it.dataset.timeout&&clearTimeout(+it.dataset.timeout),it.dataset.timeout=""+setTimeout(()=>{it.remove(),delete it.dataset.timeout},3e3)}function at(e){nt(Object(A.i18n)(e.langPackKey))}function ot(e,t,s=!0,i=!0){let n,a,o,r,l=!1;return(...c)=>(a||(a=new Promise((e,t)=>(o=e,r=t))),n?(clearTimeout(n),l=!0,r(),a=new Promise((e,t)=>(o=e,r=t))):s&&(o(e(...c)),l=!1),n=setTimeout(()=>{!i||s&&!l||o(e(...c)),n=a=o=r=void 0,l=!1},t),a.catch(()=>{}),a)}it.classList.add("toast");var rt=s(30);class lt extends F.b{constructor(e){super(e),this.checkUsernameDebounced=ot(this.checkUsername.bind(this),150,!1,!0),e.listenerSetter.add(this.input)("input",()=>{const e=this.getValue();if(e===this.originalValue||!e.length)return this.setState(F.a.Neutral,this.options.label),void(this.options.onChange&&this.options.onChange());Z.b.isUsernameValid(e)?this.setState(F.a.Neutral):this.setError(this.options.invalidText),this.input.classList.contains("error")?this.options.onChange&&this.options.onChange():this.checkUsernameDebounced(e)})}getValue(){let e=this.value;return this.options.head&&(e=e.slice(this.options.head.length),this.setValueSilently(this.options.head+e)),e}checkUsername(e){this.checkUsernamePromise||(this.options.peerId?this.checkUsernamePromise=rt.a.invokeApi("channels.checkUsername",{channel:G.a.getChannelInput(-this.options.peerId),username:e}):this.checkUsernamePromise=rt.a.invokeApi("account.checkUsername",{username:e}),this.checkUsernamePromise.then(t=>{this.getValue()===e&&(t?this.setState(F.a.Valid,this.options.availableText):this.setError(this.options.takenText))},t=>{if(this.getValue()===e)switch(t.type){case"USERNAME_INVALID":this.setError(this.options.invalidText)}}).then(()=>{this.checkUsernamePromise=void 0,this.options.onChange&&this.options.onChange();const t=this.getValue();t!==e&&this.isValid()&&Z.b.isUsernameValid(t)&&this.checkUsername(t)}))}}var ct=s(66),dt=s(50);class ht extends ct.b{constructor(e,t={}){if(super("popup-peer"+(e?" "+e:""),t.buttons&&Object(ct.a)(t.buttons),Object.assign({overlayClosable:!0},t)),this.className=e,t.peerId){let e=new ko;e.setAttribute("dialog","1"),e.setAttribute("peer",""+t.peerId),e.classList.add("avatar-32"),this.header.prepend(e)}t.noTitle||(t.titleLangKey||!t.title?this.title.append(Object(A.i18n)(t.titleLangKey||"AppName",t.titleLangArgs)):this.title.innerText=t.title||"");const s=document.createDocumentFragment();if(t.descriptionLangKey||t.description){const e=document.createElement("p");e.classList.add("popup-description"),t.descriptionLangKey?e.append(Object(A.i18n)(t.descriptionLangKey,t.descriptionLangArgs)):t.description&&(e.innerHTML=t.description),s.append(e)}t.checkboxes&&(this.container.classList.add("have-checkbox"),t.checkboxes.forEach(e=>{e.withRipple=!1;const t=new dt.a(e);e.checkboxField=t,s.append(t.label)}),t.buttons.forEach(e=>{if(e.callback){const s=e.callback;e.callback=()=>{const e=new Set;t.checkboxes.forEach(t=>{t.checkboxField.checked&&e.add(t.text)}),s(e)}}})),this.container.insertBefore(s,this.header.nextElementSibling)}}var ut=s(54);class pt extends W{init(){this.container.classList.add("edit-peer-container","group-type-container");const e=G.a.isBroadcast(this.chatId);this.setTitle(e?"ChannelType":"GroupType");const t=new nn({name:e?"ChannelType":"GroupType"}),s=Object(tt.b)(),i=new Je({radioField:new st({langKey:e?"ChannelPrivate":"MegaPrivate",name:s,value:"private"}),subtitleLangKey:e?"ChannelPrivateInfo":"MegaPrivateInfo"}),a=new Je({radioField:new st({langKey:e?"ChannelPublic":"MegaPublic",name:s,value:"public"}),subtitleLangKey:e?"ChannelPublicInfo":"MegaPublicInfo"}),o=Ze([i,a],e=>{const t=[c,u];"public"===e&&t.reverse(),t[0].container.classList.remove("hide"),t[1].container.classList.add("hide"),m()}),r=G.a.getChat(this.chatId);t.content.append(o);const c=new nn({}),d=new Je({title:this.chatFull.exported_invite.link,subtitleLangKey:e?"ChannelPrivateLinkHelp":"MegaPrivateLinkHelp",clickable:()=>{et(this.chatFull.exported_invite.link),nt(A.default.format("LinkCopied",!0))}}),h=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"RevokeLink"});Object(l.b)(h,()=>{new ht("revoke-link",{buttons:[{langKey:"RevokeButton",callback:()=>{const e=Object(ut.a)([h],!0);n.default.getChatInviteLink(this.chatId,!0).then(t=>{e(),d.title.innerHTML=t})}}],titleLangKey:"RevokeLink",descriptionLangKey:"RevokeAlert"}).show()},{listenerSetter:this.listenerSetter}),c.content.append(d.container,h);const u=new nn({caption:e?"Channel.UsernameAboutChannel":"Channel.UsernameAboutGroup",noDelimiter:!0}),p=document.createElement("div");p.classList.add("input-wrapper");const m=()=>{const e=i.radioField.checked&&"t.me/"!==b||g.isValid()&&g.input.classList.contains("valid");v.classList.toggle("is-visible",e)},g=new lt({label:"SetUrlPlaceholder",name:"group-public-link",plainText:!0,listenerSetter:this.listenerSetter,availableText:"Link.Available",invalidText:"Link.Invalid",takenText:"Link.Taken",onChange:m,peerId:-this.chatId,head:"t.me/"}),b="t.me/"+(r.username||"");p.append(g.container),u.content.append(p);const v=$({icon:"check",className:"is-visible"});this.content.append(v),Object(l.b)(v,()=>{Object(se.g)(v);const e=a.radioField.checked?g.getValue():"";G.a.migrateChat(this.chatId).then(t=>G.a.updateUsername(t,e)).then(()=>{this.close()})},{listenerSetter:this.listenerSetter}),("t.me/"!==b?a:i).radioField.checked=!0,g.setOriginalValue(b),this.scrollable.append(t.container,c.container,u.container)}}var mt=s(59);class gt{constructor(e){this.loading=!1,this.loaded=!1,Object(L.g)(this,e),e.scrollable.onScrolledBottom=()=>{this.load()}}load(){return this.loaded?Promise.resolve():this.loading?this.promise:(this.loading=!0,void(this.promise=this.getPromise().then(e=>{this.loading=!1,this.promise=void 0,e?(this.loaded=!0,this.scrollable.onScrolledBottom=null):this.scrollable.checkForTriggers()},()=>{this.promise=void 0,this.loading=!1})))}}var bt=s(80),vt=s(81),ft=s(48),yt=s(92),wt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};let Lt,St=!1;class Et{constructor(e){this.container=document.createElement("div"),this.list=Do.createChatList(),this.chatsContainer=document.createElement("div"),this.selected=new Set,this.freezed=!1,this.folderId=0,this.offsetIndex=0,this.query="",this.loadedWhat={},this.renderedPeerIds=new Set,this.peerType=["dialogs"],this.multiSelect=!0,this.rippleEnabled=!0,this.avatarSize=48,this.tempIds={},this.peerId=0,this.selfPresence="Presence.YourChat",this.needSwitchList=!1,this.onInput=()=>{const e=this.input.value;if(this.query!==e){this.peerType.includes("contacts")&&(this.cachedContacts=null),this.peerType.includes("dialogs")&&(this.folderId=0,this.offsetIndex=0);for(let e in this.tempIds)++this.tempIds[e];this.list=Do.createChatList(),this.promise=null,this.loadedWhat={},this.query=e,this.renderedPeerIds.clear(),this.needSwitchList=!0,this.getMoreResults()}},this.checkForTriggers=()=>{this.scrollable.checkForTriggers()},Object(L.g)(this,e),this.container.classList.add("selector");const t=(this.renderResultsFunc||this.renderResults).bind(this);if(this.renderResultsFunc=e=>(this.needSwitchList&&(this.scrollable.splitUp.replaceWith(this.list),this.scrollable.setVirtualContainer(this.list),this.needSwitchList=!1),e=e.filter(e=>{const t=!this.renderedPeerIds.has(e);return t&&this.renderedPeerIds.add(e),t}),t(e)),this.input=document.createElement("input"),this.input.classList.add("selector-search-input"),this.placeholder?Object(A._i18n)(this.input,this.placeholder,void 0,"placeholder"):Object(A._i18n)(this.input,"SendMessageTo",void 0,"placeholder"),this.input.type="text",this.multiSelect){let e=document.createElement("div");e.classList.add("selector-search-container"),this.selectedContainer=document.createElement("div"),this.selectedContainer.classList.add("selector-search"),this.selectedContainer.append(this.input),e.append(this.selectedContainer),this.selectedScrollable=new P.b(e);let t=document.createElement("hr");this.selectedContainer.addEventListener("click",e=>{if(this.freezed)return;let t=e.target;if(t=Object(Ce.a)(t,"selector-user"),!t)return;const s=t.dataset.key,i=this.chatsContainer.querySelector('[data-peer-id="'+s+'"]');i?i.click():this.remove(+s||s)}),this.container.append(e,t)}this.chatsContainer.classList.add("chatlist-container"),this.chatsContainer.append(this.list),this.scrollable=new P.b(this.chatsContainer),this.scrollable.setVirtualContainer(this.list),this.chatsContainer.addEventListener("click",e=>{const t=Object(vt.a)(e.target,"data-peer-id");if(Object(c.a)(e),!t)return;if(this.freezed)return;let s=t.dataset.peerId;if(s=+s||s,!this.multiSelect)return void this.add(s);this.selected.has(s)?this.remove(s):this.add(s);const i=t.querySelector("input");i.checked=!i.checked});const s=ot(this.onInput,200,!1,!0);this.input.addEventListener("input",s),this.scrollable.onScrolledBottom=()=>{this.getMoreResults()},this.container.append(this.chatsContainer),this.appendTo.append(this.container),setTimeout(()=>{let t=this.getMoreResults();e.onFirstRender&&t.then(()=>{e.onFirstRender()})},0)}renderSaved(){this.offsetIndex||0!==this.folderId||!this.peerType.includes("dialogs")||this.query&&!T.a.testSelfSearch(this.query)||this.renderResultsFunc([a.default.myId])}getTempId(e){return void 0===this.tempIds[e]&&(this.tempIds[e]=0),++this.tempIds[e]}getMoreDialogs(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(this.loadedWhat.dialogs&&this.loadedWhat.archived)return;const e=yt.a.windowH/72*1.25|0,t=this.getTempId("dialogs"),s=i.a.getConversations(this.query,this.offsetIndex,e,this.folderId,!0).promise;this.promise=s;const n=yield s;if(this.tempIds.dialogs!==t)return;this.promise=null;let o=n.dialogs;if(o.length){const e=o[o.length-1].index||0;o=o.slice(),o.findAndSplice(e=>e.peerId===a.default.myId),this.chatRightsAction&&(o=o.filter(e=>this.filterByRights(e.peerId))),this.renderSaved(),this.offsetIndex=e,this.renderResultsFunc(o.map(e=>e.peerId))}if(n.isEnd){if(!this.loadedWhat.dialogs)return this.renderSaved(),this.loadedWhat.dialogs=!0,this.offsetIndex=0,this.folderId=1,this.getMoreDialogs();if(this.loadedWhat.archived=!0,!this.loadedWhat.contacts&&this.peerType.includes("contacts"))return this.getMoreContacts()}}))}filterByRights(e){return e>0&&("send_messages"!==this.chatRightsAction||T.a.canSendToUser(e))||G.a.hasRights(-e,this.chatRightsAction)}getMoreContacts(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(!this.loadedWhat.contacts){if(!this.cachedContacts){const e=this.getTempId("contacts"),t=Promise.all([T.a.getContacts(this.query),this.query?T.a.searchContacts(this.query):void 0]);this.promise=t;const[s,i]=yield t;if(this.tempIds.contacts!==e)return;if(i){let e=i.my_results.concat(i.results);this.chatRightsAction&&(e=e.filter(e=>this.filterByRights(e))),this.peerType.includes("dialogs")||(e=e.filter(e=>e>0)),this.cachedContacts=Object(y.b)(s.concat(e))}else this.cachedContacts=s.slice();this.cachedContacts.findAndSplice(e=>e===a.default.myId),this.promise=null}if(this.cachedContacts.length){const e=yt.a.windowH/72*1.25|0,t=this.cachedContacts.splice(0,e);this.renderResultsFunc(t)}this.cachedContacts.length||(this.loadedWhat.contacts=!0)}}))}getMoreChannelParticipants(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(this.loadedWhat.channelParticipants)return;const e=this.getTempId("channelParticipants"),t=n.default.getChannelParticipants(-this.peerId,{_:"channelParticipantsSearch",q:this.query},50,this.list.childElementCount),s=yield t;if(this.tempIds.channelParticipants!==e)return;const i=s.participants.map(e=>G.a.getParticipantPeerId(e));i.findAndSplice(e=>e===a.default.myId),this.renderResultsFunc(i),(this.list.childElementCount>=s.count||s.participants.length<50)&&(this.loadedWhat.channelParticipants=!0)}))}getMoreResults(){const e=(()=>{const e=[];return!St&&this.peerType.includes("dialogs")&&(Lt||(Lt=i.a.getConversationsAll().then(()=>{St=!0}).finally(()=>{Lt=null})),e.push(Lt)),!this.peerType.includes("dialogs")||this.loadedWhat.archived||(e.push(this.getMoreDialogs()),this.loadedWhat.archived)?(this.peerType.includes("contacts")&&!this.loadedWhat.contacts&&e.push(this.getMoreContacts()),this.peerType.includes("channelParticipants")&&!this.loadedWhat.channelParticipants&&e.push(this.getMoreChannelParticipants()),e):e})(),t=Promise.all(e);return e.length&&t.then(this.checkForTriggers),t}renderResults(e){!this.peerType.includes("dialogs")&&this.loadedWhat.contacts&&(e=e.filter(e=>T.a.isNonContactUser(e))),e.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e,container:this.scrollable,drawStatus:!1,rippleEnabled:this.rippleEnabled,avatarSize:this.avatarSize});if(this.multiSelect){const s=this.selected.has(e),i=new dt.a;s&&(i.input.checked=!0),t.containerEl.prepend(i.label)}let s;s=e<0?n.default.getChatMembersString(-e):e===a.default.myId?Object(A.i18n)(this.selfPresence):T.a.getUserStatusString(e),t.lastMessageSpan.append(s)})}add(e,t,s=!0){if(this.selected.add(e),!this.multiSelect)return void this.onChange(this.selected.size);this.query.trim()&&(this.input.value="",this.onInput());const i=document.createElement("div");i.classList.add("selector-user","scale-in");const n=document.createElement("avatar-element");return n.classList.add("selector-user-avatar","tgico"),n.setAttribute("dialog","1"),n.classList.add("avatar-32"),i.dataset.key=""+e,"number"==typeof e&&(void 0===t&&(t=new ft.a({peerId:e,dialog:!0}).element),n.setAttribute("peer",""+e)),t&&("string"==typeof t?i.innerHTML=t:(Object(x.a)(i,t),i.append(t))),i.insertAdjacentElement("afterbegin",n),this.selectedContainer.insertBefore(i,this.input),this.onChange&&this.onChange(this.selected.size),s&&this.selectedScrollable.scrollIntoViewNew(this.input,"center"),i}remove(e){if(!this.multiSelect)return;const t=this.selectedContainer.querySelector(`[data-key="${e}"]`);t.classList.remove("scale-in"),t.offsetWidth,t.classList.add("scale-out");const s=()=>{this.selected.delete(e),t.remove(),this.onChange&&this.onChange(this.selected.size)};a.default.settings.animationsEnabled?t.addEventListener("animationend",s,{once:!0}):s()}getSelected(){return[...this.selected]}addInitial(e){e.forEach(e=>{this.add(e,void 0,!1)}),window.requestAnimationFrame(()=>{this.selectedScrollable.scrollIntoViewNew(this.input,"center",void 0,void 0,bt.a.Static)})}}var Mt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class It extends ct.b{constructor(e){super("popup-forward",null,{closable:!0,overlayClosable:!0,body:!0}),e.onClose&&(this.onClose=e.onClose),this.selector=new Et({appendTo:this.body,onChange:()=>Mt(this,void 0,void 0,(function*(){const t=this.selector.getSelected(),s=t[t.length-1];if(e.onSelect){const t=e.onSelect(s);if(t instanceof Promise)try{yield t}catch(e){return}}this.selector=null,this.hide()})),peerType:e.peerTypes,onFirstRender:()=>{this.show(),this.selector.checkForTriggers(),pe.IS_TOUCH_SUPPORTED||this.selector.input.focus()},chatRightsAction:e.chatRightsAction,multiSelect:!1,rippleEnabled:!1,avatarSize:46,peerId:e.peerId,placeholder:e.placeholder,selfPresence:e.selfPresence}),this.title.append(this.selector.input)}}class Ct extends W{init(){let e;this.container.classList.add("edit-peer-container","user-permissions-container"),this.setTitle("UserRestrictions");{const t=new nn({name:"UserRestrictionsCanDo"}),s=document.createElement("div");s.classList.add("chatlist-container"),t.content.insertBefore(s,t.title);const i=Do.createChatList({new:!0});s.append(i);const{dom:n}=Do.addDialogNew({dialog:this.userId,container:i,drawStatus:!1,rippleEnabled:!0,avatarSize:48});n.lastMessageSpan.append(T.a.getUserStatusString(this.userId));const a=new Tt({chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:t.content,participant:"channelParticipantBanned"===this.participant._?this.participant:void 0});e=()=>{const e=a.takeOut();"channelParticipantBanned"===this.participant._&&Object(L.b)(this.participant.banned_rights.pFlags,e.pFlags)||G.a.editBanned(this.chatId,this.participant,e)},this.eventListener.addEventListener("destroy",e,{once:!0}),this.scrollable.append(t.container)}{const t=new nn({});if("channelParticipantBanned"===this.participant._){const s=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"GroupPermission.Delete"});Object(l.b)(s,()=>{const t=Object(ut.a)([s],!0);G.a.clearChannelParticipantBannedRights(this.chatId,this.participant).then(()=>{this.eventListener.removeEventListener("destroy",e),this.close()},()=>{t()})},{listenerSetter:this.listenerSetter}),t.content.append(s)}const s=Object(U.a)("btn-primary btn-transparent danger",{icon:"deleteuser",text:"UserRestrictionsBlock"});Object(l.b)(s,()=>{Object(ut.a)([s],!0);G.a.kickFromChannel(this.chatId,this.participant).then(()=>{this.eventListener.removeEventListener("destroy",e),this.close()})},{listenerSetter:this.listenerSetter}),t.content.append(s),this.scrollable.append(t.container)}}}var kt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Tt{constructor(e){this.v=[{flags:["send_messages"],text:"UserRestrictionsSend",exceptionText:"UserRestrictionsNoSend"},{flags:["send_media"],text:"UserRestrictionsSendMedia",exceptionText:"UserRestrictionsNoSendMedia"},{flags:["send_stickers","send_gifs"],text:"UserRestrictionsSendStickers",exceptionText:"UserRestrictionsNoSendStickers"},{flags:["send_polls"],text:"UserRestrictionsSendPolls",exceptionText:"UserRestrictionsNoSendPolls"},{flags:["embed_links"],text:"UserRestrictionsEmbedLinks",exceptionText:"UserRestrictionsNoEmbedLinks"},{flags:["invite_users"],text:"UserRestrictionsInviteUsers",exceptionText:"UserRestrictionsNoInviteUsers"},{flags:["pin_messages"],text:"UserRestrictionsPinMessages",exceptionText:"UserRestrictionsNoPinMessages"},{flags:["change_info"],text:"UserRestrictionsChangeInfo",exceptionText:"UserRestrictionsNoChangeInfo"}],this.toggleWith={send_messages:["send_media","send_stickers","send_polls","embed_links"]};const t=G.a.getChat(e.chatId).default_banned_rights,s=e.participant?G.a.combineParticipantBannedRights(e.chatId,e.participant.banned_rights):t;for(const i of this.v){const n=i.flags[0];i.checkboxField=new dt.a({text:i.text,checked:G.a.hasRights(e.chatId,n,s),restriction:!0,withRipple:!0}),e.participant&&t.pFlags[n]&&(i.checkboxField.input.disabled=!0,Object(l.b)(i.checkboxField.label,e=>{nt(A.default.format("UserRestrictionsDisabled",!0))},{listenerSetter:e.listenerSetter})),this.toggleWith[n]&&e.listenerSetter.add(i.checkboxField.input)("change",()=>{if(!i.checkboxField.checked){this.v.filter(e=>this.toggleWith[n].includes(e.flags[0])).forEach(e=>{e.checkboxField.checked=!1})}}),e.appendTo.append(i.checkboxField.label)}}takeOut(){const e={_:"chatBannedRights",until_date:2147483647,pFlags:{}};for(const t of this.v){!t.checkboxField.checked&&t.flags.forEach(t=>{e.pFlags[t]=!0})}return e}}class Pt extends W{init(){return kt(this,void 0,void 0,(function*(){let e;this.container.classList.add("edit-peer-container","group-permissions-container"),this.setTitle("ChannelPermissions");{const t=new nn({name:"ChannelPermissionsHeader"});e=new Tt({chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:t.content}),this.eventListener.addEventListener("destroy",()=>{G.a.editChatDefaultBannedRights(this.chatId,e.takeOut())},{once:!0}),this.scrollable.append(t.container)}{const t=new nn({name:"PrivacyExceptions"}),s=new Je({titleLangKey:"ChannelAddException",subtitleLangKey:"Loading",icon:"adduser",clickable:()=>{new It({peerTypes:["channelParticipants"],onSelect:e=>{setTimeout(()=>{i(e)},0)},placeholder:"ExceptionModal.Search.Placeholder",peerId:-this.chatId})}}),i=e=>kt(this,void 0,void 0,(function*(){let t;try{t=yield n.default.getChannelParticipant(this.chatId,e)}catch(e){return void nt("User is no longer participant")}const s=new Ct(this.slider);s.participant=t,s.chatId=this.chatId,s.userId=e,s.open()}));t.content.append(s.container);const r=t.generateContentElement();r.classList.add("chatlist-container");const c=Do.createChatList({new:!0});r.append(c),Object(l.b)(c,e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=+t.dataset.peerId;i(s)},{listenerSetter:this.listenerSetter});const d=(t,s)=>{const i=s.banned_rights,n=G.a.getChat(this.chatId).default_banned_rights,a=[];e.v.forEach(e=>{const t=e.flags[0];i.pFlags[t]&&!n.pFlags[t]&&a.push(e.exceptionText)});const o=t.querySelector(".user-last-message");a.length&&(o.innerHTML="",o.append(...Object(A.join)(a.map(e=>Object(A.i18n)(e)),!1))),o.classList.toggle("hide",!a.length)},h=(e,t)=>{const{dom:s}=Do.addDialogNew({dialog:o.a.getPeerId(e.peer),container:c,drawStatus:!1,rippleEnabled:!0,avatarSize:48,append:t});d(s.listEl,e)};this.listenerSetter.add(a.default)("updateChannelParticipant",e=>{var t,s,i;const n="channelParticipantBanned"===(null===(t=e.new_participant)||void 0===t?void 0:t._)&&!e.new_participant.banned_rights.pFlags.view_messages,a=c.querySelector(`[data-peer-id="${e.user_id}"]`);n?(a?d(a,e.new_participant):h(e.new_participant,!1),"channelParticipantBanned"!==(null===(s=e.prev_participant)||void 0===s?void 0:s._)&&++m):(a&&a.remove(),"channelParticipantBanned"===(null===(i=e.prev_participant)||void 0===i?void 0:i._)&&--m),u()});const u=()=>{Object(x.a)(s.subtitle,Object(A.i18n)(m?"Permissions.ExceptionsCount":"Permissions.NoExceptions",[m]))};let p,m=0;const g=()=>(p=new gt({scrollable:this.scrollable,getPromise:()=>n.default.getChannelParticipants(this.chatId,{_:"channelParticipantsBanned",q:""},50,c.childElementCount).then(e=>{for(const t of e.participants)h(t,!0);return m=e.count,u(),e.participants.length<50||e.count===c.childElementCount})}),p.load());this.scrollable.append(t.container),G.a.isChannel(this.chatId)?yield g():(u(),this.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{this.chatId===e&&(this.chatId=t,g())}))}}))}onOpenAfterTimeout(){this.scrollable.onScroll()}}class xt{constructor(e,t=o.a.getDialogType(e),s){const n=new ft.a({peerId:e}).element,a=(t,n=u&&!!t.size)=>{let a=G.a.leave(-e);n&&(a=a.finally(()=>i.a.flushHistory(e))),s&&s(a)},r=t=>{let n;if(e>0)n=i.a.flushHistory(e,!1,u?!!t.size:void 0);else{if(!t.size)return a(t);n=G.a.delete(-e)}s&&s(n)};let l,c,d,h,u;switch(t){case"channel":G.a.hasRights(-e,"delete_chat")?(G.a.deleteChannel,l="ChannelDeleteMenu",c="AreYouSureDeleteAndExitChannel",h=[{langKey:"ChannelDeleteMenu",isDanger:!0,callback:r}],u=[{text:"DeleteChannelForAll"}]):(l="LeaveChannelMenu",c="ChannelLeaveAlertWithName",d=[n],h=[{langKey:"LeaveChannel",isDanger:!0,callback:a}]);break;case"chat":l="DeleteChatUser",c="AreYouSureDeleteThisChatWithUser",d=[n],h=[{langKey:"DeleteChatUser",isDanger:!0,callback:r}],u=[{text:"DeleteMessagesOptionAlso",textArgs:[new ft.a({peerId:e}).element]}];break;case"saved":l="DeleteChatUser",c="AreYouSureDeleteThisChatSavedMessages",h=[{langKey:"DeleteChatUser",isDanger:!0,callback:r}];break;case"megagroup":case"group":G.a.hasRights(-e,"delete_chat")?(l="DeleteMegaMenu",c="AreYouSureDeleteAndExit",h=[{langKey:"DeleteMegaMenu",isDanger:!0,callback:r}],u=[{text:"DeleteChat.DeleteGroupForAll"}]):(l="LeaveMegaMenu",c="AreYouSureDeleteAndExitName",d=[n],h=[{langKey:"DeleteChatUser",isDanger:!0,callback:e=>a(e,!0)}])}new ht("popup-delete-chat",{peerId:e,titleLangKey:l,descriptionLangKey:c,descriptionLangArgs:d,buttons:h,checkboxes:u}).show()}}var At=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ot extends V{_init(){return At(this,void 0,void 0,(function*(){this.listenerSetter.removeAll(),this.scrollable.container.innerHTML="",this.container.classList.add("edit-peer-container","edit-group-container"),this.setTitle("Edit");const e=yield n.default.getChatFull(this.chatId,!0),t=G.a.getChat(this.chatId),s=G.a.isBroadcast(this.chatId),i=G.a.isChannel(this.chatId),o=[],r=e=>{o.push(e)};this.listenerSetter.add(a.default)("chat_update",e=>{this.chatId===e&&o.forEach(e=>e())});{const i=new nn({noDelimiter:!0}),n=[],o=document.createElement("div");if(o.classList.add("input-wrapper"),this.chatNameInputField=new F.b({label:s?"EnterChannelName":"CreateGroup.NameHolder",name:"chat-name",maxLength:255,required:!0}),this.descriptionInputField=new F.b({label:"DescriptionPlaceholder",name:"chat-description",maxLength:255}),this.chatNameInputField.setOriginalValue(t.title),this.descriptionInputField.setOriginalValue(e.about),o.append(this.chatNameInputField.container,this.descriptionInputField.container),n.push(this.chatNameInputField,this.descriptionInputField),this.editPeer=new Xe({peerId:-this.chatId,inputFields:n,listenerSetter:this.listenerSetter}),this.content.append(this.editPeer.nextBtn),i.content.append(this.editPeer.avatarEdit.container,o),G.a.hasRights(this.chatId,"change_type")){const n=new Je({titleLangKey:s?"ChannelType":"GroupType",clickable:()=>{const t=new pt(this.slider);t.chatId=this.chatId,t.chatFull=e,t.open(),this.listenerSetter.add(t.eventListener)("destroy",a)},icon:"lock"}),a=()=>{let e;n.subtitle.textContent="",e=s?t.username?"TypePublic":"TypePrivate":t.username?"TypePublicGroup":"TypePrivateGroup",n.subtitle.append(Object(A.i18n)(e))};a(),i.content.append(n.container)}if(G.a.hasRights(this.chatId,"change_permissions")&&!s){const e=["send_messages","send_media","send_stickers","send_polls","embed_links","invite_users","pin_messages","change_info"],s=new Je({titleLangKey:"ChannelPermissions",clickable:()=>{const e=new Pt(this.slider);e.chatId=this.chatId,e.open()},icon:"permissions"}),n=()=>{s.subtitle.innerHTML=e.reduce((e,s)=>e+ +G.a.hasRights(this.chatId,s,t.default_banned_rights),0)+"/"+e.length};n(),i.content.append(s.container),this.listenerSetter.add(a.default)("chat_update",e=>{this.chatId===e&&n()})}if(this.scrollable.append(i.container),Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0;let e=[];const t=this.chatId;this.chatNameInputField.isValid()&&e.push(G.a.editTitle(t,this.chatNameInputField.value)),this.descriptionInputField.isValid()&&e.push(G.a.editAbout(t,this.descriptionInputField.value)),this.editPeer.uploadAvatar&&e.push(this.editPeer.uploadAvatar().then(e=>G.a.editPhoto(t,e))),Promise.race(e).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled"),this.close()})},{listenerSetter:this.listenerSetter}),s&&G.a.hasRights(this.chatId,"change_info")){const e=new dt.a({text:"PeerInfo.SignMessages",checked:!!t.pFlags.signatures,withRipple:!0});this.listenerSetter.add(e.input)("change",()=>{const t=e.toggleDisability(!0);G.a.toggleSignatures(this.chatId,e.checked).then(()=>{t()})}),r(()=>{e.setValueSilently(!!t.pFlags.signatures)}),i.content.append(e.label)}}if(!s){const t=new nn({});if(!s&&G.a.hasRights(this.chatId,"change_permissions")){const s=new dt.a({text:"ChatHistory",withRipple:!0});this.listenerSetter.add(s.input)("change",()=>{const e=s.toggleDisability(!0);G.a.togglePreHistoryHidden(this.chatId,!s.checked).then(()=>{e()})});const n=()=>{s.setValueSilently(i&&!e.pFlags.hidden_prehistory)};n(),r(n),t.content.append(s.label)}this.scrollable.append(t.container)}if(G.a.hasRights(this.chatId,"delete_chat")){const e=new nn({}),t=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:s?"PeerInfo.DeleteChannel":"DeleteAndExitButton"});Object(l.b)(t,()=>{new xt(-this.chatId,void 0,e=>{const s=Object(ut.a)([t],!0);e.then(()=>{this.close()},()=>{s()})})},{listenerSetter:this.listenerSetter}),e.content.append(t),this.scrollable.append(e.container)}i||this.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{-this.chatId===e&&(this.chatId=-t,this._init())})}))}init(){return this._init()}}var _t=s(91);class Ft extends V{init(){this.container.classList.add("edit-peer-container","edit-contact-container");const e=!T.a.isContact(this.peerId);this.setTitle(e?"AddContactTitle":"Edit");{const t=new nn({noDelimiter:!0}),s=[],n=document.createElement("div");if(n.classList.add("input-wrapper"),this.nameInputField=new F.b({label:"FirstName",name:"contact-name",maxLength:70,required:!0}),this.lastNameInputField=new F.b({label:"LastName",name:"contact-lastname",maxLength:70}),this.peerId){const t=T.a.getUser(this.peerId);e?(this.nameInputField.setDraftValue(t.first_name),this.lastNameInputField.setDraftValue(t.last_name)):(this.nameInputField.setOriginalValue(t.first_name),this.lastNameInputField.setOriginalValue(t.last_name))}if(n.append(this.nameInputField.container,this.lastNameInputField.container),s.push(this.nameInputField,this.lastNameInputField),this.editPeer=new Xe({peerId:this.peerId,inputFields:s,listenerSetter:this.listenerSetter,doNotEditAvatar:!0}),this.content.append(this.editPeer.nextBtn),this.peerId){const s=document.createElement("div");s.classList.add("avatar-edit"),s.append(this.editPeer.avatarElem);const r=new dt.a({text:"Notifications"});r.input.addEventListener("change",e=>{e.isTrusted&&i.a.mutePeer(this.peerId)}),this.listenerSetter.add(a.default)("notify_settings",e=>{if("notifyPeer"!==e.peer._)return;const t=o.a.getPeerId(e.peer.peer);if(this.peerId===t){const t=!_t.a.isMuted(e.notify_settings);t!==r.checked&&(r.checked=t)}});const l=document.createElement("div");l.classList.add("profile-name"),l.append(new ft.a({peerId:this.peerId}).element);const c=document.createElement("div");if(c.classList.add("profile-subtitle"),c.append(Object(A.i18n)("EditContact.OriginalName")),t.content.append(s,l,c,n),e){const e=T.a.getUser(this.peerId),s=new Je({icon:"phone",titleLangKey:e.phone?void 0:"MobileHidden",title:e.phone?T.a.formatUserPhone(e.phone):void 0,subtitleLangKey:e.phone?"Phone":"MobileHiddenExceptionInfo",subtitleLangArgs:e.phone?void 0:[new ft.a({peerId:this.peerId}).element]});t.content.append(s.container)}else{const e=new Je({checkboxField:r}),s=!_t.a.isPeerLocalMuted(this.peerId,!1);r.checked=s,t.content.append(e.container)}}else t.content.append(n);this.scrollable.append(t.container),Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0,T.a.addContact(this.peerId,this.nameInputField.value,this.lastNameInputField.value,T.a.getUser(this.peerId).phone).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled"),this.close()})},{listenerSetter:this.listenerSetter})}if(!e){const e=new nn({}),t=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"PeerInfo.DeleteContact"});Object(l.b)(t,()=>{new ht("popup-delete-contact",{peerId:this.peerId,titleLangKey:"DeleteContact",descriptionLangKey:"AreYouSureDeleteContact",buttons:Object(ct.a)([{langKey:"Delete",callback:()=>{const e=Object(ut.a)([t],!0);T.a.deleteContacts([this.peerId]).then(()=>{this.close()},()=>{e()})},isDanger:!0}])}).show()},{listenerSetter:this.listenerSetter}),e.content.append(t),this.scrollable.append(e.container)}}}class jt extends V{init(){this.nextBtn=$({icon:"arrow_next"}),this.content.append(this.nextBtn),this.scrollable.container.remove(),this.nextBtn.addEventListener("click",()=>{const e=this.selector.getSelected();if(this.skippable)this.takeOut(e),this.close();else{const t=this.takeOut(e);t instanceof Promise?this.attachToPromise(t):void 0===t&&this.close()}})}attachToPromise(e){const t=Object(se.g)(this.nextBtn,"arrow_next");e.then(()=>{this.close()},()=>{t()})}open(e){const t=super.open();return this.setTitle(e.title),this.peerType=e.type,this.takeOut=e.takeOut,this.skippable=e.skippable,this.selector=new Et({appendTo:this.content,onChange:this.skippable?null:e=>{this.nextBtn.classList.toggle("is-visible",!!e)},peerType:["contacts"],placeholder:e.placeholder}),e.selectedPeerIds&&this.selector.addInitial(e.selectedPeerIds),this.nextBtn.classList.add("tgico-arrow_next"),this.nextBtn.innerHTML="",this.nextBtn.disabled=!1,this.nextBtn.classList.toggle("is-visible",this.skippable),t}}var Dt=!h.IS_FIREFOX&&!1;function Bt(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttributeNS(null,"viewBox","0 0 24 24"),e.setAttributeNS(null,"width","24"),e.setAttributeNS(null,"height","24"),e.classList.add("verified-icon");const t=document.createElementNS("http://www.w3.org/2000/svg","use");t.setAttributeNS(null,"href","#verified-background"),t.classList.add("verified-background");const s=document.createElementNS("http://www.w3.org/2000/svg","use");return s.setAttributeNS(null,"href","#verified-check"),s.classList.add("verified-check"),e.append(t,s),e}var Rt=s(86);const Ht=e=>e.touches?e.touches[0]:e,Ut=window;let Nt=!1;a.default.addEventListener("context_menu_toggle",e=>{Nt=e});class zt{constructor(e){this.cursor="grabbing",this.cancelEvent=!0,this.hadMove=!1,this.xDown=null,this.yDown=null,this.reset=e=>{pe.IS_TOUCH_SUPPORTED?Ut.removeEventListener("touchmove",this.handleMove,{capture:!0}):(Ut.removeEventListener("mousemove",this.handleMove),this.element.style.cursor=""),this.onReset&&this.hadMove&&this.onReset(),this.xDown=this.yDown=null,this.hadMove=!1},this.handleStart=e=>{const t=Ht(e);if(this.verifyTouchTarget&&!this.verifyTouchTarget(e))return this.reset();this.xDown=t.clientX,this.yDown=t.clientY,pe.IS_TOUCH_SUPPORTED?Ut.addEventListener("touchmove",this.handleMove,{passive:!1,capture:!0}):Ut.addEventListener("mousemove",this.handleMove,!1)},this.handleMove=e=>{if(null===this.xDown||null===this.yDown||Nt)return void this.reset();this.cancelEvent&&Object(c.a)(e);const t=Ht(e),s=t.clientX,i=t.clientY,n=this.xDown-s,a=this.yDown-i;if(!this.hadMove){if(!n&&!a)return;this.hadMove=!0,pe.IS_TOUCH_SUPPORTED||this.element.style.setProperty("cursor",this.cursor,"important"),this.onFirstSwipe&&this.onFirstSwipe()}const o=this.onSwipe(n,a,e);void 0!==o&&o&&this.reset()},Object(L.g)(this,e),this.setListeners()}setListeners(){pe.IS_TOUCH_SUPPORTED?(this.element.addEventListener("touchstart",this.handleStart,!1),Ut.addEventListener("touchend",this.reset)):(this.element.addEventListener("mousedown",this.handleStart,!1),Ut.addEventListener("mouseup",this.reset))}removeListeners(){pe.IS_TOUCH_SUPPORTED?(this.element.removeEventListener("touchstart",this.handleStart,!1),Ut.removeEventListener("touchend",this.reset)):(this.element.removeEventListener("mousedown",this.handleStart,!1),Ut.removeEventListener("mouseup",this.reset))}}var Vt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Wt{constructor(e){this.scrollable=e,this.processItem=e=>{const t=document.createElement("div");let s;t.classList.add(Wt.BASE_CLASS+"-avatar"),e&&(s="string"==typeof e?r.a.getPhoto(e):e.action.photo);const i=new Image;if(i.classList.add(Wt.BASE_CLASS+"-avatar-image"),i.draggable=!1,s){const e=r.a.choosePhotoSize(s,420,420,!1);r.a.preloadPhoto(s,e).then(()=>{const n=he.a.getCacheContext(s,e.type);Object(Rt.a)(i,n.url,()=>{t.append(i)})})}else{const e=o.a.getPeerPhoto(this.peerId);d.a.putAvatar(t,this.peerId,e,"photo_big",i)}return this.avatars.append(t),this.addTab(),e},this.container=document.createElement("div"),this.container.classList.add(Wt.BASE_CLASS+"-container"),this.avatars=document.createElement("div"),this.avatars.classList.add(Wt.BASE_CLASS+"-avatars"),this.gradient=document.createElement("div"),this.gradient.classList.add(Wt.BASE_CLASS+"-gradient"),this.info=document.createElement("div"),this.info.classList.add(Wt.BASE_CLASS+"-info"),this.tabs=document.createElement("div"),this.tabs.classList.add(Wt.BASE_CLASS+"-tabs"),this.arrowPrevious=document.createElement("div"),this.arrowPrevious.classList.add(Wt.BASE_CLASS+"-arrow"),this.arrowNext=document.createElement("div"),this.arrowNext.classList.add(Wt.BASE_CLASS+"-arrow",Wt.BASE_CLASS+"-arrow-next"),this.container.append(this.avatars,this.gradient,this.info,this.tabs,this.arrowPrevious,this.arrowNext);const t=()=>0===this.scrollable.scrollTop||(this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild,"start"),!1);let s=!1,i=!1;Object(l.b)(this.container,e=>Vt(this,void 0,void 0,(function*(){if(i)return void Object(c.a)(e);if(s)return void(s=!1);if(!t())return;const n=this.container.getBoundingClientRect(),a=e.pageX,o=a-n.left;if(!this.listLoader.previous.length&&!this.listLoader.next.length||o>n.width*(1/3)&&o{t.push({element:this.avatars.children[s],item:e})});const s=t.slice(0,this.listLoader.previous.length),n=t.slice(this.listLoader.previous.length+1),a=this.avatars.children[this.listLoader.previous.length];i=!0,Mo(a,e,()=>e===this.peerId,this.listLoader.current,s,n),i=!1}else{const e=a>n.right-n.width/2;let t;this.avatars.classList.add("no-transition"),this.avatars.offsetLeft,t=0!==this.listLoader.index||e?this.listLoader.index===this.listLoader.count-1&&e?-(this.listLoader.count-1):e?1:-1:this.listLoader.count-1,this.listLoader.go(t),Object(_e.b)(()=>{this.avatars.classList.remove("no-transition")})}})));const n=()=>{s=!0,document.body.addEventListener(pe.IS_TOUCH_SUPPORTED?"touchend":"click",e=>{s=!1},{once:!0})};let a=0,h=0,u=0,p=0;new zt({element:this.avatars,onSwipe:(e,t)=>{u=e;let s=h+e*-Wt.SCALE;return s>0?s=0:st()?!this.container.classList.contains("is-single")&&!i:(n(),Object(c.a)(e),!1),onFirstSwipe:()=>{const e=this.avatars.getBoundingClientRect();a=e.width,p=-a*(this.tabs.childElementCount-1),h=e.left-this.container.getBoundingClientRect().left,this.avatars.style.transform=Wt.TRANSLATE_TEMPLATE.replace("{x}",h+"px"),this.container.classList.add("is-swiping"),this.avatars.classList.add("no-transition"),this.avatars.offsetLeft},onReset:()=>{const e=Math.ceil(Math.abs(u)/(a/Wt.SCALE))*(u>=0?1:-1);n(),this.avatars.classList.remove("no-transition"),Object(_e.b)(()=>{this.listLoader.go(e),this.container.classList.remove("is-swiping")})}})}setPeer(e){this.peerId=e;const t=o.a.getPeerPhoto(e);if(!t)return;const s=this.listLoader=new S({loadCount:50,loadMore:(t,a,o)=>{if(!a)return Promise.resolve({count:void 0,items:[]});if(e>0){const i=t||s.current;return r.a.getUserPhotos(e,i,o).then(e=>({count:e.count,items:e.photos}))}{const t=[];return s.current||t.push(n.default.getChatFull(-e)),t.push(i.a.getSearch({peerId:e,maxId:Number.MAX_SAFE_INTEGER,inputFilter:{_:"inputMessagesFilterChatPhotos"},limit:o,backLimit:0})),Promise.all(t).then(e=>{const t=e.pop();if(w(t),!s.current){const n=e[0],a=t.history.findAndSplice(e=>e.action.photo.id===n.chat_photo.id);s.current=a||i.a.generateFakeAvatarMessage(this.peerId,n.chat_photo)}return{count:t.count,items:t.history}})}},processItem:this.processItem,onJump:(e,t)=>{const s=this.listLoader.index,i=100*Wt.SCALE*s;this.avatars.style.transform=Wt.TRANSLATE_TEMPLATE.replace("{x}",`-${i}%`);const n=this.tabs.querySelector(".active");n&&n.classList.remove("active");this.tabs.children[s].classList.add("active")}});"userProfilePhoto"===t._&&(s.current=t.photo_id),this.processItem(s.current),s.load(!0)}addTab(){const e=document.createElement("div");e.classList.add(Wt.BASE_CLASS+"-tab"),this.tabs.append(e),1===this.tabs.childElementCount&&e.classList.add("active"),this.container.classList.toggle("is-single",this.tabs.childElementCount<=1)}}Wt.BASE_CLASS="profile-avatars",Wt.SCALE=Dt?2:1,Wt.TRANSLATE_TEMPLATE=Dt?`translate3d({x}, 0, -1px) scale(${Wt.SCALE})`:"translate({x}, 0)";let Kt=(e,t)=>{t.title.innerHTML=e,t.container.style.display=""};class Gt{constructor(e){this.scrollable=e,this.peerId=0,this.setPeerStatus=(e=!1)=>{if(!this.peerId)return;const t=this.peerId;mo.setPeerStatus(this.peerId,this.subtitle,e,!0,()=>t===this.peerId)},Dt||this.scrollable.container.classList.add("no-parallax")}init(){this.init=null,this.element=document.createElement("div"),this.element.classList.add("profile-content"),this.section=new nn({noDelimiter:!0}),this.avatar=new ko,this.avatar.classList.add("profile-avatar","avatar-120"),this.avatar.setAttribute("dialog","1"),this.avatar.setAttribute("clickable",""),this.name=document.createElement("div"),this.name.classList.add("profile-name"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("profile-subtitle"),this.bio=new Je({title:" ",subtitleLangKey:"UserBio",icon:"info",clickable:e=>{"A"!==e.target.tagName&&n.default.getProfileByPeerId(this.peerId).then(e=>{et(e.about),nt(A.default.format("BioCopied",!0))})}}),this.bio.title.classList.add("pre-wrap"),this.username=new Je({title:" ",subtitleLangKey:"Username",icon:"username",clickable:()=>{et("@"+o.a.getPeer(this.peerId).username),nt(A.default.format("UsernameCopied",!0))}}),this.phone=new Je({title:" ",subtitleLangKey:"Phone",icon:"phone",clickable:()=>{et("+"+T.a.getUser(this.peerId).phone),nt(A.default.format("PhoneCopied",!0))}}),this.notifications=new Je({checkboxField:new dt.a({toggle:!0}),titleLangKey:"Notifications",icon:"unmute"}),this.section.content.append(this.phone.container,this.username.container,this.bio.container,this.notifications.container),this.element.append(this.section.container,on()),this.notifications.checkboxField.input.addEventListener("change",e=>{e.isTrusted&&i.a.mutePeer(this.peerId)}),a.default.addEventListener("dialog_notify_settings",e=>{if(this.peerId===e.peerId){const e=_t.a.isPeerLocalMuted(this.peerId,!1);this.notifications.checkboxField.checked=!e}}),a.default.addEventListener("peer_typings",({peerId:e})=>{this.peerId===e&&this.setPeerStatus()}),a.default.addEventListener("peer_bio_edit",e=>{e===this.peerId&&this.setBio(!0)}),a.default.addEventListener("user_update",e=>{this.peerId===e&&this.setPeerStatus()}),a.default.addEventListener("contacts_update",e=>{if(this.peerId===e){const t=T.a.getUser(e);t.pFlags.self||(t.phone?Kt(T.a.formatUserPhone(t.phone),this.phone):this.phone.container.style.display="none")}}),this.setPeerStatusInterval=window.setInterval(this.setPeerStatus,6e4)}cleanupHTML(){this.bio.container.style.display="none",this.phone.container.style.display="none",this.username.container.style.display="none",this.notifications.container.style.display="",this.notifications.checkboxField.checked=!0,this.setBioTimeout&&(window.clearTimeout(this.setBioTimeout),this.setBioTimeout=0)}setAvatar(){if(this.peerId!==a.default.myId){if(o.a.getPeerPhoto(this.peerId)){const e=this.avatars;return this.avatars=new Wt(this.scrollable),this.avatars.setPeer(this.peerId),this.avatars.info.append(this.name,this.subtitle),this.avatar.remove(),e?e.container.replaceWith(this.avatars.container):this.element.prepend(this.avatars.container),void(Dt&&this.scrollable.container.classList.add("parallax"))}}Dt&&this.scrollable.container.classList.remove("parallax"),this.avatars&&(this.avatars.container.remove(),this.avatars=void 0),this.avatar.setAttribute("peer",""+this.peerId),this.section.content.prepend(this.avatar,this.name,this.subtitle)}fillProfileElements(){var e;if(!this.cleaned)return;this.cleaned=!1;const t=this.peerId;if(this.cleanupHTML(),this.setAvatar(),t!==a.default.myId){o.a.getPeerUsername(t)&&Kt(o.a.getPeerUsername(t),this.username);const e=_t.a.isPeerLocalMuted(t,!1);this.notifications.checkboxField.checked=!e}else Object(_e.b)(()=>{this.notifications.container.style.display="none"});if(t>0){let e=T.a.getUser(t);e.phone&&t!==a.default.myId&&Kt(T.a.formatUserPhone(e.phone),this.phone)}this.setBio(),Object(x.a)(this.name,new ft.a({peerId:t,dialog:!0}).element);const s=o.a.getPeer(t);(null===(e=null==s?void 0:s.pFlags)||void 0===e?void 0:e.verified)&&this.name.append(Bt()),this.setPeerStatus(!0)}setBio(e){this.setBioTimeout&&(window.clearTimeout(this.setBioTimeout),this.setBioTimeout=0);const t=this.peerId,s=this.threadId;if(!t)return;let i;i=t>0?n.default.getProfile(t,e).then(e=>this.peerId===t&&this.threadId===s&&(e.rAbout&&t!==a.default.myId&&Kt(e.rAbout,this.bio),!0)):n.default.getChatFull(-t,e).then(e=>this.peerId===t&&this.threadId===s&&(e.about&&Kt(Z.b.wrapRichText(e.about),this.bio),!0)),i.then(e=>{e&&(this.setBioTimeout=window.setTimeout(()=>this.setBio(!0),6e4))})}setPeer(e,t=0){this.peerId===e&&this.threadId===e||(this.init&&this.init(),this.peerId=e,this.threadId=t,this.cleaned=!0)}}class qt extends V{constructor(e){super(e,!1),this.peerId=0,this.threadId=0,this.historiesStorage={}}init(){this.container.classList.add("shared-media-container","profile-container");const e=Object(U.a)("btn-icon sidebar-close-button",{noRipple:!0});this.closeBtn.replaceWith(e),this.closeBtn=e;const t=document.createElement("div");t.classList.add("animated-close-icon"),e.append(t);const s=document.createElement("div");s.className="transition slide-fade";const i=document.createElement("div");i.classList.add("transition-item"),this.title.append(Object(A.i18n)("Profile")),this.editBtn=N("edit"),i.append(this.title,this.editBtn);const n=document.createElement("div");n.classList.add("transition-item");const o=this.title.cloneNode();o.append(Object(A.i18n)("PeerInfo.SharedMedia")),n.append(o),s.append(i,n),this.header.append(s),this.profile=new Gt(this.scrollable),this.profile.init(),this.scrollable.append(this.profile.element);this.scrollable.onAdditionalScroll=()=>{const e=this.searchSuper.nav.getBoundingClientRect();if(!e.width)return;const s=e.top-1<=56;t.classList.toggle("state-back",s),this.searchSuper.container.classList.toggle("is-full-viewport",s),r(+s),s||this.searchSuper.cleanScrollPositions()};const r=Object(D.a)(s,"slide-fade",400,null,!1);r(0),Object(l.b)(this.closeBtn,e=>{this.closeBtn.firstElementChild.classList.contains("state-back")?(this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild,"start"),r(0),t.classList.remove("state-back")):this.scrollable.isHeavyAnimationInProgress||this.slider.onCloseBtnClick()}),Object(l.b)(this.editBtn,e=>{let t;t=this.peerId<0?new Ot(this.slider):new Ft(this.slider),t&&(t instanceof Ot?t.chatId=-this.peerId:t.peerId=this.peerId,t.open())}),a.default.addEventListener("contacts_update",e=>{this.peerId===e&&this.toggleEditBtn()}),a.default.addEventListener("chat_update",e=>{this.peerId===-e&&this.toggleEditBtn()}),a.default.addEventListener("history_multiappend",e=>{for(const t in e)this.renderNewMessages(+t,Array.from(e[t]))}),a.default.addEventListener("history_delete",({peerId:e,msgs:t})=>{this.deleteDeletedMessages(e,Array.from(t))}),a.default.addEventListener("message_sent",({message:e})=>{this.renderNewMessages(e.peerId,[e.mid])}),this.searchSuper=new $s({mediaTabs:[{inputFilter:"inputMessagesFilterEmpty",name:"PeerMedia.Members",type:"members"},{inputFilter:"inputMessagesFilterPhotoVideo",name:"SharedMediaTab2",type:"media"},{inputFilter:"inputMessagesFilterDocument",name:"SharedFilesTab2",type:"files"},{inputFilter:"inputMessagesFilterUrl",name:"SharedLinksTab2",type:"links"},{inputFilter:"inputMessagesFilterMusic",name:"SharedMusicTab2",type:"music"},{inputFilter:"inputMessagesFilterRoundVoice",name:"SharedVoiceTab2",type:"voice"}],scrollable:this.scrollable,onChangeTab:e=>{let t="members"===e.type&&a.default.settings.animationsEnabled?250:0;setTimeout(()=>{c.classList.toggle("is-hidden","members"!==e.type)},t)}}),this.profile.element.append(this.searchSuper.container);const c=$({icon:"addmember_filled"});this.content.append(c),c.addEventListener("click",()=>{const e=-this.peerId,t=G.a.isChannel(e),s=(s,i)=>{let n,a,o,r,l;if(s.length>1)n="AddMembersAlertTitle",a=[Object(A.i18n)("Members",[s.length])],o="AddMembersAlertCountText",r=s.map(e=>{const t=document.createElement("b");return t.append(new ft.a({peerId:e}).element),t}),t||(l=[{text:"AddMembersForwardMessages",checked:!0}]);else{n="AddOneMemberAlertTitle",o="AddMembersAlertNamesText";const e=document.createElement("b");e.append(new ft.a({peerId:s[0]}).element),r=[e],t||(l=[{text:"AddOneMemberForwardMessages",textArgs:[new ft.a({peerId:s[0]}).element],checked:!0}])}r.push(new ft.a({peerId:-e}).element),new ht("popup-add-members",{peerId:-e,titleLangKey:n,descriptionLangKey:o,descriptionLangArgs:r,buttons:[{langKey:"Add",callback:i}],checkboxes:l}).show()},i=e=>{"USER_PRIVACY_RESTRICTED"===e.type&&at({langPackKey:"InviteToGroupError"})};if(t){const t=new jt(this.slider);t.open({peerId:this.peerId,type:"channel",skippable:!1,takeOut:n=>(s(n,()=>{const s=G.a.inviteToChannel(e,n);s.catch(i),t.attachToPromise(s)}),!1),title:"GroupAddMembers",placeholder:"SendMessageTo"})}else new It({peerTypes:["contacts"],placeholder:"Search",onSelect:t=>{setTimeout(()=>{s([t],s=>{G.a.addChatUser(e,t,s.size?void 0:0).catch(i)})},0)}})})}renderNewMessages(e,t){if(!this.init&&this.historiesStorage[e]){t=t.slice().reverse();for(const s of this.searchSuper.mediaTabs){const n=s.inputFilter,a=this.searchSuper.filterMessagesByType(t.map(t=>i.a.getMessageByPeer(e,t)),n);if(a.length){const t=this.historiesStorage[e][n];t&&t.unshift(...a.map(e=>({mid:e.mid,peerId:e.peerId}))),this.peerId===e&&-1!==this.searchSuper.usedFromHistory[n]&&(this.searchSuper.usedFromHistory[n]+=a.length,this.searchSuper.performSearchResult(a,s,!1))}}}}deleteDeletedMessages(e,t){if(!this.init&&this.historiesStorage[e]){for(const s of t)for(const t of this.searchSuper.mediaTabs){const i=t.inputFilter,n=this.historiesStorage[e][i];if(!n)continue;const a=n.findIndex(e=>e.mid===s);if(-1!==a){if(n.splice(a,1),this.peerId===e){const t=this.searchSuper.tabs[i].querySelector(`div[data-mid="${s}"][data-peer-id="${e}"]`);t&&(this.searchSuper.selection.isSelecting&&this.searchSuper.selection.toggleByElement(t),t.remove()),this.searchSuper.usedFromHistory[i]>=a+1&&this.searchSuper.usedFromHistory[i]--}break}}this.scrollable.onScroll()}}cleanupHTML(){this.profile.cleanupHTML(),this.editBtn.classList.add("hide"),this.searchSuper.cleanupHTML(!0),this.container.classList.toggle("can-add-members",this.searchSuper.canViewMembers()&&G.a.hasRights(-this.peerId,"invite_users"))}setLoadMutex(e){this.searchSuper.loadMutex=e}setPeer(e,t=0){var s;return(this.peerId!==e||this.threadId!==t)&&(this.peerId=e,this.threadId=t,this.peerChanged=!0,this.init&&(this.init(),this.init=null),this.searchSuper.setQuery({peerId:e,historyStorage:null!==(s=this.historiesStorage[e])&&void 0!==s?s:this.historiesStorage[e]={}}),this.profile.setPeer(e,t),!0)}fillProfileElements(){this.peerChanged&&(this.peerChanged=!1,this.cleanupHTML(),this.profile.fillProfileElements(),this.toggleEditBtn())}toggleEditBtn(){let e;e=this.peerId>0?this.peerId!==a.default.myId&&T.a.isContact(this.peerId):G.a.hasRights(-this.peerId,"change_info"),this.editBtn.classList.toggle("hide",!e)}loadSidebarMedia(e,t=!1){this.searchSuper.load(e,t)}onOpenAfterTimeout(){this.scrollable.onScroll()}}const Qt=new class extends K{constructor(){super({sidebarEl:document.getElementById("column-right"),canHideFirst:!0,navigationType:"right"}),this.isColumnProportionSet=!1,v.b.addEventListener("changeScreen",(e,t)=>{t===v.a.medium&&e!==v.a.mobile&&this.toggleSidebar(!1)}),v.b.addEventListener("resize",()=>{this.setColumnProportion()}),this.sharedMediaTab=new qt(this)}onCloseTab(e,t,s){this.historyTabIds.length||this.toggleSidebar(!1,t),super.onCloseTab(e,t,s)}setColumnProportion(){const e=this.sidebarEl.scrollWidth/this.sidebarEl.previousElementSibling.scrollWidth;document.documentElement.style.setProperty("--right-column-proportion",""+e)}toggleSidebar(e,t){const s=document.body.classList.contains("is-right-column-shown");let i;if(void 0!==e?e?s||(i=!0):s&&(i=!0):i=!0,!i)return Promise.resolve();s||this.historyTabIds.length||this.sharedMediaTab.open(),this.isColumnProportionSet||(this.setColumnProportion(),this.isColumnProportionSet=!0);const n=mo.selectTab(s?1:2,t);return document.body.classList.toggle("is-right-column-shown",e),n}};de.a.appSidebarRight=Qt;var $t=Qt;class Yt extends V{init(){this.container.id="poll-results-container",this.container.classList.add("chatlist-container"),this.resultsDiv=document.createElement("div"),this.resultsDiv.classList.add("poll-results"),this.scrollable.append(this.resultsDiv)}open(e){const t=super.open(),s=$e.a.getPoll(e.media.poll.id);this.setTitle(s.poll.pFlags.quiz?"PollResults.Title.Quiz":"PollResults.Title.Poll");const i=document.createElement("h3");i.innerHTML=s.poll.rQuestion;const n=s.results.results.map(e=>e.voters/s.results.total_voters*100);Zt(n);const a=document.createDocumentFragment();return s.results.results.forEach((t,i)=>{if(!t.voters)return;const o=document.createElement("hr"),r=s.poll.answers[i],l=document.createElement("div");l.classList.add("poll-results-answer");const c=document.createElement("div");c.innerHTML=Z.a.wrapEmojiText(r.text);const d=document.createElement("div");d.innerText=Math.round(n[i])+"%",l.append(c,d);const h=Do.createChatList();h.classList.add("poll-results-voters"),Do.setListClickListener(h,()=>{$t.onCloseBtnClick()},void 0,!0),h.style.minHeight=50*Math.min(t.voters,4)+"px",a.append(o,l,h);let u,p=4,m=!1,g=t.voters-4;const b=()=>{m||(m=!0,$e.a.getVotes(e,r.option,u,p).then(e=>{e.votes.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e.user_id,container:h,drawStatus:!1,rippleEnabled:!1,meAsSaved:!1,avatarSize:32});t.lastMessageSpan.parentElement.remove()}),u&&(g-=e.votes.length,v.lastElementChild.replaceWith(Object(A.i18n)("PollResults.LoadMore",[Math.min(20,g)]))),u=e.next_offset,p=20,g&&e.votes.length||v.remove()}).finally(()=>{m=!1}))};if(b(),g<=0)return;const v=document.createElement("div");v.classList.add("poll-results-more","show-more","rp-overflow"),v.addEventListener("click",b),Object(ie.ripple)(v);const f=document.createElement("div");f.classList.add("tgico-down"),v.append(f,Object(A.i18n)("PollResults.LoadMore",[Math.min(20,g)])),a.append(v)}),this.resultsDiv.append(i,a),$t.toggleSidebar(!0).then(()=>{}),t}}var Xt=s(85);let Jt=0;const Zt=e=>{const t=e.reduce((e,t)=>e+Math.round(t),0);if(t>100){const s=t-100,i=e.length;for(let t=0;t=.5&&is&&(s=i,t=n)}if(-1===t)return;e[t]+=1-s}}};a.default.addEventListener("poll_update",e=>{const{poll:t,results:s}=e;Array.from(document.querySelectorAll(`poll-element[poll-id="${t.id}"]`)).forEach(e=>{e.isClosed=!!t.pFlags.closed,e.performResults(s,t.chosenIndexes)})}),a.default.addEventListener("peer_changed",()=>{ts&&es(ts,ss,is)}),v.b.addEventListener("resize",()=>{ns.setMaxLength(),ns.resizePolls()}),v.b.addEventListener("changeScreen",()=>{ns.setMaxLength()});const es=(e,t,s)=>{e.classList.remove("active"),clearTimeout(s),setTimeout(()=>{t(),e.remove(),ts===e&&ss===t&&is===s&&(ts=ss=null,is=0)},200)};let ts,ss,is;class ns extends HTMLElement{constructor(){super(),this.isClosed=!1,this.isQuiz=!1,this.isRetracted=!1,this.isPublic=!1,this.isMultiple=!1,this.chosenIndexes=[],this.chosingIndexes=[],this.sentVote=!1}static setMaxLength(){const e=yt.a.windowW<=360?yt.a.windowW-120:v.b.active.poll.width;this.MAX_LENGTH=e+9+this.MAX_OFFSET+-13.7}static resizePolls(){if(!this.MAX_LENGTH)return;Array.from(document.querySelectorAll("poll-element.is-voted")).forEach(e=>{e.svgLines.forEach((t,s)=>{e.setLineProgress(s,1)})})}render(){Jt||(Jt=document.getElementById("poll-line").getTotalLength(),ns.setMaxLength());const e=this.message.media.poll.id,{poll:t,results:s}=$e.a.getPoll(e);let i;this.message.pFlags.is_scheduled&&this.classList.add("disable-hover"),t.pFlags&&(this.isPublic=!!t.pFlags.public_voters,this.isQuiz=!!t.pFlags.quiz,this.isClosed=!!t.pFlags.closed,this.isMultiple=!!t.pFlags.multiple_choice,this.isClosed?(i="Chat.Poll.Type.Closed",this.classList.add("is-closed")):i=this.isQuiz?this.isPublic?"Chat.Poll.Type.Quiz":"Chat.Poll.Type.AnonymousQuiz":this.isPublic?"Chat.Poll.Type.Public":"Chat.Poll.Type.Anonymous"),this.classList.toggle("is-multiple",this.isMultiple);const n=this.isMultiple?'':"",a=t.answers.map((e,t)=>`\n
\n
\n
\n \n \n \n ${n}\n
\n
\n
${Z.a.wrapEmojiText(e.text)}
\n \n \n
\n `).join("");if(this.innerHTML=`\n
${t.rQuestion}
\n
\n
\n
\n
\n ${a}`,this.descDiv=this.firstElementChild.nextElementSibling,this.typeDiv=this.descDiv.firstElementChild,this.avatarsDiv=this.descDiv.lastElementChild,i&&this.typeDiv.append(Object(A.i18n)(i)),this.isQuiz&&(this.classList.add("is-quiz"),t.close_period&&t.close_date)){const e=document.createElement("div");e.classList.add("poll-time"),this.descDiv.append(e);const s=document.createElementNS("http://www.w3.org/2000/svg","svg");s.classList.add("poll-quiz-timer"),this.quizTimer=s;const i=2,n=7,a=2*Math.PI*n,o=document.createElementNS("http://www.w3.org/2000/svg","circle");o.classList.add("poll-quiz-timer-circle"),o.setAttributeNS(null,"cx","16"),o.setAttributeNS(null,"cy","16"),o.setAttributeNS(null,"r",""+n),o.setAttributeNS(null,"stroke-width",""+i),s.append(o),this.descDiv.append(s);const r=1e3*t.close_period,l=1e3*(t.close_date-Ye.a.serverTimeOffset);this.quizInterval=window.setInterval(()=>{const t=Date.now(),s=(l-t)/r,i=(l-t)/1e3+1|0;e.innerHTML=String(i).toHHMMSS(),i<=5&&(e.style.color="#ee545c",o.style.stroke="#ee545c"),o.style.strokeDashoffset=a+s*a,o.style.strokeDasharray=`${a} ${a}`,t>=l&&(clearInterval(this.quizInterval),e.innerHTML="",o.style.strokeDashoffset=a,this.quizInterval=0,setTimeout(()=>{$e.a.getResults(this.message)},3e3))},1e3)}this.answerDivs=Array.from(this.querySelectorAll(".poll-answer")),this.svgLines=Array.from(this.querySelectorAll(".poll-line")),this.numberDivs=Array.from(this.querySelectorAll(".poll-answer-percents"));const o=document.createElement("div");o.classList.add("poll-footer"),this.viewResults=document.createElement("div"),this.viewResults.className="poll-footer-button poll-view-results hide",this.viewResults.append(Object(A.i18n)("Chat.Poll.ViewResults")),this.votersCountDiv=document.createElement("div"),this.votersCountDiv.className="poll-votes-count",o.append(this.viewResults,this.votersCountDiv),this.append(o),this.viewResults.addEventListener("click",e=>{Object(c.a)(e),$t.isTabExists(Yt)||new Yt($t).open(this.message)}),Object(ie.ripple)(this.viewResults),this.isMultiple&&(this.sendVoteBtn=document.createElement("div"),this.sendVoteBtn.classList.add("poll-footer-button","poll-send-vote"),this.sendVoteBtn.append(Object(A.i18n)("Chat.Poll.SubmitVote")),Object(ie.ripple)(this.sendVoteBtn),t.chosenIndexes.length||this.votersCountDiv.classList.add("hide"),Object(l.b)(this.sendVoteBtn,e=>{Object(c.a)(e),this.chosingIndexes.length&&this.sendVotes(this.chosingIndexes).then(()=>{this.chosingIndexes.length=0,this.answerDivs.forEach(e=>{e.classList.remove("is-chosing")})})}),o.append(this.sendVoteBtn));const r=!(t.chosenIndexes.length||this.isClosed);r&&!this.isPublic||this.performResults(s,t.chosenIndexes,!1),r&&(this.setVotersCount(s),Object(l.b)(this,this.clickHandler))}initQuizHint(e){if(e.solution&&e.solution_entities){const t=document.createElement("div");if(t.classList.add("tgico-tip","poll-hint"),this.descDiv.append(t),Object(l.b)(t,s=>{Object(c.a)(s),t.classList.add("active"),((e,t,s)=>{ts&&es(ts,ss,is);const i=document.createElement("div");i.classList.add("quiz-hint");const n=document.createElement("div");n.classList.add("container","tgico");const a=document.createElement("div");a.classList.add("text"),n.append(a),i.append(n),a.innerHTML=Z.a.wrapRichText(e,{entities:t}),mo.chat.bubbles.bubblesContainer.append(i),i.offsetLeft,i.classList.add("active"),ts=i,ss=s,is=window.setTimeout(()=>{es(i,s,is)},pe.IS_TOUCH_SUPPORTED?5e3:7e3)})(e.solution,e.solution_entities,()=>{t.classList.remove("active")})}),this.sentVote){const s=e.results.find(e=>e.pFlags.correct);s&&!s.pFlags.chosen&&t.click()}}}clickHandler(e){const t=Object(Ce.a)(e.target,"poll-answer");if(!t)return;Object(c.a)(e);const s=+t.dataset.index;if(this.isMultiple){t.classList.toggle("is-chosing");const e=this.chosingIndexes.indexOf(s);-1!==e?this.chosingIndexes.splice(e,1):this.chosingIndexes.push(s)}else this.sendVotes([s])}sendVotes(e){if(this.sendVotePromise)return this.sendVotePromise;const t=this.answerDivs.filter((t,s)=>e.includes(s));return t.forEach(e=>{e.classList.add("is-voting")}),this.classList.add("disable-hover"),this.sentVote=!0,this.sendVotePromise=$e.a.sendVote(this.message,e).then(()=>{t.forEach(e=>{e.classList.remove("is-voting")}),this.classList.remove("disable-hover")}).catch(()=>{this.sentVote=!1}).finally(()=>{this.sendVotePromise=null})}performResults(e,t,s=!0){var i,n;if(a.default.settings.animationsEnabled||(s=!1),this.isQuiz&&((null===(i=e.results)||void 0===i?void 0:i.length)||this.isClosed)){this.answerDivs.forEach((t,s)=>{t.classList.toggle("is-correct",!!e.results[s].pFlags.correct)}),this.initQuizHint&&(this.initQuizHint(e),this.initQuizHint=null),this.quizInterval&&(clearInterval(this.quizInterval),this.quizInterval=0),(null===(n=this.quizTimer)||void 0===n?void 0:n.parentElement)&&this.quizTimer.remove();const t=this.descDiv.querySelector(".poll-time");t&&t.remove()}if(this.isClosed&&(this.classList.add("is-closed"),Object(x.a)(this.typeDiv,Object(A.i18n)("Chat.Poll.Type.Closed"))),(this.chosenIndexes.length!==t.length||this.isClosed)&&(this.isRetracted=this.chosenIndexes.length&&!t.length,this.chosenIndexes=t.slice(),this.isRetracted?Object(l.b)(this,this.clickHandler):Object(l.c)(this,this.clickHandler)),this.chosenIndexes.length||this.isRetracted||this.isClosed){const t=e.results.map(t=>e.total_voters?t.voters/e.total_voters*100:0);this.classList.toggle("no-transition",!s),s&&Object(Xt.a)(this,"",!this.isRetracted,340),Object(_e.b)(()=>{this.setResults(this.isRetracted?this.percents:t,this.chosenIndexes,s),this.percents=t,this.isRetracted=!1})}if(this.setVotersCount(e),this.isPublic){this.isMultiple||(this.viewResults.classList.toggle("hide",!e.total_voters||!this.chosenIndexes.length),this.votersCountDiv.classList.toggle("hide",!!this.chosenIndexes.length));let t="";e.recent_voters.forEach((e,s)=>{t+=``}),this.avatarsDiv.innerHTML=t}if(this.isMultiple){const t=!!this.chosenIndexes.length,s=this.isClosed||t,i=!this.isPublic||!e.total_voters||!t&&!this.isClosed;this.sendVoteBtn.classList.toggle("hide",s),this.viewResults.classList.toggle("hide",i),this.votersCountDiv.classList.toggle("hide",!s||!i)}}setResults(e,t,s){this.svgLines.forEach(e=>e.style.display=""),this.answerDivs.forEach((e,s)=>{e.classList.toggle("is-chosen",t.includes(s))});const i=Math.max(...e);if(this.maxPercents=e.map(e=>e/i),this.isRetracted)this.svgLines.forEach((e,t)=>{this.setLineProgress(t,-1)});else{const e=()=>{this.svgLines.forEach((e,t)=>{this.setLineProgress(t,1)})};s?Object(_e.b)(e):e()}let n;e=e.slice(),Zt(e);const a=t=>{e.forEach((e,s)=>{const i=n(e,t);this.numberDivs[s].innerText=i+"%"})};if(this.isRetracted)if(n=(e,t)=>Math.round(e/10*t),s)for(let e=9,t=0;e>=0;--e,++t)setTimeout(()=>{a(e)},34*t);else a(0);else if(n=(e,t)=>Math.round(e/10*(t+1)),s)for(let e=0;e<10;++e)setTimeout(()=>{a(e)},34*e);else a(9);if(this.isRetracted){s&&this.classList.add("is-retracting"),this.classList.remove("is-voted");const e=()=>{this.svgLines.forEach(e=>e.style.display="none")};s?setTimeout(()=>{this.classList.remove("is-retracting"),e()},340):e()}else this.classList.add("is-voted")}setVotersCount(e){const t=e.total_voters||0;let s,i=[t];s=this.isClosed?this.isQuiz?t?"Chat.Quiz.TotalVotes":"Chat.Quiz.TotalVotesResultEmpty":t?"Chat.Poll.TotalVotes1":"Chat.Poll.TotalVotesResultEmpty":this.isQuiz?t?"Chat.Quiz.TotalVotes":"Chat.Quiz.TotalVotesEmpty":t?"Chat.Poll.TotalVotes1":"Chat.Poll.TotalVotesEmpty",Object(x.a)(this.votersCountDiv,Object(A.i18n)(s,i))}setLineProgress(e,t){const s=this.svgLines[e];-1===t?(s.style.strokeDasharray="",s.style.strokeDashoffset=""):(s.style.strokeDasharray=t*this.maxPercents[e]*ns.MAX_LENGTH+", 485.9",s.style.strokeDashoffset=""+t*ns.MAX_OFFSET)}}ns.MAX_OFFSET=-46.5,ns.MAX_LENGTH=0,customElements.define("poll-element",ns);var as=s(127),os=s(53),rs=s(93),ls=s(112),cs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ds=new class{constructor(){this.storage=new rs.a(ls.a,"stickerSets"),this.getStickerSetPromises={},this.getStickersByEmoticonsPromises={},this.getAnimatedEmojiStickerSet(),a.default.addMultipleEventsListeners({updateNewStickerSet:e=>{this.saveStickerSet(e.stickerset,e.stickerset.set.id),a.default.dispatchEvent("stickers_installed",e.stickerset.set)}}),this.getGreetingStickersTimeout=window.setTimeout(()=>{this.getGreetingStickersTimeout=void 0,this.getGreetingSticker(!0)},5e3)}getGreetingSticker(e=!1){return this.getGreetingStickersTimeout&&(clearTimeout(this.getGreetingStickersTimeout),this.getGreetingStickersTimeout=void 0),this.getGreetingStickersPromise||(this.getGreetingStickersPromise=this.getStickersByEmoticon("👋⭐️",!1).then(e=>{if(!e.length)throw"NO_STICKERS";this.greetingStickers=e.slice(),this.greetingStickers.sort((e,t)=>Math.random()-Math.random())})),this.getGreetingStickersPromise.then(()=>{let t;return e||(t=this.greetingStickers.shift(),this.greetingStickers.push(t)),M.a.downloadDoc(this.greetingStickers[0]),t})}saveStickers(e){Object(y.d)(e,(t,s)=>{(t=M.a.saveDoc(t))?e[s]=t:e.splice(s,1)})}getStickerSet(e,t={}){return cs(this,void 0,void 0,(function*(){const s=e.id;return this.getStickerSetPromises[s]?this.getStickerSetPromises[s]:this.getStickerSetPromises[s]=new Promise(i=>cs(this,void 0,void 0,(function*(){var n;if(!t.overwrite){const e=yield this.storage.get(s);if(e&&(null===(n=e.documents)||void 0===n?void 0:n.length)&&(Date.now()-e.refreshTime<36e5||t.useCache))return this.saveStickers(e.documents),i(e),void delete this.getStickerSetPromises[s]}try{const n=yield rt.a.invokeApi("messages.getStickerSet",{stickerset:this.getStickerSetInput(e)}),a=t.saveById?s:n.set.id;this.saveStickerSet(n,a),i(n)}catch(e){i(null)}delete this.getStickerSetPromises[s]})))}))}getAnimatedEmojiStickerSet(){return this.getStickerSet({id:"emoji"},{saveById:!0})}getRecentStickers(){return cs(this,void 0,void 0,(function*(){const e=yield rt.a.invokeApiHashable("messages.getRecentStickers");return this.saveStickers(e.stickers),e}))}getAnimatedEmojiSticker(e){const t=this.storage.getFromCache("emoji");if(!t||!t.documents)return;e=e.replace(/\ufe0f/g,"").replace(/🏻|🏼|🏽|🏾|🏿/g,"");const s=t.packs.find(t=>t.emoticon===e);return s?M.a.getDoc(s.documents[0]):void 0}preloadAnimatedEmojiSticker(e){return this.getAnimatedEmojiStickerSet().then(()=>{const t=this.getAnimatedEmojiSticker(e);if(t)return M.a.downloadDoc(t)})}saveStickerSet(e,t){const s={_:"messages.stickerSet",set:e.set,packs:e.packs,documents:e.documents};let i=this.storage.getFromCache(t);i?Object.assign(i,s):i=this.storage.setToCache(t,s),this.saveStickers(e.documents);const n=i.set.installed_date||"emoji"===t;i.refreshTime=Date.now(),this.storage.set({[t]:i},!n)}getStickerSetThumbDownloadOptions(e){var t;const s=e.thumbs.find(e=>"photoSize"===e._),i=e.thumb_dc_id,n=null===(t=e.pFlags)||void 0===t?void 0:t.animated;return{dcId:i,location:{_:"inputStickerSetThumb",stickerset:this.getStickerSetInput(e),thumb_version:e.thumb_version},size:s.size,mimeType:n?"application/x-tgsticker":"image/webp"}}getStickerSetInput(e){return"emoji"===e.id?{_:"inputStickerSetAnimatedEmoji"}:e.access_hash?{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash}:{_:"inputStickerSetShortName",short_name:e.id}}getFeaturedStickers(){return cs(this,void 0,void 0,(function*(){const e=yield rt.a.invokeApiHashable("messages.getFeaturedStickers");return e.sets.forEach(e=>{this.saveStickerSet({set:e.set,documents:[],packs:[]},e.set.id)}),e.sets}))}toggleStickerSet(e){return cs(this,void 0,void 0,(function*(){if(e.installed_date){if(yield rt.a.invokeApi("messages.uninstallStickerSet",{stickerset:this.getStickerSetInput(e)}))return delete e.installed_date,a.default.dispatchEvent("stickers_deleted",e),this.storage.delete(e.id,!0),!0}else{if(yield rt.a.invokeApi("messages.installStickerSet",{stickerset:this.getStickerSetInput(e),archived:!1}))return e.installed_date=Date.now()/1e3|0,a.default.dispatchEvent("stickers_installed",e),!0}return!1}))}searchStickerSets(e,t=!0){return cs(this,void 0,void 0,(function*(){const s=t?1:0,i=yield rt.a.invokeApiHashable("messages.searchStickerSets",{flags:s,exclude_featured:t||void 0,q:e});i.sets.forEach(e=>{this.saveStickerSet({set:e.set,documents:[],packs:[]},e.set.id)});const n=[],a=this.storage.getCache();for(let t in a){const{set:s}=a[t];s.title.toLowerCase().includes(e.toLowerCase())&&!i.sets.find(e=>e.set.id===s.id)&&n.push({_:"stickerSetCovered",set:s,cover:null})}return i.sets.concat(n)}))}getAllStickers(){return rt.a.invokeApiHashable("messages.getAllStickers")}preloadStickerSets(){return this.getAllStickers().then(e=>Promise.all(e.sets.map(e=>this.getStickerSet(e,{useCache:!0}))))}getStickersByEmoticon(e,t=!0){return this.getStickersByEmoticonsPromises[e]?this.getStickersByEmoticonsPromises[e]:this.getStickersByEmoticonsPromises[e]=Promise.all([rt.a.invokeApiHashable("messages.getStickers",{emoticon:e}),t?this.preloadStickerSets():[],t?this.getRecentStickers().then(e=>e.packs):[]]).then(([t,s,i])=>{const n=t.stickers.map(e=>M.a.saveDoc(e)),a=[],o=[],r=t=>{for(const s of t)if(s.emoticon.includes(e))for(const e of s.documents){const t=M.a.getDoc(e);(t.animated?a:o).push(t)}};r(i);for(const e of s)r(e.packs);return[...new Set(a.concat(o,n))]})}};de.a.appStickersManager=ds;var hs=ds,us=s(55),ps=s(118),ms=s(123),gs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};let bs=0;function vs({doc:e,container:t,message:s,boxWidth:i,boxHeight:n,withTail:o,isOut:r,middleware:d,lazyLoadQueue:u,noInfo:p,group:m,onlyPreview:g,withoutPreloader:b,loadPromises:f,noPlayButton:y,noAutoDownload:w,size:L,searchContext:S}){var E,C;const k=!(i&&n),T=("video"!==e.type||e.size<=52428800&&!k)&&("gif"===e.type?a.default.settings.autoPlay.gifs:a.default.settings.autoPlay.videos);let P,x;if(!p){P=document.createElement("span"),P.classList.add("video-time"),t.append(P);let s=!1;"gif"!==e.type?(P.innerText=(e.duration+"").toHHMMSS(!1),y||"round"===e.type||(T&&!w?P.classList.add("tgico","can-autoplay"):s=!0)):(P.innerText="GIF",T||y||(s=!0,w=void 0)),s&&(x=document.createElement("span"),x.classList.add("video-play","tgico-largeplay","btn-circle","position-center"),t.append(x))}let A={};if("image/gif"===e.mime_type){const a=ys({photo:e,message:s,container:t,boxWidth:i,boxHeight:n,withTail:o,isOut:r,lazyLoadQueue:u,middleware:d,withoutPreloader:b,loadPromises:f,noAutoDownload:w,size:L});return A.thumb=a,A.loadPromise=a.loadPromises.full,A}const O=document.createElement("video");if(O.classList.add("media-video"),O.setAttribute("playsinline","true"),O.muted=!0,"round"===e.type){const i=document.createElement("div");i.classList.add("media-round","z-depth-1"),i.dataset.mid=""+s.mid,i.dataset.peerId=""+s.peerId,i.message=s;const n=v.b.active.round,a=n.width/2,o=3.5,r=a-2*o;i.innerHTML=`\n \n `;const d=i.firstElementChild.firstElementChild;bs||(bs=2*Math.PI*r),d.style.strokeDasharray=bs+" "+bs,d.style.strokeDashoffset=""+bs,P.classList.add("tgico");s.pFlags.media_unread&&i.classList.add("is-unread");const h=document.createElement("canvas");h.width=h.height=e.w,i.prepend(h,P),i.append(O),t.append(i);const u=h.getContext("2d"),p=()=>{const e=i.message,t=fe.addMedia(e,!w),s=()=>{(mo.chat.setPeerPromise||Promise.resolve()).finally(()=>{Object(us.a)(t)||(t.removeEventListener("play",r),t.removeEventListener("timeupdate",o),t.removeEventListener("pause",p),t.removeEventListener("ended",m))})},n=()=>{u.drawImage(t,0,0);const e=bs-t.currentTime/t.duration*bs;return d.style.strokeDashoffset=""+e,!t.paused},a=()=>{t.duration&&(Object(us.a)(t)?(t.paused&&n(),P.innerText=(t.duration-t.currentTime+"").toHHMMSS(!1)):s())},o=Fe(a),r=()=>{O.classList.add("hide"),i.classList.remove("is-paused"),Object(as.a)(n,h),D&&D.preloader&&D.preloader.classList.contains("manual")&&D.onClick()},p=()=>{Object(us.a)(t)?i.classList.add("is-paused"):s()},m=()=>{O.classList.remove("hide"),i.classList.add("is-paused"),O.currentTime=0,P.innerText=(""+t.duration).toHHMMSS(!1),t.currentTime&&(t.currentTime=0)};t.addEventListener("play",r),t.addEventListener("timeupdate",o),t.addEventListener("pause",p),t.addEventListener("ended",m),Object(l.b)(h,s=>{if(Object(c.a)(s),D&&!D.detached&&D.onClick(),t.paused){if(fe.setSearchContext(S)){const[t,s]=Be(i,S.useSearch);fe.setTargets({peerId:e.peerId,mid:e.mid},t,s)}t.play()}else t.pause()}),t.paused?t.duration&&t.currentTime!==t.duration&&t.currentTime>0?(n(),a(),O.classList.add("hide")):p():r()};s.pFlags.is_outgoing?(i.onLoad=p,i.dataset.isOutgoing="1"):p()}else O.autoplay=!0;let _;if(s){if(_=ys({photo:e,message:s,container:t,boxWidth:i,boxHeight:n,withTail:o,isOut:r,lazyLoadQueue:u,middleware:d,withoutPreloader:!0,loadPromises:f,noAutoDownload:w,size:L}),A.thumb=_,!T&&"gif"!==e.type||g)return A.loadPromise=_.loadPromises.full,A;if(o){const e=(_.images.thumb||_.images.full).parentElement;O.width=+e.getAttributeNS(null,"width"),O.height=+e.getAttributeNS(null,"height"),e.append(O)}}else{const t=M.a.getThumb(e,!1);t&&t.promise.then(()=>{O.poster=t.cacheContext.url})}!O.parentElement&&t&&((null==_?void 0:_.aspecter)||t).append(O);const F=he.a.getCacheContext(e),j=!!(null===(E=null==s?void 0:s.media)||void 0===E?void 0:E.preloader);let D;j?(D=s.media.preloader,D.attach(t,!1),w=void 0):F.downloaded||e.supportsStreaming?e.supportsStreaming&&(D=new ye.a({cancelable:!1,attachMethod:"prepend"})):D=new ye.a({attachMethod:"prepend"});const B=Object(oe.a)();O.addEventListener("error",e=>{4!==O.error.code&&console.error("Error "+O.error.code+"; details: "+O.error.message),D&&!j&&D.detach(),B.isFulfilled||B.resolve()},{once:!0}),Object(me.d)(O).then(()=>{m&&I.a.addAnimation(O,m),D&&!j&&D.detach(),B.resolve()}),"video"===e.type&&O.addEventListener("timeupdate",()=>{P.innerText=(O.duration-O.currentTime+"").toHHMMSS(!1)}),O.muted=!0,O.loop=!0,O.autoplay=!0;let R=w&&(null===(C=null==_?void 0:_.preloader)||void 0===C?void 0:C.loadFunc);const H=()=>{D&&w&&!b&&(D.construct(),D.setManual());let i=Promise.resolve();if(D&&!j)if(F.downloaded||e.supportsStreaming)e.supportsStreaming&&(w?i=Promise.reject():F.downloaded||(D.attach(t,!1,null),O.addEventListener(h.IS_SAFARI?"timeupdate":"canplay",()=>{D.detach()},{once:!0})));else{const s=i=M.a.downloadDoc(e,null==u?void 0:u.queueId,w);D.attach(t,!1,s)}return!w&&R&&(R(),R=null),w=void 0,i.then(()=>{!d||d()?("round"===e.type&&fe.resolveWaitingForLoadMedia(s.peerId,s.mid,s.pFlags.is_scheduled),Object(Rt.a)(O,F.url)):B.resolve()},()=>{}),{download:i,render:B}};return D&&!j&&D.setDownloadFunction(H),"gif"!==e.type||T?A.loadPromise=u?(u.push({div:t,load:()=>H().render}),Promise.resolve()):H().render:Object(l.b)(t,e=>{Object(c.a)(e),x.remove(),H()},{capture:!0,once:!0}),A}function fs({message:e,withTime:t,fontWeight:s,voiceAsMusic:n,showSender:o,searchContext:r,loadPromises:c,noAutoDownload:d,lazyLoadQueue:h}){var u,p;s||(s=500);const m=e.media.document||e.media.webpage.document,b=e.pFlags.is_outgoing&&(null===(u=e.media)||void 0===u?void 0:u.preloader);if("audio"===m.type||"voice"===m.type||"round"===m.type){const i=new Re;return i.withTime=t,i.message=e,i.noAutoDownload=d,i.lazyLoadQueue=h,i.loadPromises=c,n&&(i.voiceAsMusic=n),r&&(i.searchContext=r),o&&(i.showSender=o),b&&(i.preloader=e.media.preloader),i.dataset.fontWeight=""+s,i.render(),i}let v=m.file_name?m.file_name.split("."):"",f="";f=v.length>1&&Array.isArray(v)?Object(ps.a)(v.pop().split(" ",1)[0].toLowerCase()):"file";let y=document.createElement("div");y.classList.add("document","ext-"+f),y.dataset.docId=m.id;const w=document.createElement("div");w.classList.add("document-ico");const L=he.a.getCacheContext(m);if(((null===(p=m.thumbs)||void 0===p?void 0:p.length)||e.pFlags.is_outgoing&&L.url&&"photo"===m.type)&&"image/gif"!==m.mime_type){y.classList.add("document-with-thumb");let t=[];if(e.pFlags.is_outgoing)w.innerHTML=``,t.push(w.firstElementChild);else{const e=ys({photo:m,message:null,container:w,boxWidth:54,boxHeight:54,loadPromises:c,withoutPreloader:!0,lazyLoadQueue:h});w.style.width=w.style.height="",e.images.thumb&&t.push(e.images.thumb),e.images.full&&t.push(e.images.full)}t.forEach(e=>e.classList.add("document-thumb"))}else w.innerText=f;let S=m.fileName||"Unknown.file";document.createElement("div").classList.add("document-description");const E=[Object(C.b)(m.size)];t&&E.push(Object(re.c)(e.date)),o&&E.push(i.a.wrapSenderToPeer(e)),y.innerHTML=`\n ${L.downloaded&&!b?"":'
'}\n
\n
\n `;const I=y.querySelector(".document-name"),k=new xe.a;k.dataset.fontWeight=""+s,k.innerHTML=S,I.append(k),o&&I.append(i.a.wrapSentTime(e));if(y.querySelector(".document-size").append(...Object(A.joinElementsWith)(E," · ")),y.prepend(w),!b&&e.pFlags.is_outgoing)return y;let T,P=null;const x=()=>{if(T){T.classList.add("downloaded");const e=T;setTimeout(()=>{e.remove()},200),T=null}P&&(P=null)},O=e=>{const t=!e||e.isTrusted,s=M.a.getDoc(y.dataset.docId);let i;const n=mo.chat.bubbles?mo.chat.bubbles.lazyLoadQueue.queueId:void 0;return t?"pdf"===s.type?(i=M.a.downloadDoc(s,n),i.then(()=>{setTimeout(()=>{const e=he.a.getCacheContext(s).url;window.open(e)},a.default.settings.animationsEnabled?250:0)})):i=g.has(s.mime_type)?M.a.downloadDoc(s,n):M.a.saveDocFile(s,n):i=M.a.downloadDoc(s,n),T&&(i.then(x),P.attach(T,!0,i)),{download:i}};return M.a.downloading.has(m.id)?(T=y.querySelector(".document-download"),P=new ye.a,P.attach(T,!1,M.a.downloading.get(m.id))):L.downloaded&&!b||(T=y.querySelector(".document-download"),P=e.media.preloader,P?(P.attach(T),e.media.promise.then(x)):(P=new ye.a,P.construct(),P.setManual(),P.attach(T),P.setDownloadFunction(O))),Object(l.b)(y,e=>{P?P.onClick(e):O(e)}),y}function ys({photo:e,message:t,container:s,boxWidth:i,boxHeight:n,withTail:o,isOut:l,lazyLoadQueue:c,middleware:d,size:h,withoutPreloader:u,loadPromises:p,noAutoDownload:m,noBlur:g,noThumb:b,noFadeIn:f,blurAfter:y}){var w;if(!e.sizes&&!e.thumbs)return i&&n&&!h&&"document"===e._&&r.a.setAttachmentSize(e,s,i,n,void 0,t),{loadPromises:{thumb:Promise.resolve(),full:Promise.resolve()},images:{thumb:null,full:null},preloader:null,aspecter:null};h||(void 0===i&&(i=v.b.active.regular.width),void 0===n&&(n=v.b.active.regular.height)),s.classList.add("media-container");let L,S,E,I=s,C=!0,k=Promise.resolve();if(S=new Image,i&&n&&!h){const a=r.a.setAttachmentSize(e,s,i,n,void 0,t);if(h=a.photoSize,C=a.isFit,E=he.a.getCacheContext(e,h.type),!C){I=document.createElement("div"),I.classList.add("media-container-aspecter"),I.style.width=a.size.width+"px",I.style.height=a.size.height+"px";const i=r.a.getStrippedThumbIfNeeded(e,E,!g,!0);if(i){k=i.loadPromise;const e=i.image;e.classList.add("media-photo"),s.append(e)}else{ys({container:s,message:t,photo:e,boxWidth:0,boxHeight:0,size:h,lazyLoadQueue:c,isOut:l,loadPromises:p,middleware:d,withoutPreloader:u,withTail:o,noAutoDownload:m,noBlur:g,noThumb:!0,blurAfter:!0}).images.full.classList.add("media-photo","thumbnail")}s.classList.add("media-container-fitted"),s.append(I)}}else h||(h=r.a.choosePhotoSize(e,i,n,!0)),E=he.a.getCacheContext(e,null==h?void 0:h.type);if(!b){const t=r.a.getStrippedThumbIfNeeded(e,E,!g);t&&(k=Promise.all([k,t.loadPromise]),L=t.image,L.classList.add("media-photo"),I.append(L))}S.classList.add("media-photo");const T=(L||!E.downloaded)&&a.default.settings.animationsEnabled&&!f;let P;(null===(w=null==t?void 0:t.media)||void 0===w?void 0:w.preloader)&&!u?(P=t.media.preloader,P.attach(s),m=void 0):E.downloaded||(P=new ye.a({attachMethod:"prepend"}));const x=e=>ws(s,S,e,T,I,L),A=()=>d&&!d()?Promise.resolve():y?Object(ms.a)(E.url,12).then(e=>x(e)):x(E.url);let O;const _=h.w>=150&&h.h>=150||m,F=()=>{m&&!u&&P&&(P.construct(),P.setManual());const t="document"===e._&&"image/gif"===e.mime_type?M.a.downloadDoc(e,null==c?void 0:c.queueId):r.a.preloadPhoto(e,h,null==c?void 0:c.queueId,m);P&&!E.downloaded&&!u&&_&&P.attach(s,!1,t),m=void 0;const i=t.then(A);return i.catch(()=>{}),{download:t,render:i}};return P&&P.setDownloadFunction(F),E.downloaded?k=O=F().render:c?c.push({div:s,load:()=>F().download}):O=F().render,p&&k&&p.push(k),{loadPromises:{thumb:k,full:O||Promise.resolve()},images:{thumb:L,full:S},preloader:P,aspecter:I}}function ws(e,t,s,i,n=e,a){return i&&t.classList.add("fade-in"),new Promise(o=>{Object(Rt.a)(t,s,()=>{os.a.mutateElement(e,()=>{n.append(t),Object(_e.b)(()=>{o()}),i&&t.addEventListener("animationend",()=>{os.a.mutate(()=>{t.classList.remove("fade-in"),a&&a.remove()})},{once:!0})})})})}function Ls({doc:e,div:t,middleware:s,lazyLoadQueue:i,group:n,play:o,onlyThumb:d,emoji:h,width:u,height:m,withThumb:g,loop:b,loadPromises:v,needFadeIn:f}){var y;const w=e.sticker;if(u||(u=h?void 0:200),m||(m=h?void 0:200),2!==w||le.b.loaded||le.b.loadLottieWorkers(),!w)throw console.error("wrong doc for wrapSticker!",e),new Error("wrong doc for wrapSticker!");t.dataset.docId=e.id,t.classList.add("media-sticker-wrapper");const L=he.a.getCacheContext(e),S=h?Object(ne.d)(h):-1,E=L.downloaded&&!f;let I=Object(oe.a)(),C=!1;if(((null===(y=e.thumbs)||void 0===y?void 0:y.length)||e.stickerCachedThumbs)&&!t.firstElementChild&&(!E||2===w||d)){let n,a=e.stickerCachedThumbs&&e.stickerCachedThumbs[S]||e.thumbs[0];const o=()=>{t.childElementCount||(n.classList.add("media-sticker","thumbnail"),os.a.mutateElement(t,()=>{t.append(n),I.resolve()}))};if("url"in a)n=new Image,Object(Rt.a)(n,a.url,o),C=!0;else if("bytes"in a){if("photoPathSize"===a._)if(a.bytes.length){const s=r.a.getPathFromPhotoPathSize(a);t.innerHTML=`\n \n `}else a=e.thumbs.find(e=>{var t;return null===(t=e.bytes)||void 0===t?void 0:t.length})||a;a&&"photoPathSize"!==a._&&S<=0&&(n=new Image,p.a||e.pFlags.stickerThumbConverted||L.url?(Object(Rt.a)(n,r.a.getPreviewURLFromThumb(e,a,!0),o),C=!0):ce.a.convert(e.id,a.bytes).then(i=>{a.bytes=i,e.pFlags.stickerThumbConverted=!0,s&&!s()||t.childElementCount||Object(Rt.a)(n,r.a.getPreviewURLFromThumb(e,a,!0),o)}).catch(()=>{}))}else if(2===w&&(g||d)&&S<=0){n=new Image;const r=()=>{if(t.childElementCount||s&&!s())return;const i=()=>{t.childElementCount||s&&!s()||Object(Rt.a)(n,L.url,o)};return L.url?(i(),Promise.resolve()):M.a.getThumbURL(e,a).promise.then(i)};if(i&&d)return i.push({div:t,load:r}),Promise.resolve();r(),a.url&&(C=!0)}}if(v&&C&&v.push(I),d)return Promise.resolve();const k=()=>gs(this,void 0,void 0,(function*(){if(!s||s())if(2===w)yield M.a.downloadDoc(e,null==i?void 0:i.queueId).then(ae.c).then(i=>gs(this,void 0,void 0,(function*(){if(s&&!s())return;let r=yield le.b.loadAnimationWorker({container:t,loop:b&&!h,autoplay:o,animationData:i,width:u,height:m},n,S);r.addEventListener("firstFrame",()=>{const s=t.firstElementChild;f=(f||!s||"svg"===s.tagName)&&a.default.settings.animationsEnabled;const i=()=>{s&&s!==r.canvas&&s.remove()};f?os.a.mutate(()=>{r.canvas.classList.add("fade-in"),s&&s.classList.add("fade-out"),r.canvas.addEventListener("animationend",()=>{os.a.mutate(()=>{r.canvas.classList.remove("fade-in"),i()})},{once:!0})}):s&&os.a.mutate(i),M.a.saveLottiePreview(e,r.canvas,S)},{once:!0}),h&&Object(l.b)(t,e=>{Object(c.a)(e);let s=le.b.getAnimation(t);s.paused&&(s.autoplay=!0,s.restart())})})));else if(1===w){const n=new Image,o=t.firstElementChild!==n&&t.firstElementChild;return f=(f||!E||o)&&a.default.settings.animationsEnabled,n.classList.add("media-sticker"),f&&n.classList.add("fade-in"),new Promise((a,r)=>{const l=()=>{if(s&&!s())return a();Object(Rt.a)(n,L.url,()=>{os.a.mutateElement(t,()=>{t.append(n),o&&o.classList.add("fade-out"),a(),f&&n.addEventListener("animationend",()=>{n.classList.remove("fade-in"),o&&o.remove()},{once:!0})})})};L.url?l():M.a.downloadDoc(e,null==i?void 0:i.queueId).then(l,a)})}})),T=!i||E&&2!==w?k():(i.push({div:t,load:k}),Promise.resolve());return E&&1===w&&(I=T,v&&v.push(I)),T}function Ss({set:e,lazyLoadQueue:t,container:s,group:i,autoplay:n,width:a,height:o}){var r;return gs(this,void 0,void 0,(function*(){if(null===(r=e.thumbs)||void 0===r?void 0:r.length)return s.classList.add("media-sticker-wrapper"),void t.push({div:s,load:()=>{const t=hs.getStickerSetThumbDownloadOptions(e),r=he.a.download(t);if(e.pFlags.animated)return r.then(ae.c).then(e=>{le.b.loadAnimationWorker({container:s,loop:!0,autoplay:n,animationData:e,width:a,height:o,needUpscale:!0},i)});{const e=new Image;return e.classList.add("media-sticker"),r.then(t=>{Object(Rt.a)(e,URL.createObjectURL(t),()=>{s.append(e)})})}}});const l=hs.getStickerSet(e),c=yield l;"documentEmpty"!==c.documents[0]._&&Ls({doc:c.documents[0],div:s,group:i,lazyLoadQueue:t})}))}function Es(e,t,s){const i=new Ne("reply");return i.fill(e,t,s),i.container}function Ms(e){const t=new qe(e.items,e.maxWidth,e.minWidth,e.spacing,e.maxHeight).layout(),s=t.find(e=>e.sides&We),i=s.geometry.width+s.geometry.x,n=t.find(e=>e.sides&Ke),a=n.geometry.height+n.geometry.y,o=e.container;o.style.width=i+"px",o.style.height=a+"px";const r=o.children;t.forEach(({geometry:t,sides:s},n)=>{let l;if(l=r[n],l||(l=document.createElement("div"),o.append(l)),l.classList.add("album-item","grouped-item"),l.style.width=t.width/i*100+"%",l.style.height=t.height/a*100+"%",l.style.top=t.y/a*100+"%",l.style.left=t.x/i*100+"%",s&Ge&&s&Ve&&(l.style.borderTopLeftRadius="inherit"),s&Ge&&s&Ke&&(l.style.borderBottomLeftRadius="inherit"),s&We&&s&Ve&&(l.style.borderTopRightRadius="inherit"),s&We&&s&Ke&&(l.style.borderBottomRightRadius="inherit"),e.forMedia){const e=document.createElement("div");e.classList.add("album-item-media"),l.append(e)}})}function Is({groupId:e,attachmentDiv:t,middleware:s,uploading:n,lazyLoadQueue:a,isOut:o,chat:l,loadPromises:c,noAutoDownload:d}){const h=[],u=i.a.getMidsByAlbum(e);for(const e of u){const t=l.getMessage(e),s=t.media.photo||t.media.document,i="photo"===s._?r.a.choosePhotoSize(s,480,480):{w:s.w,h:s.h};h.push({size:i,media:s,message:t})}Ms({container:t,items:h.map(e=>({w:e.size.w,h:e.size.h})),maxWidth:v.b.active.album.width,minWidth:100,spacing:2,forMedia:!0}),h.forEach((e,i)=>{const{size:n,media:r,message:l}=e,h=t.children[i];h.dataset.mid=""+l.mid;const u=h.firstElementChild;"photo"===r._?ys({photo:r,message:l,container:u,boxWidth:0,boxHeight:0,isOut:o,lazyLoadQueue:a,middleware:s,size:n,loadPromises:c,noAutoDownload:d}):vs({doc:l.media.document,container:u,message:l,boxWidth:0,boxHeight:0,withTail:!1,isOut:o,lazyLoadQueue:a,middleware:s,loadPromises:c,noAutoDownload:d})})}v.b.addEventListener("changeScreen",(e,t)=>{if(t===v.a.mobile||e===v.a.mobile){const e=Array.from(document.querySelectorAll(".media-round .progress-ring")),t=v.b.active.round.width,s=t/2,i=s-7;bs=2*Math.PI*i,e.forEach(e=>{e.setAttributeNS(null,"width",""+t),e.setAttributeNS(null,"height",""+t);const n=e.firstElementChild;n.setAttributeNS(null,"cx",""+s),n.setAttributeNS(null,"cy",""+s),n.setAttributeNS(null,"r",""+i),n.style.strokeDasharray=bs+" "+bs,n.style.strokeDashoffset=""+bs})}}),a.default.addEventListener("download_start",e=>{Array.from(document.querySelectorAll(`.document[data-doc-id="${e}"]`)).forEach(e=>{e.querySelector(".preloader-container.manual")&&Object(l.d)(e)})});var Cs=s(77),ks=s(102),Ts=s(78);function Ps(e,t,s,i){return void 0===i&&(i=e.parentElement===t?Object(Ts.a)(e):-1),i!==s&&(-1!==i&&is?t.insertBefore(e,t.children[s]):t.append(e):t.prepend(e),!0)}class xs{constructor(e){this.updateElementWith=e=>e(),this.updateListWith=e=>e(!0),this.middleware=Object(ks.a)(),Object(L.g)(this,e),this.elements=new Map,this.sorted=[]}clear(){this.middleware.clean(),this.elements.clear(),this.sorted.length=0}_updateList(){this.elements.forEach(e=>{this.update(e.id,!0)}),this.onSort&&this.sorted.forEach((e,t)=>{this.onSort(e,t)})}updateList(e){const t=this.middleware.get();this.updateListWith(s=>{if(!t()||void 0!==s&&!s)return e(!1);this._updateList(),e(!0)})}has(e){return this.elements.has(e)}get(e){return this.elements.get(e)}getAll(){return this.elements}add(e,t=!1,s,i=t){let n=this.get(e);if(n)return n;const a={id:e,index:0};return n=this.onElementCreate(a,t),this.elements.set(e,n),this.update(e,i,n,s),n}delete(e,t){const s=this.elements.get(e);if(!s)return!1;this.elements.delete(e);const i=this.sorted.indexOf(s);if(-1!==i&&this.sorted.splice(i,1),this.onDelete)if(t)this.onDelete(s);else{const e=this.middleware.get();this.updateElementWith(()=>{e()&&this.onDelete(s)})}return!0}update(e,t=!1,s=this.get(e),i){if(!s)return;s.index=this.getIndex(e),this.onUpdate&&this.onUpdate(s);const n=Object(y.e)(this.sorted,s,"index");if(!t&&this.onSort){const e=this.middleware.get();(i||this.updateElementWith)(()=>{e()&&this.onSort(s,n)})}}}var As=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Os extends xs{constructor(e={}){let t;super({getIndex:e=>T.a.getUserStatusForSort(e),onDelete:e=>e.dom.listEl.remove(),onUpdate:e=>{const t=T.a.getUserStatusString(e.id);Object(x.a)(e.dom.lastMessageSpan,t)},onSort:(e,t)=>Ps(e.dom.listEl,this.list,t),onElementCreate:e=>{const{dom:t}=Do.addDialogNew({dialog:e.id,container:!1,drawStatus:!1,avatarSize:this.avatarSize,autonomous:!0,meAsSaved:!1,rippleEnabled:this.rippleEnabled,lazyLoadQueue:this.lazyLoadQueue});return e.dom=t,e},updateElementWith:_e.b,updateListWith:e=>As(this,void 0,void 0,(function*(){return Object(us.a)(this.list)?(yield Object(Cs.c)(),Object(us.a)(this.list)?void e(!0):e(!1)):e(!1)}))}),this.avatarSize=48,this.rippleEnabled=!0,Object(L.g)(this,e),this.list=Do.createChatList({new:e.new});const s=()=>{t=window.setTimeout(()=>{this.updateList(e=>{e&&s()})},Os.SORT_INTERVAL)};s()}}function _s(e,t){return new zt({element:e,onSwipe:(e,s,i)=>{if(Math.abs(s)>20)return!0;if(Math.abs(e)>Math.abs(s))Object(c.a)(i);else if(Math.abs(s)>Math.abs(e))return!0;return Math.abs(e)>50?(t(e>0),Object(se.b)(),!0):void 0},cancelEvent:!1})}Os.SORT_INTERVAL=3e4;var Fs=s(89),js=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ds extends It{constructor(e,t,s,i=!1){super({peerTypes:["dialogs","contacts"],onSelect:i?t:s=>js(this,void 0,void 0,(function*(){if(t){const e=t(s);e instanceof Promise&&(yield e)}mo.setInnerPeer(s),mo.chat.input.initMessagesForward(e)})),onClose:s,placeholder:"ShareModal.Search.ForwardPlaceholder",chatRightsAction:"send_messages",selfPresence:"ChatYourSelf"})}}class Bs{constructor(e,t,s,n){const r=new ft.a({peerId:e}).element;t=t.slice();const l=(a,o)=>{n&&n(),"scheduled"===s?i.a.deleteScheduledMessages(e,t):i.a.deleteMessages(e,t,!!a.size||o)};let c,d,h,u,p,m=[];if(1===t.length?c="DeleteSingleMessagesTitle":(c="DeleteMessagesTitle",d=[Object(A.i18n)("messages",[t.length])]),h=o.a.isMegagroup(e)?1===t.length?"AreYouSureDeleteSingleMessageMega":"AreYouSureDeleteFewMessagesMega":1===t.length?"AreYouSureDeleteSingleMessage":"AreYouSureDeleteFewMessages",p=[{langKey:"Delete",isDanger:!0,callback:l}],e===a.default.myId||"scheduled"===s);else if(e>0)m.push({text:"DeleteMessagesOptionAlso",textArgs:[r]});else{const s=G.a.getChat(-e),n=G.a.hasRights(-e,"delete_messages");if("chat"===s._){const s=n?t.slice():t.filter(t=>i.a.getMessageByPeer(e,t).fromId===a.default.myId);s.length&&(s.length===t.length?m.push({text:"DeleteForAll"}):(m.push({text:"DeleteMessagesOption"}),h="DeleteMessagesTextGroup",u=[Object(A.i18n)("messages",[s.length])]))}else p[0].callback=e=>l(e,!0)}Object(ct.a)(p);new ht("popup-delete-chat",{peerId:e,titleLangKey:c,titleLangArgs:d,descriptionLangKey:h,descriptionLangArgs:u,buttons:p,checkboxes:m}).show()}}var Rs=s(130);class Hs{constructor(e,t,s){let n,a,o=[];n=`Send Message${t.length>1?"s":""} Now`,a=t.length>1?"Send "+t.length+" messages now?":"Send message now?";o.push({langKey:"Send",callback:()=>{s&&s(),i.a.sendScheduledMessages(e,t)}});new ht("popup-delete-chat",{peerId:e,title:n,description:a,buttons:o}).show()}}var Us=s(6);function Ns(){window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty()}var zs=s(103);const Vs=e=>[...e.values()].reduce((e,t)=>e+t.size,0);class Ws{constructor(e){if(this.selectedMids=new Map,this.isSelecting=!1,this.cancelSelection=()=>{this.onCancelSelection&&this.onCancelSelection(),this.selectedMids.clear(),this.toggleSelection(),Ns()},Object(L.g)(this,e),this.navigationType="multiselect-"+Object(tt.b)(),pe.IS_TOUCH_SUPPORTED)return this.listenerSetter.add(this.listenElement)("touchend",()=>{this.isSelecting&&(this.selectedText=window.getSelection?window.getSelection().toString():document.selection?document.selection.createRange().text:"")}),void Object(se.a)(this.listenElement,e=>{if(this.isSelecting||this.verifyTouchLongPress&&!this.verifyTouchLongPress())return;document.body.classList.add("no-select"),this.listenElement.addEventListener("touchend",e=>{Object(c.a)(e),document.body.classList.remove("no-select")},{once:!0,capture:!0}),Ns();const t=this.getElementFromTarget(e.target);t&&this.toggleByElement(t)},this.listenerSetter);const t=(e,t)=>{if(e===t)return[];const s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),n=(s.top-i.top||s.left-i.left)<0,a=Object(Ce.a)(e,this.lookupBetweenParentClassName);if(!a)return[];const o=Array.from(a.querySelectorAll(this.lookupBetweenElementsQuery));let r=o.indexOf(e),l=o.indexOf(t);n||([l,r]=[r,l]);return o.slice(r+1,l)};this.listenerSetter.add(this.listenElement)("mousedown",e=>{const s=Object(Ce.a)(e.target,this.targetLookupClassName);if(0!==e.button)return;if(this.verifyTarget&&!this.verifyTarget(e,s))return;const i=new Map;let n,a=s;const o=(e,s=!0)=>{const r=+e.dataset.mid,l=+e.dataset.peerId;if(!r||!l)return;Object(us.a)(a)||(a=e);let c=i.get(l);if(c||i.set(l,c=new Set),!c.has(r)){const d=this.isMidSelected(l,r);if(void 0===n&&(n=!d),c.add(r),n&&!d||!n&&d){const n=Vs(i);if(this.toggleByElement&&s){n<2&&Object(zs.a)(e,a)&&(a=e);const s=t(a,e);s.length&&s.forEach(e=>{o(e,!1)})}if(this.selectedMids.size)this.toggleByElement&&this.toggleByElement(e);else if(2===n&&this.toggleByMid)for(const[e,t]of i)for(const s of t)this.toggleByMid(e,s)}}};let r=!1;const d=e=>{r||(Ns(),r=!0);const t=this.getElementFromTarget(e.target);if(t)return this.verifyMouseMoveTarget&&!this.verifyMouseMoveTarget(e,t,n)?(this.listenerSetter.removeManual(this.listenElement,"mousemove",d),void this.listenerSetter.removeManual(document,"mouseup",h,u)):void o(t)},h=e=>{i.size&&Object(l.b)(window,c.a,{capture:!0,once:!0,passive:!1}),this.listenerSetter.removeManual(this.listenElement,"mousemove",d),Ns()},u={once:!0};this.listenerSetter.add(this.listenElement)("mousemove",d),this.listenerSetter.add(document)("mouseup",h,u)})}isElementShouldBeSelected(e){return this.isMidSelected(+e.dataset.peerId,+e.dataset.mid)}appendCheckbox(e,t){e.prepend(t.label)}toggleElementCheckbox(e,t){const s=!!this.getCheckboxInputFromElement(e);if(t){if(s)return!1;const t=new dt.a({name:e.dataset.mid,round:!0});this.isSelecting&&this.isElementShouldBeSelected(e)&&(t.input.checked=!0,e.classList.add("is-selected")),this.appendCheckbox(e,t)}else s&&this.getCheckboxInputFromElement(e).parentElement.remove();return!0}getCheckboxInputFromElement(e){var t;return"LABEL"===(null===(t=e.firstElementChild)||void 0===t?void 0:t.tagName)&&e.firstElementChild.firstElementChild}updateContainer(e=!1){const t=this.selectedMids.size;if(!t&&!e)return;let s=!t,i=!t,n=!t;for(const[e,t]of this.selectedMids){const n=this.isScheduled?this.appMessagesManager.getScheduledMessagesStorage(e):this.appMessagesManager.getMessagesStorage(e);for(const e of t){const t=this.appMessagesManager.getMessageFromStorage(n,e);if(s||t.action&&(s=!0),!i){this.appMessagesManager.canDeleteMessage(t)||(i=!0)}if(s&&i)break}if(s&&i)break}this.onUpdateContainer&&this.onUpdateContainer(s,i,n)}toggleSelection(e=!0,t=!1){const s=this.isSelecting,i=this.selectedMids.size;if(this.isSelecting=!!i||t,s===this.isSelecting)return!1;pe.IS_TOUCH_SUPPORTED||(this.listenElement.classList.toggle("no-select",this.isSelecting),s&&Ns()),Object(Us.a)();const n=!!i||t;return this.onToggleSelection&&this.onToggleSelection(n),h.IS_MOBILE_SAFARI||(n?B.a.pushItem({type:this.navigationType,onPop:()=>{this.cancelSelection()}}):B.a.removeByType(this.navigationType)),t&&this.updateContainer(t),!0}cleanup(){this.selectedMids.clear(),this.toggleSelection(!1)}updateElementSelection(e,t){this.toggleElementCheckbox(e,!0);this.getCheckboxInputFromElement(e).checked=t,this.toggleSelection(),this.updateContainer(),Object(Xt.a)(e,"is-selected",t,200)}isMidSelected(e,t){const s=this.selectedMids.get(e);return null==s?void 0:s.has(t)}length(){return Vs(this.selectedMids)}toggleMid(e,t,s){let i=this.selectedMids.get(e);if(s||void 0===s&&(null==i?void 0:i.has(t)))i&&(i.delete(t),i.size||this.selectedMids.delete(e));else{if(a.default.config.forwarded_count_max-this.length()-1<0)return nt(A.default.format("Chat.Selection.LimitToast",!0)),!1;i||(i=new Set,this.selectedMids.set(e,i)),i.add(t)}return!0}deleteSelectedMids(e,t){const s=this.selectedMids.get(e);s&&(t.forEach(e=>{s.delete(e)}),s.size||this.selectedMids.delete(e),this.updateContainer(),this.toggleSelection())}}class Ks extends Ws{constructor(e,t){super({appMessagesManager:t,listenElement:e.container,listenerSetter:new H.a,verifyTarget:(e,t)=>!!t&&this.isSelecting,getElementFromTarget:e=>Object(Ce.a)(e,"search-super-item"),targetLookupClassName:"search-super-item",lookupBetweenParentClassName:"tabs-tab",lookupBetweenElementsQuery:".search-super-item"}),this.searchSuper=e,this.toggleByElement=e=>{const t=+e.dataset.mid,s=+e.dataset.peerId;this.toggleMid(s,t)&&this.updateElementSelection(e,this.isMidSelected(s,t))},this.toggleByMid=(e,t)=>{const s=this.searchSuper.mediaTab.contentTab.querySelector(`.search-super-item[data-peer-id="${e}"][data-mid="${t}"]`);this.toggleByElement(s)},this.onUpdateContainer=(e,t,s)=>{const i=this.length();Object(x.a)(this.selectionCountEl,Object(A.i18n)("messages",[i])),this.selectionGotoBtn.classList.toggle("hide",1!==i),this.selectionForwardBtn.classList.toggle("hide",e),this.selectionDeleteBtn&&this.selectionDeleteBtn.classList.toggle("hide",t)},this.onToggleSelection=e=>{if(Object(Xt.a)(this.searchSuper.navScrollableContainer,"is-selecting",e,200,()=>{this.isSelecting||(this.selectionContainer.remove(),this.selectionContainer=this.selectionForwardBtn=this.selectionDeleteBtn=null,this.selectedText=void 0)}),Object(Xt.a)(this.searchSuper.container,"is-selecting",e,200),this.isSelecting&&!this.selectionContainer){const e="search-super-selection";this.selectionContainer=document.createElement("div"),this.selectionContainer.classList.add(e+"-container");const t=N(`close ${e}-cancel`,{noRipple:!0});this.listenerSetter.add(t)("click",this.cancelSelection,{once:!0}),this.selectionCountEl=document.createElement("div"),this.selectionCountEl.classList.add(e+"-count"),this.selectionGotoBtn=N(`message ${e}-goto`);const s={listenerSetter:this.listenerSetter};Object(l.b)(this.selectionGotoBtn,()=>{const e=[...this.selectedMids.keys()][0],t=[...this.selectedMids.get(e)][0];this.cancelSelection(),a.default.dispatchEvent("history_focus",{peerId:e,mid:t})},s),this.selectionForwardBtn=N(`forward ${e}-forward`),Object(l.b)(this.selectionForwardBtn,()=>{const e={};for(const[t,s]of this.selectedMids)e[t]=Array.from(s);new Ds(e,()=>{this.cancelSelection()})},s),this.isPrivate&&(this.selectionDeleteBtn=N(`delete danger ${e}-delete`),Object(l.b)(this.selectionDeleteBtn,()=>{const e=[...this.selectedMids.keys()][0];new Bs(e,[...this.selectedMids.get(e)],"chat",()=>{this.cancelSelection()})},s)),this.selectionContainer.append(...[t,this.selectionCountEl,this.selectionGotoBtn,this.selectionForwardBtn,this.selectionDeleteBtn].filter(Boolean));const i=this.selectionContainer;i.style.opacity="0",this.searchSuper.navScrollableContainer.append(i),i.offsetLeft,i.style.opacity=""}},this.isPrivate=!e.showSender}toggleSelection(e=!0,t=!1){const s=super.toggleSelection(e,t);if(s&&e){Array.from(this.searchSuper.tabsContainer.querySelectorAll(".search-super-item")).forEach(e=>{this.toggleElementCheckbox(e,this.isSelecting)})}return s}}class Gs extends Ws{constructor(e,t,s,i){super({appMessagesManager:i,listenElement:t.bubblesContainer,listenerSetter:t.listenerSetter,getElementFromTarget:e=>Object(Ce.a)(e,"grouped-item")||Object(Ce.a)(e,"bubble"),verifyTarget:(e,t)=>!(!this.selectedMids.size&&!e.target.classList.contains("bubble")&&!e.target.classList.contains("document-selection")&&t),verifyMouseMoveTarget:(e,t,s)=>!(e.target!==t&&!e.target.classList.contains("document-selection")&&void 0===s&&!this.selectedMids.size),verifyTouchLongPress:()=>!this.chat.input.recording,targetLookupClassName:"bubble",lookupBetweenParentClassName:"bubbles-inner",lookupBetweenElementsQuery:".bubble:not(.is-multiple-documents), .grouped-item",isScheduled:"scheduled"===e.type}),this.chat=e,this.bubbles=t,this.input=s,this.toggleByElement=e=>{if(!this.canSelectBubble(e))return;const t=+e.dataset.mid;if(e.classList.contains("is-grouped")){if(!this.isGroupedBubbleSelected(e)){const e=this.selectedMids.get(this.bubbles.peerId);if(e){this.chat.getMidsByMid(t).forEach(t=>e.delete(t))}}return void this.bubbles.getBubbleGroupedItems(e).forEach(this.toggleByElement)}if(!this.toggleMid(this.bubbles.peerId,t))return;if(e.classList.contains("grouped-item")){const s=Object(Ce.a)(e,"bubble"),i=this.isGroupedBubbleSelected(s),n=this.isGroupedMidsSelected(t);(n||i)&&this.updateElementSelection(s,n)}this.updateElementSelection(e,this.isMidSelected(this.bubbles.peerId,t))},this.toggleByMid=(e,t)=>{const s=this.bubbles.getMountedBubble(t);s&&this.toggleByElement(s.bubble)},this.onToggleSelection=e=>{let t="",s="";if(e){const e=this.input.rowsWrapper.parentElement,i=e.querySelector(".fake-selection-wrapper"),n=e.querySelector(".fake-rows-wrapper"),a=i.getBoundingClientRect(),o=n.getBoundingClientRect(),r=o.width,l=a.width;if(r!==l){const e=l/r,i=(r-l)/2;if(t=`translateX(${a.left-o.left-i}px) scaleX(${e})`,e<1){const t=12;s=t+t*(1-e)+"px"}}}if(Object(Xt.a)(this.input.rowsWrapper,"is-centering",e,200),this.input.rowsWrapper.style.transform=t,this.input.rowsWrapper.style.borderRadius=s,Object(Xt.a)(this.listenElement,"is-selecting",e,200,()=>{this.isSelecting||(this.selectionInputWrapper.remove(),this.selectionInputWrapper=this.selectionContainer=this.selectionSendNowBtn=this.selectionForwardBtn=this.selectionDeleteBtn=null,this.selectedText=void 0),Object(_e.b)(()=>{this.bubbles.onScroll()})}),this.isSelecting&&!this.selectionContainer){this.selectionInputWrapper=document.createElement("div"),this.selectionInputWrapper.classList.add("chat-input-wrapper","selection-wrapper"),this.selectionContainer=document.createElement("div"),this.selectionContainer.classList.add("selection-container");const e={listenerSetter:this.listenerSetter},t=N("close",{noRipple:!0});Object(l.b)(t,this.cancelSelection,{once:!0,listenerSetter:this.listenerSetter}),this.selectionCountEl=document.createElement("div"),this.selectionCountEl.classList.add("selection-container-count"),"scheduled"===this.chat.type?(this.selectionSendNowBtn=Object(U.a)("btn-primary btn-transparent btn-short text-bold selection-container-send",{icon:"send2"}),this.selectionSendNowBtn.append(Object(A.i18n)("MessageScheduleSend")),Object(l.b)(this.selectionSendNowBtn,()=>{new Hs(this.bubbles.peerId,[...this.selectedMids.get(this.bubbles.peerId)],()=>{this.cancelSelection()})},e)):(this.selectionForwardBtn=Object(U.a)("btn-primary btn-transparent text-bold selection-container-forward",{icon:"forward"}),this.selectionForwardBtn.append(Object(A.i18n)("Forward")),Object(l.b)(this.selectionForwardBtn,()=>{const e={};for(const[t,s]of this.selectedMids)e[t]=Array.from(s);new Ds(e,()=>{this.cancelSelection()})},e)),this.selectionDeleteBtn=Object(U.a)("btn-primary btn-transparent danger text-bold selection-container-delete",{icon:"delete"}),this.selectionDeleteBtn.append(Object(A.i18n)("Delete")),Object(l.b)(this.selectionDeleteBtn,()=>{new Bs(this.bubbles.peerId,[...this.selectedMids.get(this.bubbles.peerId)],this.chat.type,()=>{this.cancelSelection()})},e),this.selectionContainer.append(...[t,this.selectionCountEl,this.selectionSendNowBtn,this.selectionForwardBtn,this.selectionDeleteBtn].filter(Boolean)),this.selectionInputWrapper.style.opacity="0",this.selectionInputWrapper.append(this.selectionContainer),this.input.rowsWrapper.parentElement.append(this.selectionInputWrapper),this.selectionInputWrapper.offsetLeft,this.selectionInputWrapper.style.opacity=""}},this.onUpdateContainer=(e,t,s)=>{Object(x.a)(this.selectionCountEl,Object(A.i18n)("messages",[this.length()])),this.selectionSendNowBtn&&this.selectionSendNowBtn.toggleAttribute("disabled",s),this.selectionForwardBtn&&this.selectionForwardBtn.toggleAttribute("disabled",e),this.selectionDeleteBtn.toggleAttribute("disabled",t)},this.onCancelSelection=()=>{for(const[e,t]of this.selectedMids)for(const e of t){const t=this.bubbles.getMountedBubble(e);t&&this.toggleByElement(t.bubble)}}}appendCheckbox(e,t){t.label.classList.add("bubble-select-checkbox"),e.classList.contains("document-container")?e.querySelector(".document, audio-element").append(t.label):super.appendCheckbox(e,t)}toggleSelection(e=!0,t=!1){const s=super.toggleSelection(e,t);if(s&&e)for(const e in this.bubbles.bubbles){const t=this.bubbles.bubbles[e];this.toggleElementCheckbox(t,this.isSelecting)}return s}toggleElementCheckbox(e,t){if(!this.canSelectBubble(e))return;const s=super.toggleElementCheckbox(e,t);if(s){e.classList.contains("is-grouped")&&this.bubbles.getBubbleGroupedItems(e).forEach(e=>this.toggleElementCheckbox(e,t))}return s}isElementShouldBeSelected(e){const t=e.classList.contains("is-grouped");return super.isElementShouldBeSelected(e)&&(!t||this.isGroupedMidsSelected(+e.dataset.mid))}isGroupedBubbleSelected(e){const t=this.getCheckboxInputFromElement(e);return null==t?void 0:t.checked}isGroupedMidsSelected(e){const t=this.chat.getMidsByMid(e),s=t.filter(e=>this.isMidSelected(this.bubbles.peerId,e));return t.length===s.length}getCheckboxInputFromElement(e){return e.classList.contains("document-container")?e.querySelector("label input"):super.getCheckboxInputFromElement(e)}canSelectBubble(e){return!e.classList.contains("service")&&!e.classList.contains("is-sending")&&!e.classList.contains("bubble-first")}}var qs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Qs{constructor(e,t){this.attachTo=e,this.searchSuper=t,this.onGotoClick=()=>{a.default.dispatchEvent("history_focus",{peerId:this.peerId,mid:this.mid,threadId:this.searchSuper.searchContext.threadId})},this.onForwardClick=()=>{this.searchSuper.selection.isSelecting?Object(l.d)(this.searchSuper.selection.selectionForwardBtn):new Ds({[this.peerId]:[this.mid]})},this.onSelectClick=()=>{this.searchSuper.selection.toggleByElement(this.target)},this.onClearSelectionClick=()=>{this.searchSuper.selection.cancelSelection()},this.onDeleteClick=()=>{this.searchSuper.selection.isSelecting?Object(l.d)(this.searchSuper.selection.selectionDeleteBtn):new Bs(this.peerId,[this.mid],"chat")};const s=e=>{let s;this.init&&(this.init(),this.init=null);try{s=Object(Ce.a)(e.target,"search-super-item")}catch(e){}if(s){if(e instanceof MouseEvent&&e.preventDefault(),this.element.classList.contains("active"))return!1;e instanceof MouseEvent&&(e.cancelBubble=!0),this.target=s,this.peerId=+s.dataset.peerId,this.mid=+s.dataset.mid,this.isSelected=t.selection.isMidSelected(this.peerId,this.mid),this.buttons.forEach(e=>{let t;t=!(this.isSelected&&!e.withSelection)&&(!e.verify||e.verify()),e.element.classList.toggle("hide",!t)}),s.classList.add("menu-open"),Object(se.e)(e,this.element),Object(se.d)(this.element,()=>{s.classList.remove("menu-open")})}};pe.IS_TOUCH_SUPPORTED||Object(se.a)(e,s)}init(){this.buttons=[{icon:"forward",text:"Forward",onClick:this.onForwardClick},{icon:"forward",text:"Message.Context.Selection.Forward",onClick:this.onForwardClick,verify:()=>this.isSelected&&!this.searchSuper.selection.selectionForwardBtn.classList.contains("hide"),withSelection:!0},{icon:"message",text:"Message.Context.Goto",onClick:this.onGotoClick,withSelection:!0},{icon:"select",text:"Message.Context.Select",onClick:this.onSelectClick},{icon:"select",text:"Message.Context.Selection.Clear",onClick:this.onClearSelectionClick,verify:()=>this.isSelected,withSelection:!0},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>i.a.canDeleteMessage(i.a.getMessageByPeer(this.peerId,this.mid))},{icon:"delete danger",text:"Message.Context.Selection.Delete",onClick:this.onDeleteClick,verify:()=>this.isSelected&&!this.searchSuper.selection.selectionDeleteBtn.classList.contains("hide"),withSelection:!0}],this.element=Ee(this.buttons),this.element.classList.add("search-contextmenu","contextmenu"),document.getElementById("page-chats").append(this.element)}}class $s{constructor(e){this.tabs={},this.prevTabId=-1,this.lazyLoadQueue=new te.d,this.middleware=Object(ks.a)(),this.historyStorage={},this.usedFromHistory={},this.urlsToRevoke=[],this.loadMutex=Promise.resolve(),this.nextRates={},this.loadPromises={},this.loaded={},this.loadedChats=!1,this.firstLoad=!0,this.log=Object(J.b)("SEARCH-SUPER"),this.monthContainers={},this.mediaTabsMap=new Map,this.asChatList=!1,this.groupByMonth=!0,this.hideEmptyTabs=!0,this.showSender=!1,this.onTransitionStart=()=>{this.container.classList.add("sliding")},this.onTransitionEnd=()=>{this.container.classList.remove("sliding")},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("search-super"),this.searchContextMenu=new Qs(this.container,this),this.selection=new Ks(this,i.a);const t=this.navScrollableContainer=document.createElement("div");t.classList.add("search-super-tabs-scrollable","menu-horizontal-scrollable","sticky");const s=this.navScrollable=new P.a(t);s.container.classList.add("search-super-nav-scrollable");const n=this.nav=document.createElement("nav");n.classList.add("search-super-tabs","menu-horizontal-div"),this.tabsMenu=n,s.container.append(n);for(const e of this.mediaTabs){const t=document.createElement("div");t.classList.add("menu-horizontal-div-item");const s=document.createElement("span"),i=document.createElement("i");s.append(Object(A.i18n)(e.name)),s.append(i),t.append(s),Object(ie.ripple)(t),this.tabsMenu.append(t),this.mediaTabsMap.set(e.type,e),e.menuTab=t}this.tabsContainer=document.createElement("div"),this.tabsContainer.classList.add("search-super-tabs-container","tabs-container"),pe.IS_TOUCH_SUPPORTED&&_s(this.tabsContainer,e=>{const t=this.selectTab.prevId();this.selectTab(e?t+1:t-1)});for(const e of this.mediaTabs){const t=document.createElement("div");t.classList.add("search-super-container-"+e.type,"tabs-tab");const s=document.createElement("div");s.classList.add("search-super-content-"+e.type),t.append(s),this.tabsContainer.append(t),this.tabs[e.inputFilter]=s,e.contentTab=s}this.container.append(t,this.tabsContainer),this.searchGroupMedia=new O(!1,"messages",!0),this.scrollable.onScrolledBottom=()=>{this.mediaTab.contentTab&&this.mediaTab.contentTab.childElementCount&&this.load(!0)},this.selectTab=Object(ee.a)(this.tabsMenu,this.tabsContainer,(e,t,s)=>{if(this.prevTabId===e&&!this.skipScroll)return void this.scrollable.scrollIntoViewNew(this.container,"start");const i=this.mediaTabs[e];this.onChangeTab&&this.onChangeTab(i);const n=this.mediaTab;if(this.mediaTab=i,-1!==this.prevTabId&&s&&this.onTransitionStart(),this.skipScroll)this.skipScroll=!1;else{const e=this.container.offsetTop;let t=this.scrollable.scrollTop;if(tn&&(i.scroll={scrollTop:n,scrollHeight:0})}if(i.scroll){const e=n.scroll.scrollTop-i.scroll.scrollTop;e&&(i.contentTab.style.transform=`translateY(${e}px)`)}}-1===this.prevTabId||i.contentTab.childElementCount||this.load(!0),this.prevTabId=e},()=>{this.scrollable.onScroll(),void 0!==this.mediaTab.scroll&&(this.mediaTab.contentTab.style.transform="",this.scrollable.scrollTop=this.mediaTab.scroll.scrollTop),this.onTransitionEnd()},void 0,s),Object(l.b)(this.tabsContainer,e=>{this.selection.isSelecting&&(Object(c.a)(e),this.selection.toggleByElement(Object(Ce.a)(e.target,"search-super-item")))},{capture:!0,passive:!1});const a=(e,t,s,n)=>{const a=Object(Ce.a)(n.target,e);if(!a)return;const o=+a.dataset.mid;if(!o)return void this.log.warn("no messageId by click on target:",a);const r=+a.dataset.peerId,l=Array.from(this.tabs[s].querySelectorAll("."+t)).map(t=>{const s=Object(Ce.a)(t,e);return{element:t,mid:+s.dataset.mid,peerId:+s.dataset.peerId}}),c=l.findIndex(e=>e.mid===o&&e.peerId===r),d=i.a.getMessageByPeer(r,o);(new fo).setSearchContext(this.copySearchContext(s)).openMedia(d,l[c].element,0,!1,l.slice(0,c),l.slice(c+1))};Object(l.b)(this.tabs.inputMessagesFilterPhotoVideo,a.bind(null,"grid-item","grid-item","inputMessagesFilterPhotoVideo")),Object(l.b)(this.tabs.inputMessagesFilterDocument,a.bind(null,"document-with-thumb","media-container","inputMessagesFilterDocument")),this.mediaTab=this.mediaTabs[0],Object(Cs.a)(()=>{this.lazyLoadQueue.lock()},()=>{this.lazyLoadQueue.unlockAndRefresh()})}filterMessagesByType(e,t){if("inputMessagesFilterEmpty"===t)return e;"inputMessagesFilterUrl"!==t&&(e=e.filter(e=>!!e.media));let s=[];switch(t){case"inputMessagesFilterPhotoVideo":for(let t of e){let e=t.media.photo||t.media.document||t.media.webpage&&t.media.webpage.document;e&&("document"===e._&&"video"!==e.type||s.push(t))}break;case"inputMessagesFilterDocument":for(let t of e)t.media.document&&!["voice","audio","gif","sticker","round"].includes(t.media.document.type)&&s.push(t);break;case"inputMessagesFilterUrl":for(let t of e)s.push(t);break;case"inputMessagesFilterMusic":for(let t of e)t.media.document&&"audio"===t.media.document.type&&s.push(t);break;case"inputMessagesFilterVoice":for(let t of e)t.media.document&&"voice"===t.media.document.type&&s.push(t);break;case"inputMessagesFilterRoundVoice":for(let t of e)t.media.document&&["voice","round"].includes(t.media.document.type)&&s.push(t)}return s}performSearchResult(e,t,s=!0){var n;return qs(this,void 0,void 0,(function*(){const a=[],o=t.contentTab,l=[],c=this.middleware.get();let d,h=t.inputFilter;switch(yield Object(Cs.c)(),"inputMessagesFilterPhotoVideo"===h&&this.searchContext.query.trim()?(h="inputMessagesFilterEmpty",d=this.searchGroupMedia,o.append(d.container)):"inputMessagesFilterEmpty"===h&&(d=this.searchGroups.messages),h){case"inputMessagesFilterEmpty":for(const t of e){const{dialog:e,dom:s}=Do.addDialogNew({dialog:t.peerId,container:d.list,drawStatus:!1,avatarSize:54});Do.setLastMessage(e,t,s,this.searchContext.query)}d.list.childElementCount&&d.setActive();break;case"inputMessagesFilterPhotoVideo":for(const t of e){const e=t.media.photo||t.media.document||t.media.webpage&&t.media.webpage.document,s=document.createElement("div");let i;s.classList.add("grid-item");const n=r.a.choosePhotoSize(e,200,200);i="photo"!==e._?vs({doc:e,message:t,container:s,boxWidth:0,boxHeight:0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,onlyPreview:!0,withoutPreloader:!0,noPlayButton:!0,size:n}).thumb:ys({photo:e,message:t,container:s,boxWidth:0,boxHeight:0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,withoutPreloader:!0,noBlur:!0,size:n}),[i.images.thumb,i.images.full].filter(Boolean).forEach(e=>{e.classList.add("grid-item-media")}),l.push(i.loadPromises.thumb),a.push({element:s,message:t})}break;case"inputMessagesFilterVoice":case"inputMessagesFilterRoundVoice":case"inputMessagesFilterMusic":case"inputMessagesFilterDocument":for(const t of e){const e=this.showSender||["voice","round"].includes(t.media.document.type),s=fs({message:t,withTime:!e,fontWeight:400,voiceAsMusic:!0,showSender:e,searchContext:this.copySearchContext(h),lazyLoadQueue:this.lazyLoadQueue,noAutoDownload:!0});["audio","voice","round"].includes(t.media.document.type)&&s.classList.add("audio-48"),a.push({element:s,message:t})}break;case"inputMessagesFilterUrl":for(let t of e){let e;if((null===(n=t.media)||void 0===n?void 0:n.webpage)&&"webPageEmpty"!==t.media.webpage._)e=t.media.webpage;else{const s=t.totalEntities?t.totalEntities.find(e=>"messageEntityUrl"===e._||"messageEntityTextUrl"===e._):null;let i,n,a;if(s)a=t.message.slice(s.offset,s.offset+s.length);else{const e=Z.b.matchUrl(t.message);if(!e)continue;i=e[0]}i="messageEntityTextUrl"===(null==s?void 0:s._)?s.url:i||a,n=i;const o=t.message===i;i.match(/^(ftp|http|https):\/\//)||(n="https://"+i,i=i.includes("@")?i:"https://"+i),n=new URL(n).hostname,e={url:i,display_url:n},o||(e.description=t.message,e.rDescription=Z.b.wrapRichText(Object(X.f)(t.message,150,180)))}document.createElement("div");let s=document.createElement("div");if(s.classList.add("preview","row-media"),e.photo){ys({container:s,message:null,photo:e.photo,boxWidth:0,boxHeight:0,withoutPreloader:!0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,size:r.a.choosePhotoSize(e.photo,60,60,!1),loadPromises:l,noBlur:!0})}else s.classList.add("empty"),s.innerHTML=Z.b.getAbbreviation(e.title||e.display_url||e.description||e.url,!0);let o=e.rTitle||"",d=e.rDescription||"";const h=Object(Rs.a)(d),u=Object(Rs.a)(Z.b.wrapRichText(e.url||"")).firstElementChild;u instanceof HTMLAnchorElement&&(u.innerText=decodeURIComponent(u.href)),h.firstChild&&h.append("\n"),h.append(u),this.showSender&&h.append("\n",i.a.wrapSenderToPeer(t)),o||(o=Z.b.wrapPlainText(e.display_url.split("/",1)[0]));const p=new Je({title:o,titleRight:i.a.wrapSentTime(t),subtitle:h,havePadding:!0,clickable:!0,noRipple:!0});p.container.append(s),p.container.innerText.trim().length&&a.push({element:p.container,message:t})}}if(this.loadMutex&&l.push(this.loadMutex),!l.length||(yield Promise.all(l),c())){if(a.length){const e=s?"append":"prepend";a.forEach(t=>{const{element:s,message:i}=t,n=this.getMonthContainerByTimestamp(this.groupByMonth?i.date:0,h);s.classList.add("search-super-item"),s.dataset.mid=""+i.mid,s.dataset.peerId=""+i.peerId,n.items[e](s),this.selection.isSelecting&&this.selection.toggleElementCheckbox(s,!0)})}this.afterPerforming("inputMessagesFilterEmpty"===h?1:e.length,o)}}))}afterPerforming(e,t){if(t){const s=t.parentElement;if(Array.from(s.children).slice(1).forEach(e=>{e.remove()}),!e&&!t.childElementCount){const e=document.createElement("div");e.innerText="Nothing interesting here yet...",e.classList.add("position-center","text-center","content-empty","no-select"),s.append(e)}}}loadChats(){const e=new Set,t=this.middleware.get();for(let e in this.searchGroups){const t=this.searchGroups[e];this.tabs.inputMessagesFilterEmpty.append(t.container),t.clear()}const s=this.searchContext.query;if(s){const r=(t,i,r=!1)=>{t.forEach(t=>{if(e.has(t))return;e.add(t);const l=o.a.getPeer(t),{dom:c}=Do.addDialogNew({dialog:t,container:i.list,drawStatus:!1,avatarSize:48,autonomous:i.autonomous});if(r&&(l.participants_count||l.participants)){const e=new RegExp(`(${Object(X.e)(s)}|${Object(X.e)(Object(ps.b)(s))})`,"gi");c.titleSpan.innerHTML=c.titleSpan.innerHTML.replace(e,"$1"),c.lastMessageSpan.append(n.default.getChatMembersString(-t))}else if(t===a.default.myId)c.lastMessageSpan.append(Object(A.i18n)("Presence.YourChat"));else{let e=o.a.getPeerUsername(t);if(e)e="@"+e;else{const s=T.a.getUser(t);s&&s.phone&&(e="+"+Object(Fs.a)(s.phone).formatted)}c.lastMessageSpan.innerHTML=""+e+""}}),i.toggle()},l=e=>{if(t())return e};return Promise.all([T.a.getContacts(s,!0).then(l).then(e=>{e&&r(e,this.searchGroups.contacts,!0)}),T.a.searchContacts(s,20).then(l).then(e=>{if(e&&(r(e.my_results,this.searchGroups.contacts,!0),r(e.results,this.searchGroups.globalContacts),this.searchGroups.globalContacts.nameEl.lastElementChild&&this.searchGroups.globalContacts.nameEl.lastElementChild.remove(),this.searchGroups.globalContacts.container.classList.add("is-short"),this.searchGroups.globalContacts.list.childElementCount>3)){const e=document.createElement("div");e.classList.add("search-group__show-more"),e.innerText="Show more",this.searchGroups.globalContacts.nameEl.append(e),e.addEventListener("click",()=>{const t=this.searchGroups.globalContacts.container.classList.toggle("is-short");e.innerText=t?"Show more":"Show less"})}}),i.a.getConversations(s,0,20,0).promise.then(l).then(e=>{e&&r(e.dialogs.map(e=>e.peerId),this.searchGroups.contacts,!0)})])}if(this.searchContext.peerId||this.searchContext.minDate)return Promise.resolve();{const e=(e=!0)=>k.default.getState().then(s=>{t()&&(this.searchGroups.recent.list.innerHTML="",s.recentSearch.slice(0,20).forEach(e=>{let{dialog:t,dom:s}=Do.addDialogNew({dialog:e,container:this.searchGroups.recent.list,drawStatus:!1,meAsSaved:!0,avatarSize:48,autonomous:!0});s.lastMessageSpan.append(e>0?T.a.getUserStatusString(e):n.default.getChatMembersString(-e))}),s.recentSearch.length?e&&this.searchGroups.recent.setActive():this.searchGroups.recent.clear())});return Promise.all([T.a.getTopPeers("correspondents").then(e=>{if(!t())return;const s=e.findIndex(e=>e.id===a.default.myId);-1!==s&&(e=e.slice()).splice(s,1),e.length&&e.forEach(e=>{Do.addDialogNew({dialog:e.id,container:this.searchGroups.people.list,drawStatus:!1,onlyFirstName:!0,avatarSize:54,autonomous:!1})}),this.searchGroups.people.setActive()}),e()])}}loadMembers(e){const t=-this.searchContext.peerId,s=this.middleware.get();let i;const a=t=>qs(this,void 0,void 0,(function*(){this.loadMutex&&(yield this.loadMutex,!s())||(this.membersList||(this.membersList=new Os({lazyLoadQueue:this.lazyLoadQueue,rippleEnabled:!1}),this.membersList.list.addEventListener("click",e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=+t.dataset.peerId;let i=Promise.resolve();v.b.isMobile&&(i=$t.toggleSidebar(!1)),i.then(()=>{mo.setInnerPeer(s)})}),e.contentTab.append(this.membersList.list),this.afterPerforming(1,e.contentTab)),t.forEach(e=>{const t=G.a.getParticipantPeerId(e);if(t<0)return;T.a.getUser(t).pFlags.deleted||this.membersList.add(t)}))}));if(G.a.isChannel(t)){const o=this.membersList?200:50;i=n.default.getChannelParticipants(t,void 0,o,this.nextRates[e.inputFilter]).then(t=>{if(!s())return;let i=e.contentTab.firstElementChild;return this.nextRates[e.inputFilter]=(i?i.childElementCount:0)+t.participants.length,t.participants.length{if(!s())return;this.loaded[e.inputFilter]=!0;const i=t.participants;return"chatParticipantsForbidden"!==i._?a(i.participants):void 0});return this.loadPromises[e.inputFilter]=i.finally(()=>{s()&&(this.loadPromises[e.inputFilter]=null)})}loadType(e,t,s,n){var a,o;const r=e.inputFilter;if(this.loadPromises[r])return this.loadPromises[r];if("members"===e.type)return this.loadMembers(e);const l=null!==(a=this.historyStorage[r])&&void 0!==a?a:this.historyStorage[r]=[];if(!("inputMessagesFilterEmpty"!==r||l.length||(this.loadedChats||(this.loadChats(),this.loadedChats=!0),this.searchContext.query.trim()||this.searchContext.peerId||this.searchContext.minDate)))return this.loaded[r]=!0,Promise.resolve();const c="load ["+r+"]: ";if(l.length&&this.usedFromHistory[r]i.a.getMessageByPeer(e.peerId,e.mid)),r))}while(a{setTimeout(()=>{this.scrollable.checkForTriggers()},0)})}let d=l.length?l[l.length-1].mid:0;return this.loadPromises[r]=i.a.getSearch(Object.assign(Object.assign({},this.searchContext),{inputFilter:{_:r},maxId:d,limit:s,nextRate:null!==(o=this.nextRates[r])&&void 0!==o?o:this.nextRates[r]=0})).then(i=>{if(l.push(...i.history.map(e=>({mid:e.mid,peerId:e.peerId}))),this.log(c+"search house of glass",r,i),n())return(i.history.length{setTimeout(()=>{if(n()&&this.mediaTab===e){const e=this.load(!0,!0);e&&e.then(()=>{n()&&setTimeout(()=>{this.scrollable.checkForTriggers()},0)})}},0)}),this.performSearchResult(this.filterMessagesByType(i.history,r),e))}).catch(e=>{this.log.error("load error:",e)}).finally(()=>{this.loadPromises[r]=null})}load(e=!1,t=!1){return qs(this,void 0,void 0,(function*(){const s=this.searchContext.peerId;this.log("load",e,s,this.loadPromises);const n=this.middleware.get();if(this.firstLoad){if(this.hideEmptyTabs){const e=this.mediaTabs.filter(e=>"inputMessagesFilterEmpty"!==e.inputFilter),t=e.map(e=>({_:e.inputFilter})),a=yield i.a.getSearchCounters(s,t);if(!n())return;if(this.loadMutex&&(yield this.loadMutex,!n()))return;let o,r=0;e.forEach(e=>{const t=a.find(t=>t.filter._===e.inputFilter);e.menuTab.classList.toggle("hide",!t.count),e.menuTab.classList.remove("active"),t.count&&void 0===o&&(o=e),t.count&&++r});const l=this.mediaTabsMap.get("members"),c=this.canViewMembers();l.menuTab.classList.toggle("hide",!c),c&&(o=l),this.container.classList.toggle("hide",!o),this.container.parentElement.classList.toggle("search-empty",!o),o&&(this.skipScroll=!0,this.selectTab(this.mediaTabs.indexOf(o),!1),o.menuTab.classList.add("active"),this.navScrollableContainer.classList.toggle("hide",r<=1))}this.firstLoad=!1}let a=e?[this.mediaTab]:this.mediaTabs.filter(e=>e!==this.mediaTab);if(a=a.filter(e=>{const t=e.inputFilter;return!this.loaded[t]||this.historyStorage[t]&&this.usedFromHistory[t]0&&a.findAndSplice(e=>"members"===e.type),!a.length)return;const o=t?50:Math.round(3*(yt.a.windowH/130|0)*1.25),r=a.map(e=>this.loadType(e,t,o,n));return Promise.all(r).catch(e=>{this.log.error("Load error all promises:",e)})}))}getMonthContainerByTimestamp(e,t){var s;const i=new Date(1e3*e);i.setHours(0,0,0),i.setDate(1);const n=i.getTime(),a=null!==(s=this.monthContainers[t])&&void 0!==s?s:this.monthContainers[t]={};if(!(n in a)){const e=document.createElement("div");e.className="search-super-month";const s=document.createElement("div");s.classList.add("search-super-month-name");const o={month:"long"};i.getFullYear()!==(new Date).getFullYear()&&(o.year="numeric");const r=new A.default.IntlDateElement({date:i,options:o}).element;s.append(r),e.append(s);const l=document.createElement("div");l.classList.add("search-super-month-items"),e.append(s,l);const c=Object(L.e)(a,"desc");let d=0;for(;dc[d])break}a[n]={container:e,items:l},Ps(e,this.tabs[t],d)}return a[n]}canViewMembers(){return this.searchContext.peerId<0&&!G.a.isBroadcast(-this.searchContext.peerId)&&G.a.hasRights(-this.searchContext.peerId,"view_participants")}cleanup(){this.loadPromises={},this.loaded={},this.loadedChats=!1,this.nextRates={},this.firstLoad=!0,this.lazyLoadQueue.clear(),this.mediaTabs.forEach(e=>{this.usedFromHistory[e.inputFilter]=-1}),this.selection.isSelecting&&this.selection.cancelSelection(),this.middleware.clean(),this.cleanScrollPositions(),this.membersList=void 0}cleanScrollPositions(){this.mediaTabs.forEach(e=>{e.scroll=void 0})}cleanupHTML(e=!1){this.urlsToRevoke.length&&(this.urlsToRevoke.forEach(e=>{URL.revokeObjectURL(e)}),this.urlsToRevoke.length=0),this.mediaTabs.forEach(e=>{if(e.contentTab.innerHTML="",this.hideEmptyTabs&&(this.container.classList.add("hide"),this.container.parentElement.classList.add("search-empty")),"chats"!==e.type&&!this.historyStorage[e.inputFilter]){const t=e.contentTab.parentElement;t.querySelector(".preloader")||Object(se.f)(t,!0);const s=t.querySelector(".content-empty");s&&s.remove()}}),this.monthContainers={},this.searchGroupMedia.clear(),this.scrollable.scrollTop=0}copySearchContext(e){const t=Object(L.a)(this.searchContext);return t.inputFilter={_:e},t.nextRate=this.nextRates[e],t}setQuery({peerId:e,query:t,threadId:s,historyStorage:i,folderId:n,minDate:a,maxDate:o}){this.searchContext={peerId:e||0,query:t||"",inputFilter:{_:this.mediaTab.inputFilter},threadId:s,folderId:n,minDate:a,maxDate:o},this.historyStorage=null!=i?i:{},this.cleanup()}}var Ys,Xs=s(69);!function(e){e[e.Everybody=2]="Everybody",e[e.Contacts=1]="Contacts",e[e.Nobody=0]="Nobody"}(Ys||(Ys={}));const Js=new class{constructor(){this.privacy={},a.default.addMultipleEventsListeners({updatePrivacy:e=>{const t=e.key._;this.privacy[t]=e.rules,a.default.dispatchEvent("privacy_update",e)}})}setPrivacy(e,t){return rt.a.invokeApi("account.setPrivacy",{key:{_:e},rules:t}).then(s=>(T.a.saveApiUsers(s.users),G.a.saveApiChats(s.chats),Xs.a.processLocalUpdate({_:"updatePrivacy",key:{_:Object(X.b)(e)},rules:t.map(e=>{const t={};return Object.assign(t,e),t._=Object(X.b)(t._),t})}),s.rules))}getPrivacy(e){const t=Object(X.b)(e),s=this.privacy[t];return s?Promise.resolve(s):this.privacy[t]=rt.a.invokeApi("account.getPrivacy",{key:{_:e}}).then(e=>(T.a.saveApiUsers(e.users),G.a.saveApiChats(e.chats),this.privacy[t]=e.rules))}getPrivacyRulesDetails(e){const t=[];let s={users:[],chats:[]},i={users:[],chats:[]};return e.forEach(e=>{switch(e._){case"privacyValueAllowAll":t.push(2);break;case"privacyValueDisallowAll":t.push(0);break;case"privacyValueAllowContacts":t.push(1);break;case"privacyValueAllowChatParticipants":s.chats.push(...e.chats);break;case"privacyValueAllowUsers":s.users.push(...e.users);break;case"privacyValueDisallowChatParticipants":i.chats.push(...e.chats);break;case"privacyValueDisallowUsers":i.users.push(...e.users)}}),{type:t[0],disallowPeers:i,allowPeers:s}}};de.a.appPrivacyManager=Js;var Zs=Js;class ei{constructor(e){this.options=e,this.onRadioChange=e=>{e=+e,this.type=e;const t=this.options.captions[this.type],s=this.radioSection.caption;t?Object(A._i18n)(s,t):s.innerHTML="",s.classList.toggle("hide",!t),this.exceptions&&(this.exceptions.get("allow").row.container.classList.toggle("hide",this.type===Ys.Everybody),this.exceptions.get("disallow").row.container.classList.toggle("hide",this.type===Ys.Nobody)),this.options.onRadioChange&&this.options.onRadioChange(e)},e.captions&&e.captions.reverse(),this.radioSection=new nn({name:e.title,caption:!0}),this.radioRows=new Map;let t=[{type:Ys.Everybody,langKey:"PrivacySettingsController.Everbody"},{type:Ys.Contacts,langKey:"PrivacySettingsController.MyContacts"},{type:Ys.Nobody,langKey:"PrivacySettingsController.Nobody"}];e.skipTypes&&(t=t.filter(t=>!e.skipTypes.includes(t.type)));const s=Object(tt.b)();t.forEach(({type:e,langKey:t})=>{const i=new Je({radioField:new st({langKey:t,name:s,value:""+e})});this.radioRows.set(e,i)});const i=Ze([...this.radioRows.values()],this.onRadioChange);if(this.radioSection.content.append(i),e.appendTo&&e.appendTo.append(this.radioSection.container),!e.noExceptions){const t=an(e.appendTo,"PrivacyExceptions","PrivacySettingsController.PeerInfo");this.exceptions=new Map([["disallow",{titleLangKey:e.exceptionTexts[0],key:"disallow",row:null,icon:"deleteuser",subtitleLangKey:"PrivacySettingsController.AddUsers",clickable:!0}],["allow",{titleLangKey:e.exceptionTexts[1],key:"allow",row:null,icon:"adduser",subtitleLangKey:"PrivacySettingsController.AddUsers",clickable:!0}]]),this.exceptions.forEach(s=>{s.row=new Je(s),s.row.container.addEventListener("click",()=>{n.then(()=>{const t=this.peerIds[s.key];new jt(e.tab.slider).open({type:"privacy",skippable:!0,title:s.titleLangKey,placeholder:"PrivacyModal.Search.Placeholder",takeOut:e=>{t.length=0,t.push(...e),s.row.subtitle.innerHTML="",s.row.subtitle.append(...this.generateStr(this.splitPeersByType(e)))},selectedPeerIds:t})})}),t.append(s.row.container)})}const n=Zs.getPrivacy(e.inputKey).then(t=>{const s=Zs.getPrivacyRulesDetails(t);this.setRadio(s.type),this.exceptions&&(this.peerIds={},["allow","disallow"].forEach(e=>{const t=[],i="allow"===e?s.allowPeers:s.disallowPeers;t.push(...i.users),t.push(...i.chats.map(e=>-e)),this.peerIds[e]=t;const n=this.exceptions.get(e).row.subtitle;n.innerHTML="",n.append(...this.generateStr(i))})),e.tab.eventListener.addEventListener("destroy",()=>{const t=[];switch(this.type){case Ys.Everybody:t.push({_:"inputPrivacyValueAllowAll"});break;case Ys.Contacts:t.push({_:"inputPrivacyValueAllowContacts"});break;case Ys.Nobody:t.push({_:"inputPrivacyValueDisallowAll"})}this.exceptions&&[["allow","inputPrivacyValueAllowChatParticipants","inputPrivacyValueAllowUsers"],["disallow","inputPrivacyValueDisallowChatParticipants","inputPrivacyValueDisallowUsers"]].forEach(([e,s,i],n)=>{if(this.exceptions.get(e).row.container.classList.contains("hide"))return;const a=this.peerIds[e];if(a){const e=this.splitPeersByType(a);e.chats.length&&t.push({_:s,chats:e.chats.map(e=>-e)}),e.users.length&&t.push({_:i,users:e.users.map(e=>T.a.getUserInput(e))})}}),Zs.setPrivacy(e.inputKey,t)},{once:!0})})}setRadio(e){const t=this.radioRows.get(e);this.onRadioChange(e),t.radioField.input.checked=!0}splitPeersByType(e){const t={users:[],chats:[]};return e.forEach(e=>{t[e<0?"chats":"users"].push(e<0?-e:e)}),t}generateStr(e){return e.users.length||e.chats.length?Object(A.join)([e.users.length?Object(A.i18n)("Users",[e.users.length]):null,e.chats.length?Object(A.i18n)("Chats",[e.chats.length]):null].filter(Boolean),!1):[Object(A.i18n)("PrivacySettingsController.AddUsers")]}}class ti extends W{init(){this.container.classList.add("privacy-tab","privacy-phone-number"),this.setTitle("PrivacyPhone");const e=new ei({tab:this,title:"PrivacyPhoneTitle",inputKey:"inputPrivacyKeyPhoneNumber",captions:["PrivacyPhoneInfo","PrivacyPhoneInfo",""],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable,onRadioChange:e=>{t.setRadio(Ys.Everybody),t.radioSection.container.classList.toggle("hide",e!==Ys.Nobody)}}),t=new ei({tab:this,title:"PrivacyPhoneTitle2",inputKey:"inputPrivacyKeyAddedByPhone",captions:["PrivacyPhoneInfo3","PrivacyPhoneInfo3",""],noExceptions:!0,skipTypes:[Ys.Nobody]});this.scrollable.container.insertBefore(t.radioSection.container,e.radioSection.container.nextSibling)}}var si=s(74);class ii extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-set"),this.setTitle("TwoStepVerificationPasswordSet");const e=new nn({caption:"TwoStepVerificationPasswordSetInfo",noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("🥳"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!0,play:!0,width:160,height:160}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=Object(U.a)("btn-primary btn-color-primary",{text:"TwoStepVerificationPasswordReturnSettings"});Object(l.b)(a,e=>{this.close()}),this.slider.sliceTabsUntilTab($i,this),n.append(a),i.append(n),this.scrollable.container.append(e.container)}}var ni=s(105);function ai(e){return!h.IS_MOBILE_SAFARI||!e}class oi extends V{constructor(){super(...arguments),this.isFirst=!1}init(){this.container.classList.add("two-step-verification","two-step-verification-email-confirmation"),this.setTitle("TwoStepAuth.RecoveryTitle");const e=new nn({caption:!0,noDelimiter:!0});Object(A._i18n)(e.caption,"TwoStepAuth.ConfirmEmailCodeDesc",[this.email]);const t=hs.getAnimatedEmojiSticker("📬"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"📬"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=this.codeInputField=new ni.a({name:"recovery-email-code",label:"TwoStepAuth.RecoveryCode",length:this.length,onFill:e=>{d(!0),si.a.confirmPasswordEmail(""+e).then(e=>{c()}).catch(e=>{switch(e.type){case"CODE_INVALID":a.input.classList.add("error"),Object(x.a)(a.label,Object(A.i18n)("TwoStepAuth.RecoveryCodeInvalid"));break;case"EMAIL_HASH_EXPIRED":a.input.classList.add("error"),Object(x.a)(a.label,Object(A.i18n)("TwoStepAuth.RecoveryCodeExpired"));break;default:console.error("confirm error",e)}d(!1)})}}),o=Object(U.a)("btn-primary btn-primary-transparent primary",{text:"TwoStepAuth.EmailCodeChangeEmail"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"ResendCode"}),c=()=>{new ii(this.slider).open()},d=e=>{Object(ut.a)([a.input,o,r],e)};Object(l.b)(o,e=>{d(!0),si.a.cancelPasswordEmail().then(e=>{this.slider.sliceTabsUntilTab(ri,this),this.close()},()=>{d(!1)})}),Object(l.b)(r,e=>{d(!0);const t=Object(se.f)(r);si.a.resendPasswordEmail().then(e=>{t.remove(),d(!1)})}),n.append(a.container,o,r),i.append(n),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){ai(this.isFirst)&&this.codeInputField.input.focus()}}class ri extends V{constructor(){super(...arguments),this.isFirst=!1}init(){this.container.classList.add("two-step-verification","two-step-verification-email"),this.setTitle("RecoveryEmailTitle");const e=new nn({caption:!0,noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("💌"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"💌"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=this.inputField=new F.b({name:"recovery-email",label:"RecoveryEmail",plainText:!0});a.input.addEventListener("keypress",e=>{if("Enter"===e.key)return Object(c.a)(e),h()}),a.input.addEventListener("input",e=>{a.input.classList.remove("error")});const o=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"YourEmailSkip"}),d=()=>{new ii(this.slider).open()},h=()=>{const e=a.value.trim(),t=Z.b.matchEmail(e);if(!t||t[0].length!==e.length)return void a.input.classList.add("error");u(!0);const s=Object(se.f)(o);si.a.updateSettings({hint:this.hint,currentPassword:this.plainPassword,newPassword:this.newPassword,email:e}).then(e=>{d()},t=>{if(t.type.includes("EMAIL_UNCONFIRMED")){const s=+t.type.match(/^EMAIL_UNCONFIRMED_(\d+)/)[1],i=new oi(this.slider);i.state=this.state,i.email=e,i.length=s,i.open()}else console.log("password set error",t);u(!1),s.remove()})};Object(l.b)(o,h);const u=e=>{e?(o.setAttribute("disabled","true"),r.setAttribute("disabled","true")):(o.removeAttribute("disabled"),r.removeAttribute("disabled"))};Object(l.b)(r,e=>{new ht("popup-skip-email",{buttons:[{langKey:"Cancel",isCancel:!0},{langKey:"YourEmailSkip",callback:()=>{u(!0),Object(se.f)(r),si.a.updateSettings({hint:this.hint,currentPassword:this.plainPassword,newPassword:this.newPassword,email:""}).then(()=>{d()},e=>{u(!1)})},isDanger:!0}],titleLangKey:"YourEmailSkipWarning",descriptionLangKey:"YourEmailSkipWarningText"}).show()}),n.append(a.container,o,r),i.append(n),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){ai(this.isFirst)&&this.inputField.input.focus()}}var li=s(96),ci=s(90),di=s(104);class hi extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-hint"),this.setTitle("TwoStepAuth.SetupHintTitle");const e=new nn({noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("💡"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"💡"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=document.createElement("div");i.classList.add("input-wrapper");const n=this.inputField=new F.b({name:"hint",label:"TwoStepAuth.SetupHintPlaceholder"});n.input.addEventListener("keypress",e=>{if("Enter"===e.key)return Object(c.a)(e),n.value?d():h()});const a=(e,t)=>{e&&Object(c.a)(e);const s=t?n.value:void 0;if(s&&this.newPassword===s)return void nt(A.default.format("PasswordAsHintError",!0));const i=new ri(this.slider);i.state=this.state,i.plainPassword=this.plainPassword,i.newPassword=this.newPassword,i.hint=s,i.open()},o=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"YourEmailSkip"}),d=e=>a(e,!0),h=e=>a(e,!1);Object(l.b)(o,d),Object(l.b)(r,h),i.append(n.container,o,r),e.content.append(i),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){this.inputField.input.focus()}}class ui extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-enter-password","two-step-verification-re-enter-password"),this.setTitle("PleaseReEnterPassword");const e=new nn({noDelimiter:!0}),t=document.createElement("div");t.classList.add("input-wrapper");const s=this.passwordInputField=new ci.a({name:"re-enter-password",label:"PleaseReEnterPassword"}),i=new di.a(s,157),n=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"});t.append(s.container,n),e.content.append(i.container,t),this.scrollable.container.append(e.container),s.input.addEventListener("keypress",e=>{if(s.input.classList.contains("error")&&s.setState(F.a.Neutral),"Enter"===e.key)return o()});const a=()=>this.newPassword===s.value||(s.setError(),!1),o=e=>{if(e&&Object(c.a)(e),!a())return;const t=new hi(this.slider);t.state=this.state,t.plainPassword=this.plainPassword,t.newPassword=this.newPassword,t.open()};return Object(l.b)(n,o),i.load()}onOpenAfterTimeout(){this.passwordInputField.input.focus()}}class pi extends V{constructor(){super(...arguments),this.isFirst=!0}init(){const e=!this.state.pFlags.has_password||this.plainPassword;this.container.classList.add("two-step-verification","two-step-verification-enter-password"),this.setTitle(e?"PleaseEnterFirstPassword":"PleaseEnterCurrentPassword");const t=new nn({noDelimiter:!0}),s=document.createElement("div");s.classList.add("input-wrapper");const i=this.passwordInputField=new ci.a({name:"enter-password",label:e?"PleaseEnterFirstPassword":this.state.hint?void 0:"LoginPassword",labelText:!e&&this.state.hint?Z.b.wrapEmojiText(this.state.hint):void 0}),n=new li.a(i,157),a=Object(U.a)("btn-primary btn-color-primary"),o=new A.default.IntlElement({key:"Continue"});a.append(o.element),s.append(i.container,a),t.content.append(n.container,s),this.scrollable.container.append(t.container),i.input.addEventListener("keypress",e=>{if(i.input.classList.contains("error")&&(i.input.classList.remove("error"),o.key="Continue",o.update()),"Enter"===e.key)return d()});const r=()=>!!i.value.length||(i.input.classList.add("error"),!1);let d;if(e)d=e=>{if(e&&Object(c.a)(e),!r())return;const t=new ui(this.slider);t.state=this.state,t.newPassword=i.value,t.plainPassword=this.plainPassword,t.open()};else{let e,t=()=>(e||(e=window.setInterval(t,1e4)),si.a.getState().then(e=>{this.state=e,this.state.hint?i.label.innerHTML=Z.b.wrapEmojiText(this.state.hint):Object(x.a)(i.label,Object(A.i18n)("LoginPassword"))}));d=s=>{if(!r())return void Object(c.a)(s);a.setAttribute("disabled","true"),o.key="PleaseWait",o.update();const l=Object(se.f)(a),d=i.value;si.a.check(i.value,this.state).then(t=>{if(console.log(t),"auth.authorization"===t._){clearInterval(e),n&&n.remove();const t=new mi(this.slider);t.state=this.state,t.plainPassword=d,t.open(),this.slider.removeTabFromHistory(this)}},e=>{a.removeAttribute("disabled"),i.input.classList.add("error"),e.type,o.key="TwoStepAuth.InvalidPassword",o.update(),l.remove(),i.select(),t()})},t()}return Object(l.b)(a,d),n.load()}onOpenAfterTimeout(){ai(this.isFirst)&&this.passwordInputField.input.focus()}}class mi extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-main"),this.setTitle("TwoStepVerificationTitle");const e=new nn({caption:!0,noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("🔐"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:168,height:168,emoji:"🔐"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement();if(this.state.pFlags.has_password){Object(A._i18n)(e.caption,"TwoStepAuth.GenericHelp");const t=Object(U.a)("btn-primary btn-transparent",{icon:"edit",text:"TwoStepAuth.ChangePassword"}),s=Object(U.a)("btn-primary btn-transparent",{icon:"passwordoff",text:"TwoStepAuth.RemovePassword"}),n=Object(U.a)("btn-primary btn-transparent",{icon:"email",text:this.state.pFlags.has_recovery?"TwoStepAuth.ChangeEmail":"TwoStepAuth.SetupEmail"});Object(l.b)(t,()=>{const e=new pi(this.slider);e.state=this.state,e.plainPassword=this.plainPassword,e.open()}),Object(l.b)(s,()=>{new ht("popup-disable-password",{buttons:[{langKey:"Disable",callback:()=>{si.a.updateSettings({currentPassword:this.plainPassword}).then(()=>{this.slider.sliceTabsUntilTab($i,this),this.close()})},isDanger:!0}],titleLangKey:"TurnPasswordOffQuestionTitle",descriptionLangKey:"TurnPasswordOffQuestion"}).show()}),Object(l.b)(n,()=>{const e=new ri(this.slider);e.state=this.state,e.hint=this.state.hint,e.plainPassword=this.plainPassword,e.newPassword=this.plainPassword,e.isFirst=!0,e.open()}),i.append(t,s,n)}else{Object(A._i18n)(e.caption,"TwoStepAuth.SetPasswordHelp");const t=document.createElement("div");t.classList.add("input-wrapper");const s=Object(U.a)("btn-primary btn-color-primary",{text:"TwoStepVerificationSetPassword"});t.append(s),i.append(t),Object(l.b)(s,e=>{const t=new pi(this.slider);t.state=this.state,t.open()})}this.scrollable.container.append(e.container)}}class gi extends W{init(){this.container.classList.add("privacy-tab","privacy-last-seen"),this.setTitle("PrivacyLastSeen");const e="PrivacySettingsController.LastSeenDescription";new ei({tab:this,title:"LastSeenTitle",inputKey:"inputPrivacyKeyStatusTimestamp",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable})}}class bi extends W{init(){this.container.classList.add("privacy-tab","privacy-profile-photo"),this.setTitle("PrivacyProfilePhoto");const e="PrivacySettingsController.ProfilePhoto.CustomHelp";new ei({tab:this,title:"PrivacyProfilePhotoTitle",inputKey:"inputPrivacyKeyProfilePhoto",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable,skipTypes:[Ys.Nobody]})}}class vi extends W{init(){this.container.classList.add("privacy-tab","privacy-forward-messages"),this.setTitle("PrivacySettings.Forwards");const e="PrivacySettingsController.Forwards.CustomHelp";new ei({tab:this,title:"PrivacyForwardsTitle",inputKey:"inputPrivacyKeyForwards",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable})}}class fi extends W{init(){this.container.classList.add("privacy-tab","privacy-add-to-groups"),this.setTitle("PrivacySettings.Groups");const e="PrivacySettingsController.GroupDescription";new ei({tab:this,title:"WhoCanAddMe",inputKey:"inputPrivacyKeyChatInvite",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable,skipTypes:[Ys.Nobody]})}}class yi extends W{init(){this.container.classList.add("privacy-tab","privacy-calls"),this.setTitle("PrivacySettings.VoiceCalls");const e="PrivacySettingsController.PhoneCallDescription";new ei({tab:this,title:"WhoCanCallMe",inputKey:"inputPrivacyKeyPhoneCall",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable});{const e="PrivacySettingsController.P2p.Desc";new ei({tab:this,title:"PrivacyP2PHeader",inputKey:"inputPrivacyKeyPhoneP2P",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable})}}}class wi extends V{init(){this.container.classList.add("active-sessions-container"),this.setTitle("SessionsTitle");const e=e=>{const t=new Je({title:[e.app_name,e.app_version].join(" "),subtitle:[e.ip,e.country].join(" - "),clickable:!0,titleRight:e.pFlags.current?void 0:Object(re.b)(new Date(1e3*Math.max(e.date_active,e.date_created)))});t.container.dataset.hash=e.hash;const s=document.createElement("div");return s.classList.add("row-midtitle"),s.innerHTML=[e.device_model,e.system_version||e.platform].filter(Boolean).join(", "),t.subtitle.parentElement.insertBefore(s,t.subtitle),t},t=this.authorizations.slice();{const n=new nn({name:"CurrentSession"}),a=t.findAndSplice(e=>e.pFlags.current),o=e(a);if(n.content.append(o.container),t.length){const e=Object(U.a)("btn-primary btn-transparent danger",{icon:"stop",text:"TerminateAllSessions"});Object(l.b)(e,t=>{new ht("revoke-session",{buttons:[{langKey:"Terminate",isDanger:!0,callback:()=>{const t=Object(ut.a)([e],!0);rt.a.invokeApi("auth.resetAuthorizations").then(t=>{e.remove(),s.container.remove(),this.privacyTab.updateActiveSessions()},i).finally(()=>{t()})}}],titleLangKey:"AreYouSureSessionsTitle",descriptionLangKey:"AreYouSureSessions"}).show()}),n.content.append(e)}this.scrollable.append(n.container)}if(!t.length)return;const s=new nn({name:"OtherSessions"});t.forEach(t=>{s.content.append(e(t).container)}),this.scrollable.append(s.container);const i=e=>{"FRESH_RESET_AUTHORISATION_FORBIDDEN"===e.type&&nt(A.default.format("RecentSessions.Error.FreshReset",!0))};let n;const a=()=>{const e=n.dataset.hash;new ht("revoke-session",{buttons:[{langKey:"Terminate",isDanger:!0,callback:()=>{rt.a.invokeApi("account.resetAuthorization",{hash:e}).then(e=>{e&&(n.remove(),this.privacyTab.updateActiveSessions())},i)}}],titleLangKey:"AreYouSureSessionTitle",descriptionLangKey:"TerminateSessionText"}).show()},o=this.menuElement=Ee([{icon:"stop",text:"Terminate",onClick:a}]);o.id="active-sessions-contextmenu",o.classList.add("contextmenu"),document.getElementById("page-chats").append(o),Object(se.a)(this.scrollable.container,e=>{n=Object(Ce.a)(e.target,"row"),n&&"0"!==n.dataset.hash&&(e instanceof MouseEvent&&e.preventDefault(),e instanceof MouseEvent&&(e.cancelBubble=!0),Object(se.e)(e,o),Object(se.d)(o))}),Object(l.b)(this.scrollable.container,e=>{n=Object(Ce.a)(e.target,"row"),n&&"0"!==n.dataset.hash&&a()})}onCloseAfterTimeout(){return this.menuElement&&this.menuElement.remove(),super.onCloseAfterTimeout()}}class Li extends V{init(){this.container.classList.add("blocked-users-container"),this.setTitle("BlockedUsers");{const e=new nn({caption:"BlockedUsersInfo"});this.scrollable.append(e.container)}const e=$({icon:"add",className:"is-visible"});this.content.append(e),Object(l.b)(e,e=>{new It({peerTypes:["contacts"],placeholder:"BlockModal.Search.Placeholder",onSelect:e=>{T.a.toggleBlock(e,!0)}})},{listenerSetter:this.listenerSetter});const t=Do.createChatList();this.scrollable.container.classList.add("chatlist-container"),this.scrollable.append(t);const s=(e,s)=>{const{dom:i}=Do.addDialogNew({dialog:e,container:t,drawStatus:!1,rippleEnabled:!0,avatarSize:48,append:s}),n=T.a.getUser(e);n.pFlags.bot?i.lastMessageSpan.append("@"+n.username):n.phone?i.lastMessageSpan.innerHTML=T.a.formatUserPhone(n.phone):i.lastMessageSpan.append(n.username?"@"+n.username:T.a.getUserStatusString(e))};for(const e of this.peerIds)s(e,!0);let i;const n=this.menuElement=Ee([{icon:"lockoff",text:"Unblock",onClick:()=>{const e=+i.dataset.peerId;T.a.toggleBlock(e,!1)},options:{listenerSetter:this.listenerSetter}}]);n.id="blocked-users-contextmenu",n.classList.add("contextmenu"),document.getElementById("page-chats").append(n),Object(se.a)(this.scrollable.container,e=>{i=Object(mt.a)(e.target,"LI"),i&&(e instanceof MouseEvent&&e.preventDefault(),e instanceof MouseEvent&&(e.cancelBubble=!0),Object(se.e)(e,n),Object(se.d)(n))},this.listenerSetter),this.listenerSetter.add(a.default)("peer_block",e=>{const{peerId:i,blocked:n}=e,a=t.querySelector(`[data-peer-id="${i}"]`);n?a||s(i,!1):a&&a.remove()});let o=!1;this.scrollable.onScrolledBottom=()=>{o||(o=!0,T.a.getBlocked(t.childElementCount,50).then(e=>{for(const t of e.peerIds)s(t,!0);(e.peerIds.length<50||t.childElementCount===e.count)&&(this.scrollable.onScrolledBottom=null),this.scrollable.checkForTriggers()}).finally(()=>{o=!1}))}}onOpenAfterTimeout(){this.scrollable.onScroll()}onCloseAfterTimeout(){return this.menuElement&&this.menuElement.remove(),super.onCloseAfterTimeout()}}var Si=s(109);class Ei extends W{init(){this.container.classList.add("dont-u-dare-block-me"),this.setTitle("PrivacySettings");{const e=new nn({noDelimiter:!0});let t;const s=new Je({icon:"deleteuser",titleLangKey:"BlockedUsers",subtitleLangKey:"Loading",clickable:()=>{const e=new Li(this.slider);e.peerIds=t,e.open()}});let i;s.freezed=!0;const n=new Je({icon:"lock",titleLangKey:"TwoStepVerification",subtitleLangKey:"Loading",clickable:e=>{let t;i.pFlags.has_password?t=new pi(this.slider):i.email_unconfirmed_pattern?(t=new oi(this.slider),t.email=i.email_unconfirmed_pattern,t.length=6,t.isFirst=!0,si.a.resendPasswordEmail()):t=new mi(this.slider),t.state=i,t.open()}});n.freezed=!0;const o=this.activeSessionsRow=new Je({icon:"activesessions",titleLangKey:"SessionsTitle",subtitleLangKey:"Loading",clickable:()=>{const e=new wi(this.slider);e.privacyTab=this,e.authorizations=this.authorizations,e.open()}});o.freezed=!0,e.content.append(s.container,n.container,o.container),this.scrollable.append(e.container);const r=e=>{e?Object(x.a)(s.subtitle,Object(A.i18n)("PrivacySettingsController.UserCount",[e])):Object(x.a)(s.subtitle,Object(A.i18n)("BlockedEmpty",[e]))};this.listenerSetter.add(a.default)("peer_block",()=>{l()});const l=()=>{T.a.getBlocked().then(e=>{s.freezed=!1,r(e.count),t=e.peerIds})};l(),si.a.getState().then(e=>{i=e,Object(x.a)(n.subtitle,Object(A.i18n)(e.pFlags.has_password?"PrivacyAndSecurity.Item.On":"PrivacyAndSecurity.Item.Off")),n.freezed=!1}),this.updateActiveSessions()}{const e=new nn({name:"PrivacyTitle"});e.content.classList.add("privacy-navigation-container");const t={},s=t.inputPrivacyKeyPhoneNumber=new Je({titleLangKey:"PrivacyPhoneTitle",subtitleLangKey:"Loading",clickable:()=>{new ti(this.slider).open()}}),i=t.inputPrivacyKeyStatusTimestamp=new Je({titleLangKey:"LastSeenTitle",subtitleLangKey:"Loading",clickable:()=>{new gi(this.slider).open()}}),n=t.inputPrivacyKeyProfilePhoto=new Je({titleLangKey:"PrivacyProfilePhotoTitle",subtitleLangKey:"Loading",clickable:()=>{new bi(this.slider).open()}}),o=t.inputPrivacyKeyPhoneCall=new Je({titleLangKey:"WhoCanCallMe",subtitleLangKey:"Loading",clickable:()=>{new yi(this.slider).open()}}),r=t.inputPrivacyKeyForwards=new Je({titleLangKey:"PrivacyForwardsTitle",subtitleLangKey:"Loading",clickable:()=>{new vi(this.slider).open()}}),l=t.inputPrivacyKeyChatInvite=new Je({titleLangKey:"WhoCanAddMe",subtitleLangKey:"Loading",clickable:()=>{new fi(this.slider).open()}}),c=e=>{const s=t[e];s&&Zs.getPrivacy(e).then(e=>{const t=Zs.getPrivacyRulesDetails(e),i=t.type===Ys.Everybody?"PrivacySettingsController.Everbody":t.type===Ys.Contacts?"PrivacySettingsController.MyContacts":"PrivacySettingsController.Nobody",n=t.disallowPeers.users.length+t.disallowPeers.chats.length,a=t.allowPeers.users.length+t.allowPeers.chats.length;s.subtitle.innerHTML="";const o=Object(A.i18n)(i);s.subtitle.append(o),(n||a)&&s.subtitle.append(` (${[-n,a?"+"+a:0].filter(Boolean).join(", ")})`)})};e.content.append(s.container,i.container,n.container,o.container,r.container,l.container),this.scrollable.append(e.container);for(const e in t)c(e);a.default.addEventListener("privacy_update",e=>{c(Object(X.c)(e.key._))})}const e=[];{const t=new nn({name:"Privacy.SensitiveContent"});t.container.classList.add("hide"),e.push(rt.a.invokeApi("account.getContentSettings").then(e=>{if(!e.pFlags.sensitive_can_change)return;const s=e.pFlags.sensitive_enabled,i=new Je({checkboxField:new dt.a({text:"PrivacyAndSecurity.SensitiveText",checked:s}),subtitleLangKey:"PrivacyAndSecurity.SensitiveDesc",noCheckboxSubtitle:!0});t.content.append(i.container),t.container.classList.remove("hide"),this.eventListener.addEventListener("destroy",()=>{const e=i.checkboxField.checked;e!==s&&rt.a.invokeApi("account.setContentSettings",{sensitive_enabled:e})},{once:!0})})),this.scrollable.append(t.container)}{const e=new nn({name:"FilterChats"}),t=()=>{new ht("popup-delete-drafts",{buttons:[{langKey:"Delete",callback:()=>{const e=Object(ut.a)([s],!0);Si.a.clearAllDrafts().then(()=>{e()})},isDanger:!0}],titleLangKey:"AreYouSureClearDraftsTitle",descriptionLangKey:"AreYouSureClearDrafts"}).show()},s=Object(U.a)("btn-primary btn-transparent",{icon:"delete",text:"PrivacyDeleteCloudDrafts"});this.listenerSetter.add(s)("click",t),e.content.append(s),this.scrollable.append(e.container)}return Promise.all(e)}updateActiveSessions(){rt.a.invokeApi("account.getAuthorizations").then(e=>{this.activeSessionsRow.freezed=!1,this.authorizations=e.authorizations,Object(A._i18n)(this.activeSessionsRow.subtitle,"Privacy.Devices",[this.authorizations.length])})}}function Mi(e,t,s,i=1){e/=255,t/=255,s/=255;const n=Math.max(e,t,s),a=Math.min(e,t,s);let o,r,l=(n+a)/2;if(n===a)o=r=0;else{let i=n-a;switch(r=l>.5?i/(2-n-a):i/(n+a),n){case e:o=(t-s)/i+(t1&&(s-=1),s<1/6?e+6*(t-e)*s:s<.5?t:s<2/3?e+(t-e)*(2/3-s)*6:e},r=s<.5?s*(1+t):s+t-s*t,l=2*s-r;n=i(l,r,e+1/3),a=i(l,r,e),o=i(l,r,e-1/3)}return[Math.round(255*n),Math.round(255*a),Math.round(255*o),Math.round(255*i)]}function Ci(e){const t=[];if(4===e.length)for(let s=1;s("0"+e.toString(16)).slice(-2)).join("")}function Ti(e){return ki(function(e){const t=e.slice(5,-1).split(", "),s=+t.pop(),i=t.map(e=>e.endsWith("%")?+e.slice(0,-1):+e);return Ii(i[0],i[1],i[2],s)}(e))}function Pi(e){let{h:t,s:s,l:i}=Mi(e[0],e[1],e[2]);s>0&&(s=Math.min(100,s+5+.1*(100-s))),i=Math.max(0,.65*i);return`hsla(${t}, ${s}%, ${i}%, .4)`}var xi=s(124);class Ai{constructor(){this.hue=0,this.saturation=100,this.lightness=50,this.alpha=1,this.elements={},this.onGrabStart=()=>{document.documentElement.style.cursor=this.elements.boxDragger.style.cursor="grabbing"},this.onGrabEnd=()=>{document.documentElement.style.cursor=this.elements.boxDragger.style.cursor=""},this.container=document.createElement("div"),this.container.classList.add(Ai.BASE_CLASS);const e=`\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `;this.container.innerHTML=e,this.elements.box=this.container.firstElementChild,this.elements.boxDragger=this.elements.box.lastElementChild,this.elements.saturation=this.elements.box.firstElementChild.firstElementChild,this.elements.sliders=this.elements.box.nextElementSibling,this.elements.hue=this.elements.sliders.firstElementChild,this.elements.hueDragger=this.elements.hue.lastElementChild,this.hexInputField=new F.b({plainText:!0,label:"Appearance.Color.Hex"}),this.rgbInputField=new F.b({plainText:!0,label:"Appearance.Color.RGB"});const t=document.createElement("div");t.className=Ai.BASE_CLASS+"-inputs",t.append(this.hexInputField.container,this.rgbInputField.container),this.container.append(t),this.hexInputField.input.addEventListener("input",()=>{let e=this.hexInputField.value.replace(/#/g,"").slice(0,6);const t=e.match(/([a-fA-F\d]+)/),s=t&&t[0].length===e.length&&[6].includes(e.length);this.hexInputField.setState(s?F.a.Neutral:F.a.Error),e="#"+e,this.hexInputField.setValueSilently(e),s&&this.setColor(e,!1,!0)});const s=/^(?:rgb)?\(?([01]?\d\d?|2[0-4]\d|25[0-5])(?:\W+)([01]?\d\d?|2[0-4]\d|25[0-5])\W+(?:([01]?\d\d?|2[0-4]\d|25[0-5])\)?)$/;this.rgbInputField.input.addEventListener("input",()=>{const e=this.rgbInputField.value.match(s);this.rgbInputField.setState(e?F.a.Neutral:F.a.Error),e&&this.setColor(Mi(+e[1],+e[2],+e[3]),!0,!1)}),this.attachBoxListeners(),this.attachHueListeners()}attachBoxListeners(){we(this.elements.box,()=>{this.onGrabStart(),this.boxRect=this.elements.box.getBoundingClientRect()},e=>{this.saturationHandler(e.x,e.y)},()=>{this.onGrabEnd()})}attachHueListeners(){we(this.elements.hue,()=>{this.onGrabStart(),this.hueRect=this.elements.hue.getBoundingClientRect()},e=>{this.hueHandler(e.x)},()=>{this.onGrabEnd()})}setColor(e,t=!0,s=!0){if(void 0===e)e={h:0,s:100,l:50,a:1};else if("string"==typeof e)if("#"===e[0])e=function(e){const t=Ci(e);return Mi(t[0],t[1],t[2],t[3])}(e);else{const t=e.match(/[.?\d]+/g);e=Mi(+t[0],+t[1],+t[2],void 0===t[3]?1:+t[3])}this.boxRect=this.elements.box.getBoundingClientRect();const i=this.boxRect.width/100*e.s,n=100-e.l/(100-e.s/2)*100,a=this.boxRect.height/100*n;this.saturationHandler(this.boxRect.left+i,this.boxRect.top+a,!1),this.hueRect=this.elements.hue.getBoundingClientRect();const o=e.h/360,r=this.hueRect.left+this.hueRect.width*o;this.hueHandler(r,!1),this.hue=e.h,this.saturation=e.s,this.lightness=e.l,this.alpha=e.a,this.updatePicker(t,s)}getCurrentColor(){const e=Ii(this.hue,this.saturation,this.lightness,this.alpha),t=ki(e),s=t.slice(0,-2);return{hsl:`hsl(${this.hue}, ${this.saturation}%, ${this.lightness}%)`,rgb:`rgb(${e[0]}, ${e[1]}, ${e[2]})`,hex:s,hsla:`hsla(${this.hue}, ${this.saturation}%, ${this.lightness}%, ${this.alpha})`,rgba:`rgba(${e[0]}, ${e[1]}, ${e[2]}, ${e[3]})`,hexa:t,rgbaArray:e}}updatePicker(e=!0,t=!0){const s=this.getCurrentColor();this.elements.boxDragger.setAttributeNS(null,"fill",s.hex),e&&(this.hexInputField.setValueSilently(s.hex),this.hexInputField.setState(F.a.Neutral)),t&&(this.rgbInputField.setValueSilently(s.rgbaArray.slice(0,-1).join(", ")),this.rgbInputField.setState(F.a.Neutral)),this.onChange&&this.onChange(s)}hueHandler(e,t=!0){const s=Object(C.a)(e-this.hueRect.left,0,this.hueRect.width)/this.hueRect.width;this.hue=Math.round(360*s);const i=`hsla(${this.hue}, 100%, 50%, ${this.alpha})`;this.elements.hueDragger.setAttributeNS(null,"x",100*s+"%"),this.elements.hueDragger.setAttributeNS(null,"fill",i),this.elements.saturation.lastElementChild.setAttributeNS(null,"stop-color",i),t&&this.updatePicker()}saturationHandler(e,t,s=!0){const i=this.boxRect.width,n=this.boxRect.height,a=Object(C.a)(e-this.boxRect.left,0,i)/i*100,o=Object(C.a)(t-this.boxRect.top,0,n)/n*100,r=this.elements.boxDragger;r.setAttributeNS(null,"x",a+"%"),r.setAttributeNS(null,"y",o+"%");const l=Object(C.a)(a,0,100),c=100-l/2,d=100-Object(C.a)(o,0,100),h=Object(C.a)(d/100*c,0,100);this.saturation=l,this.lightness=h,s&&this.updatePicker()}}Ai.BASE_CLASS="color-picker";class Oi extends V{constructor(){super(...arguments),this._applyColor=(e,t=!0)=>{if(t)this.colorPicker.setColor(e);else{const t=Ci(e),s=this.theme.background,i=Pi(t);s.color=e.toLowerCase(),s.type="color",s.highlightningColor=i,k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme(void 0,void 0,!0),this.setActive()}},this.onColorChange=e=>{this.applyColor(e.hex,!1)}}init(){this.container.classList.add("background-container","background-color-container"),this.setTitle("SetColor"),this.theme=a.default.getTheme();const e=new nn({});this.colorPicker=new Ai,e.content.append(this.colorPicker.container),this.scrollable.append(e.container);const t=this.grid=document.createElement("div");t.classList.add("grid");["#E6EBEE","#B2CEE1","#008DD0","#C6E7CB","#C4E1A6","#60B16E","#CCD0AF","#A6A997","#7A7072","#FDD7AF","#FDB76E","#DD8851"].forEach(e=>{const s=document.createElement("div");s.classList.add("grid-item"),s.dataset.color=e.toLowerCase();const i=document.createElement("div");i.classList.add("grid-item-media"),i.style.backgroundColor=e,s.append(i),t.append(s)}),Object(l.b)(t,e=>{const t=Object(Ce.a)(e.target,"grid-item");if(!t||t.classList.contains("active"))return;const s=t.dataset.color;s&&this.applyColor(s)},{listenerSetter:this.listenerSetter}),this.scrollable.append(t),this.applyColor=Object(xi.a)(this._applyColor,16,!0)}setActive(){const e=this.grid.querySelector(".active"),t=this.theme.background,s="color"===t.type?this.grid.querySelector(`.grid-item[data-color="${t.color}"]`):null;e!==s&&(e&&e.classList.remove("active"),s&&s.classList.add("active"))}onOpen(){setTimeout(()=>{const e=this.theme.background;"color"===e.type&&(this.colorPicker.onChange=this.onColorChange),this.colorPicker.setColor(e.color||"#cccccc"),"color"!==e.type&&(this.colorPicker.onChange=this.onColorChange)},0)}onCloseAfterTimeout(){return this.colorPicker.onChange=void 0,this.colorPicker=void 0,super.onCloseAfterTimeout()}}let _i=0;class Fi extends V{constructor(){super(...arguments),this.tempId=0,this.clicked=new Set,this.onUploadClick=()=>{Object(me.e)("image/x-png,image/png,image/jpeg").then(e=>{const t="wallpaper-upload-"+ ++_i,s={_:"photoSize",h:0,w:0,location:{},size:e.size,type:"full"};let i={_:"document",access_hash:"",attributes:[],dc_id:0,file_reference:[],id:t,mime_type:e.type,size:e.size,date:Date.now()/1e3,pFlags:{},thumbs:[s],file_name:e.name};i=M.a.saveDoc(i);const n=he.a.getCacheContext(i);n.downloaded=e.size,n.url=URL.createObjectURL(e);let a={_:"wallPaper",access_hash:"",document:i,id:t,slug:t,pFlags:{}};const o=he.a.upload(e,e.name),r=Object(oe.a)();r.addNotifyListener=o.addNotifyListener,r.cancel=o.cancel,o.then(t=>{rt.a.invokeApi("account.uploadWallPaper",{file:t,mime_type:e.type,settings:{_:"wallPaperSettings"}}).then(e=>{const t=e.document,s=he.a.getCacheContext(t);Object.assign(s,n),a=e,a.document=M.a.saveDoc(a.document),c.dataset.docId=a.document.id,c.dataset.slug=a.slug,this.setBackgroundDocument(a.slug,a.document).then(r.resolve,r.reject)},r.reject)},r.reject),r.then(()=>{this.clicked.delete(a.document.id)},e=>{c.remove()});const l=new ye.a({isUpload:!0,cancelable:!0,tryAgainOnFail:!1}),c=this.addWallPaper(a,!1);this.clicked.add(a.document.id),l.attach(c,!1,r)})},this.onResetClick=()=>{const e=k.STATE_INIT.settings.themes.find(e=>e.name===this.theme.name);e&&(++this.tempId,this.theme.background=Object(L.a)(e.background),k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme(void 0,void 0,!0),this.blurCheckboxField.setValueSilently(this.theme.background.blur))},this.onGridClick=e=>{const t=Object(Ce.a)(e.target,"grid-item");if(!t)return;const{docId:s,slug:i}=t.dataset;if(this.clicked.has(s))return;this.clicked.add(s);const n=new ye.a({cancelable:!0,tryAgainOnFail:!1}),a=M.a.getDoc(s),o=()=>{const e=this.setBackgroundDocument(i,a);he.a.getCacheContext(a).url&&!this.theme.background.blur||n.attach(t,!0,e)};n.construct(),Object(l.b)(t,e=>{n.preloader.parentElement?(n.onClick(e),n.detach()):o()},{listenerSetter:this.listenerSetter}),o()},this.saveToCache=(e,t)=>{fetch(t).then(t=>{he.a.cacheStorage.save("backgrounds/"+e,t)})},this.setBackgroundDocument=(e,t)=>{let s=++this.tempId;const i=()=>s===this.tempId,n=M.a.downloadDoc(t,mo.chat.bubbles?mo.chat.bubbles.lazyLoadQueue.queueId:0),o=Object(oe.a)();return o.addNotifyListener=n.addNotifyListener,o.cancel=n.cancel,n.then(()=>{if(!i())return void o.resolve();const s=this.theme.background,n=t=>{(e=>{const t=document.createElement("img");return new Promise(s=>{Object(Rt.a)(t,e,()=>{const e=document.createElement("canvas"),i=t.naturalWidth/t.naturalHeight;1===i?(e.width=50,e.height=e.width/i):i>1?(e.height=50,e.width=e.height/i):e.width=e.height=50;const n=e.getContext("2d");n.drawImage(t,0,0,t.naturalWidth,t.naturalHeight,0,0,e.width,e.height);const a=new Array(4).fill(0),o=n.getImageData(0,0,e.width,e.height).data;for(let e=0;e{if(!i())return void o.resolve();const r=Pi(Array.from(n));s.slug=e,s.type="image",s.highlightningColor=r,k.default.pushToState("settings",a.default.settings),this.saveToCache(e,t),mo.applyCurrentTheme(e,t).then(o.resolve)})},r=he.a.getCacheContext(t);s.blur?setTimeout(()=>{Object(ms.a)(r.url,12,4).then(e=>{i()?n(e):o.resolve()})},200):n(r.url)}),o},this.setActive=()=>{const e=this.grid.querySelector(".active"),t=this.theme.background,s="image"===t.type?this.grid.querySelector(`.grid-item[data-slug="${t.slug}"]`):null;e!==s&&(e&&e.classList.remove("active"),s&&s.classList.add("active"))}}init(){this.container.classList.add("background-container","background-image-container"),this.setTitle("ChatBackground"),this.theme=a.default.getTheme();{const t=an(this.scrollable),s=Object(U.a)("btn-primary btn-transparent",{icon:"cameraadd",text:"ChatBackground.UploadWallpaper"}),i=Object(U.a)("btn-primary btn-transparent",{icon:"colorize",text:"SetColor"}),n=Object(U.a)("btn-primary btn-transparent",{icon:"favourites",text:"Appearance.Reset"});Object(l.b)(s,this.onUploadClick,{listenerSetter:this.listenerSetter}),Object(l.b)(i,()=>{new Oi(this.slider).open()},{listenerSetter:this.listenerSetter}),Object(l.b)(n,this.onResetClick,{listenerSetter:this.listenerSetter});const o=this.blurCheckboxField=new dt.a({text:"ChatBackground.Blur",name:"blur",checked:this.theme.background.blur,withRipple:!0});this.listenerSetter.add(o.input)("change",()=>{this.theme.background.blur=o.input.checked,k.default.pushToState("settings",a.default.settings);const t=e.querySelector(".active");t&&setTimeout(()=>{this.setBackgroundDocument(t.dataset.slug,M.a.getDoc(t.dataset.docId))},100)}),t.append(s,i,n,o.label)}a.default.addEventListener("background_change",this.setActive),rt.a.invokeApiHashable("account.getWallPapers").then(e=>{e.wallpapers.forEach(e=>{this.addWallPaper(e)})});const e=this.grid=document.createElement("div");e.classList.add("grid"),Object(l.b)(e,this.onGridClick,{listenerSetter:this.listenerSetter}),this.scrollable.append(e)}addWallPaper(e,t=!0){if(e.pFlags.pattern||!e.document||0===e.document.mime_type.indexOf("application/"))return;e.document=M.a.saveDoc(e.document);const s=document.createElement("div");s.classList.add("grid-item");const i=document.createElement("div");i.classList.add("grid-item-media");const n=ys({photo:e.document,message:null,container:i,withoutPreloader:!0,size:r.a.choosePhotoSize(e.document,200,200)});return s.dataset.docId=e.document.id,s.dataset.slug=e.slug,"image"===this.theme.background.type&&this.theme.background.slug===e.slug&&s.classList.add("active"),(n.loadPromises.thumb||n.loadPromises.full).then(()=>{os.a.mutate(()=>{s.append(i)})}),this.grid[t?"append":"prepend"](s),s}}var ji=s(101);class Di extends ct.b{constructor(e){super("popup-stickers",null,{closable:!0,overlayClosable:!0,body:!0}),this.stickerSetInput=e,this.onStickersClick=e=>{const t=Object(Ce.a)(e.target,"sticker-set-sticker");if(!t)return;const s=t.dataset.docId;mo.chat.input.sendMessageWithDocument(s)?this.hide():console.warn("got no doc by id:",s)},this.h6=document.createElement("h6"),this.h6.append(Object(A.i18n)("Loading")),this.header.append(this.h6),this.onClose=()=>{I.a.setOnlyOnePlayableGroup("")};const t=document.createElement("div");t.classList.add("sticker-set"),this.stickersDiv=document.createElement("div"),this.stickersDiv.classList.add("sticker-set-stickers","is-loading"),Object(l.b)(this.stickersDiv,this.onStickersClick,{listenerSetter:this.listenerSetter}),Object(se.f)(this.stickersDiv,!0),this.stickersFooter=document.createElement("div"),this.stickersFooter.classList.add("sticker-set-footer"),t.append(this.stickersDiv);const s=Object(U.a)("btn-primary btn-primary-transparent disable-hover",{noRipple:!0,text:"Loading"});this.stickersFooter.append(s),this.body.append(t);new P.b(this.body);this.body.append(this.stickersFooter),this.loadStickerSet()}loadStickerSet(){return hs.getStickerSet(this.stickerSetInput).then(e=>{let t;this.set=e.set,I.a.setOnlyOnePlayableGroup("STICKERS-POPUP"),this.h6.innerHTML=Z.a.wrapEmojiText(e.set.title),this.stickersFooter.classList.toggle("add",!e.set.installed_date),e.set.installed_date?(t=Object(U.a)("btn-primary btn-primary-transparent danger",{noRipple:!0}),t.append(Object(A.i18n)("RemoveStickersCount",[Object(A.i18n)("Stickers",[e.set.count])]))):(t=Object(U.a)("btn-primary btn-color-primary",{noRipple:!0}),t.append(Object(A.i18n)("AddStickersCount",[Object(A.i18n)("Stickers",[e.set.count])]))),this.stickersFooter.textContent="",this.stickersFooter.append(t),Object(l.b)(t,()=>{const e=Object(ut.a)([t],!0);hs.toggleStickerSet(this.set).then(()=>{this.hide()}).catch(()=>{e()})});const s=new te.d;this.stickersDiv.classList.remove("is-loading"),this.stickersDiv.innerHTML="";for(let t of e.documents){if("documentEmpty"===t._)continue;const e=document.createElement("div");e.classList.add("sticker-set-sticker");const i=v.b.active.esgSticker.width;Ls({doc:t,div:e,lazyLoadQueue:s,group:"STICKERS-POPUP",play:!0,loop:!0,width:i,height:i}),this.stickersDiv.append(e)}})}}class Bi{constructor(e,t,s,i,n){const a="range-setting-selector";this.container=document.createElement("div"),this.container.classList.add(a);const o=document.createElement("div");o.classList.add(a+"-details");const r=document.createElement("div");r.classList.add(a+"-name"),Object(A._i18n)(r,e);const l=document.createElement("div");l.classList.add(a+"-value"),l.innerHTML=""+s,o.append(r,l),this.range=new Le({step:t,min:i,max:n},s),this.range.setListeners(),this.range.setHandlers({onScrub:e=>{this.onChange&&this.onChange(e),l.innerText=""+e}}),this.container.append(o,this.range.container)}}class Ri extends V{init(){this.container.classList.add("general-settings-container"),this.setTitle("General");const e=an.bind(null,this.scrollable);{const t=e("Settings"),s=new Bi("TextSize",1,a.default.settings.messagesTextSize,12,20);s.onChange=e=>{k.default.setByKey("settings.messagesTextSize",e)};const i=Object(U.a)("btn-primary btn-transparent",{icon:"image",text:"ChatBackground"});Object(l.b)(i,()=>{new Fi(this.slider).open()});const n=new dt.a({text:"EnableAnimations",name:"animations",stateKey:"settings.animationsEnabled",withRipple:!0});t.append(s.container,i,n.label)}{const t=e("General.Keyboard"),s=document.createElement("form"),i=new Je({radioField:new st({langKey:"General.SendShortcut.Enter",name:"send-shortcut",value:"enter",stateKey:"settings.sendShortcut"}),subtitleLangKey:"General.SendShortcut.NewLine.ShiftEnter"}),n=new Je({radioField:new st({name:"send-shortcut",value:"ctrlEnter",stateKey:"settings.sendShortcut"}),subtitleLangKey:"General.SendShortcut.NewLine.Enter"});Object(A._i18n)(n.radioField.main,"General.SendShortcut.CtrlEnter",[h.IS_APPLE?"⌘":"Ctrl"]),s.append(i.container,n.container),t.append(s)}{const t=e("AutoDownloadMedia"),s=new dt.a({text:"AutodownloadContacts",name:"contacts",stateKey:"settings.autoDownload.contacts",withRipple:!0}),i=new dt.a({text:"AutodownloadPrivateChats",name:"private",stateKey:"settings.autoDownload.private",withRipple:!0}),n=new dt.a({text:"AutodownloadGroupChats",name:"groups",stateKey:"settings.autoDownload.groups",withRipple:!0}),a=new dt.a({text:"AutodownloadChannels",name:"channels",stateKey:"settings.autoDownload.channels",withRipple:!0});t.append(s.label,i.label,n.label,a.label)}{const t=e("General.AutoplayMedia"),s=new dt.a({text:"AutoplayGIF",name:"gifs",stateKey:"settings.autoPlay.gifs",withRipple:!0}),i=new dt.a({text:"AutoplayVideo",name:"videos",stateKey:"settings.autoPlay.videos",withRipple:!0});t.append(s.label,i.label)}{const t=e("Emoji"),s=new dt.a({text:"GeneralSettings.EmojiPrediction",name:"suggest-emoji",stateKey:"settings.emoji.suggest",withRipple:!0}),i=new dt.a({text:"GeneralSettings.BigEmoji",name:"emoji-big",stateKey:"settings.emoji.big",withRipple:!0});t.append(s.label,i.label)}{const t=e("Telegram.InstalledStickerPacksController"),s=new dt.a({text:"Stickers.SuggestStickers",name:"suggest",stateKey:"settings.stickers.suggest",withRipple:!0}),i=new dt.a({text:"InstalledStickers.LoopAnimated",name:"loop",stateKey:"settings.stickers.loop",withRipple:!0}),n={},o=new te.d,r=(e,s="append")=>{const i=new Je({title:Z.b.wrapEmojiText(e.title),subtitleLangKey:"Stickers",subtitleLangArgs:[e.count],havePadding:!0,clickable:()=>{new Di({id:e.id,access_hash:e.access_hash}).show()}});n[e.id]=i;const a=document.createElement("div");a.classList.add("row-media"),Ss({set:e,container:a,group:"GENERAL-SETTINGS",lazyLoadQueue:o,width:48,height:48,autoplay:!0}),i.container.append(a),t[s](i.container)};hs.getAllStickers().then(e=>{Object(ji.a)(e);for(const t of e.sets)r(t)}),this.listenerSetter.add(a.default)("stickers_installed",e=>{const t=e;n[t.id]||r(t,"prepend")}),this.listenerSetter.add(a.default)("stickers_deleted",e=>{const t=e;n[t.id]&&(n[t.id].container.remove(),delete n[t.id])}),t.append(s.label,i.label)}}onOpen(){this.init&&(this.init(),this.init=null)}}var Hi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ui extends V{init(){return Hi(this,void 0,void 0,(function*(){this.container.classList.add("edit-profile-container"),this.setTitle("EditAccount.Title");const e=[];{const t=document.createElement("div");t.classList.add("input-wrapper"),this.firstNameInputField=new F.b({label:"EditProfile.FirstNameLabel",name:"first-name",maxLength:70}),this.lastNameInputField=new F.b({label:"Login.Register.LastName.Placeholder",name:"last-name",maxLength:64}),this.bioInputField=new F.b({label:"EditProfile.BioLabel",name:"bio",maxLength:70}),t.append(this.firstNameInputField.container,this.lastNameInputField.container,this.bioInputField.container);const s=document.createElement("div");s.classList.add("caption"),Object(A.i18n_)({element:s,key:"Bio.Description"}),e.push(this.firstNameInputField,this.lastNameInputField,this.bioInputField),this.scrollable.append(t,s)}this.scrollable.append(document.createElement("hr")),this.editPeer=new Xe({peerId:T.a.getSelf().id,inputFields:e,listenerSetter:this.listenerSetter}),this.content.append(this.editPeer.nextBtn),this.scrollable.prepend(this.editPeer.avatarEdit.container);{const t=document.createElement("div");t.classList.add("sidebar-left-h2"),Object(A.i18n_)({element:t,key:"EditAccount.Username"});const s=document.createElement("div");s.classList.add("input-wrapper"),this.usernameInputField=new lt({peerId:0,label:"EditProfile.Username.Label",name:"username",plainText:!0,listenerSetter:this.listenerSetter,onChange:()=>{this.editPeer.handleChange(),this.setProfileUrl()},availableText:"EditProfile.Username.Available",takenText:"EditProfile.Username.Taken",invalidText:"EditProfile.Username.Invalid"}),s.append(this.usernameInputField.container);const i=document.createElement("div");i.classList.add("caption"),i.append(Object(A.i18n)("UsernameSettings.ChangeDescription")),i.append(document.createElement("br"),document.createElement("br"));const n=this.profileUrlContainer=document.createElement("div");n.classList.add("profile-url-container");const a=this.profileUrlAnchor=document.createElement("a");a.classList.add("profile-url"),a.href="#",a.target="_blank",n.append(Object(A.i18n)("UsernameHelpLink",[a])),i.append(n),e.push(this.usernameInputField),this.scrollable.append(t,s,i)}Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0;let e=[];e.push(n.default.updateProfile(this.firstNameInputField.value,this.lastNameInputField.value,this.bioInputField.value).then(()=>{this.close()},e=>{console.error("updateProfile error:",e)})),this.editPeer.uploadAvatar&&e.push(this.editPeer.uploadAvatar().then(e=>n.default.uploadProfilePhoto(e))),this.usernameInputField.isValid()&&!this.usernameInputField.input.classList.contains("error")&&e.push(T.a.updateUsername(this.usernameInputField.value)),Promise.race(e).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled")})},{listenerSetter:this.listenerSetter});const t=T.a.getSelf(),s=yield n.default.getProfile(t.id,!0);this.firstNameInputField.setOriginalValue(t.first_name,!0),this.lastNameInputField.setOriginalValue(t.last_name,!0),this.bioInputField.setOriginalValue(s.about,!0),this.usernameInputField.setOriginalValue(t.username,!0),this.setProfileUrl(),this.editPeer.handleChange()}))}setProfileUrl(){if(this.usernameInputField.input.classList.contains("error")||!this.usernameInputField.value.length)this.profileUrlContainer.style.display="none";else{this.profileUrlContainer.style.display="";let e="https://t.me/"+this.usernameInputField.value;this.profileUrlAnchor.innerText=e,this.profileUrlAnchor.href=e}}}var Ni=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class zi extends V{constructor(){super(...arguments),this.renderResults=e=>Ni(this,void 0,void 0,(function*(){yield T.a.getContacts(),e.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e,container:this.selector.scrollable,drawStatus:!1,rippleEnabled:!0,avatarSize:46}),s=this.selector.selected.has(e);t.containerEl.append(this.checkbox(s));const i=[];this.dialogsByFilters.forEach((t,s)=>{if(t.has(e)){const e=document.createElement("span");e.innerHTML=Z.b.wrapEmojiText(s.title),i.push(e)}});Object(A.join)(i,!1).forEach(e=>{t.lastMessageSpan.append(e)})})})),this.onSelectChange=e=>{"included"===this.type&&(this.confirmBtn.style.display=e?"":"none")}}init(){return this.content.remove(),this.container.classList.add("included-chatlist-container"),this.confirmBtn=N("check btn-confirm blue",{noRipple:!0}),this.confirmBtn.style.display="none",this.header.append(this.confirmBtn),this.confirmBtn.addEventListener("click",()=>{const e=this.selector.getSelected();if("included"===this.type)for(const e in this.filter.pFlags)0!==e.indexOf("exclude_")&&delete this.filter.pFlags[e];else for(const e in this.filter.pFlags)0===e.indexOf("exclude_")&&delete this.filter.pFlags[e];const t=[];for(const s of e)"number"==typeof s?t.push(s):this.filter.pFlags[s]=!0;"included"===this.type?this.filter.pinned_peers=this.filter.pinned_peers.filter(e=>t.includes(e)):this.filter.pinned_peers=this.filter.pinned_peers.filter(e=>!t.includes(e));const s="included"===this.type?"exclude_peers":"include_peers";this.filter[s]=this.filter[s].filter(e=>!t.includes(e)),this.filter["included"===this.type?"include_peers":"exclude_peers"]=t,this.editFolderTab.setFilter(this.filter,!1),this.close()}),this.dialogsByFilters=new Map,i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.dialogsByFilters.set(t,new Set(i.a.dialogsStorage.getFolder(t.id).map(e=>e.peerId)))})}checkbox(e){const t=new dt.a({round:!0});return e&&(t.input.checked=e),t.label}onOpen(){this.init&&(this.init(),this.init=null),this.confirmBtn.style.display="excluded"===this.type?"":"none",this.setTitle("included"===this.type?"FilterAlwaysShow":"FilterNeverShow");const e=this.filter,t=document.createDocumentFragment(),s=new nn({noDelimiter:!0,name:"FilterChatTypes"});let i;s.container.classList.add("folder-categories"),i="excluded"===this.type?{exclude_muted:{ico:"mute",text:"ChatList.Filter.MutedChats"},exclude_archived:{ico:"archive",text:"ChatList.Filter.Archive"},exclude_read:{ico:"readchats",text:"ChatList.Filter.ReadChats"}}:{contacts:{ico:"newprivate",text:"ChatList.Filter.Contacts"},non_contacts:{ico:"noncontacts",text:"ChatList.Filter.NonContacts"},groups:{ico:"group",text:"ChatList.Filter.Groups"},broadcasts:{ico:"newchannel",text:"ChatList.Filter.Channels"},bots:{ico:"bots",text:"ChatList.Filter.Bots"}};const n=document.createDocumentFragment();for(const e in i){const t=Object(U.a)("btn-primary btn-transparent folder-category-button",{icon:i[e].ico,text:i[e].text});t.dataset.peerId=e,t.append(this.checkbox()),n.append(t)}s.content.append(n);const a=new nn({name:"FilterChats"});t.append(s.container,a.container);const o=("included"===this.type?e.include_peers:e.exclude_peers).slice();this.selector=new Et({appendTo:this.container,onChange:this.onSelectChange,peerType:["dialogs"],renderResultsFunc:this.renderResults,placeholder:"Search"}),this.selector.selected=new Set(o);let r=!1;const l=this.selector.add.bind(this.selector);this.selector.add=(e,t,s)=>{if(this.selector.selected.size>=100&&r&&!i[e]){const t=this.selector.list.querySelector(`[data-peer-id="${e}"] [type="checkbox"]`);t&&setTimeout(()=>{t.checked=!1},0);return void nt(A.default.format("excluded"===this.type?"ChatList.Filter.Exclude.LimitReached":"ChatList.Filter.Include.LimitReached",!0))}const n=l(e,i[e]?Object(A.i18n)(i[e].text):void 0,s);return i[e]&&n.querySelector("avatar-element").classList.add("tgico-"+i[e].ico),n};const c=this.selector.list.parentElement;a.content.append(this.selector.list),c.append(t),this.selector.addInitial(o),r=!0;for(const t in e.pFlags)i.hasOwnProperty(t)&&e.pFlags[t]&&s.content.querySelector(`[data-peer-id="${t}"]`).click()}onCloseAfterTimeout(){return this.selector&&(this.selector.container.remove(),this.selector=null),super.onCloseAfterTimeout()}open(e,t,s){return this.originalFilter=e,this.filter=Object(L.a)(this.originalFilter),this.type=t,this.editFolderTab=s,super.open()}}class Vi extends V{constructor(){super(...arguments),this.flags={}}init(){this.container.classList.add("edit-folder-container"),this.caption=document.createElement("div"),this.caption.classList.add("caption"),this.caption.append(Object(A.i18n)("FilterIncludeExcludeInfo")),this.stickerContainer=document.createElement("div"),this.stickerContainer.classList.add("sticker-container"),this.confirmBtn=N("check btn-confirm hide blue");const e={icon:"delete danger",text:"FilterMenuDelete",onClick:()=>{e.element.setAttribute("disabled","true"),i.a.filtersStorage.updateDialogFilter(this.filter,!0).then(e=>{e&&this.close()}).finally(()=>{e.element.removeAttribute("disabled")})}};this.menuBtn=Ie({},"bottom-left",[e]),this.menuBtn.classList.add("hide"),this.header.append(this.confirmBtn,this.menuBtn);const t=document.createElement("div");t.classList.add("input-wrapper"),this.nameInputField=new F.b({label:"FilterNameInputLabel",maxLength:12}),t.append(this.nameInputField.container);const s=(e,t,s,i)=>{const n=new nn({name:t,noDelimiter:!0});n.container.classList.add("folder-list",e);const a=n.generateContentElement();return a.classList.add("folder-categories"),s.forEach(e=>{const t=Object(U.a)("folder-category-button btn btn-primary btn-transparent",{icon:e.icon,text:e.text,noRipple:!e.withRipple||void 0});e.name&&(i[e.name]=t),a.append(t)}),n};this.include_peers=s("folder-list-included","FilterInclude",[{icon:"add primary",text:"ChatList.Filter.Include.AddChat",withRipple:!0},{text:"ChatList.Filter.Contacts",icon:"newprivate",name:"contacts"},{text:"ChatList.Filter.NonContacts",icon:"noncontacts",name:"non_contacts"},{text:"ChatList.Filter.Groups",icon:"group",name:"groups"},{text:"ChatList.Filter.Channels",icon:"channel",name:"broadcasts"},{text:"ChatList.Filter.Bots",icon:"bots",name:"bots"}],this.flags),this.exclude_peers=s("folder-list-excluded","FilterExclude",[{icon:"minus primary",text:"ChatList.Filter.Exclude.AddChat",withRipple:!0},{text:"ChatList.Filter.MutedChats",icon:"mute",name:"exclude_muted"},{text:"ChatList.Filter.Archive",icon:"archive",name:"exclude_archived"},{text:"ChatList.Filter.ReadChats",icon:"readchats",name:"exclude_read"}],this.flags),this.scrollable.append(this.stickerContainer,this.caption,t,this.include_peers.container,this.exclude_peers.container);const n=this.include_peers.container.querySelector(".folder-categories"),a=this.exclude_peers.container.querySelector(".folder-categories");return n.querySelector(".btn").addEventListener("click",()=>{new zi(this.slider).open(this.filter,"included",this)}),a.querySelector(".btn").addEventListener("click",()=>{new zi(this.slider).open(this.filter,"excluded",this)}),this.confirmBtn.addEventListener("click",()=>{if(this.nameInputField.input.classList.contains("error"))return;if(!this.nameInputField.value.trim())return void this.nameInputField.input.classList.add("error");let e,t=Array.from(n.children).slice(1).reduce((e,t)=>e+ +!t.style.display,0);t+=this.filter.include_peers.length,t?(this.confirmBtn.setAttribute("disabled","true"),e=this.filter.id?i.a.filtersStorage.updateDialogFilter(this.filter):i.a.filtersStorage.createDialogFilter(this.filter),e.then(e=>{e&&this.close()}).catch(e=>{"DIALOG_FILTERS_TOO_MUCH"===e.type?nt("Sorry, you can't create more folders."):console.error("updateDialogFilter error:",e)}).finally(()=>{this.confirmBtn.removeAttribute("disabled")})):nt("Please choose at least one chat for this folder.")}),this.nameInputField.input.addEventListener("input",()=>{this.filter.title=this.nameInputField.value,this.editCheckForChange()}),this.loadAnimationPromise=le.b.loadAnimationFromURL({container:this.stickerContainer,loop:!1,autoplay:!1,width:86,height:86},"assets/img/Folders_2.tgs").then(e=>(this.animation=e,le.b.waitForFirstFrame(e)))}onOpenAfterTimeout(){this.loadAnimationPromise.then(()=>{this.animation.autoplay=!0,this.animation.play()})}onCreateOpen(){this.caption.style.display="",this.setTitle("FilterNew"),this.menuBtn.classList.add("hide"),this.confirmBtn.classList.remove("hide"),this.nameInputField.value="";for(const e in this.flags)this.flags[e].style.display="none"}onEditOpen(){this.caption.style.display="none",this.setTitle("create"===this.type?"FilterNew":"FilterHeaderEdit"),"edit"===this.type&&(this.menuBtn.classList.remove("hide"),this.confirmBtn.classList.add("hide"));const e=this.filter;this.nameInputField.value=Z.b.wrapDraftText(e.title);for(const t in this.flags)this.flags[t].style.display=e.pFlags[t]?"":"none";["include_peers","exclude_peers"].forEach(t=>{const s=this[t],i=Do.createChatList(),n=e[t].slice(),a=e=>{for(let t=0,s=Math.min(n.length,e);ta(20)),o.append(Object(A.i18n)("FilterShowMoreChats",[n.length])),e.append(o)}a(4)})}editCheckForChange(){if("edit"===this.type){const e=!Object(L.b)(this.originalFilter,this.filter);this.confirmBtn.classList.toggle("hide",!e),this.menuBtn.classList.toggle("hide",e)}}setFilter(e,t){Array.from(this.container.querySelectorAll("ul, .load-more")).forEach(e=>e.remove()),t?(this.originalFilter=e,this.filter=Object(L.a)(e)):(this.filter=e,this.onEditOpen(),this.editCheckForChange())}open(e){const t=super.open();return void 0===e?(this.setFilter({_:"dialogFilter",id:0,title:"",pFlags:{},pinned_peers:[],include_peers:[],exclude_peers:[]},!0),this.type="create",this.onCreateOpen()):(this.setFilter(e,!0),this.type="edit",this.onEditOpen()),t}}var Wi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ki extends V{constructor(){super(...arguments),this.filtersRendered={}}renderFolder(e,t,s){let n,a,r="",c=[];if("dialogFilterSuggested"===e._)n=e.filter,r=e.description;else{if(n=e,1===Object.keys(n.pFlags).length){const e=n.pFlags;let t;e.contacts?t="FilterAllContacts":e.non_contacts?t="FilterAllNonContacts":e.groups?t="FilterAllGroups":e.broadcasts?t="FilterAllChannels":e.bots&&(t="FilterAllBots"),t&&c.push(Object(A.i18n)(t))}if(!c.length){const e=i.a.dialogsStorage.getFolder(n.id);let t=0,s=0,a=0;for(const i of e)o.a.isAnyGroup(i.peerId)?a++:o.a.isBroadcast(i.peerId)?s++:t++;t&&c.push(Object(A.i18n)("Chats",[t])),s&&c.push(Object(A.i18n)("Channels",[s])),a&&c.push(Object(A.i18n)("Groups",[a]))}}if(s)s.subtitle.textContent="",Object(A.join)(c).forEach(e=>{s.subtitle.append(e)});else if(s=new Je({title:Z.a.wrapEmojiText(n.title),subtitle:r,clickable:!0}),c.length&&Object(A.join)(c).forEach(e=>{s.subtitle.append(e)}),"dialogFilter"===e._){const e=n.id;this.filtersRendered.hasOwnProperty(n.id)||Object(l.b)(s.container,()=>{new Vi(this.slider).open(i.a.filtersStorage.getFilter(e))},{listenerSetter:this.listenerSetter}),this.filtersRendered[n.id]=s}return a=s.container,n.hasOwnProperty("orderIndex")?Ps(a,a.parentElement||t,n.orderIndex):t&&t.append(a),a}init(){return Wi(this,void 0,void 0,(function*(){this.container.classList.add("chat-folders-container"),this.setTitle("ChatList.Filter.List.Title"),this.scrollable.container.classList.add("chat-folders"),this.stickerContainer=document.createElement("div"),this.stickerContainer.classList.add("sticker-container");const e=document.createElement("div");e.classList.add("caption"),Object(A.i18n_)({element:e,key:"ChatList.Filter.Header"}),this.createFolderBtn=Object(U.a)("btn-primary btn-color-primary btn-control tgico",{text:"ChatList.Filter.NewTitle",icon:"add"}),this.foldersSection=new nn({name:"Filters"}),this.foldersSection.container.style.display="none",this.suggestedSection=new nn({name:"FilterRecommended"}),this.suggestedSection.container.style.display="none",this.scrollable.append(this.stickerContainer,e,this.createFolderBtn,this.foldersSection.container,this.suggestedSection.container),Object(l.b)(this.createFolderBtn,()=>{Object.keys(this.filtersRendered).length>=10?nt("Sorry, you can't create more folders."):new Vi(this.slider).open()},{listenerSetter:this.listenerSetter});const t=()=>{this.foldersSection.container.style.display=Object.keys(this.filtersRendered).length?"":"none"};return i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.renderFolder(t,this.foldersSection.content);t()}),this.listenerSetter.add(a.default)("filter_update",e=>{const s=e;this.filtersRendered.hasOwnProperty(s.id)?this.renderFolder(s,null,this.filtersRendered[s.id]):this.renderFolder(s,this.foldersSection.content),t(),this.getSuggestedFilters()}),this.listenerSetter.add(a.default)("filter_delete",e=>{const s=e;this.filtersRendered.hasOwnProperty(s.id)&&(this.getSuggestedFilters(),this.filtersRendered[s.id].container.remove(),delete this.filtersRendered[s.id]),t()}),this.listenerSetter.add(a.default)("filter_order",e=>{e.forEach((e,t)=>{const s=this.filtersRendered[e].container;Ps(s,s.parentElement,t+1)})}),this.loadAnimationPromise=le.b.loadAnimationFromURL({container:this.stickerContainer,loop:!1,autoplay:!1,width:86,height:86},"assets/img/Folders_1.tgs").then(e=>(this.animation=e,le.b.waitForFirstFrame(e))),this.getSuggestedFilters(),this.loadAnimationPromise}))}onOpenAfterTimeout(){this.loadAnimationPromise.then(()=>{this.animation.autoplay=!0,this.animation.play()})}getSuggestedFilters(){return rt.a.invokeApi("messages.getSuggestedDialogFilters").then(e=>{this.suggestedSection.container.style.display=e.length?"":"none",Array.from(this.suggestedSection.content.children).slice(1).forEach(e=>e.remove()),e.forEach(e=>{const t=this.renderFolder(e),s=Object(U.a)("btn-primary btn-color-primary",{text:"Add"});t.append(s),this.suggestedSection.content.append(t),Object(l.b)(s,n=>{Object(c.a)(n),Object.keys(this.filtersRendered).length>=10?nt("Sorry, you can't create more folders."):(s.setAttribute("disabled","true"),i.a.filtersStorage.createDialogFilter(e.filter).then(e=>{e&&t.remove()}).finally(()=>{s.removeAttribute("disabled")}))},{listenerSetter:this.listenerSetter})})})}}class Gi extends W{init(){this.container.classList.add("notifications-container"),this.setTitle("Telegram.NotificationSettingsViewController");const e=e=>{const t=new nn({name:e.name}),s=new Je({checkboxField:new dt.a({text:e.typeText,checked:!0}),subtitleLangKey:"Loading"}),i=new Je({checkboxField:new dt.a({text:"Notifications.MessagePreview",checked:!0}),subtitleLangKey:"Loading"});t.content.append(s.container,i.container),this.scrollable.append(t.container);const n={_:e.inputKey},o=_t.a.getNotifySettings(n);(o instanceof Promise?o:Promise.resolve(o)).then(t=>{const o=()=>{const e=_t.a.isMuted(t);return s.checkboxField.checked=!e,i.checkboxField.checked=t.show_previews,e};o(),this.eventListener.addEventListener("destroy",()=>{const e=!s.checkboxField.checked,a=i.checkboxField.checked;if(e===_t.a.isMuted(t)&&a===t.show_previews)return;const o=Object(L.a)(t);o._="inputPeerNotifySettings",o.mute_until=e?2147483647:0,o.show_previews=a,_t.a.updateNotifySettings(n,o)},{once:!0}),this.listenerSetter.add(a.default)("notify_settings",s=>{const i=Object(X.c)(s.peer._);e.inputKey===i&&(t=s.notify_settings,o())})})};e({name:"NotificationsPrivateChats",typeText:"NotificationsForPrivateChats",inputKey:"inputNotifyUsers"}),e({name:"NotificationsGroups",typeText:"NotificationsForGroups",inputKey:"inputNotifyChats"}),e({name:"NotificationsChannels",typeText:"NotificationsForChannels",inputKey:"inputNotifyBroadcasts"});{const e=new nn({name:"NotificationsOther"}),t=new Je({checkboxField:new dt.a({text:"ContactJoined",checked:!0}),subtitleLangKey:"Loading"}),s=new Je({checkboxField:new dt.a({text:"Notifications.Sound",checked:!0,stateKey:"settings.notifications.sound"}),subtitleLangKey:"Loading"});k.default.getState().then(e=>{s.checkboxField.checked=e.settings.notifications.sound}),e.content.append(t.container,s.container),this.scrollable.append(e.container),_t.a.getContactSignUpNotification().then(e=>{t.checkboxField.checked=e,this.eventListener.addEventListener("destroy",()=>{const s=t.checkboxField.checked;e!==s&&_t.a.setContactSignUpNotification(!s)},{once:!0})})}}}var qi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Qi extends V{init(){return qi(this,void 0,void 0,(function*(){this.container.classList.add("language-container"),this.setTitle("Telegram.LanguageViewController");const e=new nn({}),t=new Map,s=rt.a.invokeApiCacheable("langpack.getLanguages",{lang_pack:"macos"}).then(s=>{const i=Object(tt.b)();s.forEach(e=>{const s=new Je({radioField:new st({text:e.name,name:i,value:e.lang_code}),subtitle:e.native_name});t.set(e.lang_code,s)});const n=Ze([...t.values()],e=>{A.default.getLangPack(e)});A.default.getCacheLangPack().then(e=>{const s=t.get(e.lang_code);s?s.radioField.setValueSilently(!0):console.error("no row",s,e)}),e.content.append(n)});return this.scrollable.append(e.container),s}))}}class $i extends V{constructor(){super(...arguments),this.buttons={}}init(){this.container.classList.add("settings-container"),this.setTitle("Settings");const e=Ie({},"bottom-left",[{icon:"logout",text:"EditAccount.Logout",onClick:()=>{rt.a.logOut()}}]);this.header.append(e),this.avatarElem=new ko,this.avatarElem.setAttribute("clickable",""),this.avatarElem.classList.add("profile-avatar","avatar-120"),this.nameDiv=document.createElement("div"),this.nameDiv.classList.add("profile-name"),this.phoneDiv=document.createElement("div"),this.phoneDiv.classList.add("profile-subtitle");const t=document.createElement("div");t.classList.add("profile-buttons");const s="profile-button btn-primary btn-transparent";t.append(this.buttons.edit=Object(U.a)(s,{icon:"edit",text:"EditAccount.Title"})),t.append(this.buttons.folders=Object(U.a)(s,{icon:"folder",text:"AccountSettings.Filters"})),t.append(this.buttons.general=Object(U.a)(s,{icon:"settings",text:"Telegram.GeneralSettingsViewController"})),t.append(this.buttons.notifications=Object(U.a)(s,{icon:"unmute",text:"AccountSettings.Notifications"})),t.append(this.buttons.privacy=Object(U.a)(s,{icon:"lock",text:"AccountSettings.PrivacyAndSecurity"})),t.append(this.buttons.language=Object(U.a)(s,{icon:"language",text:"AccountSettings.Language"})),this.scrollable.append(this.avatarElem,this.nameDiv,this.phoneDiv,t),this.scrollable.container.classList.add("profile-content-wrapper"),this.buttons.edit.addEventListener("click",()=>{new Ui(this.slider).open()}),this.buttons.folders.addEventListener("click",()=>{new Ki(this.slider).open()}),this.buttons.general.addEventListener("click",()=>{new Ri(this.slider).open()}),this.buttons.notifications.addEventListener("click",()=>{new Gi(this.slider).open()}),this.buttons.privacy.addEventListener("click",()=>{new Ei(this.slider).open()}),this.buttons.language.addEventListener("click",()=>{new Qi(this.slider).open()}),le.b.loadLottieWorkers(),this.fillElements()}fillElements(){let e=T.a.getSelf();this.avatarElem.setAttribute("peer",""+e.id),this.nameDiv.append(new ft.a({peerId:e.id}).element),this.phoneDiv.innerHTML=e.phone?T.a.formatUserPhone(e.phone):""}}class Yi extends V{constructor(){super(...arguments),this.uploadAvatar=null}init(){this.container.classList.add("new-channel-container"),this.setTitle("NewChannel"),this.avatarEdit=new Q(e=>{this.uploadAvatar=e});const e=document.createElement("div");e.classList.add("input-wrapper"),this.channelNameInputField=new F.b({label:"EnterChannelName",maxLength:128}),this.channelDescriptionInputField=new F.b({label:"DescriptionOptionalPlaceholder",maxLength:255}),e.append(this.channelNameInputField.container,this.channelDescriptionInputField.container);const t=()=>{this.nextBtn.classList.toggle("is-visible",!!this.channelNameInputField.value.length&&!this.channelNameInputField.input.classList.contains("error")&&!this.channelDescriptionInputField.input.classList.contains("error"))};this.channelNameInputField.input.addEventListener("input",t),this.channelDescriptionInputField.input.addEventListener("input",t);const s=document.createElement("div");s.classList.add("caption"),Object(A._i18n)(s,"Channel.DescriptionHolderDescrpiton"),this.nextBtn=$({icon:"arrow_next"}),this.nextBtn.addEventListener("click",()=>{const e=this.channelNameInputField.value,t=this.channelDescriptionInputField.value;this.nextBtn.disabled=!0,G.a.createChannel(e,t).then(e=>{this.uploadAvatar&&this.uploadAvatar().then(t=>{G.a.editPhoto(e,t)}),ln.removeTabFromHistory(this),new jt(this.slider).open({peerId:e,type:"channel",skippable:!0,title:"GroupAddMembers",placeholder:"SendMessageTo",takeOut:t=>G.a.inviteToChannel(Math.abs(e),t)})})}),this.content.append(this.nextBtn),this.scrollable.append(this.avatarEdit.container,e,s)}onCloseAfterTimeout(){return this.avatarEdit.clear(),this.uploadAvatar=null,this.channelNameInputField.value="",this.channelDescriptionInputField.value="",this.nextBtn.disabled=!1,super.onCloseAfterTimeout()}}var Xi=s(117);class Ji extends ct.b{constructor(){super("popup-create-contact popup-send-photo popup-new-media",null,{closable:!0,withConfirm:"Add"}),Object(A._i18n)(this.title,"AddContactTitle"),Object(l.b)(this.btnConfirm,()=>{const e=T.a.importContact(s.value,i.value,n.value);e.then(()=>{this.hide()},e=>{"NO_USER"===e.type&&(at({langPackKey:"Contacts.PhoneNumber.NotRegistred"}),c.disabled=!1)}),c.lockWithPromise(e)},{listenerSetter:this.listenerSetter});const e=[],t=document.createElement("div");t.classList.add("name-fields");const s=new F.b({label:"FirstName",name:"create-contact-name",maxLength:70,required:!0}),i=new F.b({label:"LastName",name:"create-contact-lastname",maxLength:70}),n=new Xi.a({required:!0});e.push(s,i,n);const a=()=>{const e=s.value+" "+i.value;c.avatarElem.setAttribute("peer-title",e),c.avatarElem.update()};this.listenerSetter.add(s.input)("input",a),this.listenerSetter.add(i.input)("input",a);const o=T.a.getSelf(),r=Object(Fs.a)(o.phone);r&&(n.validate=()=>!!n.value.match(/\d/),n.value="+"+r.code.country_code);const c=new Xe({inputFields:e,listenerSetter:this.listenerSetter,doNotEditAvatar:!0,nextBtn:this.btnConfirm,avatarSize:100});t.append(s.container,i.container,c.avatarElem),this.container.append(t,n.container),this.show()}}class Zi extends V{init(){this.container.id="contacts-container";const e=$({icon:"add",className:"is-visible"});this.content.append(e),Object(l.b)(e,()=>{new Ji},{listenerSetter:this.listenerSetter}),this.inputSearch=new j("Search",e=>{this.openContacts(e)}),this.listenerSetter.add(a.default)("contacts_update",e=>{T.a.isContact(e)?this.sortedUserList.add(e):this.sortedUserList.delete(e)}),this.title.replaceWith(this.inputSearch.container),this.middleware=Object(ks.a)()}createList(){const e=new Os,t=e.list;return t.id="contacts",t.classList.add("contacts-container"),Do.setListClickListener(t,()=>{this.close()},void 0,!0),e}onClose(){this.middleware.clean()}onOpenAfterTimeout(){!h.IS_MOBILE&&ai(!0)&&this.inputSearch.input.focus()}openContacts(e){this.init&&(this.init(),this.init=null),this.middleware.clean();const t=this.middleware.get();this.scrollable.onScrolledBottom=null,this.scrollable.container.textContent="",T.a.getContacts(e,void 0,"online").then(e=>{if(!t())return;const s=this.sortedUserList=this.createList();let i=()=>{const t=yt.a.windowH/72*1.25|0;e.splice(0,t).forEach(e=>{s.add(e)}),e.length||(i=void 0,this.scrollable.onScrolledBottom=null)};i(),this.scrollable.onScrolledBottom=()=>{i?i():this.scrollable.onScrolledBottom=null},Object(x.a)(this.scrollable.container,s.list)})}open(){return this.openContacts(),super.open()}}class en extends V{init(){if(this.container.id="chats-archived-container",this.setTitle("ArchivedChats"),!Do.sortedLists[en.filterId]){const e=Do.createChatList();Do.generateScrollable(e,en.filterId).container.append(e),Do.setListClickListener(e,null,!0)}const e=Do.scrollables[en.filterId];this.scrollable.container.replaceWith(e.container),this.scrollable=e}onOpen(){this.init&&(this.init(),this.init=null),this.wasFilterId=Do.filterId,Do.setFilterId(en.filterId),Do.onTabChange()}onOpenAfterTimeout(){Do.sortedLists[this.wasFilterId].clear()}onClose(){Do.setFilterId(this.wasFilterId),Do.onTabChange()}onCloseAfterTimeout(){return Do.sortedLists[en.filterId].clear(),super.onCloseAfterTimeout()}}en.filterId=1;var tn=s(7),sn=s(57);class nn{constructor(e){if(this.container=document.createElement("div"),this.container.classList.add("sidebar-left-section"),e.fakeGradientDelimiter)this.container.append(on()),this.container.classList.add("with-fake-delimiter");else if(e.noDelimiter)this.container.classList.add("no-delimiter");else{const e=document.createElement("hr");this.container.append(e)}this.content=this.generateContentElement(),e.name&&(this.title=document.createElement("div"),this.title.classList.add("sidebar-left-h2","sidebar-left-section-name"),Object(A.i18n_)({element:this.title,key:e.name}),this.content.append(this.title)),e.caption&&(this.caption=this.generateContentElement(),this.caption.classList.add("sidebar-left-section-caption"),!0!==e.caption&&Object(A.i18n_)({element:this.caption,key:e.caption}))}generateContentElement(){const e=document.createElement("div");return e.classList.add("sidebar-left-section-content"),this.container.append(e),e}}const an=(e,t,s)=>{const i=new nn({name:t,caption:s});return e.append(i.container),i.content},on=()=>{const e=document.createElement("div");return e.classList.add("gradient-delimiter"),e},rn=new class extends K{constructor(){super({sidebarEl:document.getElementById("column-left"),navigationType:"left"}),this.searchGroups={},this.inputSearch=new j("Search");const e=this.sidebarEl.querySelector(".item-main .sidebar-header");e.append(this.inputSearch.container);const t=()=>{new Zi(this).open()};this.backBtn=this.sidebarEl.querySelector(".sidebar-back-button");const s={icon:"archive",text:"ArchivedChats",onClick:()=>{new en(this).open()},verify:()=>!!i.a.dialogsStorage.getFolder(1).length},n=new dt.a({toggle:!0,checked:"night"===a.default.getTheme().name});n.input.addEventListener("change",()=>{a.default.settings.theme=n.input.checked?"night":"day",k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme()}),a.default.addEventListener("theme_change",()=>{n.setValueSilently("night"===a.default.getTheme().name)});const o=[{icon:"saved",text:"SavedMessages",onClick:()=>{setTimeout(()=>{mo.setPeer(mo.myId)},0)}},s,{icon:"user",text:"Contacts",onClick:t},{icon:"settings",text:"Settings",onClick:()=>{new $i(this).open()}},{icon:"darkmode",text:"DarkMode",onClick:()=>{},checkboxField:n},{icon:"animations",text:"Animations",onClick:()=>{},checkboxField:new dt.a({toggle:!0,checked:!0,stateKey:"settings.animationsEnabled"})},{icon:"help",text:"TelegramFeatures",onClick:()=>{mo.openUsername("TelegramTips")}},{icon:"bug",text:"ReportBug",onClick:()=>{const e=document.createElement("a");e.target="_blank",e.href="https://bugs.telegram.org/?tag_ids=40&sort=time",document.body.append(e),e.click(),setTimeout(()=>{e.remove()},0)}},{icon:"char z",text:"ChatList.Menu.SwitchTo.Z",onClick:()=>{sn.a.set({kz_version:"Z"}).then(()=>{location.href="https://web.telegram.org/z/"})},verify:()=>tn.a.isMainDomain},{icon:"char w",text:"ChatList.Menu.SwitchTo.Webogram",onClick:()=>{location.href="https://web.telegram.org/?legacy=1"},verify:()=>tn.a.isMainDomain}];this.toolsBtn=Ie({},"bottom-right",o,e=>{o.forEach(e=>{e.verify&&e.element.classList.toggle("hide",!e.verify())})}),this.toolsBtn.classList.remove("tgico-more"),this.toolsBtn.classList.add("sidebar-tools-button","is-visible"),this.backBtn.parentElement.insertBefore(this.toolsBtn,this.backBtn);const r=this.toolsBtn.querySelector(".btn-menu"),c=document.createElement("a");c.href="https://github.com/morethanwords/tweb/blob/master/CHANGELOG.md",c.target="_blank",c.rel="noopener noreferrer",c.classList.add("btn-menu-footer"),c.addEventListener(l.a,e=>{e.stopPropagation(),Object(se.c)()});const d=document.createElement("span");d.classList.add("btn-menu-footer-text"),d.innerHTML="Telegram Web"+tn.a.suffix+" alpha "+tn.a.versionFull,c.append(d),r.classList.add("has-footer"),r.append(c),this.newBtnMenu=Ie({},"top-left",[{icon:"newchannel",text:"NewChannel",onClick:()=>{new Yi(this).open()}},{icon:"newgroup",text:"NewGroup",onClick:()=>{new jt(this).open({peerId:0,type:"chat",skippable:!1,takeOut:e=>{new Y(this).open(e)},title:"GroupAddMembers",placeholder:"SendMessageTo"})}},{icon:"newprivate",text:"NewPrivateChat",onClick:t}]),this.newBtnMenu.className="btn-circle rp btn-corner z-depth-1 btn-menu-toggle animated-button-icon",this.newBtnMenu.insertAdjacentHTML("afterbegin",'\n \n \n '),this.newBtnMenu.id="new-menu",e.nextElementSibling.append(this.newBtnMenu),this.inputSearch.input.addEventListener("focus",()=>this.initSearch(),{once:!0}),this.archivedCount=document.createElement("span"),this.archivedCount.className="archived-count badge badge-24 badge-gray",s.element.append(this.archivedCount),a.default.addEventListener("dialogs_archived_unread",e=>{this.archivedCount.innerText=""+Object(C.c)(e.count,1),this.archivedCount.classList.toggle("hide",!e.count)}),T.a.getTopPeers("correspondents"),k.default.getState().then(e=>{const t=e.recentSearch||[];for(let e=0,s=t.length;e{this.backBtn.click()};this.searchGroups={contacts:new O("Search.Chats","contacts",void 0,void 0,void 0,void 0,s),globalContacts:new O("Search.Global","contacts",void 0,void 0,void 0,void 0,s),messages:new O("Search.Messages","messages"),people:new O(!1,"contacts",!0,"search-group-people",!0,!1,s),recent:new O("Recent","contacts",!0,"search-group-recent",!0,!0,s)};const n=this.searchSuper=new $s({mediaTabs:[{inputFilter:"inputMessagesFilterEmpty",name:"FilterChats",type:"chats"},{inputFilter:"inputMessagesFilterPhotoVideo",name:"SharedMediaTab2",type:"media"},{inputFilter:"inputMessagesFilterUrl",name:"SharedLinksTab2",type:"links"},{inputFilter:"inputMessagesFilterDocument",name:"SharedFilesTab2",type:"files"},{inputFilter:"inputMessagesFilterMusic",name:"SharedMusicTab2",type:"music"},{inputFilter:"inputMessagesFilterRoundVoice",name:"SharedVoiceTab2",type:"voice"}],scrollable:t,searchGroups:this.searchGroups,asChatList:!0,hideEmptyTabs:!1,showSender:!0});e.prepend(n.nav.parentElement.parentElement),t.container.append(n.container);n.setQuery({peerId:0,folderId:0}),n.selectTab(0),n.load(!0);let a=[],o=0,r=0,l=0;const c=()=>{this.inputSearch.container.classList.toggle("is-picked-twice",2===a.length),this.inputSearch.container.classList.toggle("is-picked",!!a.length),a.length?this.inputSearch.input.style.setProperty("--paddingLeft",a[a.length-1].getBoundingClientRect().right-this.inputSearch.input.getBoundingClientRect().left+"px"):this.inputSearch.input.style.removeProperty("--paddingLeft")},d=document.createElement("div");d.classList.add("search-helper"),d.addEventListener("click",e=>{const t=Object(Ce.a)(e.target,"selector-user");if(!t)return;const s=t.dataset.key;if(0===s.indexOf("date_")){const[e,t,i]=s.split("_");r=+t,l=+i}else o=+s;t.addEventListener("click",()=>{p(t)}),this.inputSearch.container.append(t),this.inputSearch.onChange(this.inputSearch.value=""),a.push(t),c()}),n.nav.parentElement.append(d);const u=(e,t)=>{const s=document.createElement("div");s.classList.add("selector-user");const i=document.createElement("avatar-element");return i.classList.add("selector-user-avatar","tgico"),i.setAttribute("dialog","1"),i.classList.add("avatar-30"),s.dataset.key=""+e,"number"==typeof e?(void 0===t&&(t=new ft.a({peerId:e}).element),i.setAttribute("peer",""+e)):i.classList.add("tgico-calendarfilter"),t&&("string"==typeof t?s.innerHTML=t:(Object(x.a)(s,t),s.append(t))),s.insertAdjacentElement("afterbegin",i),s},p=e=>{0===e.dataset.key.indexOf("date_")?r=l=0:o=0,e.remove(),a.findAndSplice(t=>t===e),setTimeout(()=>{c(),this.inputSearch.onChange(this.inputSearch.value)},0)};this.inputSearch.onClear=()=>{a.forEach(e=>{p(e)})},this.inputSearch.onChange=e=>{if(n.cleanupHTML(),n.setQuery({peerId:o,folderId:o?void 0:0,query:e,minDate:r,maxDate:l}),n.load(!0),d.innerHTML="",n.nav.classList.remove("hide"),!o&&e.trim()){const t=n.middleware.get();Promise.all([i.a.getConversationsAll(e).then(e=>e.map(e=>e.peerId)),T.a.getContacts(e,!0)]).then(e=>{if(!t())return;new Set(e[0].concat(e[1])).forEach(e=>{d.append(u(e))}),n.nav.classList.toggle("hide",!!d.innerHTML)})}if(!r&&e.trim()){const t=[];Object(re.a)(e,t),t.forEach(e=>{d.append(u("date_"+e.minDate+"_"+e.maxDate,e.title))}),n.nav.classList.toggle("hide",!!d.innerHTML)}},n.tabs.inputMessagesFilterEmpty.addEventListener("mousedown",e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=Object(Ce.a)(t,"search-group");if(!s||s.classList.contains("search-group-recent")||s.classList.contains("search-group-people"))return;const i=+t.getAttribute("data-peer-id");k.default.getState().then(e=>{const t=e.recentSearch||[];if(t[0]!==i){t.findAndSplice(e=>e===i),t.unshift(i),t.length>20&&(t.length=20),k.default.pushToState("recentSearch",t);for(const e of t)k.default.requestPeer(e,"recentSearch")}})},{capture:!0});let m=document.createElement("div");m.classList.add("search-group-scrollable"),m.append(this.searchGroups.people.list),this.searchGroups.people.container.append(m);new P.a(m);let g,b=!0;const v=Object(D.a)(e.parentElement,"zoom-fade",150,e=>{g&&clearTimeout(g),0!==e||b||(n.selectTab(0,!1),this.inputSearch.onClearClick(),g=window.setTimeout(()=>{g=0,this.newBtnMenu.classList.remove("is-hidden")},150)),b=!1});v(0);const f=()=>{this.toolsBtn.classList.remove("is-visible"),this.backBtn.classList.add("is-visible"),this.newBtnMenu.classList.add("is-hidden"),this.toolsBtn.parentElement.firstElementChild.classList.toggle("state-back",!0),h.IS_MOBILE_SAFARI||B.a.findItemByType("global-search")||B.a.pushItem({onPop:()=>{s()},type:"global-search"}),v(1)};this.inputSearch.input.addEventListener("focus",f),f(),this.backBtn.addEventListener("click",e=>{this.toolsBtn.classList.add("is-visible"),this.backBtn.classList.remove("is-visible"),this.toolsBtn.parentElement.firstElementChild.classList.toggle("state-back",!1),B.a.removeByType("global-search"),v(0)});const y=document.createElement("button");y.classList.add("btn-icon","tgico-close"),this.searchGroups.recent.nameEl.append(y),y.addEventListener("click",()=>{this.searchGroups.recent.clear(),k.default.pushToState("recentSearch",[])})}};de.a.appSidebarLeft=rn;var ln=rn;class cn{constructor(e){this.chat=e,this.bubbles=[],this.detailsMap=new Map,this.groups=[],this.newGroupDiff=121}removeBubble(e){const t=this.detailsMap.get(e);t&&(t.group.length&&(t.group.findAndSplice(t=>t.bubble===e),t.group.length?this.updateGroup(t.group):this.groups.findAndSplice(e=>e===t.group)),this.detailsMap.delete(e))}addBubble(e,t,s){const i=t.date,n=t.mid;let o,r=t.viaBotId||t.fromId;r===a.default.myId&&t.peerId===a.default.myId&&t.fwdFromId===r&&(r=-r),this.removeBubble(e);const l={bubble:e,mid:n,timestamp:i};if(this.bubbles.length){let e,t=-1;for(let e=0;es.mid)break}if(-1!==t&&(e=this.bubbles[t]),e){o=e.group;let t=0,s=0;for(;tt.mid===e);t&&this.updateGroup(t.group)}cleanup(){this.bubbles=[],this.groups=[],this.detailsMap.clear()}}class dn extends ct.b{constructor(e,t,s={}){if(super("popup-date-picker",s.noButtons?[]:[{langKey:"JumpToDate",callback:()=>{this.onPick&&this.onPick(this.selectedDate.getTime()/1e3|0)}},{langKey:"Cancel",isCancel:!0}],Object.assign({body:!0,overlayClosable:!0},s)),this.onPick=t,this.options=s,this.onPrevClick=e=>{this.selectedMonth.setMonth(this.selectedMonth.getMonth()-1),this.setMonth(),this.selectedMonth.getTime()===this.minMonth.getTime()&&this.prevBtn.setAttribute("disabled","true"),this.nextBtn.removeAttribute("disabled")},this.onNextClick=e=>{this.selectedMonth.setMonth(this.selectedMonth.getMonth()+1),this.setMonth(),this.selectedMonth.getTime()===this.maxMonth.getTime()&&this.nextBtn.setAttribute("disabled","true"),this.prevBtn.removeAttribute("disabled")},this.onDateClick=e=>{const t=e.target;if(!t.dataset.timestamp)return;if(this.selectedEl){if(this.selectedEl===t)return;this.selectedEl.classList.remove("active")}this.selectedEl=t,t.classList.add("active");const s=+t.dataset.timestamp;this.selectedDate=new Date(s),this.setTitle(),this.setTimeTitle()},this.minDate=s.minDate||new Date("2013-08-01T00:00:00"),e{const n=""+e;this.listenerSetter.add(t.input)("input",a=>{let o=t.value.replace(/\D/g,"");o.length>2?o=o.slice(0,2):(1===o.length&&+o[0]>+n[0]||2===o.length&&+o>e)&&(2===o.length&&i&&i(+o[1]),o="0"+o[0]),t.setValueSilently(o),s(o.length)})};this.hoursInputField=new F.b({plainText:!0}),this.minutesInputField=new F.b({plainText:!0}),s(23,this.hoursInputField,e=>{2===e&&this.minutesInputField.input.focus(),this.setTimeTitle()},e=>{this.minutesInputField.value=(e+this.minutesInputField.value).slice(0,2)}),s(59,this.minutesInputField,e=>{e||this.hoursInputField.input.focus(),this.setTimeTitle()}),this.selectedDate=e,e.setMinutes(e.getMinutes()+10),this.hoursInputField.setValueSilently(("0"+e.getHours()).slice(-2)),this.minutesInputField.setValueSilently(("0"+e.getMinutes()).slice(-2)),e.setHours(0,0,0,0),this.timeDiv.append(this.hoursInputField.container,t,this.minutesInputField.container),Object(l.b)(this.btnConfirm,()=>{this.onPick&&(this.selectedDate.setHours(+this.hoursInputField.value||0,+this.minutesInputField.value||0,0,0),this.onPick(this.selectedDate.getTime()/1e3|0)),this.hide()},{listenerSetter:this.listenerSetter}),this.body.append(this.timeDiv),this.prevBtn.classList.add("primary"),this.nextBtn.classList.add("primary")}const i=document.createElement("div");i.classList.add("popup-centerer"),i.append(this.container),this.element.append(i),e.setHours(0,0,0,0),this.selectedDate=e,this.maxDate=s.maxDate||new Date,this.maxDate.setHours(0,0,0,0),this.selectedMonth=new Date(this.selectedDate),this.selectedMonth.setDate(1),this.maxMonth=new Date(this.maxDate),this.maxMonth.setDate(1),this.minMonth=new Date(this.minDate),this.minMonth.setHours(0,0,0,0),this.minMonth.setDate(1),this.selectedMonth.getTime()===this.minMonth.getTime()&&this.prevBtn.setAttribute("disabled","true"),this.selectedMonth.getTime()===this.maxMonth.getTime()&&this.nextBtn.setAttribute("disabled","true"),s.noTitle&&(this.setTitle=()=>{}),this.setTimeTitle(),this.setTitle(),this.setMonth()}setTimeTitle(){if(this.btnConfirm&&this.selectedDate){let e,t=[];const s=new Date;s.setHours(0,0,0,0);const i={minute:"2-digit",hour:"2-digit"},n=new Date(this.selectedDate.getTime());if(n.setHours(+this.hoursInputField.value,+this.minutesInputField.value),this.selectedDate.getTime()===s.getTime())e="Schedule.SendToday";else{e="Schedule.SendDate";const i={month:"short",day:"numeric"};n.getFullYear()!==s.getFullYear()&&(i.year="numeric"),t.push(new A.default.IntlDateElement({date:n,options:i}).element)}t.push(new A.default.IntlDateElement({date:n,options:i}).element),this.btnConfirm.firstChild.replaceWith(Object(A.i18n)(e,t))}}setTitle(){this.title.textContent="",this.title.append(new A.default.IntlDateElement({date:this.selectedDate,options:{day:"numeric",month:"long",weekday:"short"}}).element)}renderElement(e,t=""){const s=document.createElement("button");return s.classList.add("btn-icon","date-picker-month-date"),e&&s.setAttribute("disabled","true"),t&&s.append(t),s}setMonth(){const e=new Date(this.selectedMonth),t={year:"numeric",month:this.timeDiv&&v.b.isMobile?"short":"long"};this.monthTitle.textContent="",this.monthTitle.append(new A.default.IntlDateElement({date:e,options:t}).element),this.month&&this.month.remove(),this.month=document.createElement("div"),this.month.classList.add("date-picker-month");const s=new Date,i=s.getDay();1!==i&&s.setHours(-24*(i-1));for(let e=0;e<7;++e){const e=this.renderElement(!0,new A.default.IntlDateElement({date:s,options:{weekday:"narrow"}}).element);e.classList.remove("date-picker-month-date"),e.classList.add("date-picker-month-day"),this.month.append(e),s.setDate(s.getDate()+1)}let n=e.getDay()-1;-1===n&&(n=6);const a=new Date(e.getTime());a.setDate(a.getDate()-n-1);for(let e=0;ethis.maxDate||e{for(const t of e){const e=t.boundingClientRect,s=t.target.parentElement,i=t.rootBounds;e.bottom=i.top&&e.bottom{let t=e.filter(e=>e.boundingClientRect.top<0).sort((e,t)=>e.boundingClientRect.top-t.boundingClientRect.top)[0];if(!t)return;let s=t.isIntersecting?t.target:t.target.nextElementSibling;this.handler(!0,s)},{root:this.container})}addSentinel(e,t){const s=document.createElement("div");return s.classList.add("sticky_sentinel",t),e.appendChild(s)}observeStickyHeaderChanges(e){const t=this.addSentinel(e,"sticky_sentinel--top");this.headersObserver.observe(t),this.elementsObserver.observe(e)}disconnect(){this.headersObserver.disconnect(),this.elementsObserver.disconnect()}unobserve(e,t){this.elementsObserver.unobserve(e),this.headersObserver.unobserve(t)}}a.default.addEventListener("replies_updated",e=>{const t=e;Array.from(document.querySelectorAll(`replies-element[data-post-key="${t.peerId}_${t.mid}"]`)).forEach(e=>{e.message=t,e.render()})});class un extends HTMLElement{constructor(){super(),this.updated=!1}init(){this.render(),this.dataset.postKey=this.message.peerId+"_"+this.message.mid,this.classList.add("replies","replies-"+this.type)}render(){const e=this.message.replies;if("footer"===this.type){let t,s;if(this.firstElementChild&&(t=this.firstElementChild),(null==e?void 0:e.recent_repliers)?(t&&!t.classList.contains("replies-footer-avatars")&&(this.innerHTML="",t=null),t||(t=document.createElement("div"),t.classList.add("replies-footer-avatars")),e.recent_repliers.slice().reverse().forEach((e,s)=>{let i=t.children[s];i||(i=new ko,i.setAttribute("dialog","0"),i.classList.add("avatar-30"),i.lazyLoadQueue=this.lazyLoadQueue,this.loadPromises&&(i.loadPromises=this.loadPromises)),i.setAttribute("peer",""+o.a.getPeerId(e)),i.parentNode||t.append(i)}),Array.from(t.children).slice(e.recent_repliers.length).forEach(e=>e.remove())):(t&&!t.classList.contains("tgico-comments")&&(t.remove(),t=null),t||(t=document.createElement("span"),t.classList.add("tgico-comments"))),t.parentElement||this.append(t),s=e?e.replies?Object(A.i18n)("Comments",[e.replies]):Object(A.i18n)("LeaveAComment"):Object(A.i18n)("ViewInChat"),e){const t=i.a.getHistoryStorage(-e.channel_id);let s=!1;e.replies&&(s=void 0!==e.read_max_id&&void 0!==e.max_id?e.read_max_id${(null==e?void 0:e.replies)?Object(C.c)(e.replies,0):""}`;!e||this.updated||this.message.pFlags.is_outgoing||(i.a.subscribeRepliesThread(this.message.peerId,this.message.mid),i.a.updateMessage(this.message.peerId,this.message.mid,"replies_updated"),this.updated=!0),this.loadPromises&&(this.loadPromises=void 0)}}var pn,mn;customElements.define("replies-element",un),(mn=pn||(pn={})).setTime=(e,t,s,i,n)=>{var a,o;const r=new Date(1e3*t.date);let l=("0"+r.getHours()).slice(-2)+":"+("0"+r.getMinutes()).slice(-2);if(t.views){const n=t.post_author||(null===(a=t.fwd_from)||void 0===a?void 0:a.post_author);if(s.classList.add("channel-post"),l=''+Object(C.c)(t.views,1)+' '+(n?Z.b.wrapEmojiText(n)+", ":"")+l,!(null===(o=t.fwd_from)||void 0===o?void 0:o.saved_from_msg_id)&&"pinned"!==e.type){const e=document.createElement("div");e.classList.add("bubble-beside-button","forward"),e.innerHTML='\n \n \n \n \n \n ',i.append(e),s.classList.add("with-beside-button")}}t.edit_date&&"scheduled"!==e.type&&!t.pFlags.edit_hide&&(s.classList.add("is-edited"),l='edited '+l),"pinned"!==e.type&&t.pFlags.pinned&&(s.classList.add("is-pinned"),l=''+l);const c=Object(re.e)(r)+(t.edit_date?"\nEdited: "+Object(re.e)(new Date(1e3*t.edit_date)):"")+(t.fwd_from?"\nOriginal: "+Object(re.e)(new Date(1e3*t.fwd_from.date)):""),d=document.createElement("span");return d.classList.add("time","tgico"),d.title=c,d.innerHTML=`${l}
${l}
`,n.append(d),d},mn.renderReplies=({bubble:e,bubbleContainer:t,message:s,messageDiv:i,loadPromises:n,lazyLoadQueue:a})=>{const o=!e.classList.contains("sticker")&&!e.classList.contains("emoji-big")&&!e.classList.contains("round"),r=new un;return r.message=s,r.type=o?"footer":"beside",r.loadPromises=n,r.lazyLoadQueue=a,r.init(),t.prepend(r),o},mn.setReply=({chat:e,bubble:t,bubbleContainer:s,message:i})=>{const n=!s;n&&(s=t.querySelector(".bubble-content"));const a=n?s.querySelector(".reply"):null;if(!i.reply_to_mid)return a&&a.remove(),void t.classList.remove("is-reply");const o=i.reply_to.reply_to_peer_id?e.appPeersManager.getPeerId(i.reply_to.reply_to_peer_id):e.peerId;let r,l=e.appMessagesManager.getMessageByPeer(o,i.reply_to_mid);"messageEmpty"===l._?(e.appMessagesManager.wrapSingleMessage(o,i.reply_to_mid),e.bubbles.needUpdate.push({replyToPeerId:o,replyMid:i.reply_to_mid,mid:i.mid}),r=Object(A.i18n)("Loading")):r=new ft.a({peerId:l.fromId||l.fwdFromId,dialog:!1,onlyFirstName:!1,plainText:!1}).element;const c=Es(r,void 0,l);a?a.replaceWith(c):s.append(c),t.classList.add("is-reply")};var gn=s(119),bn=s(121);function vn(e,t,s){const i=e.getBoundingClientRect(),n="center"===s?Math.ceil(i.left+(i.right-i.left)/2+1):Math.ceil(i.left+1),a="bottom"===t?Math.floor(i.top+i.height-1):Math.ceil(i.top+1);return document.elementFromPoint(n,a)}function fn(e){e.style.display="none",e.offsetLeft,e.style.display=""}de.a.getElementByPoint=vn;var yn=s(76),wn=s(140),Ln=s(106),Sn=s(75);const En={keywords:{},version:0,langCode:tn.a.langPackCode};class Mn{constructor(){this.keywordLangPacks={},this.indexedLangPacks={},this.getKeywordsPromises={}}getEmojiKeywords(e=tn.a.langPackCode){const t=this.getKeywordsPromises[e];if(t)return t;const s="emojiKeywords_"+e;return this.getKeywordsPromises[e]=Sn.a.get(s).then(t=>(Object(wn.a)(t)||(t={}),Object(L.k)(En,t),t.langCode=e,this.keywordLangPacks[e]=t,rt.a.invokeApi("messages.getEmojiKeywordsDifference",{lang_code:t.langCode,from_version:t.version}).then(e=>{t.version=e.version;const i=t.keywords,n=e.keywords;for(let e=0,t=n.length;et)))}getBothEmojiKeywords(){const e=[this.getEmojiKeywords()];return A.default.lastRequestedLangCode!==tn.a.langPackCode&&e.push(this.getEmojiKeywords(A.default.lastRequestedLangCode)),this.recent||e.push(this.getRecentEmojis()),Promise.all(e)}indexEmojis(){this.index||(this.index=new Ln.a(void 0,2));for(const e in this.keywordLangPacks){if(this.indexedLangPacks[e])continue;const t=this.keywordLangPacks[e].keywords;for(const e in t){const s=t[e];this.index.indexObject(s,e)}this.indexedLangPacks[e]=!0}}searchEmojis(e){let t;if(this.indexEmojis(),(e=e.toLowerCase().replace(/_/g," ")).trim()){const s=this.index.search(e);t=Array.from(s).reduce((e,t)=>e.concat(t),[])}else t=this.recent.concat(Mn.POPULAR_EMOJI).slice(0,36);return t=Array.from(new Set(t)),t}getRecentEmojis(){return this.getRecentEmojisPromise?this.getRecentEmojisPromise:this.getRecentEmojisPromise=k.default.getState().then(e=>this.recent=Array.isArray(e.recentEmoji)?e.recentEmoji:[])}pushRecentEmoji(e){e=Z.b.fixEmoji(e),this.getRecentEmojis().then(t=>{t.findAndSplice(t=>t===e),t.unshift(e),t.length>36&&(t.length=36),k.default.pushToState("recentEmoji",t),a.default.dispatchEvent("emoji_recent",e)})}}Mn.POPULAR_EMOJI=["😂","😘","❤️","😍","😊","😁","👍","☺️","😔","😄","😭","💋","😒","😳","😜","🙈","😉","😃","😢","😝","😱","😡","😏","😞","😅","😚","🙊","😌","😀","😋","😆","👌","😐","😕"];const In=new Mn;de.a&&(de.a.appEmojiManager=In);var Cn=In,kn=s(126),Tn=s(9);const Pn=new Set;function xn(e,t,s=!1,i=!1){const n=document.createElement("span");let o;if(n.classList.add("super-emoji"),i&&!Tn.a?o=Z.a.wrapSingleEmoji(e):(e=Z.a.fixEmoji(e),o=Z.a.wrapEmojiText(e)),n.innerHTML=o,n.children.length>1){const e=n.firstElementChild;n.innerHTML="",n.append(e)}if(n.firstElementChild&&!Tn.a){const e=n.firstElementChild,t=e.src;if(!Pn.has(t)){e.setAttribute("loading","lazy");const s=document.createElement("span");s.classList.add("emoji-placeholder"),a.default.settings.animationsEnabled&&(e.style.opacity="0",s.style.opacity="1"),e.addEventListener("load",()=>{Object(_e.b)(()=>{a.default.settings.animationsEnabled&&(e.style.opacity="",s.style.opacity=""),n.classList.remove("empty"),Pn.add(t)})},{once:!0}),n.append(s)}}s?t.prepend(n):t.appendChild(n)}function An(e){return Object(Ce.a)(e,"super-emoji")?3===e.nodeType?e.nodeValue:("SPAN"===e.tagName&&!e.classList.contains("emoji")&&e.firstElementChild&&(e=e.firstElementChild),e.getAttribute("alt")||e.innerText):""}class On{constructor(){this.closeScrollTop=0,this.onContentClick=e=>{Object(c.a)(e);const t=An(e.target);if(!t)return;const s=mo.chat.input.messageInput;let i=s.innerHTML;const n=Z.a.wrapEmojiText(t,!0);let a=!1;if(window.getSelection){const e=pe.IS_TOUCH_SUPPORTED?void 0:Jn.getSavedRange();let t=window.getSelection();if(e&&(t.removeAllRanges(),t.addRange(e)),t.getRangeAt&&t.rangeCount){var o=document.createElement("div");o.innerHTML=n;var r=o.firstChild,l=t.getRangeAt(0);l.deleteContents(),l.insertNode(r),l.setStart(r,0),a=!0,setTimeout(()=>{(l=document.createRange()).setStartAfter(r),l.collapse(!0),t.removeAllRanges(),t.addRange(l)},0)}}a&&s.innerHTML!==i||s.insertAdjacentHTML("beforeend",n);const d=new Event("input",{bubbles:!0,cancelable:!0});s.dispatchEvent(d)}}init(){this.content=document.getElementById("content-emoji");const e=["Emoji.SmilesAndPeople","Emoji.AnimalsAndNature","Emoji.FoodAndDrink","Emoji.TravelAndPlaces","Emoji.ActivityAndSport","Emoji.Objects","Emoji.Flags","Skin Tones"],t={},s=new Map([["Emoji.Recent",[]]]);for(const t in kn.a.Emoji){const i=""+kn.a.Emoji[t],n=e[+i[0]-1];if(!n)continue;let a=s.get(n);a||(a=[],s.set(n,a)),a[+i.slice(1)||0]=t}s.delete(e.pop()),s.forEach((e,s)=>{const i=document.createElement("div");i.classList.add("emoji-category");const n=document.createElement("div");n.classList.add("category-title"),n.append(Object(A.i18n)(s));const a=document.createElement("div");a.classList.add("super-emojis"),i.append(n,a),e.forEach(e=>{xn(Object(ne.a)(e),a,!1)}),t[s]=i});const i=this.menu=this.content.previousElementSibling,n=this.scroll=new P.b(this.content,"EMOJI"),o=Object(se.f)(this.content,!0);Promise.all([Object(yn.a)(200),Cn.getRecentEmojis().then(e=>{const t=!!e.length,s=t?0:1;this.menu.children[0].classList.toggle("hide",!t),this.menu.children[s].classList.add("active");const a=Yn.menuOnClick(i,n,void 0,s);return this.stickyIntersector=a.stickyIntersector,this.setMenuActive=a.setActive,e})]).then(([s,i])=>{o.remove(),this.recentItemsDiv=t["Emoji.Recent"].querySelector(".super-emojis");for(const e of i)xn(e,this.recentItemsDiv);this.recentItemsDiv.parentElement.classList.toggle("hide",!this.recentItemsDiv.childElementCount),e.unshift("Emoji.Recent"),e.map(e=>{const s=t[e];return s||console.error("no div by category:",e),n.container.append(s),this.stickyIntersector.observeStickyHeaderChanges(s),s})}),this.content.addEventListener("click",this.onContentClick),this.init=null,a.default.addEventListener("emoji_recent",e=>{const t=Array.from(this.recentItemsDiv.children);for(let s=0,i=t.length;s{this.closeScrollTop=this.scroll.scrollTop})}onClose(){}}var _n=s(114),Fn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class jn{constructor(e,t,s,i=!0){this.element=e,this.group=t,this.scrollable=s,this.scrollPromise=Promise.resolve(),this.timeout=0,this.onScroll=()=>{this.timeout?clearTimeout(this.timeout):this.scrollPromise=Object(oe.a)(),this.timeout=window.setTimeout(()=>{this.timeout=0,this.scrollPromise.resolve()},150)},this.processInvisibleDiv=e=>this.scrollPromise.then(()=>Fn(this,void 0,void 0,(function*(){if(this.lazyLoadQueue.intersector.isVisible(e))return;const t=e.querySelector("video"),s=e.querySelector("img");if(s&&(s&&s.classList.remove("hide"),yield Object(_e.a)()),!this.lazyLoadQueue.intersector.isVisible(e)&&t){t.remove(),t.src="",t.load();I.a.getAnimations(t).forEach(e=>{I.a.checkAnimation(e,!0,!0)})}}))),this.lazyLoadQueue=new te.c(void 0,(e,t)=>{t?this.processVisibleDiv(e):this.processInvisibleDiv(e)}),i&&this.attach()}attach(){this.scrollable.container.addEventListener("scroll",this.onScroll)}detach(){this.clear(),this.scrollable.container.removeEventListener("scroll",this.onScroll)}clear(){this.lazyLoadQueue.clear()}processVisibleDiv(e){if(e.querySelector("video"))return;this.lazyLoadQueue.push({div:e,load:()=>{const t=e.dataset.docId,s=M.a.getDoc(t);return this.scrollPromise.then(()=>{const t=vs({doc:s,container:e,lazyLoadQueue:null,group:this.group,noInfo:!0}).loadPromise;return t.finally(()=>{const t=e.querySelector("video");e.style.opacity="";const s=e.querySelector("img");s&&s.classList.add("hide"),t&&!t.parentElement&&setTimeout(()=>{t.src="",t.load();I.a.getAnimations(t).forEach(e=>{I.a.checkAnimation(e,!0,!0)})},0),this.lazyLoadQueue.intersector.isVisible(e)||this.processInvisibleDiv(e)}),t})}})}add(e,t=this.element){var s;let i=e.w,n=e.h;n<100&&(i*=100/n,n=100);const a=Math.min(300,400,i),o=Object(_n.a)(i,n,a,100),r=document.createElement("div");r.classList.add("gif","fade-in-transition"),r.style.width=o.width+"px",r.style.opacity="0",r.dataset.docId=e.id,t.append(r),this.lazyLoadQueue.observe(r);const l=M.a.getThumb(e,!1);let c;!!l&&(c=new Image,c.classList.add("media-poster"),l.cacheContext.url||l.promise.then(()=>{c.src=l.cacheContext.url}));const d=()=>{c&&(r.append(c),r.style.opacity="")};(null===(s=null==l?void 0:l.cacheContext)||void 0===s?void 0:s.url)?Object(Rt.a)(c,l.cacheContext.url,d):d()}}class Dn{init(){this.content=document.getElementById("content-gifs");const e=this.content.firstElementChild;e.addEventListener("click",Yn.onMediaClick);const t=new P.b(this.content,"GIFS"),s=new jn(e,$n,t),i=Object(se.f)(this.content,!0);rt.a.invokeApi("messages.getSavedGifs",{hash:0}).then(e=>{"messages.savedGifs"===e._&&e.gifs.forEach((t,i)=>{e.gifs[i]=t=M.a.saveDoc(t),s.add(t)}),i.remove()}),Jn.addLazyLoadQueueRepeat(s.lazyLoadQueue,s.processInvisibleDiv),this.init=null}onClose(){}}var Bn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Rn{constructor(e,t){this.regularLazyLoadQueue=e,this.group=t,this.animatedDivs=new Set,this.checkAnimationContainer=(e,t)=>{I.a.getAnimations(e).forEach(e=>{t?I.a.checkAnimation(e,!1):I.a.checkAnimation(e,!0,!0)})},this.processVisibleDiv=e=>{const t=e.dataset.docId,s=M.a.getDoc(t),i=v.b.active.esgSticker.width,n=Ls({doc:s,div:e,width:i,height:i,lazyLoadQueue:null,group:this.group,onlyThumb:!1,play:!0,loop:!0});return n.then(()=>{this.checkAnimationContainer(e,this.lazyLoadQueue.intersector.isVisible(e))}),n},this.processInvisibleDiv=e=>{const t=e.dataset.docId,s=M.a.getDoc(t);this.checkAnimationContainer(e,!1),e.innerHTML="",this.renderSticker(s,e)},this.lazyLoadQueue=new te.b(void 0,(e,t)=>{t||this.processInvisibleDiv(e)})}clear(){this.lazyLoadQueue.clear()}renderSticker(e,t,s){return t||((t=document.createElement("div")).classList.add("grid-item","super-sticker"),2===e.sticker&&this.observeAnimatedDiv(t)),Ls({doc:e,div:t,lazyLoadQueue:this.regularLazyLoadQueue,group:this.group,onlyThumb:2===e.sticker,loadPromises:s}),t}observeAnimatedDiv(e){this.animatedDivs.add(e),this.lazyLoadQueue.observe({div:e,load:this.processVisibleDiv})}}class Hn{constructor(){this.stickerSets={},this.recentStickers=[],this.mounted=!1,this.queueCategoryPush=[]}categoryPush(e,t="",s,i){const n=document.createElement("div");n.classList.add("category-items","super-stickers");const a=document.createElement("div");return a.classList.add("category-title"),t&&(a.innerHTML=t),e.append(a,n),this.stickyIntersector.observeStickyHeaderChanges(e),this.queueCategoryPush.push({element:e,prepend:i}),s.then(e=>{e.forEach(e=>{n.append(this.superStickerRenderer.renderSticker(e))}),this.queueCategoryPush.length&&(this.queueCategoryPush.forEach(({element:e,prepend:t})=>{t?this.recentDiv.parentElement?(this.stickersDiv.prepend(e),this.stickersDiv.prepend(this.recentDiv)):this.stickersDiv.prepend(e):this.stickersDiv.append(e)}),this.queueCategoryPush.length=0)}),{titleDiv:a}}renderStickerSet(e,t=!1){return Bn(this,void 0,void 0,(function*(){const s=document.createElement("div");s.classList.add("sticker-category"),s.dataset.id=e.id,s.dataset.access_hash=e.access_hash;const i=document.createElement("button");i.classList.add("btn-icon","menu-horizontal-div-item"),this.stickerSets[e.id]={stickers:s,tab:i},t?this.menu.insertBefore(i,this.menu.firstElementChild.nextSibling):this.menu.append(i);const n=hs.getStickerSet(e);this.categoryPush(s,Z.a.wrapEmojiText(e.title),n.then(e=>e.documents),t);yield n;Ss({set:e,container:i,group:$n,lazyLoadQueue:Yn.lazyLoadQueue,width:32,height:32,autoplay:!1})}))}init(){this.content=document.getElementById("content-stickers"),this.recentDiv=document.createElement("div"),this.recentDiv.classList.add("sticker-category","stickers-recent");let e=this.content.previousElementSibling;this.menu=e.firstElementChild;let t=new P.a(e);this.stickersDiv=document.createElement("div"),this.stickersDiv.classList.add("stickers-categories"),this.content.append(this.stickersDiv),a.default.addEventListener("stickers_installed",e=>{const t=e;!this.stickerSets[t.id]&&this.mounted&&this.renderStickerSet(t,!0)}),a.default.addEventListener("stickers_deleted",e=>{const t=e;if(this.stickerSets[t.id]&&this.mounted){const e=this.stickerSets[t.id];e.stickers.remove(),e.tab.remove(),delete this.stickerSets[t.id]}}),this.stickersDiv.addEventListener("click",e=>{const t=e.target;if(Object(Ce.a)(t,"category-title")){const e=Object(vt.a)(t,"data-id");new Di({id:e.dataset.id,access_hash:e.dataset.access_hash}).show()}else Yn.onMediaClick(e)}),this.scroll=new P.b(this.content,"STICKERS"),this.scroll.setVirtualContainer(this.stickersDiv),this.stickyIntersector=Yn.menuOnClick(this.menu,this.scroll,t).stickyIntersector;const s=Object(se.f)(this.content,!0);Promise.all([hs.getRecentStickers().then(e=>{this.recentStickers=e.stickers.slice(0,20),this.stickerSets.recent={stickers:this.recentDiv,tab:this.menu.firstElementChild},s.remove();const{titleDiv:t}=this.categoryPush(this.recentDiv,"",Promise.resolve(this.recentStickers),!0);t.append(Object(A.i18n)("Stickers.Recent"))}),hs.getAllStickers().then(e=>{s.remove();for(let t of e.sets)this.renderStickerSet(t)})]).finally(()=>{this.mounted=!0}),this.superStickerRenderer=new Rn(Yn.lazyLoadQueue,$n),Jn.addLazyLoadQueueRepeat(this.superStickerRenderer.lazyLoadQueue,this.superStickerRenderer.processInvisibleDiv),this.init=null}pushRecentSticker(e){var t;if(!(null===(t=this.recentDiv)||void 0===t?void 0:t.parentElement))return;let s=this.recentDiv.querySelector(`[data-doc-id="${e.id}"]`);s||(s=this.superStickerRenderer.renderSticker(e));const i=this.recentDiv.querySelector(".category-items");i.prepend(s),i.childElementCount>20&&Array.from(i.children).slice(20).forEach(e=>e.remove())}onClose(){}}var Un=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const Nn=new class{constructor(){this.inlineResults={},this.setHash={}}getGeoInput(e){return"geoPoint"===e._?{_:"inputGeoPoint",lat:e.lat,long:e.long,accuracy_radius:e.accuracy_radius}:{_:"inputGeoPointEmpty"}}getInlineResults(e,t,s="",i="",n){return rt.a.invokeApi("messages.getInlineBotResults",{bot:T.a.getUserInput(t),peer:o.a.getInputPeerById(e),query:s,geo_point:n?this.getGeoInput(n):void 0,offset:i},{stopTime:-1,noErrorBox:!0}).then(e=>{const t=e.query_id;return e.results.forEach(e=>{"botInlineMediaResult"===e._&&(e.document&&(e.document=M.a.saveDoc(e.document)),e.photo&&(e.photo=r.a.savePhoto(e.photo))),this.inlineResults[this.generateQId(t,e.id)]=e}),e})}generateQId(e,t){return e+"_"+t}pushPopularBot(e){T.a.getTopPeers("bots_inline").then(t=>{const s=t.findIndex(e=>e.id);let i;i=-1!==s?t[s]:{id:e,rating:0},++i.rating,Object(y.e)(t,i,"rating"),k.default.setKeyValueToStorage("topPeersCache")})}switchToPM(e,t,s){return this.setHash[t]={peerId:e,time:Date.now()},a.default.dispatchEvent("history_focus",{peerId:t}),i.a.startBot(t,0,s)}checkSwitchReturn(e){return Un(this,void 0,void 0,(function*(){const t=T.a.getUser(e);if(!t||!t.pFlags.bot||!t.bot_inline_placeholder)return;const s=this.setHash[e];return s&&(delete this.setHash[e],Date.now()-s.time<36e5)?s.peerId:void 0}))}switchInlineQuery(e,t,s,i){a.default.dispatchEvent("history_focus",{peerId:e,threadId:t}),Si.a.setDraft(e,t,"@"+T.a.getUser(s).username+" "+i)}callbackButtonClick(e,t,s){return rt.a.invokeApi("messages.getBotCallbackAnswer",{peer:o.a.getInputPeerById(e),msg_id:f.a.getServerMessageId(t),data:s.data},{stopTime:-1,noErrorBox:!0}).then(e=>{"string"==typeof e.message&&e.message.length&&nt(Z.a.wrapRichText(e.message,{noLinks:!0,noLinebreaks:!0}))})}sendInlineResult(e,t,s,n={}){var a;const o=this.inlineResults[s];if(!o)return;this.pushPopularBot(t);const l=s.split("_"),c=l.shift(),d=l.join("_");if(n.viaBotId=t,n.queryId=c,n.resultId=d,o.send_message.reply_markup&&(n.replyMarkup=o.send_message.reply_markup),"botInlineMessageText"===o.send_message._)n.entities=o.send_message.entities,i.a.sendText(e,o.send_message.message,n);else{let t,s="";const l=o.send_message;switch(l._){case"botInlineMessageMediaAuto":if(s=l.message,"botInlineMediaResult"===o._){const{document:e,photo:s}=o;t=e?M.a.getMediaInput(e):r.a.getMediaInput(s)}break;case"botInlineMessageMediaGeo":t={_:"inputMediaGeoPoint",geo_point:this.getGeoInput(l.geo)},n.geoPoint=l.geo;break;case"botInlineMessageMediaVenue":t={_:"inputMediaVenue",geo_point:this.getGeoInput(l.geo),title:l.title,address:l.address,provider:l.provider,venue_id:l.venue_id,venue_type:l.venue_type},n.geoPoint=l.geo;break;case"botInlineMessageMediaContact":t={_:"inputMediaContact",phone_number:l.phone_number,first_name:l.first_name,last_name:l.last_name,vcard:l.vcard}}t||(t={_:"messageMediaPending",type:o.type,file_name:o.title||(null===(a=o.content)||void 0===a?void 0:a.url)||o.url,size:0,progress:{percent:30,total:0}}),i.a.sendOther(e,t,n)}}};de.a&&(de.a.appInlineBotsManager=Nn);var zn=Nn,Vn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Wn extends V{constructor(){super(...arguments),this.nextOffset="",this.loadedAll=!1,this.onGifsClick=e=>{const t=Object(Ce.a)(e.target,"gif");if(!t)return;const s=t.dataset.docId;mo.chat.input.sendMessageWithDocument(s)?v.b.isMobile&&$t.onCloseBtnClick():console.warn("got no doc by id:",s)}}init(){this.container.id="search-gifs-container",this.inputSearch=new j("SearchGifsTitle",e=>{this.reset(),this.search(e)}),this.title.replaceWith(this.inputSearch.container),this.gifsDiv=document.createElement("div"),this.gifsDiv.classList.add("gifs-masonry"),Object(l.b)(this.gifsDiv,this.onGifsClick,{listenerSetter:this.listenerSetter}),this.scrollable.append(this.gifsDiv),this.masonry=new jn(this.gifsDiv,"GIFS-SEARCH",this.scrollable)}onClose(){this.scrollable.onScrolledBottom=()=>{}}onCloseAfterTimeout(){return this.reset(),this.gifsDiv.innerHTML="",I.a.checkAnimations(void 0,"GIFS-SEARCH"),this.inputSearch.remove(),super.onCloseAfterTimeout()}reset(){this.searchPromise=null,this.nextOffset="",this.loadedAll=!1,this.masonry.clear()}open(){const e=super.open();return $t.toggleSidebar(!0).then(()=>{this.search("",!0),this.scrollable.onScrolledBottom=()=>{this.search(this.inputSearch.value,!1)}}),e}search(e,t=!0){return Vn(this,void 0,void 0,(function*(){if(!this.searchPromise&&!this.loadedAll){this.gifBotPeerId||(this.gifBotPeerId=(yield T.a.resolveUsername("gif")).id);try{this.searchPromise=zn.getInlineResults(0,this.gifBotPeerId,e,this.nextOffset);const{results:s,next_offset:i}=yield this.searchPromise;if(this.inputSearch.value!==e)return;this.searchPromise=null,this.nextOffset=i,t&&(this.gifsDiv.innerHTML=""),s.length?s.forEach(e=>{"botInlineMediaResult"===e._&&e.document&&this.masonry.add(e.document)}):this.loadedAll=!0,this.scrollable.onScroll()}catch(e){throw this.searchPromise=null,console.error("gifs loading error:",e),e}}}))}}class Kn extends V{init(){this.container.id="stickers-container",this.container.classList.add("chatlist-container"),this.lazyLoadQueue=new te.d,this.inputSearch=new j("StickersTab.SearchPlaceholder",e=>{this.search(e)}),this.title.replaceWith(this.inputSearch.container),this.setsDiv=document.createElement("div"),this.setsDiv.classList.add("sticker-sets"),this.scrollable.append(this.setsDiv),Object(l.b)(this.setsDiv,e=>{const t=Object(Ce.a)(e.target,"sticker-set-sticker");if(t){const e=t.dataset.docId;return void mo.chat.input.sendMessageWithDocument(e)}const s=Object(Ce.a)(e.target,"sticker-set");if(!s)return;const i=s.dataset.stickerSet,n=s.dataset.access_hash,a=Object(Ce.a)(e.target,"sticker-set-button");a?(e.preventDefault(),e.cancelBubble=!0,a.setAttribute("disabled","true"),hs.getStickerSet({id:i,access_hash:n}).then(e=>{hs.toggleStickerSet(e.set).then(t=>{t&&(a.textContent="",a.append(Object(A.i18n)(e.set.installed_date?"Stickers.SearchAdded":"Stickers.SearchAdd")),a.classList.toggle("gray",!!e.set.installed_date))}).finally(()=>{a.removeAttribute("disabled")})})):hs.getStickerSet({id:i,access_hash:n}).then(e=>{new Di(e.set).show()})},{listenerSetter:this.listenerSetter})}onCloseAfterTimeout(){return this.setsDiv.innerHTML="",I.a.checkAnimations(void 0,"STICKERS-SEARCH"),super.onCloseAfterTimeout()}renderSet(e){const t=document.createElement("div");t.classList.add("sticker-set");const s=document.createElement("div");s.classList.add("sticker-set-header");const i=document.createElement("div");i.classList.add("sticker-set-details"),i.innerHTML=`\n
${Z.a.wrapEmojiText(e.title)}
\n `;const n=document.createElement("div");n.classList.add("sticker-set-count"),n.append(Object(A.i18n)("Stickers",[e.count])),i.append(n);const a=document.createElement("button");a.classList.add("btn-primary","btn-color-primary","sticker-set-button"),a.append(Object(A.i18n)(e.installed_date?"Stickers.SearchAdded":"Stickers.SearchAdd")),e.installed_date&&a.classList.add("gray"),s.append(i,a);const o=document.createElement("div");o.classList.add("sticker-set-stickers");const r=Math.min(5,e.count);for(let e=0;e{for(let t=0;t{this.renderFeatured()}),e}renderFeatured(){return hs.getFeaturedStickers().then(e=>{this.inputSearch.value||(e=this.filterRendered("",e)).forEach(e=>{this.renderSet(e.set)})})}filterRendered(e,t){t=t.slice();const s=Array.from(this.setsDiv.children);return Object(y.d)(s,s=>{const i=s.dataset.stickerSet,n=t.findIndex(e=>e.set.id===i);-1!==n?t.splice(n,1):e&&s.dataset.title.toLowerCase().includes(e.toLowerCase())||s.remove()}),I.a.checkAnimations(void 0,"STICKERS-SEARCH"),t}search(e){return e?hs.searchStickerSets(e,!1).then(t=>{this.inputSearch.value===e&&(t=this.filterRendered(e,t)).forEach(e=>{this.renderSet(e.set)})}):this.renderFeatured()}}var Gn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class qn extends R.a{constructor(e){super(!1),this.forceClose=!1,this.inited=!1,this.onMouseOut=e=>{if(clearTimeout(this.displayTimeout),!this.isActive())return;const t=e.toElement;t&&Object(zs.a)(t,this.element)||(this.displayTimeout=window.setTimeout(()=>{this.toggle(!1)},200))},this.toggle=e=>Gn(this,void 0,void 0,(function*(){const t=!!this.element.style.display&&void 0===e||e;if(this.init){if(!t)return;this.init(),this.init=null}if(t!==this.isActive())if(this.element.style.display&&void 0===e||e){const e=this.dispatchEvent("open");yield Promise.all(e),this.element.style.display="",this.element.offsetLeft,this.element.classList.add("active"),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.forceClose=!1,this.dispatchEvent("opened")},pe.IS_TOUCH_SUPPORTED?0:200)}else this.dispatchEvent("close"),this.element.classList.remove("active"),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.element.style.display="none",this.forceClose=!1,this.dispatchEvent("closed")},pe.IS_TOUCH_SUPPORTED?0:200)})),Object(L.g)(this,e)}attachButtonListener(e,t){let s=!0;pe.IS_TOUCH_SUPPORTED?Object(l.b)(e,()=>{s?(s=!1,this.toggle(!0)):this.toggle()},{listenerSetter:t}):t.add(e)("mouseover",i=>{s&&(t.add(e)("mouseout",this.onMouseOut),s=!1),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.toggle(!0)},200)})}init(){pe.IS_TOUCH_SUPPORTED||(this.element.onmouseout=this.onMouseOut,this.element.onmouseover=e=>{this.forceClose||clearTimeout(this.displayTimeout)})}isActive(){return this.element.classList.contains("active")}}var Qn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const $n="emoticons-dropdown";class Yn extends qn{constructor(){super({element:document.getElementById("emoji-dropdown")}),this.tabId=-1,this.onSelectTabClick=e=>{this.tabId!==e&&(I.a.checkAnimations(!0,$n),this.tabId=e,this.searchButton.classList.toggle("hide",0===this.tabId),this.deleteBtn.classList.toggle("hide",0!==this.tabId))},this.checkRights=()=>{const{peerId:e,threadId:t}=mo.chat,s=this.tabsEl.children,n=Array.from(s),a=i.a.canSendToPeer(e,t,"send_stickers");n[2].toggleAttribute("disabled",!a);const o=i.a.canSendToPeer(e,t,"send_gifs");n[3].toggleAttribute("disabled",!o);const r=this.tabsEl.querySelector(".active");!r||1===Object(Ts.a)(r)||a&&o||this.selectTab(0,!1)},this.addEventListener("open",()=>Qn(this,void 0,void 0,(function*(){pe.IS_TOUCH_SUPPORTED&&Object(Us.a)()&&(yield Object(yn.a)(100)),this.element.parentElement!==mo.chat.input.chatInput&&mo.chat.input.chatInput.append(this.element),this.savedRange=this.getGoodRange(),Yn.lazyLoadQueue.lock(),I.a.lockIntersectionGroup($n)}))),this.addEventListener("opened",()=>{I.a.unlockIntersectionGroup($n),Yn.lazyLoadQueue.unlock(),Yn.lazyLoadQueue.refresh(),this.container.classList.remove("disable-hover")}),this.addEventListener("close",()=>{Yn.lazyLoadQueue.lock(),I.a.lockIntersectionGroup($n),I.a.checkAnimations(!0,$n)}),this.addEventListener("closed",()=>{I.a.unlockIntersectionGroup($n),Yn.lazyLoadQueue.unlock(),Yn.lazyLoadQueue.refresh(),this.container.classList.remove("disable-hover"),this.savedRange=void 0})}init(){return this.emojiTab=new On,this.stickersTab=new Hn,this.gifsTab=new Dn,this.tabs={0:this.emojiTab,1:this.stickersTab,2:this.gifsTab},this.container=this.element.querySelector(".emoji-container .tabs-container"),this.tabsEl=this.element.querySelector(".emoji-tabs"),this.selectTab=Object(ee.a)(this.tabsEl,this.container,this.onSelectTabClick,()=>{const e=this.tabs[this.tabId];e.init&&e.init(),e.onCloseAfterTimeout&&e.onCloseAfterTimeout(),I.a.checkAnimations(!1,$n)}),this.searchButton=this.element.querySelector(".emoji-tabs-search"),this.searchButton.addEventListener("click",()=>{1===this.tabId?$t.isTabExists(Kn)||new Kn($t).open():$t.isTabExists(Wn)||new Wn($t).open()}),this.deleteBtn=this.element.querySelector(".emoji-tabs-delete"),this.deleteBtn.addEventListener("click",e=>{var t;const s=mo.chat.input.messageInput;(null===(t=s.lastChild)||void 0===t?void 0:t.tagName)?s.lastElementChild.remove():s.lastChild&&(s.lastChild.textContent.length?s.lastChild.textContent=s.lastChild.textContent.slice(0,-1):s.lastChild.remove());const i=new Event("input",{bubbles:!0,cancelable:!0});mo.chat.input.messageInput.dispatchEvent(i),Object(c.a)(e)}),this.tabsEl.children[1].click(),this.tabs[0].init&&this.tabs[0].init(),a.default.addEventListener("peer_changed",this.checkRights),this.checkRights(),super.init()}addLazyLoadQueueRepeat(e,t){this.addEventListener("close",()=>{e.lock()}),this.addEventListener("closed",()=>{const s=e.intersector.getVisible();for(const e of s)t(e);e.intersector.clearVisible()}),this.addEventListener("opened",()=>{e.unlockAndRefresh()})}getSavedRange(){return this.getGoodRange()||this.savedRange}getGoodRange(){const e=document.getSelection();if(e.rangeCount&&document.activeElement===mo.chat.input.messageInput)return e.getRangeAt(0)}}Yn.lazyLoadQueue=new te.d,Yn.menuOnClick=(e,t,s,i=0)=>{let n=-1;const a=t=>t!==i&&(e.children[i].classList.remove("active"),e.children[t].classList.add("active"),i=t,!0),o=new hn(t.container,(i,o)=>{if(Math.abs(n-t.container.scrollTop)<=1)return;n=-1;const r=Object(Ts.a)(o);!i&&r||(a(r),s&&(r{let s=e.target;if(s=Object(Ce.a)(s,"menu-horizontal-div-item"),!s)return;const i=Object(Ts.a)(s);if(!a(i))return;const o=(t.splitUp||t.container).children[i].offsetTop+1;t.container.scrollTop=n=o}),{stickyIntersector:o,setActive:a}},Yn.onMediaClick=(e,t=!1)=>{let s=e.target;if(s=Object(mt.a)(s,"DIV"),!s)return!1;const i=s.dataset.docId;return!!i&&(mo.chat.input.sendMessageWithDocument(i,void 0,t)?(Xn.container&&(Xn.forceClose=!0,Xn.container.classList.add("disable-hover"),Xn.toggle(!1)),!0):(console.warn("got no doc by id:",i),!1))};const Xn=new Yn;de.a.emoticonsDropdown=Xn;var Jn=Xn;var Zn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ea=new Set(["messageActionHistoryClear","messageActionChatCreate"]);let ta=void 0,sa=0;class ia{constructor(e,t,s,i,n,o,r,l,d,u){let p;this.chat=e,this.appMessagesManager=t,this.appStickersManager=s,this.appUsersManager=i,this.appInlineBotsManager=n,this.appPhotosManager=o,this.appPeersManager=r,this.appProfileManager=l,this.appDraftsManager=d,this.appMessagesIdsManager=u,this.peerId=0,this.unreadOut=new Set,this.needUpdate=[],this.bubbles={},this.skippedMids=new Set,this.dateMessages={},this.scrolledDown=!0,this.isScrollingTimeout=0,this.unreaded=new Map,this.unreadedSeen=new Set,this.preloader=null,this.loadedTopTimes=0,this.loadedBottomTimes=0,this.messagesQueuePromise=null,this.messagesQueue=[],this.messagesQueueOnRender=null,this.messagesQueueOnRenderAdditional=null,this.firstUnreadBubble=null,this.middleware=Object(ks.a)(),this.replyFollowHistory=[],this.isHeavyAnimationInProgress=!1,this.isFirstLoad=!0,this.passEntities={},this.viewsMids=new Set,this.onBubblesClick=e=>{var t;let s=e.target,i=null;try{i=Object(Ce.a)(s,"bubble")}catch(e){}if(!i)return;if(i.classList.contains("is-date")&&Object(Ce.a)(s,"bubble-content")){if(i.classList.contains("is-sticky")&&!this.chatInner.classList.contains("is-scrolling"))return;for(const e in this.dateMessages){if(this.dateMessages[e].div===i){new dn(new Date(+e),this.onDatePick).show();break}}return}if(!pe.IS_TOUCH_SUPPORTED&&Object(Ce.a)(s,"time"))return void this.chat.selection.toggleByElement(i);if(this.chat.selection.isSelecting&&e.isTrusted){if(i.classList.contains("service")&&void 0===i.dataset.mid)return;return Object(c.a)(e),pe.IS_TOUCH_SUPPORTED&&this.chat.selection.selectedText?void(this.chat.selection.selectedText=void 0):void this.chat.selection.toggleByElement(Object(Ce.a)(s,"grouped-item")||i)}const n=Object(Ce.a)(s,"contact");if(n)return void this.chat.appImManager.setInnerPeer(+n.dataset.peerId);if(Object(Ce.a)(s,"replies")){const e=+i.dataset.mid;if(this.peerId===gn.b){const t=this.chat.getMessage(e),s=this.appPeersManager.getPeerId(t.reply_to.reply_to_peer_id),i=t.reply_to.reply_to_top_id,n=t.fwd_from.saved_from_msg_id;this.chat.appImManager.openThread(s,n,i)}else{const t=this.appMessagesManager.filterMessages(this.chat.getMessage(e),e=>!!e.replies)[0],s=t.replies;s&&this.appMessagesManager.getDiscussionMessage(this.peerId,t.mid).then(e=>{this.chat.appImManager.setInnerPeer(-s.channel_id,void 0,"discussion",e.mid)})}return}const a=Object(Ce.a)(s,"peer-title")||Object(Ce.a)(s,"name")||Object(mt.a)(s,"AVATAR-ELEMENT");if(a){s=a||s;const t=+(s.dataset.peerId||s.getAttribute("peer")),i=s.dataset.savedFrom;if(a.classList.contains("is-via")){const s="@"+this.appUsersManager.getUser(t).username+" ";this.appDraftsManager.setDraft(this.peerId,this.chat.threadId,s),Object(c.a)(e)}else if(i){const e=i.split("_"),t=+e[0],s=+e[1];this.chat.appImManager.setInnerPeer(t,s)}else t?this.chat.appImManager.setInnerPeer(t):nt(A.default.format("HidAccount",!0));return}const o="SPAN"===s.tagName&&!s.classList.contains("emoji");if(i.classList.contains("sticker")&&s.parentElement.classList.contains("attachment")){const e=+i.dataset.mid,s=null===(t=this.chat.getMessage(e).media)||void 0===t?void 0:t.document;return void((null==s?void 0:s.stickerSetInput)&&new Di(s.stickerSetInput).show())}const r=Object(Ce.a)(s,"document-with-thumb");if("IMG"===s.tagName&&!s.classList.contains("emoji")&&!s.classList.contains("document-thumb")||s.classList.contains("album-item")||o||"VIDEO"===s.tagName&&!i.classList.contains("round")||r&&!r.querySelector(".preloader-container")){const t=+(Object(Ce.a)(s,"album-item")||Object(Ce.a)(s,"document-container")||i).dataset.mid,n=this.chat.getMessage(t);if(!n)return void this.log.warn("no message by messageId:",t);const a=r?e=>fo.isMediaCompatibleForDocumentViewer(e):e=>"photo"===e._||["video","gif"].includes(e.type),o=[],l=Object.keys(this.bubbles).map(e=>+e).filter(e=>{const t=this.chat.getMessage(e),s=this.appMessagesManager.getMediaFromMessage(t);return s&&a(s)}).sort((e,t)=>e-t);l.forEach(e=>{let t;if(r)t=".document-container";else{t=".album-item video, .album-item img, .preview video, .preview img, ",t+=this.bubbles[e].classList.contains("with-media-tail")?".bubble__media-container":".attachment video, .attachment img"}const s=Array.from(this.bubbles[e].querySelectorAll(t)),i=new Set;if(r)s.forEach(e=>{o.push({element:e.querySelector(".document-ico"),mid:+e.dataset.mid,peerId:this.peerId})});else{const t=!!this.bubbles[e].querySelector(".media-container-aspecter");s.forEach(s=>{if(t&&!Object(Ce.a)(s,"media-container-aspecter"))return;let n=Object(Ce.a)(s,"album-item");const a=n||s.parentElement;i.has(a)||(i.add(a),o.push({element:s,mid:n?+n.dataset.mid:e,peerId:this.peerId}))})}}),o.sort((e,t)=>e.mid-t.mid);let d=o.findIndex(e=>e.mid===t);return de.b&&this.log("open mediaViewer single with ids:",l,d,o),o[d]?((new fo).setSearchContext({threadId:this.chat.threadId,peerId:this.peerId,inputFilter:{_:r?"inputMessagesFilterDocument":"inputMessagesFilterPhotoVideo"},useSearch:"scheduled"!==this.chat.type,isScheduled:"scheduled"===this.chat.type}).openMedia(n,o[d].element,0,!0,o.slice(0,d),o.slice(d+1)),void Object(c.a)(e)):void this.log("no target for media viewer!",s)}if(-1===["IMG","DIV","SPAN"].indexOf(s.tagName)&&(s=Object(mt.a)(s,"DIV")),-1!==["DIV","SPAN"].indexOf(s.tagName)){if(s.classList.contains("goto-original")){const e=i.dataset.savedFrom.split("_"),t=+e[0],s=+e[1];return void this.chat.appImManager.setInnerPeer(t,s)}if(s.classList.contains("forward")){const e=+i.dataset.mid,t=this.appMessagesManager.getMessageByPeer(this.peerId,e);return void new Ds({[this.peerId]:this.appMessagesManager.getMidsByMessage(t)})}let t=!1;try{t=!!Object(Ce.a)(e.target,"reply")}catch(e){}if(t&&i.classList.contains("is-reply")){const e=+i.dataset.mid;this.replyFollowHistory.push(e);const t=this.chat.getMessage(e),s=t.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(t.reply_to.reply_to_peer_id):this.peerId,n=t.reply_to.reply_to_msg_id;this.chat.appImManager.setInnerPeer(s,n,this.chat.type,this.chat.threadId)}}},this.onScroll=()=>{this.isHeavyAnimationInProgress&&this.scrolledDown||(pe.IS_TOUCH_SUPPORTED||(this.isScrollingTimeout?clearTimeout(this.isScrollingTimeout):this.chatInner.classList.contains("is-scrolling")||this.chatInner.classList.add("is-scrolling"),this.isScrollingTimeout=window.setTimeout(()=>{this.chatInner.classList.remove("is-scrolling"),this.isScrollingTimeout=0},1350)),this.scrollable.getDistanceToEnd()<300&&this.scrollable.loadedAll.bottom?(this.bubblesContainer.classList.add("scrolled-down"),this.scrolledDown=!0):this.bubblesContainer.classList.contains("scrolled-down")&&(this.bubblesContainer.classList.remove("scrolled-down"),this.scrolledDown=!1),this.chat.topbar.pinnedMessage&&this.chat.topbar.pinnedMessage.setCorrectIndex(this.scrollable.lastScrollDirection))},this.onDatePick=e=>{const t=this.peerId;this.appMessagesManager.requestHistory(t,0,2,-1,e,this.chat.threadId).then(e=>{var s;(null===(s=null==e?void 0:e.messages)||void 0===s?void 0:s.length)?this.peerId===t&&this.chat.setMessageId(e.messages[0].mid):this.log.error("no history!")})},this.listenerSetter=new H.a,this.bubblesContainer=document.createElement("div"),this.bubblesContainer.classList.add("bubbles","scrolled-down"),this.chatInner=document.createElement("div"),this.chatInner.classList.add("bubbles-inner"),this.setScroll(),this.bubblesContainer.append(this.scrollable.container),this.log=this.chat.log,this.bubbleGroups=new cn(this.chat),this.preloader=new ye.a({cancelable:!1}),this.lazyLoadQueue=new te.d,this.lazyLoadQueue.queueId=++sa,this.listenerSetter.add(a.default)("history_update",({storage:e,peerId:t,mid:s})=>{if(this.chat.getMessagesStorage()===e){const e=this.bubbles[s];if(!e)return;const t=this.chat.getMessage(s);if(+e.dataset.timestamp>=t.date+Ye.a.serverTimeOffset-1)return;this.setBubblePosition(e,t,!1),this.scrollingToBubble&&this.scrollToBubbleEnd()}}),this.listenerSetter.add(a.default)("dialog_flush",({peerId:e})=>{this.peerId===e&&this.deleteMessagesByIds(Object.keys(this.bubbles).map(e=>+e))}),this.listenerSetter.add(a.default)("message_sent",e=>{var t,s,i,n;const{storage:o,tempId:r,tempMessage:l,mid:c}=e;if(this.chat.getMessagesStorage()!==o)return;const d=this.getMountedBubble(r,l)||this.getMountedBubble(c);if(d){const e=this.chat.getMessage(c),a=d.bubble;if(e.replies){const t=a.querySelector("replies-element");t&&(t.message=e,t.init())}if((null===(t=e.media)||void 0===t?void 0:t.document)&&!e.media.document.type){const t=a.querySelector(`.document-container[data-mid="${r}"] .document`);t&&t.replaceWith(fs({message:e}))}if(e.grouped_id){const e=a.querySelector(`.grouped-item[data-mid="${r}"]`)||a;e&&(e.dataset.mid=""+c)}if(null===(s=e.media)||void 0===s?void 0:s.poll){const t=a.querySelector("poll-element");if(t){const s=e.media.poll;t.message=e,t.setAttribute("poll-id",s.id),t.setAttribute("message-id",""+c)}}if(null===(i=e.media)||void 0===i?void 0:i.document){const t=a.querySelector(`audio-element[data-mid="${r}"], .document[data-doc-id="${r}"], .media-round[data-mid="${r}"]`);t&&(t instanceof Re||t.classList.contains("media-round")?(t.dataset.mid=""+e.mid,delete t.dataset.isOutgoing,t.message=e,t.onLoad(!0)):t.dataset.docId=e.media.document.id)}(null===(n=e.media)||void 0===n?void 0:n.webpage)&&!a.querySelector(".web")&&Object(Cs.c)().then(()=>{this.safeRenderMessage(e,!0,!1,a,!1),this.scrollToBubbleIfLast(a)})}else this.log.warn("message_sent there is no bubble",e);const h=this.bubbles;if(h[r]){const e=h[r];h[c]=e,delete h[r],Object(_e.b)(()=>{e.classList.contains("is-sending")&&(e.classList.remove("is-sending"),e.classList.add(this.peerId===a.default.myId&&"scheduled"!==this.chat.type?"is-read":"is-sent"))}),e.dataset.mid=""+c}if(this.unreadOut.has(r)&&(this.unreadOut.delete(r),this.unreadOut.add(c)),"scheduled"===this.chat.type){(Date.now()/1e3|0)>=l.date-10&&this.deleteMessagesByIds([c])}}),this.listenerSetter.add(a.default)("message_edit",({storage:e,peerId:t,mid:s})=>{if(e!==this.chat.getMessagesStorage())return;const i=this.chat.getMessage(s),n=i.grouped_id?this.getGroupedBubble(i.grouped_id):this.getMountedBubble(s);if(!n)return;const a="scheduled"===this.chat.type,o=this.scrolledDown;this.safeRenderMessage(n.message,!0,!1,n.bubble,a),o&&this.scrollToBubbleIfLast(n.bubble),a&&(this.messagesQueuePromise||Promise.resolve()).then(()=>{this.deleteEmptyDateGroups()})}),this.listenerSetter.add(a.default)("album_edit",({peerId:e,groupId:t,deletedMids:s})=>{if(e!==this.peerId)return;const i=this.appMessagesManager.getMidsByAlbum(t).concat(s).find(e=>this.bubbles[e]);if(!i)return;const n=Object(L.e)(this.appMessagesManager.groupedMessagesStorage[t],"asc").pop();this.safeRenderMessage(this.chat.getMessage(n),!0,!1,this.bubbles[i],!1)}),this.listenerSetter.add(a.default)("messages_downloaded",({peerId:e,mids:t})=>{const s=this.getMiddleware();Object(Cs.c)().then(()=>{s()&&t.forEach(t=>{Object(y.d)(this.needUpdate,(s,i)=>{if(s.replyMid===t&&s.replyToPeerId===e){const{mid:e,replyMid:t}=this.needUpdate.splice(i,1)[0],n=this.bubbles[e];if(!n)return;const a=this.chat.getMessage(e);this.appMessagesManager.getMessageByPeer(s.replyToPeerId,t).deleted&&delete a.reply_to_mid,pn.setReply({chat:this.chat,bubble:n,message:a})}})})})}),this.listenerSetter.add(this.bubblesContainer)("click",this.onBubblesClick),de.b&&this.listenerSetter.add(this.bubblesContainer)("dblclick",e=>{const t=Object(Ce.a)(e.target,"grouped-item")||Object(Ce.a)(e.target,"bubble");if(t){const e=+t.dataset.mid;this.log("debug message:",this.chat.getMessage(e)),this.highlightBubble(t)}}),h.IS_MOBILE||this.listenerSetter.add(this.bubblesContainer)("dblclick",e=>{if(this.chat.selection.isSelecting||!this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId))return;const t=e.target,s=t.classList.contains("bubble")?t:t.classList.contains("document-selection")?t.parentElement:null;if(s&&!s.classList.contains("bubble-first")){const e=+s.dataset.mid;if(this.chat.getMessage(e).pFlags.is_outgoing)return;this.chat.input.initMessageReply(e)}}),this.stickyIntersector=new hn(this.scrollable.container,(e,t)=>{for(const s in this.dateMessages){const i=this.dateMessages[s];if(i.container===t){i.div.classList.toggle("is-sticky",e);break}}}),Object(Cs.a)(()=>{this.isHeavyAnimationInProgress=!0,this.lazyLoadQueue.lock(),p=this.getMiddleware()},()=>{this.isHeavyAnimationInProgress=!1,p&&p()&&(this.lazyLoadQueue.unlock(),this.lazyLoadQueue.refresh()),p=null},this.listenerSetter)}constructPeerHelpers(){if(this.listenerSetter.add(a.default)("history_append",({storage:e,mid:t})=>{e===this.chat.getMessagesStorage()&&(this.scrollable.loadedAll.bottom?this.renderNewMessagesByIds([t],!0):this.chat.setMessageId())}),this.listenerSetter.add(a.default)("history_multiappend",e=>{if(!(this.peerId in e))return;const t=Array.from(e[this.peerId]).slice().sort((e,t)=>t-e);this.renderNewMessagesByIds(t)}),this.listenerSetter.add(a.default)("history_delete",({peerId:e,msgs:t})=>{e===this.peerId&&this.deleteMessagesByIds(Array.from(t))}),this.listenerSetter.add(a.default)("dialog_unread",({peerId:e})=>{e===this.peerId&&(this.chat.input.setUnreadCount(),this.updateUnreadByDialog())}),this.listenerSetter.add(a.default)("dialogs_multiupdate",e=>{e[this.peerId]&&this.chat.input.setUnreadCount()}),this.listenerSetter.add(a.default)("dialog_notify_settings",e=>{this.peerId===e.peerId&&this.chat.input.setUnreadCount()}),this.listenerSetter.add(a.default)("chat_update",e=>{if(this.peerId===-e){this.chatInner.classList.contains("has-rights")!==this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId)&&(this.finishPeerChange(),this.chat.input.updateMessageInput())}}),this.listenerSetter.add(a.default)("settings_updated",e=>{if("settings.emoji.big"===e.key){const e=this.scrollable.isScrolledDown;e||this.setMessagesQueuePromise();Object(L.e)(this.bubbles,"desc").forEach(e=>{const t=this.bubbles[e];if(t.classList.contains("can-have-big-emoji")){const s=this.chat.getMessage(e);this.safeRenderMessage(s,void 0,!1,t)}}),e?this.scrollable.scrollTop=99999:this.performHistoryResult([],!0,!1,void 0)}}),this.listenerSetter.add(a.default)("message_views",({peerId:e,views:t,mid:s})=>{this.peerId===e&&Object(_e.b)(()=>{const e=this.bubbles[s];if(!e)return;const i=Array.from(e.querySelectorAll(".post-views"));if(i.length){const e=Object(C.c)(t,1);let s=!1;i.forEach(t=>{(s||t.innerHTML!==e)&&(s=!0,t.innerHTML=e)})}})}),this.unreadedObserver=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const t=e.target,s=this.unreaded.get(t);this.onUnreadedInViewport(t,s)}})}),this.viewsObserver=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(this.viewsMids.add(+e.target.dataset.mid),this.viewsObserver.unobserve(e.target),this.sendViewCountersDebounced())})}),this.sendViewCountersDebounced=ot(()=>{const e=[...this.viewsMids];this.viewsMids.clear(),this.appMessagesManager.incrementMessageViews(this.peerId,e)},1e3,!1,!0),"ResizeObserver"in window){let e=this.scrollable.container.offsetHeight,t=!1,s=!1,i=0,n=0,a=0;const o=()=>{const o=this.scrollable.container.offsetHeight,r=this.scrollable.isScrolledDown;o===e||s&&r||(n+=e-o),n&&(this.scrollable.scrollTop+=Math.round(n)),e=o,i=0,a=0,n=0,t=!1,s=!1},r=e=>{a&&window.cancelAnimationFrame(a),a=window.requestAnimationFrame(e?o:()=>{a=window.requestAnimationFrame(o)})};new ResizeObserver(a=>{if(s)return void r(!1);const o=a[0].contentRect.height;if(!e)return void(e=o);const l=e-o;let c=l+n;const d=c%1;if(c-=d,!t&&(t=!0,l<0&&this.scrollable.isScrolledDown))return n=-l,s=!0,void r(!1);if(i+=c,c){const e=this.scrollable.scrollTop+c;this.scrollable.scrollTop=e}r(!1),n=d,e=o}).observe(this.bubblesContainer)}}getRenderedLength(){return Object.keys(this.bubbles).length-this.skippedMids.size}onUnreadedInViewport(e,t){this.unreadedSeen.add(t),this.unreadedObserver.unobserve(e),this.unreaded.delete(e),this.readUnreaded()}readUnreaded(){if(this.readPromise)return;const e=this.getMiddleware();this.readPromise=a.default.idle.focusPromise.then(()=>{if(!e())return;let t=Math.max(...Array.from(this.unreadedSeen));if(this.scrollable.loadedAll.bottom){const e=Math.max(...Object.keys(this.bubbles).map(e=>+e));t>=e&&(t=Math.max(this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId).maxId||0,t))}this.unreaded.forEach((e,s)=>{e<=t&&this.onUnreadedInViewport(s,e)});const s=[];for(const e of this.unreadedSeen){const t=this.chat.getMessage(e);this.appMessagesManager.isMentionUnread(t)&&s.push(e)}return this.appMessagesManager.readMessages(this.peerId,s),this.unreadedSeen.clear(),de.b&&this.log("will readHistory by maxId:",t),this.appMessagesManager.readHistory(this.peerId,t,this.chat.threadId).catch(e=>{this.log.error("readHistory err:",e),this.appMessagesManager.readHistory(this.peerId,t,this.chat.threadId)}).finally(()=>{e()&&(this.readPromise=void 0,this.unreadedSeen.size&&this.readUnreaded())})})}constructPinnedHelpers(){this.listenerSetter.add(a.default)("peer_pinned_messages",e=>{const{peerId:t,mids:s,pinned:i}=e;t===this.peerId&&s&&(i||this.deleteMessagesByIds(s))})}constructScheduledHelpers(){const e=()=>{this.chat.topbar.setTitle(this.appMessagesManager.getScheduledMessagesStorage(this.peerId).size)};this.listenerSetter.add(a.default)("scheduled_new",({peerId:t,mid:s})=>{t===this.peerId&&(this.renderNewMessagesByIds([s]),e())}),this.listenerSetter.add(a.default)("scheduled_delete",({peerId:t,mids:s})=>{t===this.peerId&&(this.deleteMessagesByIds(s),e())})}onGoDownClick(){if(this.replyFollowHistory.length){Object(y.d)(this.replyFollowHistory,(e,t)=>{const s=this.bubbles[e];let i=!0;if(s){const e=s.getBoundingClientRect();i=yt.a.windowH/2>e.top}else{this.chat.getMessage(e).deleted||(i=!1)}i&&this.replyFollowHistory.splice(t,1)}),this.replyFollowHistory.sort((e,t)=>t-e);const e=this.replyFollowHistory.pop();this.chat.setMessageId(e)}else this.chat.setMessageId()}getBubbleByPoint(e){let t=vn(this.scrollable.container,e,"center");return t&&(t=Object(Ce.a)(t,"bubble")),t}getGroupedBubble(e){const t=this.appMessagesManager.groupedMessagesStorage[e];for(const[e]of t)if(this.bubbles[e]){const s=Math.max(...t.keys());return{bubble:this.bubbles[e],mid:+e,message:this.chat.getMessage(s)}}return null}getBubbleGroupedItems(e){return Array.from(e.querySelectorAll(".grouped-item"))}getMountedBubble(e,t=this.chat.getMessage(e)){if(t.grouped_id&&this.appMessagesManager.getMidsByAlbum(t.grouped_id).length>1){const s=this.getGroupedBubble(t.grouped_id);if(s)return s.bubble=s.bubble.querySelector(`.document-container[data-mid="${e}"]`)||s.bubble,s}const s=this.bubbles[e];if(s)return{bubble:s,mid:e,message:t}}findNextMountedBubbleByMsgId(e){return this.bubbles[Object(L.e)(this.bubbles).find(t=>{var s;return!(t+e).sort((e,t)=>e-t);if(s.length)if(e)de.b&&this.log("Will load more (up) history by id:",s[0],"maxId:",s[s.length-1],t),this.getHistory(s[0],!0,void 0,void 0,t);else{const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);if(-1!==s.indexOf(e.maxId))return void this.setLoaded("bottom",!0);de.b&&this.log("Will load more (down) history by id:",s[s.length-1],t),this.getHistory(s[s.length-1],!1,!0,void 0,t)}}setScroll(){this.scrollable=new P.b(null,"IM",300),this.setLoaded("top",!1),this.setLoaded("bottom",!1),this.scrollable.container.append(this.chatInner),this.scrollable.onAdditionalScroll=this.onScroll,this.scrollable.onScrolledTop=()=>this.loadMoreHistory(!0),this.scrollable.onScrolledBottom=()=>this.loadMoreHistory(!1),pe.IS_TOUCH_SUPPORTED&&(this.scrollable.container.addEventListener("touchmove",()=>{this.isScrollingTimeout?clearTimeout(this.isScrollingTimeout):this.chatInner.classList.contains("is-scrolling")||this.chatInner.classList.add("is-scrolling")},{passive:!0}),this.scrollable.container.addEventListener("touchend",()=>{this.chatInner.classList.contains("is-scrolling")&&(this.isScrollingTimeout&&clearTimeout(this.isScrollingTimeout),this.isScrollingTimeout=window.setTimeout(()=>{this.chatInner.classList.remove("is-scrolling"),this.isScrollingTimeout=0},1350))},{passive:!0}))}updateUnreadByDialog(){const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId),t=this.peerId===a.default.myId?e.readMaxId:e.readOutboxMaxId;for(const e of this.unreadOut)if(e>0&&e<=t){const t=this.bubbles[e];t&&(t.classList.remove("is-sent","is-sending"),t.classList.add("is-read")),this.unreadOut.delete(e)}}deleteMessagesByIds(e,t=!0){e.forEach(e=>{if(!(e in this.bubbles))return;const t=this.bubbles[e];delete this.bubbles[e],this.skippedMids.delete(e),this.firstUnreadBubble===t&&(this.firstUnreadBubble=null),this.bubbleGroups.removeBubble(t),this.unreadedObserver&&(this.unreadedObserver.unobserve(t),this.unreaded.delete(t)),this.viewsObserver&&(this.viewsObserver.unobserve(t),this.viewsMids.delete(e)),t.remove(),this.emptyPlaceholderMid===e&&(this.emptyPlaceholderMid=void 0)}),t&&this.chat.selection.isSelecting&&this.chat.selection.deleteSelectedMids(this.peerId,e),I.a.checkAnimations(!1,ho),this.deleteEmptyDateGroups()}renderNewMessagesByIds(e,t=this.scrolledDown){if(!this.scrollable.loadedAll.bottom)return;this.chat.threadId&&(e=e.filter(e=>{const t=this.chat.getMessage(e).reply_to;return t&&(t.reply_to_top_id||t.reply_to_msg_id)===this.chat.threadId})),e=e.filter(e=>!this.bubbles[e]),t||this.scrollingToBubble&&this.scrollingToBubble===this.getLastBubble()&&(t=!0);const s=this.performHistoryResult(e,!1,!0);t&&s.then(()=>{let t;"scheduled"===this.chat.type&&(t=this.bubbles[Math.max(...e)]),this.scrollToBubbleEnd(t)})}getLastBubble(){const e=this.getLastDateGroup();if(e)return e.lastElementChild}scrollToBubble(e,t,s,i){const n=Object(Ce.a)(e,"bubble");if("center"===t&&Object(Ts.a)(n)===(this.stickyIntersector?2:1)){const s=n.parentElement;0===Object(Ts.a)(s)&&(e=s,t="start")}return this.scrollable.scrollIntoViewNew(e,t,4,void 0,s,i)}scrollToBubbleEnd(e=this.getLastBubble()){if(e){this.scrollingToBubble=e;const t=this.getMiddleware();this.scrollToBubble(e,"end").then(()=>{t()&&(this.scrollingToBubble=void 0)})}}getLastDateGroup(){let e,t=0;for(const s in this.dateMessages){const i=this.dateMessages[s];i.firstTimestamp>t&&(e=i.container,t=i.firstTimestamp)}return e}scrollToBubbleIfLast(e){e.parentElement.lastElementChild===e&&this.getLastDateGroup().parentElement.lastElementChild===e.parentElement&&this.scrollToBubbleEnd(e)}highlightBubble(e){const t="highlightTimeout";e.dataset[t]&&(clearTimeout(+e.dataset[t]),e.classList.remove("is-highlighted"),e.offsetWidth),e.classList.add("is-highlighted"),e.dataset[t]=""+setTimeout(()=>{e.classList.remove("is-highlighted"),delete e.dataset[t]},2e3)}getDateContainerByMessage(e,t){const s=new Date(1e3*e.date);s.setHours(0,0,0);const i=s.getTime();if(!this.dateMessages[i]){let t;const n=new Date;n.setHours(0,0,0,0);const a="scheduled"===this.chat.type;if(n.getTime()===s.getTime())t=Object(A.i18n)(a?"Chat.Date.ScheduledForToday":"Date.Today");else if(a&&2147483646===e.date)t=Object(A.i18n)("MessageScheduledUntilOnline");else{const e={day:"numeric",month:"long"};s.getFullYear()!==n.getFullYear()&&(e.year="numeric"),t=new A.default.IntlDateElement({date:s,options:e}).element,a&&(t=Object(A.i18n)("Chat.Date.ScheduledFor",[t]))}const o=document.createElement("div");o.className="bubble service is-date";const r=document.createElement("div");r.classList.add("bubble-content");const l=document.createElement("div");l.classList.add("service-msg"),l.append(t),r.append(l),o.append(r);const c=document.createElement("div");c.className="bubbles-date-group",c.append(o),this.dateMessages[i]={div:o,container:c,firstTimestamp:s.getTime()};const d=Object(L.e)(this.dateMessages,"asc");let h,u=0,p=d.length;for(;u+e)))}else this.isFirstLoad=!0;const h=this.chatInner;let u;this.cleanup(),this.chatInner=document.createElement("div"),i?(this.chatInner.className=h.className,this.chatInner.classList.remove("disable-hover","is-scrolling")):this.chatInner.classList.add("bubbles-inner"),this.lazyLoadQueue.lock(),u=o?{promise:Object(Cs.c)().then(()=>this.performHistoryResult(o.mids,!0,!1,void 0)),cached:!0}:this.getHistory(t,!0,l,c);const{promise:p,cached:m}=u;m||i||(this.scrollable.container.textContent="",this.chat.finishPeerChange(a,l,t),this.preloader.attach(this.bubblesContainer)),I.a.lockGroup(ho);const g=p.then(()=>{if(m?i||this.chat.finishPeerChange(a,l,t):this.preloader.detach(),this.resolveLadderAnimation&&(this.resolveLadderAnimation(),this.resolveLadderAnimation=void 0),this.scrollable.lastScrollDirection=0,this.scrollable.lastScrollTop=0,Object(x.a)(this.scrollable.container,this.chatInner),I.a.unlockGroup(ho),I.a.checkAnimations(!1,ho),this.lazyLoadQueue.unlock(),o)this.scrollable.scrollTop=o.top;else if(n&&l||a){const e=d>0&&(d{this.scrollable.checkForTriggers()}),this.chat.dispatchEvent("setPeer",t,!l);const h=this.appMessagesManager.isFetchIntervalNeeded(e);if(o||h?c.then(()=>{if(s()&&(this.scrollable.checkForTriggers(),h)){const t=()=>{this.fetchNewPromise=new Promise(i=>{s()&&this.appMessagesManager.isFetchIntervalNeeded(e)?this.appMessagesManager.getNewHistory(e,this.chat.threadId).then(e=>{if(!s()||!e)return void i();const n=e.history.slice.isEnd(bn.a.Bottom);this.scrollable.loadedAll.bottom&&this.scrollable.loadedAll.bottom!==n&&(this.setLoaded("bottom",n),this.onScroll()),setTimeout(t,3e4),i()}):i()}).finally(()=>{this.fetchNewPromise=void 0})};i?setTimeout(t,3e4):t()}}):t&&!this.bubbles[n]&&t!==n||this.setLoaded("bottom",!0),this.log("scrolledAllDown:",this.scrollable.loadedAll.bottom),this.scrollable.loadedAll.bottom&&n&&!this.unreaded.size&&this.onScrolledAllDown(),"chat"===this.chat.type){const t=this.appMessagesManager.getDialogOnly(e);(null==t?void 0:t.pFlags.unread_mark)&&this.appMessagesManager.markDialogUnread(e,!0)}}).catch(e=>{throw this.log.error("getHistory promise error:",e),this.preloader.detach(),e});return{cached:m,promise:g}}onScrolledAllDown(){if("chat"===this.chat.type||"discussion"===this.chat.type){const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);this.appMessagesManager.readHistory(this.peerId,e.maxId,this.chat.threadId,!0)}}finishPeerChange(){const e=this.peerId,t=this.appPeersManager.isChannel(e),s=this.appMessagesManager.canSendToPeer(e,this.chat.threadId);this.chatInner.classList.toggle("has-rights",s),this.bubblesContainer.classList.toggle("is-chat-input-hidden",!s),this.chatInner.classList.toggle("is-chat",this.chat.isAnyGroup()),this.chatInner.classList.toggle("is-channel",t)}renderMessagesQueue(e,t,s,i){this.messagesQueue.push({message:e,bubble:t,reverse:s,promises:i}),this.setMessagesQueuePromise()}setMessagesQueuePromise(){!this.messagesQueuePromise&&this.messagesQueue.length&&(this.messagesQueuePromise=new Promise((e,t)=>{setTimeout(()=>{const s=this.messagesQueue.slice();this.messagesQueue.length=0;const i=s.reduce((e,{promises:t})=>e.concat(t),[]);this.log("promises to call",i,s,this.isHeavyAnimationInProgress);const n=this.getMiddleware();Promise.all(i).then(()=>{if(!n())throw"setMessagesQueuePromise: peer changed!";this.messagesQueueOnRender&&this.messagesQueueOnRender(),this.messagesQueueOnRenderAdditional&&this.messagesQueueOnRenderAdditional(),s.forEach(({message:e,bubble:t,reverse:s})=>{this.setBubblePosition(t,e,s)}),e(),this.messagesQueuePromise=null,this.messagesQueue.length&&this.setMessagesQueuePromise(),this.setUnreadDelimiter()}).catch(t)},0)}))}setBubblePosition(e,t,s){if(t.id<0)return void this.chatInner.prepend(e);const i=this.getDateContainerByMessage(t,s);if("scheduled"===this.chat.type||"pinned"===this.chat.type){const s=this.stickyIntersector?2:1;let n=Array.from(i.container.children).slice(s),a=0,o=0;for(;as.includes(e)));i.className=n.join(" "),g=i.lastElementChild,m=g.firstElementChild,m.innerHTML="",m.style.cssText="",g.innerHTML="",g.appendChild(m);const a=g.style.transitionDelay;g.style.cssText="",g.style.transitionDelay=a,i===this.firstUnreadBubble&&i.classList.add("is-first-unread");const o=+i.dataset.mid;+e.mid===o||(delete this.bubbles[o],this.skippedMids.delete(o))}else if(g=document.createElement("div"),g.classList.add("bubble-content-wrapper"),m=document.createElement("div"),m.classList.add("bubble-content"),(i=document.createElement("div")).classList.add("bubble"),g.appendChild(m),i.appendChild(g),!u&&!e.pFlags.out&&this.unreadedObserver){(e.pFlags.unread||this.appMessagesManager.isMentionUnread(e)||void 0!==this.historyStorage.readMaxId&&this.historyStorage.readMaxId"messageEntityEmoji"===e._),t=y.length;if(e.reduce((e,t)=>e+t.length,0)===t&&e.length<=3){if(a.default.settings.emoji.big){let t=this.appStickersManager.getAnimatedEmojiSticker(y);if(1===e.length&&!L&&t)L={_:"messageMediaDocument",document:t};else{let t=document.createElement("div");t.classList.add("attachment"),t.innerHTML=S,i.classList.add("emoji-"+e.length+"x"),m.append(t)}i.classList.add("is-message-empty","emoji-big"),M=!0,E=!1,I=!1}i.classList.add("can-have-big-emoji")}}I&&b(p,S);const C=pn.setTime(this.chat,e,i,m,p);if(m.prepend(p),e.views&&!e.pFlags.is_outgoing&&this.viewsObserver&&this.viewsObserver.observe(i),e.reply_markup&&"replyInlineMarkup"===e.reply_markup._&&e.reply_markup.rows&&e.reply_markup.rows.length){const t=e.reply_markup.rows,s=document.createElement("div");s.classList.add("reply-markup"),t.forEach(t=>{const i=t.buttons;if(!i||!i.length)return;const n=document.createElement("div");n.classList.add("reply-markup-row"),i.forEach(t=>{const s=Z.b.wrapRichText(t.text,{noLinks:!0,noLinebreaks:!0});let i;switch(t._){case"keyboardButtonUrl":{const e=Z.b.wrapRichText(" ",{entities:[{_:"messageEntityTextUrl",length:1,offset:0,url:t.url}]});i=Object(Rs.a)(e).firstElementChild,i.classList.add("is-link","tgico");break}case"keyboardButtonSwitchInline":{i=document.createElement("button"),i.classList.add("is-switch-inline");const s=document.createElement("i");s.classList.add("forward-icon"),s.innerHTML='\n \n \n \n \n ',i.append(s),Object(l.b)(i,s=>{Object(c.a)(s);const i=e.viaBotId||e.fromId;let n;n=t.pFlags.same_peer?Promise.resolve(this.peerId):this.appInlineBotsManager.checkSwitchReturn(i).then(e=>e||new Promise((e,t)=>{new Ds({[this.peerId]:[]},t=>{e(t)},()=>{t()},!0)})),n.then(e=>{const s=this.peerId===e?this.chat.threadId:void 0;this.appInlineBotsManager.switchInlineQuery(e,s,i,t.query)})});break}default:i=document.createElement("button")}i.classList.add("reply-markup-button","rp"),i.insertAdjacentHTML("beforeend",s),Object(ie.ripple)(i),n.append(i)}),s.append(n)}),Object(l.b)(s,s=>{let i=s.target;if(i.classList.contains("reply-markup-button")||(i=Object(Ce.a)(i,"reply-markup-button")),!i||i.classList.contains("is-link")||i.classList.contains("is-switch-inline"))return;Object(c.a)(s);const n=Object(Ts.a)(i),a=t[Object(Ts.a)(i.parentElement)];if(!a.buttons||!a.buttons[n])return void this.log.warn("no such button",a,n,e);const o=a.buttons[n];this.appInlineBotsManager.callbackButtonClick(this.peerId,e.mid,o)}),E=!1,i.classList.add("with-reply-markup"),g.append(s)}const k=e.pFlags.is_outgoing;if(u){(e.pFlags.unread||k)&&this.unreadOut.add(e.mid);let t="";t=k?"is-sending":e.pFlags.unread?"is-sent":"is-read",i.classList.add(t)}const T=this.appMessagesManager.getMessageWithReplies(e),P=!!T&&e.mid>0;P&&i.classList.add("with-replies");const x=u&&(!e.fwd_from||this.peerId!==a.default.myId);let O=m;if(L){let t=document.createElement("div");t.classList.add("attachment"),y||i.classList.add("is-message-empty");let s=!1;switch(L._){case"messageMediaPhoto":{const s=L.photo;y||(E=!1),e.viaBotId||i.classList.add("hide-name"),i.classList.add("photo");const n=this.appMessagesManager.groupedMessagesStorage[e.grouped_id];if(e.grouped_id&&1!==n.size&&r){i.classList.add("is-album","is-grouped"),Is({groupId:e.grouped_id,attachmentDiv:t,middleware:this.getMiddleware(),isOut:u,lazyLoadQueue:this.lazyLoadQueue,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});break}const a=!h.IS_ANDROID&&E&&!P&&!1;a&&i.classList.add("with-media-tail"),ys({photo:s,message:e,container:t,withTail:a,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});break}case"messageMediaWebPage":{s=!0;let t=L.webpage;if("webPage"!==t._)break;i.classList.add("webpage");let n=document.createElement("div");n.classList.add("web");let a,o,r=document.createElement("div");r.classList.add("quote");const l=t.photo;(l||t.document)&&(a=document.createElement("div"),a.classList.add("preview-resizer"),o=document.createElement("div"),o.classList.add("preview"),a.append(o));const c=t.document;if(c)if("gif"===c.type||"video"===c.type)i.classList.add("video"),vs({doc:c,container:o,message:e,boxWidth:v.b.active.webpage.width,boxHeight:v.b.active.webpage.height,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),isOut:x,group:ho,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});else{const t=fs({message:e,noAutoDownload:this.chat.noAutoDownloadMedia,lazyLoadQueue:this.lazyLoadQueue,loadPromises:f});o.append(t),o.classList.add("preview-with-document")}let d,h=document.createElement("div");if(h.classList.add("quote-text"),a&&h.append(a),t.site_name){const e=Z.b.wrapRichText(t.url),s=Object(Rs.a)(e).firstElementChild;s.classList.add("webpage-name"),b(s,Z.b.wrapEmojiText(t.site_name)),h.append(s),d=s}if(t.rTitle){let e=document.createElement("div");e.classList.add("title"),b(e,t.rTitle),h.append(e),d=e}if(t.rDescription){let e=document.createElement("div");e.classList.add("text"),b(e,t.rDescription),h.append(e),d=e}if(r.append(h),l&&!c){i.classList.add("photo");const t=l.sizes[l.sizes.length-1];let s=!1;t.w===t.h&&d?(i.classList.add("is-square-photo"),s=!0,this.appPhotosManager.setAttachmentSize(l,o,48,48,!1)):t.h>t.w&&i.classList.add("is-vertical-photo"),ys({photo:l,message:e,container:o,boxWidth:s?0:v.b.active.webpage.width,boxHeight:s?0:v.b.active.webpage.height,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),loadPromises:f,withoutPreloader:s,noAutoDownload:this.chat.noAutoDownloadMedia})}n.append(r),p.insertBefore(n,C);break}case"messageMediaDocument":{const n=L.document;if(n.sticker){i.classList.add("sticker"),E=!1,M=!0,n.animated&&i.classList.add("sticker-animated");const e=v.b.active,s=i.classList.contains("emoji-big")?e.emojiSticker:n.animated?e.animatedSticker:e.staticSticker;this.appPhotosManager.setAttachmentSize(n,t,s.width,s.height),m.style.height=t.style.height,m.style.width=t.style.width,Ls({doc:n,div:t,middleware:this.getMiddleware(),lazyLoadQueue:this.lazyLoadQueue,group:ho,play:!0,loop:!0,emoji:i.classList.contains("emoji-big")?y:void 0,withThumb:!0,loadPromises:f})}else if("video"===n.type||"gif"===n.type||"round"===n.type){const s="round"===n.type;s&&(M=!0),!s&&y||(E=!1),e.viaBotId||i.classList.add("hide-name"),i.classList.add(s?"round":"video");const a=this.appMessagesManager.groupedMessagesStorage[e.grouped_id];if(e.grouped_id&&1!==a.size&&r)i.classList.add("is-album","is-grouped"),Is({groupId:e.grouped_id,attachmentDiv:t,middleware:this.getMiddleware(),isOut:u,lazyLoadQueue:this.lazyLoadQueue,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});else{const a=!h.IS_ANDROID&&!h.IS_APPLE&&!s&&E&&!P&&!1;a&&i.classList.add("with-media-tail"),vs({doc:n,container:t,message:e,boxWidth:v.b.active.regular.width,boxHeight:v.b.active.regular.height,withTail:a,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),group:ho,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia,searchContext:s?{peerId:this.peerId,inputFilter:{_:"inputMessagesFilterRoundVoice"},threadId:this.chat.threadId,useSearch:!e.pFlags.is_scheduled,isScheduled:e.pFlags.is_scheduled}:void 0})}}else{const t=function({albumMustBeRenderedFull:e,message:t,bubble:s,messageDiv:i,chat:n,loadPromises:a,noAutoDownload:o,lazyLoadQueue:r,searchContext:l,useSearch:c}){let d;const h=e?n.getMidsByMid(t.mid):[t.mid];return h.forEach((e,t)=>{const s=n.getMessage(e),c=fs({message:s,loadPromises:a,noAutoDownload:o,lazyLoadQueue:r,searchContext:l}),u=document.createElement("div");u.classList.add("document-container"),u.dataset.mid=""+e,u.dataset.peerId=""+s.peerId;const p=document.createElement("div");if(p.classList.add("document-wrapper"),s.message){const e=document.createElement("div");e.classList.add("document-message");const t=Z.b.wrapRichText(s.message,{entities:s.totalEntities});e.innerHTML=t,p.append(e)}if(h.length>1){const e=document.createElement("div");e.classList.add("document-selection"),u.append(e),u.classList.add("grouped-item"),0===t&&(d=p)}p.append(c),u.append(p),i.append(u)}),h.length>1&&s.classList.add("is-multiple-documents","is-grouped"),d}({albumMustBeRenderedFull:r,message:e,bubble:i,messageDiv:p,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia,lazyLoadQueue:this.lazyLoadQueue,searchContext:"voice"===n.type||"audio"===n.type?{peerId:this.peerId,inputFilter:{_:"voice"===n.type?"inputMessagesFilterRoundVoice":"inputMessagesFilterMusic"},threadId:this.chat.threadId,useSearch:!e.pFlags.is_scheduled,isScheduled:e.pFlags.is_scheduled}:void 0});t&&(O=t);const a=p.lastElementChild.querySelector(".document-message, .document-size, .audio");a&&a.append(C.cloneNode(!0)),i.classList.remove("is-message-empty"),p.classList.add((["photo","pdf"].includes(n.type)?"document":n.type||"document")+"-message"),s=!0}break}case"messageMediaContact":{const t=document.createElement("div");t.classList.add("contact"),t.dataset.peerId=""+L.user_id,p.classList.add("contact-message"),s=!0;const n=[];e.media.first_name&&n.push(Z.b.wrapEmojiText(e.media.first_name)),e.media.last_name&&n.push(Z.b.wrapEmojiText(e.media.last_name)),t.innerHTML=`\n
\n
${n.join(" ")}
\n
${e.media.phone_number?"+"+Object(Fs.a)(e.media.phone_number).formatted:"Unknown phone number"}
\n
`;const a=new ko;a.lazyLoadQueue=this.lazyLoadQueue,a.setAttribute("peer",""+e.media.user_id),a.classList.add("contact-avatar","avatar-54"),t.prepend(a),i.classList.remove("is-message-empty"),p.classList.add("contact-message"),p.append(t);break}case"messageMediaPoll":{i.classList.remove("is-message-empty");const t=function(e){const t=new ns;return t.message=e,t.setAttribute("peer-id",""+e.peerId),t.setAttribute("poll-id",e.media.poll.id),t.setAttribute("message-id",""+e.mid),t.render(),t}(e);p.prepend(t),p.classList.add("poll-message");break}default:i.classList.remove("is-message-empty"),p.innerHTML='This message is currently not supported on Telegram Web. Try desktop.telegram.org',p.append(C),this.log.warn("unrecognized media type:",e.media._,e)}s||m.append(t)}M&&i.classList.add("just-media"),this.chat.selection.isSelecting&&this.chat.selection.toggleElementCheckbox(i,!0);let _="";const F=e.fromId!==a.default.myId&&d<0&&!this.appPeersManager.isBroadcast(d)||e.viaBotId;if(F||e.fwd_from||e.reply_to_mid){let t;const s=e.from_id&&"peerChannel"===e.from_id._&&e.fromId===e.fwdFromId;let n=e.fwd_from&&!e.fwd_from.from_id&&!e.fwd_from.channel_id;if(e.viaBotId?(t=document.createElement("span"),t.innerText="@"+this.appUsersManager.getUser(e.viaBotId).username,t.classList.add("peer-title")):n?(t=document.createElement("span"),t.innerHTML=Z.b.wrapEmojiText(e.fwd_from.from_name),t.classList.add("peer-title"),i.classList.add("hidden-profile")):t=new ft.a({peerId:e.viaBotId||e.fwdFromId||e.fromId}).element,e.viaBotId){let s=document.createElement("div");s.classList.add("name","is-via"),s.dataset.peerId=e.viaBotId,s.append(Object(A.i18n)("ViaBot")," ",t),O.append(s)}else if(e.fwdFromId||e.fwd_from){this.peerId===a.default.myId||s||i.classList.add("forwarded"),e.savedFrom&&(_=e.savedFrom);let n=document.createElement("div");if(n.classList.add("name"),n.dataset.peerId=e.fwdFromId,this.peerId!==a.default.myId&&this.peerId!==gn.b&&!s||M){if(M){const e=document.createDocumentFragment();e.append(document.createElement("br")),e.append(t),t=e}n.append(Object(A.i18n)("ForwardedFrom",[t])),_&&(n.dataset.savedFrom=_)}else n.style.color=this.appPeersManager.getPeerColorById(e.fwdFromId,!1),n.append(t);O.append(n)}else if(!M&&F){let s=document.createElement("div");s.classList.add("name"),s.append(t),u||(s.style.color=this.appPeersManager.getPeerColorById(e.fromId,!1)),s.dataset.peerId=e.fromId,O.append(s)}else i.classList.add("hide-name");e.reply_to_mid&&e.reply_to_mid!==this.chat.threadId&&pn.setReply({chat:this.chat,bubble:i,bubbleContainer:m,message:e});if(this.chat.isAnyGroup()&&!x){let t=new ko;t.lazyLoadQueue=this.lazyLoadQueue,t.classList.add("user-avatar","avatar-40"),t.loadPromises=f,!e.fwdFromId&&e.fwd_from&&e.fwd_from.from_name&&t.setAttribute("peer-title",e.fwd_from.from_name),t.setAttribute("peer",""+((e.fwd_from&&(this.peerId===a.default.myId||this.peerId===gn.b)||s?e.fwdFromId:e.fromId)||0)),g.append(t)}}else i.classList.add("hide-name");"pinned"===this.chat.type&&(_=`${this.chat.peerId}_${e.mid}`);if(T&&T.mid===this.chat.threadId&&i.classList.add("is-thread-starter","is-group-last"),_&&("pinned"===this.chat.type||e.fwd_from.saved_from_msg_id)&&this.peerId!==gn.b){const e=document.createElement("div");e.classList.add("bubble-beside-button","goto-original","tgico-arrow_next"),m.append(e),i.dataset.savedFrom=_,i.classList.add("with-beside-button")}if(i.classList.add(x?"is-out":"is-in"),n&&this.renderMessagesQueue(e,i,t,f),P){pn.renderReplies({bubble:i,bubbleContainer:m,message:T,messageDiv:p,loadPromises:f,lazyLoadQueue:this.lazyLoadQueue})&&(E=!0)}return E&&(i.classList.add("can-have-tail"),m.append(na())),i}safeRenderMessage(e,t,s,i,n){try{return this.renderMessage(e,t,s,i,n)}catch(e){this.log.error("renderMessage error:",e)}}performHistoryResult(e,t,s,i){return Zn(this,void 0,void 0,(function*(){let s;e=e.slice(),i&&e.unshift(i),this.messagesQueueOnRender=()=>{const{scrollTop:e,scrollHeight:i}=this.scrollable;s=t?i-e:e,this.messagesQueueOnRender=void 0},this.needReflowScroll&&(fn(this.scrollable.container),this.needReflowScroll=!1);const n=e=>{const s=this.chat.getMessage(e);s.id>0?this.safeRenderMessage(s,t,!0):this.processLocalMessageRender(s)},a=e.length;if(t)for(let t=0;t=0;--t)n(e[t]);if("scheduled"!==this.chat.type){const t=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId),s=t.history.first,i=t.history.last;!s.isEnd(bn.a.Bottom)||s.length&&!e.includes(s[0])||this.setLoaded("bottom",!0,!1),!i.isEnd(bn.a.Top)||i.length&&!e.includes(i[i.length-1])||this.setLoaded("top",!0,!1)}else this.setLoaded("top",!0),this.setLoaded("bottom",!0);if(yield this.messagesQueuePromise,this.scrollable.loadedAll.top&&this.messagesQueueOnRenderAdditional&&(this.messagesQueueOnRenderAdditional(),this.messagesQueueOnRenderAdditional&&this.messagesQueueOnRenderAdditional()),void 0!==s){const e=t?this.scrollable.scrollHeight-s:s;this.scrollable.scrollTop=e,h.IS_SAFARI&&fn(this.scrollable.container)}return!0}))}requestHistory(e,t,s){if("chat"===this.chat.type||"discussion"===this.chat.type)return this.appMessagesManager.getHistory(this.peerId,e,t,s,this.chat.threadId);if("pinned"===this.chat.type){return this.appMessagesManager.getSearch({peerId:this.peerId,inputFilter:{_:"inputMessagesFilterPinned"},maxId:e,limit:t,backLimit:s}).then(e=>({history:e.history.map(e=>e.mid)}))}return"scheduled"===this.chat.type?this.appMessagesManager.getScheduledMessages(this.peerId).then(e=>({history:e.slice().reverse()})):void 0}animateAsLadder(e,t,s,i,n){return Zn(this,void 0,void 0,(function*(){if(this.chat.setPeerPromise&&!this.resolveLadderAnimation)return void(this.resolveLadderAnimation=this.animateAsLadder.bind(this,e,t,s,i,n));if(!Object.keys(this.bubbles).length)return;let a,o=Object(L.e)(this.bubbles,"desc");s&&t.length&&(o=o.filter(e=>!t.includes(e))),a=i?n||Math.max(...o):e||Math.max(...o);const r=o.slice(o.findIndex(e=>a>e)),l=s?[]:[a],c=s?[]:o.slice(0,o.findIndex(e=>a>=e)).reverse();de.b&&this.log("getHistory: targeting mid:",a,n,e,r.map(e=>this.appMessagesIdsManager.getServerMessageId(e)),c.map(e=>this.appMessagesIdsManager.getServerMessageId(e)));const d=[];this.chatInner.classList.add("zoom-fading");const u=s?10:40,p=s?0:1,m=(e,t=0)=>{const s=Object(oe.a)();let i=0;return e.forEach((n,a)=>{if(!this.bubbles[n]||this.skippedMids.has(n))return void this.log.warn("animateAsLadder: no bubble by mid:",n);const o=this.bubbles[n].lastElementChild;if(i=(a+t||.1)*u,o.classList.add("zoom-fade"),o.style.transitionDelay=i+"ms",a===e.length-1){const e=t=>{t.target===o&&(s.resolve(),o.removeEventListener("transitionend",e))};o.addEventListener("transitionend",e)}d.push(o)}),e.length||s.resolve(),{lastMsDelay:i,animationPromise:s}},g=m(r,p),b=m(l),v=m(c,p),f=[g.animationPromise,b.animationPromise,v.animationPromise],y=[g.lastMsDelay,b.lastMsDelay,v.lastMsDelay];let w;return this.onAnimateLadder&&(yield this.onAnimateLadder()),Object(_e.b)(()=>{d.forEach(e=>{e.classList.remove("zoom-fade")})}),(r.length||l.length||c.length)&&(w=Promise.all(f),Object(Cs.b)(w,Math.max(...y)+200).then(()=>{Object(_e.b)(()=>{d.forEach(e=>{e.style.transitionDelay=""}),this.chatInner.classList.remove("zoom-fading")}),h.IS_SAFARI||(this.needReflowScroll=!0)})),w}))}renderEmptyPlaceholder(e,t,s,i){const n="empty-bubble-placeholder";let a,o;if(t.classList.add(n,n+"-"+e),"group"===e?a=Object(A.i18n)("GroupEmptyTitle1"):"saved"===e?a=Object(A.i18n)("ChatYourSelfTitle"):"noMessages"===e||"greeting"===e?a=Object(A.i18n)("NoMessages"):"noScheduledMessages"===e&&(a=Object(A.i18n)("NoScheduledMessages")),a.classList.add("center",n+"-title"),i.push(a),"group"===e)i.push(Object(A.i18n)("GroupEmptyTitle2")),o=[Object(A.i18n)("GroupDescription1"),Object(A.i18n)("GroupDescription2"),Object(A.i18n)("GroupDescription3"),Object(A.i18n)("GroupDescription4")];else if("saved"===e)o=[Object(A.i18n)("ChatYourSelfDescription1"),Object(A.i18n)("ChatYourSelfDescription2"),Object(A.i18n)("ChatYourSelfDescription3"),Object(A.i18n)("ChatYourSelfDescription4")];else if("greeting"===e){const e=Object(A.i18n)("NoMessagesGreetingsDescription");e.classList.add("center",n+"-subtitle"),this.messagesQueue.findAndSplice(e=>e.bubble===t);const a=document.createElement("div");a.classList.add(n+"-sticker");const o=this.getMiddleware(),r=this.appStickersManager.getGreetingSticker().then(e=>{if(!o())return;const t=[];return Ls({doc:e,div:a,middleware:o,lazyLoadQueue:this.lazyLoadQueue,group:ho,play:!0,loop:!0,withThumb:!0,loadPromises:t}),Object(l.b)(a,e=>{Object(c.a)(e),Yn.onMediaClick({target:e.target})}),Promise.all(t)});this.renderMessagesQueue(s,t,!1,[r]),i.push(e,a)}o&&(i.push(...o.map(e=>{const t=document.createElement("span");return t.classList.add(n+"-list-item"),t.append(e),t})),"group"===e?o.forEach(e=>{const t=document.createElement("span");t.classList.add("tgico-check"),e.prepend(t)}):"saved"===e&&o.forEach(e=>{const t=document.createElement("span");t.classList.add(n+"-list-bullet"),t.innerText="•",e.prepend(t)})),i.length>1&&t.classList.add("has-description"),i.forEach(e=>e.classList.add(n+"-line"))}processLocalMessageRender(e){const t=this.safeRenderMessage(e,void 0,void 0,void 0,!1);t.classList.add("bubble-first","is-group-last","is-group-first"),t.classList.remove("can-have-tail","is-in");const s=t.querySelector(".message, .service-msg"),i=[],n=this.appPeersManager.isBot(this.peerId);if(n&&"message"===e._){const e=document.createElement("b");e.append(Object(A.i18n)("BotInfoTitle")),i.push(e,"\n\n")}else this.appPeersManager.isAnyGroup(this.peerId)&&this.appPeersManager.getPeer(this.peerId).pFlags.creator?this.renderEmptyPlaceholder("group",t,e,i):a.default.myId===this.peerId?this.renderEmptyPlaceholder("saved",t,e,i):this.peerId>0&&!n&&this.appMessagesManager.canSendToPeer(this.peerId)&&"chat"===this.chat.type?this.renderEmptyPlaceholder("greeting",t,e,i):"scheduled"===this.chat.type?this.renderEmptyPlaceholder("noScheduledMessages",t,e,i):this.renderEmptyPlaceholder("noMessages",t,e,i);s.prepend(...i),this.messagesQueueOnRenderAdditional?this.onAnimateLadder=()=>{if(this.chatInner.prepend(t),this.onAnimateLadder=void 0,!this.messagesQueuePromise)return Object(_e.d)()}:this.chatInner.prepend(t),this.emptyPlaceholderMid=e.mid}generateLocalFirstMessage(e,t){const s=this.appMessagesIdsManager.generateMessageId("scheduled"===this.chat.type?-1:0),i={_:e?"messageService":"message",date:0,id:-(this.peerId+s),peer_id:this.appPeersManager.getOutputPeer(this.peerId),pFlags:{}};return e||(i.message=""),Object(ji.a)(i),t&&t(i),this.appMessagesManager.saveMessages([i]),i}setLoaded(e,t,s=!0){if(this.scrollable.loadedAll[e]!==t){if(this.scrollable.loadedAll[e]=t,"top"===e&&t&&this.appUsersManager.isBot(this.peerId)){this.log("inject bot description");const e=this.getMiddleware();return this.appProfileManager.getProfile(this.peerId).then(t=>{var s;if(!e())return;if(!(null===(s=t.bot_info)||void 0===s?void 0:s.description))return void this.checkIfEmptyPlaceholderNeeded();const i=this.generateLocalFirstMessage(!1,e=>{e.message=t.bot_info.description});this.processLocalMessageRender(i)})}this.checkIfEmptyPlaceholderNeeded()}}checkIfEmptyPlaceholderNeeded(){if(this.scrollable.loadedAll.top&&this.scrollable.loadedAll.bottom&&void 0===this.emptyPlaceholderMid&&(!this.appMessagesManager.getHistoryStorage(this.peerId).count||Object.keys(this.bubbles).length&&!this.getRenderedLength()||"scheduled"===this.chat.type&&!Object.keys(this.bubbles).length)){this.log("inject empty peer placeholder");const e=this.generateLocalFirstMessage(!0);return this.processLocalMessageRender(e),!0}return!1}getHistory(e=0,t=!1,s=!1,i=0,n=!1){const o=this.peerId,r=Math.min(30,yt.a.windowH/38|0),l=Object.keys(this.bubbles).length>0?Math.max(40,r):r;let c=l;if(void 0!==ta){if(!ta)return{cached:!1,promise:Promise.resolve(!0)};Object.keys(this.bubbles).length>0&&--ta}let d,h=0;if(s&&(h=c,t||(c=0)),i&&!s)if("pinned"===this.chat.type)d=[i];else{const t=this.appMessagesManager.getHistoryStorage(o,this.chat.threadId).history.slice;if(t.length=0;--e){if(!this.chat.getMessage(d[e]).grouped_id)break;d.splice(e,1)}e=d[d.length-1]||e}}let u,p=this.requestHistory(e,c,h);const m=(null==d?void 0:d.length)&&p instanceof Promise,g=this.isFirstLoad&&h&&p instanceof Promise||m;m&&(u=p,p={history:d}),this.isFirstLoad=!1;const b=e=>Zn(this,void 0,void 0,(function*(){if("offsetIdOffset"in e&&e.history.isEnd(bn.a.Top)){if("discussion"===this.chat.type){const t=this.appMessagesManager.threadsServiceMessagesIdsStorage[this.peerId+"_"+this.chat.threadId];t&&e.history.push(t),e.history.push(...this.chat.getMidsByMid(this.chat.threadId).reverse())}yield this.setLoaded("top",!0)}})),v=e=>Object(Cs.c)().then(()=>b(e)).then(()=>this.performHistoryResult(e.history||[],t,s,!m&&i)),f=e=>{const s=e.then(e=>(t?this.getHistoryTopPromise!==s:this.getHistoryBottomPromise!==s)?(this.log.warn("getHistory: peer changed"),Promise.reject()):n?(this.scrollable.onScroll(),!0):v(e),e=>{throw this.log.error("getHistory error:",e),e});return s};let y,w;if(p instanceof Promise)w=!1,y=f(p);else{if(n)return null;w=!0,y=v(p)}const S=m?f(u):y;if(g&&a.default.settings.animationsEnabled){let s=m?2:1;this.messagesQueueOnRenderAdditional=()=>{if(this.log("ship went past rocks of magnets"),--s)return;this.messagesQueueOnRenderAdditional=void 0;(this.animateAsLadder(i,d,m,h,e)||Promise.resolve()).then(()=>{setTimeout(()=>{this.loadMoreHistory(t,!0)},0)})}}else this.messagesQueueOnRenderAdditional=void 0;return t?this.getHistoryTopPromise=S:this.getHistoryBottomPromise=S,S.then(()=>{t?this.getHistoryTopPromise=void 0:this.getHistoryBottomPromise=void 0}),n?null:(!g&&y.then(()=>{let e;t?(this.loadedTopTimes++,this.loadedBottomTimes=Math.max(0,--this.loadedBottomTimes)):(this.loadedBottomTimes++,this.loadedTopTimes=Math.max(0,--this.loadedTopTimes)),(t&&this.loadedTopTimes>2||!t&&this.loadedBottomTimes>2)&&(e=Object(L.e)(this.bubbles));const s=2*l;e&&e.length>s&&(t?(e=e.slice(s),this.setLoaded("bottom",!1)):(e=e.slice(0,e.length-s),this.setLoaded("top",!1)),this.deleteMessagesByIds(e,!1))}),y.then(()=>{"chat"===this.chat.type&&setTimeout(()=>{t?this.loadMoreHistory(!0,!0):this.loadMoreHistory(!1,!0)},0)}),{cached:w,promise:y})}setUnreadDelimiter(){if("chat"!==this.chat.type&&"discussion"!==this.chat.type)return;if(this.attachedUnreadBubble)return;const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);let t=this.appMessagesManager.getReadMaxIdIfUnread(this.peerId,this.chat.threadId);if(t&&(t=Object.keys(this.bubbles).filter(e=>!this.bubbles[e].classList.contains("is-out")).map(e=>+e).sort((e,t)=>e-t).find(e=>e>t),t&&this.bubbles[t])){let s=this.bubbles[t];this.firstUnreadBubble&&this.firstUnreadBubble!==s&&(this.firstUnreadBubble.classList.remove("is-first-unread"),this.firstUnreadBubble=null),t!==e.maxId&&s.classList.add("is-first-unread"),this.firstUnreadBubble=s,this.attachedUnreadBubble=!0}}deleteEmptyDateGroups(){const e=+!!this.stickyIntersector+1;for(const t in this.dateMessages){const s=this.dateMessages[t];s.container.childElementCount===e&&(s.container.remove(),this.stickyIntersector&&this.stickyIntersector.unobserve(s.container,s.div),delete this.dateMessages[t])}this.checkIfEmptyPlaceholderNeeded()}}function na(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttributeNS(null,"viewBox","0 0 11 20"),e.setAttributeNS(null,"width","11"),e.setAttributeNS(null,"height","20"),e.classList.add("bubble-tail");const t=document.createElementNS("http://www.w3.org/2000/svg","use");return t.setAttributeNS(null,"href","#message-tail-filled"),e.append(t),e}class aa{constructor(e,t,s,n){var r;let l,c,d,h=[],u=[];const p=o.a.canPinMessage(e),m=(a,o,r)=>{setTimeout(()=>{let a;a=s&&!t?p?i.a.unpinAllMessages(e):i.a.hidePinnedMessages(e):i.a.updatePinnedMessage(e,t,s,r,o),n&&a.then(n)},300)};if(s){let s="UnpinMessage";t?(l="UnpinMessageAlertTitle",c="Chat.Confirm.Unpin"):p?(l="Popup.Unpin.AllTitle",c="Chat.UnpinAllMessagesConfirmation",d=[""+((null===(r=i.a.pinnedMessages[e])||void 0===r?void 0:r.count)||1)]):(l="Popup.Unpin.HideTitle",c="Popup.Unpin.HideDescription",s="Popup.Unpin.Hide"),h.push({langKey:s,isDanger:!0,callback:m})}else{l="PinMessageAlertTitle";const t="PinMessage";e<0?(h.push({langKey:t,callback:e=>m(0,!1,!e.size)}),G.a.isBroadcast(-e)?c="PinMessageAlertChannel":(c="PinMessageAlert",u.push({text:"PinNotify",checked:!0}))):(c="PinMessageAlertChat",e===a.default.myId?h.push({langKey:t,callback:m}):(h.push({langKey:t,callback:e=>m(0,!e.size)}),u.push({text:"PinAlsoFor",textArgs:[new ft.a({peerId:e}).element],checked:!0})))}Object(ct.a)(h);new ht("popup-delete-chat",{peerId:e,titleLangKey:l,descriptionLangKey:c,descriptionLangArgs:d,buttons:h,checkboxes:u}).show()}}function oa(e=window.getSelection()){if(!e||!e.rangeCount)return!0;const t=e.getRangeAt(0);return!t.toString()||!t.START_TO_END}class ra extends ht{constructor(e,t,s,n){super("popup-report-messages-confirm",{noTitle:!0,descriptionLangKey:"ReportInfo",buttons:[{langKey:"ReportChat",callback:()=>{o.isValid()&&(n&&n(),i.a.reportMessages(e,t,s,o.value).then(e=>{e&&at({langPackKey:"ReportSentInfo"})}))}}],body:!0});const a=document.createElement("div");Ls({doc:hs.getAnimatedEmojiSticker(ra.STICKER_EMOJI),div:a,emoji:ra.STICKER_EMOJI,width:100,height:100,loop:!1,play:!0}).finally(()=>{this.show()}),this.header.append(a);const o=new F.b({label:"ReportHint",maxLength:512,placeholder:"ReportChatDescription"});this.body.append(o.container)}}ra.STICKER_EMOJI="👮‍♀️";class la extends ht{constructor(e,t,s){super("popup-report-messages",{titleLangKey:"ChatTitle.ReportMessages",buttons:[],body:!0}),t=t.slice();const i=[["ReportChatSpam","inputReportReasonSpam"],["ReportChatViolence","inputReportReasonViolence"],["ReportChatChild","inputReportReasonChildAbuse"],["ReportChatPornography","inputReportReasonPornography"],["ReportChatOther","inputReportReasonOther"]];i.forEach(e=>{const t=Object(U.a)("btn-primary btn-transparent",{text:e[0]});this.body.append(t)});const n=hs.preloadAnimatedEmojiSticker(ra.STICKER_EMOJI);Object(l.b)(this.body,a=>{const o=Object(Ce.a)(a.target,"btn-primary"),r=i[Object(Ts.a)(o)][1];n.then(()=>{this.hide(),new ra(e,t,r,s)})},{listenerSetter:this.listenerSetter}),this.body.style.margin="0 -1rem",this.buttons.style.marginTop=".5rem",this.show()}}class ca{constructor(e,t,s,i,n,a,o){this.attachTo=e,this.chat=t,this.appMessagesManager=s,this.appPeersManager=i,this.appPollsManager=n,this.appDocsManager=a,this.appMessagesIdsManager=o,this.onSendScheduledClick=()=>{this.chat.selection.isSelecting?Object(l.d)(this.chat.selection.selectionSendNowBtn):new Hs(this.peerId,this.chat.getMidsByMid(this.mid))},this.onReplyClick=()=>{this.chat.input.initMessageReply(this.mid)},this.onEditClick=()=>{this.chat.input.initMessageEditing(this.mid)},this.onCopyClick=()=>{if(oa()){et((this.chat.selection.isSelecting?[...this.chat.selection.selectedMids.get(this.peerId)].sort((e,t)=>e-t):[this.mid]).reduce((e,t)=>{const s=this.chat.getMessage(t);return e+((null==s?void 0:s.message)?s.message+"\n":"")},"").trim())}else document.execCommand("copy")},this.onCopyAnchorLinkClick=()=>{et(this.target.href)},this.onCopyLinkClick=()=>{let e;"discussion"===this.chat.type&&(e=this.appMessagesManager.getMessageByPeer(this.peerId,this.chat.threadId));const t=this.appPeersManager.getPeerUsername(e?e.fromId:this.peerId),s=this.appMessagesIdsManager.getServerMessageId(this.mid);let i,n="https://t.me/";t?(n+=t+"/"+(e?this.appMessagesIdsManager.getServerMessageId(e.fwd_from.channel_post):s),e&&(n+="?comment="+s),i="LinkCopied"):(n+="c/"+Math.abs(this.peerId)+"/"+s,e&&(n+="?thread="+this.appMessagesIdsManager.getServerMessageId(e.mid)),i="LinkCopiedPrivateInfo"),nt(A.default.format(i,!0)),et(n)},this.onPinClick=()=>{new aa(this.peerId,this.mid)},this.onUnpinClick=()=>{new aa(this.peerId,this.mid,!0)},this.onRetractVote=()=>{this.appPollsManager.sendVote(this.message,[])},this.onStopPoll=()=>{this.appPollsManager.stopPoll(this.message)},this.onForwardClick=()=>{if(this.chat.selection.isSelecting)Object(l.d)(this.chat.selection.selectionForwardBtn);else{const e=this.isTargetAGroupedItem?[this.mid]:this.chat.getMidsByMid(this.mid);new Ds({[this.peerId]:e})}},this.onSelectClick=()=>{this.chat.selection.toggleByElement(Object(Ce.a)(this.target,"grouped-item")||Object(Ce.a)(this.target,"bubble"))},this.onClearSelectionClick=()=>{this.chat.selection.cancelSelection()},this.onDeleteClick=()=>{this.chat.selection.isSelecting?Object(l.d)(this.chat.selection.selectionDeleteBtn):new Bs(this.peerId,this.isTargetAGroupedItem?[this.mid]:this.chat.getMidsByMid(this.mid),this.chat.type)};const r=e=>{let s,i;this.init&&(this.init(),this.init=null);try{i=Object(Ce.a)(e.target,"bubble-content-wrapper"),s=i?i.parentElement:Object(Ce.a)(e.target,"bubble")}catch(e){}if(!s||s.classList.contains("bubble-first"))return;if((e instanceof MouseEvent||e.hasOwnProperty("preventDefault"))&&e.preventDefault(),this.element.classList.contains("active"))return!1;(e instanceof MouseEvent||e.hasOwnProperty("cancelBubble"))&&(e.cancelBubble=!0);let n=+s.dataset.mid;if(!n)return;if(this.isSelectable=this.chat.selection.canSelectBubble(s),this.peerId=this.chat.peerId,this.target=e.target,this.isTextSelected=!oa(),this.isAnchorTarget="A"===this.target.tagName&&("_blank"===this.target.target||this.target.classList.contains("anchor-url")),this.isUsernameTarget="A"===this.target.tagName&&this.target.classList.contains("mention"),t.selection.isSelecting&&!i){const e=this.chat.getMidsByMid(n);if(e.length>1){const t=this.chat.selection.isMidSelected(this.peerId,n)?n:e.find(e=>this.chat.selection.isMidSelected(this.peerId,e));t&&(n=t)}}const a=Object(Ce.a)(this.target,"grouped-item");this.isTargetAGroupedItem=!!a,this.mid=a?+a.dataset.mid:n,this.isSelected=this.chat.selection.isMidSelected(this.peerId,this.mid),this.message=this.chat.getMessage(this.mid),this.buttons.forEach(e=>{let s;t.selection.isSelecting&&!e.withSelection?s=!1:(i||pe.IS_TOUCH_SUPPORTED,s=e.verify()),e.element.classList.toggle("hide",!s)});const o=s.classList.contains("is-in")?"left":"right";Object(se.e)(e.touches?e.touches[0]:e,this.element,o),Object(se.d)(this.element,()=>{this.peerId=this.mid=0,this.target=null})};pe.IS_TOUCH_SUPPORTED?Object(l.b)(e,e=>{if(t.selection.isSelecting)return;const s=e.target.className;if(!s||!s.includes)return;t.log("touchend",e);["bubble","bubble-content-wrapper","bubble-content","message","time","inner"].find(e=>s.match(new RegExp(e+"($|\\s)")))&&(Object(c.a)(e),r(e))},{listenerSetter:this.chat.bubbles.listenerSetter}):Object(se.a)(e,r,this.chat.bubbles.listenerSetter)}init(){this.buttons=[{icon:"send2",text:"MessageScheduleSend",onClick:this.onSendScheduledClick,verify:()=>"scheduled"===this.chat.type&&!this.message.pFlags.is_outgoing},{icon:"send2",text:"Message.Context.Selection.SendNow",onClick:this.onSendScheduledClick,verify:()=>"scheduled"===this.chat.type&&this.isSelected&&!this.chat.selection.selectionSendNowBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0},{icon:"schedule",text:"MessageScheduleEditTime",onClick:()=>{this.chat.input.scheduleSending(()=>{this.appMessagesManager.editMessage(this.message,this.message.message,{scheduleDate:this.chat.input.scheduleDate,entities:this.message.entities}),this.chat.input.onMessageSent(!1,!1)},new Date(1e3*this.message.date))},verify:()=>"scheduled"===this.chat.type},{icon:"reply",text:"Reply",onClick:this.onReplyClick,verify:()=>this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId)&&!this.message.pFlags.is_outgoing&&!!this.chat.input.messageInput&&"scheduled"!==this.chat.type},{icon:"edit",text:"Edit",onClick:this.onEditClick,verify:()=>this.appMessagesManager.canEditMessage(this.message,"text")&&!!this.chat.input.messageInput},{icon:"copy",text:"Copy",onClick:this.onCopyClick,verify:()=>!(!this.message.message||this.isTextSelected||this.isAnchorTarget&&this.message.message===this.target.innerText)},{icon:"copy",text:"Chat.CopySelectedText",onClick:this.onCopyClick,verify:()=>!!this.message.message&&this.isTextSelected},{icon:"copy",text:"Message.Context.Selection.Copy",onClick:this.onCopyClick,verify:()=>{if(!this.isSelected)return!1;for(const[e,t]of this.chat.selection.selectedMids)for(const s of t)if(this.appMessagesManager.getMessageByPeer(e,s).message)return!0;return!1},notDirect:()=>!0,withSelection:!0},{icon:"copy",text:"CopyLink",onClick:this.onCopyAnchorLinkClick,verify:()=>this.isAnchorTarget,withSelection:!0},{icon:"copy",text:"Text.Context.Copy.Username",onClick:()=>{et(this.target.innerHTML)},verify:()=>this.isUsernameTarget,withSelection:!0},{icon:"copy",text:"Text.Context.Copy.Hashtag",onClick:()=>{et(this.target.innerHTML)},verify:()=>this.target.classList.contains("anchor-hashtag"),withSelection:!0},{icon:"link",text:"MessageContext.CopyMessageLink1",onClick:this.onCopyLinkClick,verify:()=>this.appPeersManager.isChannel(this.peerId)&&!this.message.pFlags.is_outgoing},{icon:"pin",text:"Message.Context.Pin",onClick:this.onPinClick,verify:()=>!this.message.pFlags.is_outgoing&&"messageService"!==this.message._&&!this.message.pFlags.pinned&&this.appPeersManager.canPinMessage(this.peerId)&&"scheduled"!==this.chat.type},{icon:"unpin",text:"Message.Context.Unpin",onClick:this.onUnpinClick,verify:()=>this.message.pFlags.pinned&&this.appPeersManager.canPinMessage(this.peerId)},{icon:"download",text:"MediaViewer.Context.Download",onClick:()=>{this.appDocsManager.saveDocFile(this.message.media.document)},verify:()=>{var e;if(this.message.pFlags.is_outgoing)return!1;const t=null===(e=this.message.media)||void 0===e?void 0:e.document;if(!t)return!1;let s=!!pe.IS_TOUCH_SUPPORTED;const i=!t.type||!["gif","video","sticker"].includes(t.type);return i&&(s=s||!!Object(Ce.a)(this.target,"document")||!!Object(Ce.a)(this.target,"audio")),i&&s}},{icon:"checkretract",text:"Chat.Poll.Unvote",onClick:this.onRetractVote,verify:()=>{var e;const t=null===(e=this.message.media)||void 0===e?void 0:e.poll;return t&&t.chosenIndexes.length&&!t.pFlags.closed&&!t.pFlags.quiz}},{icon:"stop",text:"Chat.Poll.Stop",onClick:this.onStopPoll,verify:()=>{var e;const t=null===(e=this.message.media)||void 0===e?void 0:e.poll;return this.appMessagesManager.canEditMessage(this.message,"poll")&&t&&!t.pFlags.closed&&!this.message.pFlags.is_outgoing}},{icon:"forward",text:"Forward",onClick:this.onForwardClick,verify:()=>"scheduled"!==this.chat.type&&!this.message.pFlags.is_outgoing&&"messageService"!==this.message._},{icon:"forward",text:"Message.Context.Selection.Forward",onClick:this.onForwardClick,verify:()=>this.chat.selection.selectionForwardBtn&&this.isSelected&&!this.chat.selection.selectionForwardBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0},{icon:"flag",text:"ReportChat",onClick:()=>{new la(this.peerId,[this.mid])},verify:()=>!this.message.pFlags.out&&"message"===this.message._&&!this.message.pFlags.is_outgoing&&this.appPeersManager.isChannel(this.peerId),notDirect:()=>!0,withSelection:!0},{icon:"select",text:"Message.Context.Select",onClick:this.onSelectClick,verify:()=>!this.message.action&&!this.isSelected&&this.isSelectable,notDirect:()=>!0,withSelection:!0},{icon:"select",text:"Message.Context.Selection.Clear",onClick:this.onClearSelectionClick,verify:()=>this.isSelected,notDirect:()=>!0,withSelection:!0},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>this.appMessagesManager.canDeleteMessage(this.message)},{icon:"delete danger",text:"Message.Context.Selection.Delete",onClick:this.onDeleteClick,verify:()=>this.isSelected&&!this.chat.selection.selectionDeleteBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0}],this.element=Ee(this.buttons,this.chat.bubbles.listenerSetter),this.element.id="bubble-contextmenu",this.element.classList.add("contextmenu"),this.chat.container.append(this.element)}}var da=s(143),ha=s.n(da),ua=s(136);class pa{constructor(e){this.sendMenuButtons=[{icon:"mute",text:"Chat.Send.WithoutSound",onClick:e.onSilentClick,verify:()=>"schedule"===this.type},{icon:"schedule",text:"Chat.Send.ScheduledMessage",onClick:e.onScheduleClick,verify:()=>"schedule"===this.type},{icon:"schedule",text:"Chat.Send.SetReminder",onClick:e.onScheduleClick,verify:()=>"reminder"===this.type}],this.sendMenu=Ee(this.sendMenuButtons,e.listenerSetter),this.sendMenu.classList.add("menu-send",e.openSide),Object(se.a)(e.onContextElement,t=>{e.onOpen&&!e.onOpen()||(this.sendMenuButtons.forEach(e=>{e.element.classList.toggle("hide",!e.verify())}),Object(c.a)(t),Object(se.d)(this.sendMenu))},e.listenerSetter)}setPeerId(e){this.type=e===a.default.myId?"reminder":"schedule"}}var ma=s(64),ga=s(82);class ba extends ct.b{constructor(e){if(super("popup-create-poll popup-new-media",null,{closable:!0,withConfirm:"Create",body:!0}),this.chat=e,this.tempId=0,this.onSubmitClick=()=>{this.send()},this.onInput=e=>{const t=e.target,s=Object(mt.a)(t,"LABEL"),i=Object(ga.a)(t);i||(t.parentElement.classList.add("is-filled"),s.classList.remove("hidden-widget"),s.firstElementChild.removeAttribute("disabled"));!s.nextElementSibling&&!i&&this.questions.childElementCount<10&&this.appendMoreField(),this.handleChange()},this.onDeleteClick=e=>{const t=e.target,s=Object(mt.a)(t,"LABEL"),i=Object(Ts.a)(s);this.correctAnswers&&this.correctAnswers[0][0]===i&&(this.correctAnswers=void 0),s.remove(),this.optionInputFields.splice(i,1),this.optionInputFields.forEach((e,t)=>{e.options.labelOptions.length=0,e.options.labelOptions.push(t+1);A.default.weakMap.get(e.label.firstElementChild).update()}),this.handleChange()},Object(A._i18n)(this.title,"NewPoll"),this.questionInputField=new F.b({placeholder:"AskAQuestion",label:"AskAQuestion",name:"question",maxLength:255}),this.listenerSetter.add(this.questionInputField.input)("input",()=>{this.handleChange()}),this.optionInputFields=[],"scheduled"!==this.chat.type){const e=new pa({onSilentClick:()=>{this.chat.input.sendSilent=!0,this.send()},onScheduleClick:()=>{this.chat.input.scheduleSending(()=>{this.send()})},openSide:"bottom-left",onContextElement:this.btnConfirm});e.setPeerId(this.chat.peerId),this.header.append(e.sendMenu)}this.header.append(this.questionInputField.container);const t=document.createElement("hr"),s=document.createElement("div");s.classList.add("caption"),Object(A._i18n)(s,"PollOptions"),this.questions=document.createElement("form"),this.questions.classList.add("poll-create-questions");const i=document.createElement("div");i.classList.add("poll-create-settings");const n=document.createElement("div");n.classList.add("caption"),Object(A._i18n)(n,"Settings"),this.chat.appPeersManager.isBroadcast(this.chat.peerId)||(this.anonymousCheckboxField=new dt.a({text:"NewPoll.Anonymous",name:"anonymous"}),this.anonymousCheckboxField.input.checked=!0,i.append(this.anonymousCheckboxField.label)),this.multipleCheckboxField=new dt.a({text:"NewPoll.MultipleChoice",name:"multiple"}),this.quizCheckboxField=new dt.a({text:"NewPoll.Quiz",name:"quiz"}),this.listenerSetter.add(this.multipleCheckboxField.input)("change",()=>{const e=this.multipleCheckboxField.input.checked;this.quizCheckboxField.input.toggleAttribute("disabled",e)}),this.listenerSetter.add(this.quizCheckboxField.input)("change",()=>{const e=this.quizCheckboxField.input.checked;Array.from(this.questions.children).map(t=>{t.classList.toggle("radio-field",e)}),e||(this.correctAnswers=void 0,this.quizSolutionField.setValueSilently("")),a.forEach(t=>t.classList.toggle("hide",!e)),this.multipleCheckboxField.input.toggleAttribute("disabled",e),this.handleChange()}),i.append(this.multipleCheckboxField.label,this.quizCheckboxField.label);const a=[],o=document.createElement("div");o.classList.add("caption"),Object(A._i18n)(o,"AccDescrQuizExplanation");const r=document.createElement("hr"),c=document.createElement("div");c.classList.add("poll-create-questions"),this.quizSolutionField=new F.b({placeholder:"NewPoll.Explanation.Placeholder",label:"NewPoll.Explanation.Placeholder",name:"solution",maxLength:200}),this.listenerSetter.add(this.questionInputField.input)("input",()=>{this.handleChange()});const d=document.createElement("div");d.classList.add("subtitle"),Object(A._i18n)(d,"AddAnExplanationInfo"),c.append(this.quizSolutionField.container,d),a.push(r,o,c),a.forEach(e=>e.classList.add("hide")),this.body.parentElement.insertBefore(t,this.body),this.body.append(s,this.questions,document.createElement("hr"),n,i,...a),Object(l.b)(this.btnConfirm,this.onSubmitClick,{listenerSetter:this.listenerSetter}),this.scrollable=new P.b(this.body),this.appendMoreField(),this.onEscape=()=>!this.getFilledAnswers().length,this.handleChange()}getFilledAnswers(){return Array.from(this.questions.children).map((e,t)=>{const s=e.querySelector(".input-field-input");return s instanceof HTMLInputElement?s.value:Object(ma.a)(s,!1).value}).filter(e=>!!e.trim())}validate(){var e;const t=this.questionInputField.value;if(!t)return!1;if(t.length>255)return!1;if(this.quizCheckboxField.input.checked&&!(null===(e=this.correctAnswers)||void 0===e?void 0:e.length))return!1;const s=this.getFilledAnswers();if(s.length<2)return!1;if(s.find(e=>e.length>100))return!1;const{value:i}=Object(ma.a)(this.quizSolutionField.input,!1);return!(i.length>200)}handleChange(){const e=this.validate();this.btnConfirm.toggleAttribute("disabled",!e)}send(e=!1){const t=this.questionInputField.value,s=this.getFilledAnswers(),{value:i,entities:n}=Object(ma.a)(this.quizSolutionField.input);if("scheduled"===this.chat.type&&!e)return void this.chat.input.scheduleSending(()=>{this.send(!0)});this.hide();const a={};this.anonymousCheckboxField&&!this.anonymousCheckboxField.input.checked&&(a.public_voters=!0),this.multipleCheckboxField.input.checked&&(a.multiple_choice=!0),this.quizCheckboxField.input.checked&&(a.quiz=!0);const o={_:"poll",pFlags:a,question:t,answers:s.map((e,t)=>({_:"pollAnswer",text:e,option:new Uint8Array([t])})),id:void 0},r=this.chat.appPollsManager.getInputMediaPoll(o,this.correctAnswers,i,n);this.chat.appMessagesManager.sendOther(this.chat.peerId,r,{threadId:this.chat.threadId,replyToMsgId:this.chat.input.replyToMsgId,scheduleDate:this.chat.input.scheduleDate,silent:this.chat.input.sendSilent}),"reply"===this.chat.input.helperType&&this.chat.input.clearHelper(),this.chat.input.onMessageSent(!1,!1)}appendMoreField(){const e=this.tempId++,t=this.questions.childElementCount+1,s=new F.b({placeholder:"NewPoll.OptionsAddOption",label:"NewPoll.OptionLabel",labelOptions:[t],name:"question-"+e,maxLength:100});this.listenerSetter.add(s.input)("input",this.onInput);const i=new st({text:"",name:"question"});i.main.append(s.container),Object(l.b)(s.input,c.a,{listenerSetter:this.listenerSetter}),i.label.classList.add("hidden-widget"),i.input.disabled=!0,this.quizCheckboxField.input.checked||i.label.classList.remove("radio-field"),this.listenerSetter.add(i.input)("change",()=>{if(i.input.checked){const e=Object(Ts.a)(i.label);this.correctAnswers=[new Uint8Array([e])],this.handleChange()}});const n=document.createElement("span");n.classList.add("btn-icon","tgico-close"),s.container.append(n),Object(l.b)(n,this.onDeleteClick,{listenerSetter:this.listenerSetter,once:!0}),this.questions.append(i.label),this.scrollable.scrollIntoViewNew(this.questions.lastElementChild,"center"),this.optionInputFields.push(s)}}var va=s(95);class fa extends ct.b{constructor(e,t,s){if(super("popup-send-photo popup-new-media",null,{closable:!0,withConfirm:"Modal.Send",confirmShortcutIsSendShortcut:!0}),this.chat=e,this.wasInputValue="",this.willAttach={sendFileDetails:[],group:!1},this.onKeyDown=e=>{const t=e.target;if(t!==this.input){if("INPUT"===t.tagName||t.hasAttribute("contenteditable"))return;this.input.focus(),Object(va.a)(this.input)}},this.attachFile=e=>{const t=this.willAttach;return new Promise(s=>{const i={};i.file=e;const n=document.createElement("div");switch(t.type){case"media":{const t=0===e.type.indexOf("video/");if(n.classList.add("popup-item-media"),t){const t=document.createElement("video"),a=document.createElement("source");a.src=i.objectURL=URL.createObjectURL(e),t.autoplay=!0,t.controls=!1,t.muted=!0,t.setAttribute("playsinline","true"),t.addEventListener("timeupdate",()=>{t.pause()},{once:!0}),Object(me.d)(t).then(()=>{i.width=t.videoWidth,i.height=t.videoHeight,i.duration=Math.floor(t.duration);const e=t.webkitAudioDecodedByteCount;void 0!==e&&(i.noSound=!e),n.append(t),Object(me.b)(t).then(e=>{i.thumb=Object.assign({url:URL.createObjectURL(e.blob)},e),s(n)})}),t.append(a)}else{const t=new Image;t.src=i.objectURL=URL.createObjectURL(e),t.onload=()=>{i.width=t.naturalWidth,i.height=t.naturalHeight,n.append(t),s(n)}}break}case"document":{const t=-1!==e.type.indexOf("image/"),a=-1!==e.type.indexOf("audio/");(t||a)&&(i.objectURL=URL.createObjectURL(e));const o={_:"document",file:e,file_name:e.name||"",fileName:e.name?Z.b.wrapEmojiText(e.name):"",size:e.size,type:t?"photo":"doc"},r=he.a.getCacheContext(o);r.url=i.objectURL,r.downloaded=e.size;const l=fs({message:{_:"message",pFlags:{is_outgoing:!0},mid:0,peerId:0,media:{_:"messageMediaDocument",document:o}}}),c=()=>{n.append(l),s(n)};if(t){const e=new Image;e.src=i.objectURL,e.onload=()=>{i.width=e.naturalWidth,i.height=e.naturalHeight,c()},e.onerror=c}else c();break}}t.sendFileDetails.push(i)})},this.willAttach.type=s,Object(l.b)(this.btnConfirm,()=>this.send(),{listenerSetter:this.listenerSetter}),"scheduled"!==this.chat.type){const e=new pa({onSilentClick:()=>{this.chat.input.sendSilent=!0,this.send()},onScheduleClick:()=>{this.chat.input.scheduleSending(()=>{this.send()})},openSide:"bottom-left",onContextElement:this.btnConfirm,listenerSetter:this.listenerSetter});e.setPeerId(this.chat.peerId),this.header.append(e.sendMenu)}this.mediaContainer=document.createElement("div"),this.mediaContainer.classList.add("popup-photo");const i=new P.b(null);i.container.append(this.mediaContainer),this.inputField=new F.b({placeholder:"PreviewSender.CaptionPlaceholder",label:"Caption",name:"photo-caption",maxLength:a.default.config.caption_length_max,showLengthOn:80}),this.input=this.inputField.input,this.inputField.value=this.wasInputValue=this.chat.input.messageInputField.input.innerHTML,this.chat.input.messageInputField.value="",this.container.append(i.container),t.length>1&&(this.groupCheckboxField=new dt.a({text:"PreviewSender.GroupItems",name:"group-items"}),this.container.append(this.groupCheckboxField.label,this.inputField.container),this.groupCheckboxField.input.checked=!0,this.willAttach.group=!0,this.listenerSetter.add(this.groupCheckboxField.input)("change",()=>{const e=this.groupCheckboxField.input.checked;this.willAttach.group=e,this.willAttach.sendFileDetails.length=0,this.attachFiles(t)})),this.container.append(this.inputField.container),this.attachFiles(t)}send(e=!1){if("scheduled"===this.chat.type&&!e)return void this.chat.input.scheduleSending(()=>{this.send(!0)});let t=this.inputField.value;if(t.length>a.default.config.caption_length_max)return void nt(A.default.format("Error.PreviewSender.CaptionTooLong",!0));this.hide();const s=this.willAttach;s.isMedia="media"===s.type||void 0;const i=this.chat.peerId,n=this.chat.input,o=n.sendSilent,r=n.scheduleDate;if(s.sendFileDetails.length>1&&s.group)for(let e=0;ee.file),Object.assign({caption:t,replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,isMedia:s.isMedia,silent:o,scheduleDate:r,clearDraft:!0},c)),t=void 0,n.replyToMsgId=this.chat.threadId}else{t&&s.sendFileDetails.length>1&&(this.chat.appMessagesManager.sendText(i,t,{replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,silent:o,scheduleDate:r,clearDraft:!0}),t="");s.sendFileDetails.map(e=>{const a=this.chat.appMessagesManager.sendFile(i,e.file,Object.assign({isMedia:s.isMedia,caption:t,replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,silent:o,scheduleDate:r,clearDraft:!0},e));return t="",a});n.replyToMsgId=this.chat.threadId}n.onMessageSent()}attachFiles(e){const t=this.container,s=this.willAttach;e="media"===s.type?e.filter(e=>g.has(e.type)):e.slice(),Promise.all(e.map(this.attachFile)).then(i=>{if(this.container.classList.remove("is-media","is-document","is-album"),this.mediaContainer.innerHTML="",e.length){let i;const n=[];if("document"===s.type)i="PreviewSender.SendFile",n.push(e.length),t.classList.add("is-document");else{t.classList.add("is-media");let a=0,o=0;e.forEach(e=>{0===e.type.indexOf("image/")?++a:0===e.type.indexOf("video/")&&++o});const r=a+o;if(r>1&&s.group){i="PreviewSender.SendAlbum";const e=Math.ceil(r/10);n.push(e)}else a?(i="PreviewSender.SendPhoto",n.push(a)):o&&(i="PreviewSender.SendVideo",n.push(o))}this.title.textContent="",this.title.append(Object(A.i18n)(i,n))}if("media"===s.type)if(s.sendFileDetails.length>1&&s.group){t.classList.add("is-album");for(let e=0;e({w:e.width,h:e.height})),maxWidth:380,minWidth:100,spacing:4}),this.mediaContainer.append(t)}}else for(let e=0;e{this.wasInputValue&&(this.chat.input.messageInputField.value=this.wasInputValue)},this.show())})}}const ya=["ArrowUp","ArrowDown"],wa=["ArrowLeft","ArrowRight"];function La({list:e,type:t,onSelect:s,once:i,waitForKey:n}){const a=new Set("xy"===t?ya.concat(wa):"x"===t?wa:ya);let o;const r=()=>o||e.querySelector(".active")||e.firstElementChild,d=(e,s)=>{if(o===e)return;let i=!1;o&&(i=!0,o.classList.remove("active")),o=e,o&&(o.classList.add("active"),i&&m&&s&&Object(bt.b)(m,o,"center",void 0,void 0,void 0,100,"x"===t?"x":"y"))},h=(t,s)=>{let i;return i=s?t.nextElementSibling||e.firstElementChild:t.previousElementSibling||e.lastElementChild,i};let u;u="xy"===t?(t,s)=>"ArrowUp"===s||"ArrowDown"===s?((t,s)=>{const i=s?"nextElementSibling":"previousElementSibling",n=s?"firstElementChild":"lastElementChild",a=t.getBoundingClientRect();let o=t[i]||e[n];for(;o!==t;){const t=o.getBoundingClientRect();if(t.x===a.x&&t.y!==a.y)break;o=o[i]||e[n]}return o})(t,"ArrowDown"===s):h(t,"ArrowRight"===s):(e,t)=>h(e,"ArrowRight"===t||"ArrowDown"===t);let p=t=>{if(a.has(t.key)){if(Object(c.a)(t),e.childElementCount>1){let e=r();e=u(e,t.key),d(e,!0)}}else"Enter"===t.key&&(Object(c.a)(t),v(r()))};const m=Object(Ce.a)(e,"scrollable");e.classList.add("navigable-list");const g=t=>{const s=Object(zs.a)(t.target,e);s&&d(s,!1)},b=t=>{Object(c.a)(t);const s=Object(zs.a)(t.target,e);s&&(d(s,!1),v(r()))},v=e=>{const t=s(e);(void 0!==t?!t:i)&&f()},f=()=>{document.removeEventListener("keydown",p,{capture:!0}),e.removeEventListener("mousemove",g),Object(l.c)(e,b)},y=()=>{n||d(e.firstElementChild,!1)};if(n){const e=p;p=t=>{t.key===n&&(Object(c.a)(t),document.removeEventListener("keydown",p,{capture:!0}),p=e,document.addEventListener("keydown",p,{capture:!0,passive:!1}),n=void 0,y())}}else y();return document.addEventListener("keydown",p,{capture:!0,passive:!1}),e.addEventListener("mousemove",g,{passive:!0}),Object(l.b)(e,b),{detach:f,resetTarget:y}}class Sa extends R.a{constructor(e){super(!1),this.hidden=!0,this.onVisible=()=>{this.detach&&this.detach();const e=this.list,{detach:t,resetTarget:s}=La({list:e,type:this.listType,onSelect:this.onSelect,once:!0,waitForKey:this.waitForKey});this.detach=t,this.resetTarget=s,h.IS_MOBILE||this.navigationItem||(this.navigationItem={type:"autocomplete-helper",onPop:()=>{this.navigationItem=void 0,this.toggle(!0)},noBlurOnPop:!0},B.a.pushItem(this.navigationItem)),this.addEventListener("hidden",()=>{this.resetTarget=void 0,this.detach=void 0,e.innerHTML="",t(),this.navigationItem&&(B.a.removeItem(this.navigationItem),this.navigationItem=void 0)},{once:!0})},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("autocomplete-helper","z-depth-1"),e.appendTo.append(this.container),this.attachNavigation(),this.controller.addHelper(this)}attachNavigation(){this.addEventListener("visible",this.onVisible)}toggle(e,t=!1){this.init||(void 0===e&&(e=this.container.classList.contains("is-visible")&&!this.container.classList.contains("backwards")),this.hidden!==e?(this.hidden=e,e?(this.navigationItem&&(B.a.removeItem(this.navigationItem),this.navigationItem=void 0),t||this.controller.hideOtherHelpers(),this.detach&&this.detach()):(this.controller.hideOtherHelpers(this),this.dispatchEvent("visible")),Object(Xt.a)(this.container,"is-visible",!e,a.default.settings.animationsEnabled?200:0,()=>{this.hidden&&this.dispatchEvent("hidden")})):e||this.dispatchEvent("visible"))}}class Ea extends Sa{constructor(e,t){super({appendTo:e,controller:t,listType:"xy",onSelect:e=>!Yn.onMediaClick({target:e},!0),waitForKey:"ArrowUp"}),this.container.classList.add("stickers-helper"),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)}),this.addEventListener("hidden",()=>{this.onChangeScreen&&(v.b.removeEventListener("changeScreen",this.onChangeScreen),this.onChangeScreen=void 0)})}checkEmoticon(e){const t=this.controller.getMiddleware();this.lazyLoadQueue&&this.lazyLoadQueue.clear(),hs.getStickersByEmoticon(e).then(e=>{if(!t())return;this.init&&(this.init(),this.init=null);const s=this.list.cloneNode();let i;this.lazyLoadQueue.clear(),i=e.length?new Promise(t=>{const i=[];e.forEach(e=>{s.append(this.superStickerRenderer.renderSticker(e,void 0,i))}),Promise.all(i).finally(t)}):Promise.resolve(),i.then(()=>{this.list.replaceWith(s),this.list=s,this.onChangeScreen||(this.onChangeScreen=()=>{const e=this.list.childElementCount*v.b.active.esgSticker.width+(this.list.childElementCount-1);this.list.style.width=e+"px"},v.b.addEventListener("changeScreen",this.onChangeScreen)),this.onChangeScreen(),this.toggle(!e.length),this.scrollable.scrollTop=0})})}init(){this.list=document.createElement("div"),this.list.classList.add("stickers-helper-stickers","super-stickers"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.lazyLoadQueue=new te.d,this.superStickerRenderer=new Rn(this.lazyLoadQueue,ho)}}const Ma=()=>{const e=new Date;return e.setHours(0,0,0,0),e},Ia=()=>{const e=new Date;return e.setFullYear(e.getFullYear()+1),e.setDate(e.getDate()-1),e};class Ca extends dn{constructor(e,t,s){var i;if(super((i=e).getTime()>Ia().getTime()?new Date:i,t,{noButtons:!0,noTitle:!0,closable:!0,withConfirm:!0,minDate:Ma(),maxDate:Ia(),withTime:!0,showOverflowMonths:!0,confirmShortcutIsSendShortcut:!0}),this.element.classList.add("popup-schedule"),this.header.append(this.controlsDiv),this.title.replaceWith(this.monthTitle),this.body.append(this.btnConfirm),s){const e=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"Schedule.SendWhenOnline"});this.body.append(e),Object(l.b)(e,()=>{t(2147483646),this.hide()})}}}var ka=s(133),Ta=s(79);function Pa(e,t=!0){const s=[],i=[],n=window.getSelection();let a,o;if(n&&n.rangeCount){const e=n.getRangeAt(0);e.startContainer&&e.startContainer==e.endContainer&&e.startOffset==e.endOffset&&(a=e.startContainer,o=e.startOffset)}const r=t?[]:void 0;Object(Ta.a)(e,s,i,a,o,r),i.length&&s.push(i.join(""));let l=s.join("\n");const c=l.indexOf("");return-1!=c&&(l=l.substr(0,c)+l.substr(c+1)),l=l.replace(/\u00A0/g," "),r&&Z.b.combineSameEntities(r),{value:l,entities:r,caretPos:c}}class xa extends Sa{constructor(e,t,s,i){super({appendTo:e,controller:t,listType:"x",onSelect:e=>{s.onEmojiSelected(An(e),!0)}}),this.appEmojiManager=i,this.container.classList.add("emoji-helper")}init(){this.list=document.createElement("div"),this.list.classList.add("emoji-helper-emojis","super-emojis"),this.container.append(this.list),this.scrollable=new P.a(this.container),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollLeft=0},0)})}render(e,t){if(this.init){if(!e.length)return;this.init(),this.init=null}(e=e.slice(0,80)).length&&(this.list.innerHTML="",e.forEach(e=>{xn(e,this.list,!1,!0)})),this.waitForKey=t?"ArrowUp":void 0,this.toggle(!e.length)}checkQuery(e,t){const s=this.controller.getMiddleware();this.appEmojiManager.getBothEmojiKeywords().then(()=>{if(!s())return;const i=e.replace(/^:/,""),n=this.appEmojiManager.searchEmojis(i);this.render(n,":"!==t)})}}class Aa extends Sa{constructor(e,t,s,i){super({appendTo:e,controller:t,listType:"y",onSelect:i}),this.className=s,this.container.classList.add(Aa.BASE_CLASS,s)}init(){this.list=document.createElement("div"),this.list.classList.add(Aa.BASE_CLASS+"-list"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)})}render(e){if(this.init){if(!e.length)return;this.init(),this.init=null}e.length&&(this.list.innerHTML="",e.forEach(e=>{const t=Aa.listElement({className:this.className,peerId:e.peerId,name:e.name,description:e.description});this.list.append(t)})),this.toggle(!e.length)}static listElement(e){const t=Aa.BASE_CLASS_LIST_ELEMENT;e.className+="-list-element";const s=document.createElement("div");s.classList.add(t,e.className),s.dataset.peerId=""+e.peerId;const i=new ko;i.classList.add("avatar-30",t+"-avatar",e.className+"-avatar"),i.setAttribute("dialog","0"),i.setAttribute("peer",""+e.peerId);const n=document.createElement("div");if(n.classList.add(t+"-name",e.className+"-name"),e.name?n.innerHTML=Z.b.wrapEmojiText(e.name):n.append(new ft.a({peerId:e.peerId,dialog:!1,onlyFirstName:!1,plainText:!1}).element),s.append(i,n),e.description){const i=document.createElement("div");i.classList.add(t+"-description",e.className+"-description"),i.innerHTML=Z.b.wrapEmojiText(e.description),s.append(i)}return s}}Aa.BASE_CLASS="autocomplete-peer-helper",Aa.BASE_CLASS_LIST_ELEMENT=Aa.BASE_CLASS+"-list-element";class Oa extends Aa{constructor(e,t,s,i,n){super(e,t,"commands-helper",e=>{const t=e.querySelector(`.${Aa.BASE_CLASS_LIST_ELEMENT}-name`).innerHTML;return s.getReadyToSend(()=>{s.messageInput.innerHTML=t,s.sendMessage(!0)})}),this.appProfileManager=i,this.appUsersManager=n}checkQuery(e,t){if(!this.appUsersManager.isBot(t))return!1;const s=this.controller.getMiddleware();return this.appProfileManager.getProfileByPeerId(t).then(t=>{if(!s())return;const i=[].concat(t.bot_info),n=new Ln.a({ignoreCase:!0}),a=new Map;i.forEach(e=>{e.commands.forEach(t=>{const s="/"+t.command;a.set(t.command,{peerId:e.user_id,name:s,description:t.description}),n.indexObject(t.command,s)})});const o=n.search(e),r=Array.from(o).map(e=>a.get(e));this.render(r)}),!0}}class _a{constructor(){this.helpers=new Set,this.middleware=Object(ks.a)()}getMiddleware(){return this.middleware.clean(),this.middleware.get()}addHelper(e){this.helpers.add(e)}hideOtherHelpers(e){this.helpers.forEach(t=>{t!==e&&t.toggle(!0,!0)}),e||this.middleware.clean()}}class Fa extends Aa{constructor(e,t,s,i,n){super(e,t,"mentions-helper",e=>{const t=n.getUser(+e.dataset.peerId);let i,a="";t.username?a="@"+t.username:(a=t.first_name||t.last_name,i={_:"messageEntityMentionName",length:a.length,offset:0,user_id:t.id}),a+=" ",s.insertAtCaret(a,i)}),this.appProfileManager=i,this.appUsersManager=n}checkQuery(e,t,s){const i=e.trim();if(e.length!==i.length)return!1;const n=this.controller.getMiddleware();return this.appProfileManager.getMentions(t?-t:0,i,s).then(e=>{if(!n())return;const t=i.slice(1).toLowerCase();this.render(e.map(e=>{const s=this.appUsersManager.getUser(e);if(!s.username||s.username.toLowerCase()!==t)return{peerId:e,description:s.username?"@"+s.username:void 0}}).filter(Boolean))}),!0}}var ja=s(3);class Da extends qn{constructor(e){super({element:document.createElement("div")}),this.onBodyTouchStart=e=>{const t=e.touches[0].target;Object(zs.a)(t,this.element)||t===this.btnHover||(Object(c.a)(e),this.toggle(!1))},Object(L.g)(this,e),this.element.classList.add(Da.BASE_CLASS),this.element.style.display="none",this.attachButtonListener(this.btnHover,this.listenerSetter),this.listenerSetter.add(a.default)("history_reply_markup",({peerId:e})=>{this.peerId===e&&(this.checkAvailability()&&this.isActive()&&this.render(),Object(Cs.c)().then(()=>{this.checkForceReply()}))})}init(){return this.appendTo.append(this.element),this.listenerSetter.add(this)("open",()=>{this.render(),pe.IS_TOUCH_SUPPORTED&&(this.touchListener=this.listenerSetter.add(document.body)("touchstart",this.onBodyTouchStart,{passive:!1,capture:!0}),this.listenerSetter.add(this)("close",()=>{this.listenerSetter.remove(this.touchListener)},{once:!0}))}),this.listenerSetter.add(this.element)("click",e=>{const t=Object(Ce.a)(e.target,"btn");t&&(this.appMessagesManager.sendText(this.peerId,t.dataset.text),this.toggle(!1))}),super.init()}checkForceReply(){const e=this.getReplyMarkup();"replyKeyboardForceReply"!==e._||e.pFlags.hidden||e.pFlags.used||(e.pFlags.used=!0,this.chatInput.initMessageReply(e.mid))}getReplyMarkup(){var e;return null!==(e=this.appMessagesManager.getHistoryStorage(this.peerId).replyMarkup)&&void 0!==e?e:{_:"replyKeyboardHide"}}render(e=this.getReplyMarkup()){this.element.innerHTML="";for(const t of e.rows){const e=document.createElement("div");e.classList.add(Da.BASE_CLASS+"-row");for(const s of t.buttons){const t=document.createElement("button");t.classList.add(Da.BASE_CLASS+"-button","btn"),t.innerHTML=Z.b.wrapEmojiText(s.text),t.dataset.text=s.text,e.append(t)}this.element.append(e)}}checkAvailability(e=this.getReplyMarkup()){var t;const s="replyKeyboardHide"===e._||!(null===(t=e.rows)||void 0===t?void 0:t.length);return this.btnHover.classList.toggle("hide",s),s&&this.toggle(!1),!s}setPeer(e){this.peerId=e,this.checkAvailability(),this.checkForceReply()}}Da.BASE_CLASS="reply-keyboard";var Ba=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ra extends Sa{constructor(e,t,s,i,n){super({appendTo:e,controller:t,listType:"xy",onSelect:e=>{const{peerId:t,botId:s,queryId:i}=this.list.dataset;return this.chat.input.getReadyToSend(()=>{const n=this.appInlineBotsManager.generateQId(i,e.dataset.resultId);this.appInlineBotsManager.sendInlineResult(+t,+s,n,{clearDraft:!0,scheduleDate:this.chat.input.scheduleDate,silent:this.chat.input.sendSilent,replyToMsgId:this.chat.input.replyToMsgId}),this.chat.input.onMessageSent(!0,!0)})}}),this.chat=s,this.appUsersManager=i,this.appInlineBotsManager=n,this._checkQuery=(e,t,s)=>Ba(this,void 0,void 0,(function*(){const i=this.controller.getMiddleware(),n=yield this.appUsersManager.resolveUsername(t);if(!i())throw"PEER_CHANGED";if("user"!==n._)throw"NOT_A_BOT";const a=this.appInlineBotsManager.getInlineResults(e,n.id,s).then(t=>{var s;if(!i())throw"PEER_CHANGED";this.init&&(this.init(),this.init=null);const a=this.list.cloneNode();a.dataset.peerId=""+e,a.dataset.botId=""+n.id,a.dataset.queryId=t.query_id;const o=new jn(null,"INLINE-HELPER",this.scrollable,!1);this.lazyLoadQueue.clear(),this.superStickerRenderer.clear();const r=[],c=!!t.pFlags.gallery;for(const e of t.results){const t=document.createElement("div");t.classList.add("inline-helper-result"),t.dataset.resultId=e.id;const n=c?void 0:document.createElement("div");if(n&&(n.classList.add("inline-helper-result-preview"),t.append(n)),a.append(t),c)t.classList.add("grid-item");else{n.classList.add("empty"),n.innerHTML=Z.b.wrapEmojiText([...e.title.trim()][0]);const s=document.createElement("div");s.classList.add("inline-helper-result-title"),s.innerHTML=Z.b.wrapEmojiText(e.title);const i=document.createElement("div");i.classList.add("inline-helper-result-description"),i.innerHTML=Z.b.wrapRichText(e.description,{noCommands:!0,noLinks:!0}),t.append(s,i);const o=document.createElement("div");o.classList.add("inline-helper-separator"),a.append(o)}if("botInlineResult"===e._){if(e.thumb&&0===e.thumb.mime_type.indexOf("image/")){let s;n?(s=document.createElement("div"),n.append(s)):s=t,s.classList.add("media-container"),c&&s.classList.add("no-border-radius"),this.lazyLoadQueue.push({div:t,load:()=>he.a.download({dcId:4,location:{_:"inputWebFileLocation",access_hash:e.thumb.access_hash,url:e.thumb.url},size:e.thumb.size,mimeType:e.thumb.mime_type}).then(e=>{const t=new Image;t.classList.add("media-photo"),Object(ae.b)(e).then(e=>{ws(s,t,e,!0)})})})}}else{const a=e.document||e.photo;if(["sticker","gif"].includes(null===(s=a)||void 0===s?void 0:s.type)&&c)Object(ji.a)(a),"gif"===a.type?o.add(a,t):"sticker"===a.type&&(t.classList.add("super-sticker"),this.superStickerRenderer.renderSticker(a,t,r),2===a.sticker&&this.superStickerRenderer.observeAnimatedDiv(t));else if(a){const e=c?48:void 0;c&&t.classList.add("no-border-radius"),ys({photo:a,container:c?t:n,boxWidth:e,boxHeight:e,middleware:i,lazyLoadQueue:this.lazyLoadQueue,loadPromises:r})}}}return Promise.all(r).then(()=>{if(!i())return void o.clear();a.classList.toggle("is-gallery",c),a.classList.toggle("super-stickers",c),this.container.classList.toggle("is-gallery",c);const s=this.list.parentElement;if(s.textContent="",t.switch_pm){const i=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary");i.insertAdjacentHTML("beforeend",Z.b.wrapEmojiText(t.switch_pm.text)),Object(l.b)(i,s=>{this.appInlineBotsManager.switchToPM(e,n.id,t.switch_pm.start_param)}),s.append(i)}s.append(this.list=a),this.gifsMasonry&&this.gifsMasonry.detach(),this.gifsMasonry=o,o.attach(),this.onChangeScreen||(this.onChangeScreen=()=>{if(this.list.classList.contains("is-gallery")){const e=this.list.childElementCount*v.b.active.esgSticker.width+(this.list.childElementCount-1);this.list.style.width=e+"px"}else this.list.style.width=""},v.b.addEventListener("changeScreen",this.onChangeScreen)),this.onChangeScreen(),this.toggle(!t.results.length&&!t.switch_pm),this.scrollable.scrollTop=0})});return{user:n,renderPromise:a}})),this.container.classList.add("inline-helper"),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)}),this.checkQuery=ot(this._checkQuery,200,!0,!0),this.addEventListener("hidden",()=>{this.onChangeScreen&&(v.b.removeEventListener("changeScreen",this.onChangeScreen),this.onChangeScreen=void 0)})}init(){this.list=document.createElement("div"),this.list.classList.add("inline-helper-results"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.lazyLoadQueue=new te.d,this.superStickerRenderer=new Rn(this.lazyLoadQueue,"INLINE-HELPER")}}var Ha=s(2);class Ua{constructor(e,t,s,i,n,a,o,r,d,h,u,p,m,g){this.chat=e,this.appMessagesManager=t,this.appMessagesIdsManager=s,this.appDocsManager=i,this.appChatsManager=n,this.appPeersManager=a,this.appWebPagesManager=o,this.appImManager=r,this.appDraftsManager=d,this.serverTimeManager=h,this.appNotificationsManager=u,this.appEmojiManager=p,this.appUsersManager=m,this.appInlineBotsManager=g,this.lastUrl="",this.lastTimeType=0,this.replyElements={},this.willSendWebPage=null,this.recording=!1,this.recordCanceled=!1,this.recordStartTime=0,this.lockRedo=!1,this.canRedoFromHTML="",this.undoHistory=[],this.executedHistory=[],this.canUndoFromHTML="",this.onCancelRecordClick=e=>{e&&Object(c.a)(e),this.recordCanceled=!0,this.recorder.stop(),ua.a.setKeepAlive(!1)},this.onEmoticonsOpen=()=>{const e=pe.IS_TOUCH_SUPPORTED?"flip-icon":"active";this.btnToggleEmoticons.classList.toggle(e,!0)},this.onEmoticonsClose=()=>{const e=pe.IS_TOUCH_SUPPORTED?"flip-icon":"active";this.btnToggleEmoticons.classList.toggle(e,!1)},this.scheduleSending=(e=this.sendMessage.bind(this,!0),t=new Date)=>{const s=this.chat.peerId>0&&this.appUsersManager.isUserOnlineVisible(this.chat.peerId);new Ca(t,t=>{t<=10+(Date.now()/1e3|0)&&(t=void 0),this.scheduleDate=t,e(),"scheduled"!==this.chat.type&&t&&this.appImManager.openScheduled(this.chat.peerId)},s).show()},this.prepareDocumentExecute=()=>(this.executedHistory.push(this.messageInput.innerHTML),()=>this.canUndoFromHTML=this.messageInput.innerHTML),this.undoRedo=(e,t,s)=>{Object(c.a)(e);let i=this.messageInput.innerHTML;if(i&&i!==s){this.lockRedo=!0;let e=0;do{document.execCommand(t,!1,null);const s=this.messageInput.innerHTML;if(i===s){if(++e>2)break}else e=0;i=s}while(i!==s);this.lockRedo=!1}},this.handleMarkdownShortcut=e=>{const t={B:"bold",I:"italic",U:"underline",S:"strikethrough",M:"monospace",K:"link"};if(document.getSelection().toString().trim().length)for(const s in t){if(e.code==="Key"+s){if("K"===s&&this.appImManager.markupTooltip){this.appImManager.markupTooltip.showLinkEditor(),Object(c.a)(e);break}this.applyMarkdown(t[s]),Object(c.a)(e);break}}if("KeyZ"===e.code){let t=this.messageInput.innerHTML;e.shiftKey?this.undoHistory.length&&(this.executedHistory.push(t),t=this.undoHistory.pop(),this.undoRedo(e,"redo",t),t=this.messageInput.innerHTML,this.canRedoFromHTML=this.undoHistory.length?t:"",this.canUndoFromHTML=t):!this.executedHistory.length||this.canUndoFromHTML&&t!==this.canUndoFromHTML||(this.undoHistory.push(t),t=this.executedHistory.pop(),this.undoRedo(e,"undo",t),this.canUndoFromHTML=this.canRedoFromHTML=this.messageInput.innerHTML)}},this.onMessageInput=e=>{const{value:t,entities:s,caretPos:i}=Pa(this.messageInputField.input),n=Z.b.parseMarkdown(t,s,!0),a=Z.b.mergeEntities(s,Z.b.parseEntities(n));this.canRedoFromHTML&&!this.lockRedo&&this.messageInput.innerHTML!==this.canRedoFromHTML&&(this.canRedoFromHTML="",this.undoHistory.length=0);const o=a.filter(e=>"messageEntityUrl"===e._||"messageEntityTextUrl"===e._);if(o.length)for(const e of o){let s;if("messageEntityTextUrl"===e._)s=e.url;else if(s=t.slice(e.offset,e.offset+e.length),!s.includes("http://")&&!s.includes("https://"))continue;if(this.lastUrl!==s){this.lastUrl=s;const e=this.getWebPagePromise=rt.a.invokeApiHashable("messages.getWebPage",{url:s}).then(t=>{t=this.appWebPagesManager.saveWebPage(t),this.getWebPagePromise===e&&(this.getWebPagePromise=void 0),this.lastUrl===s&&("webPage"===t._?(this.setTopInfo("webpage",()=>{},t.site_name||t.title||"Webpage",t.description||t.url||""),delete this.noWebPage,this.willSendWebPage=t):this.willSendWebPage&&this.onHelperCancel())})}break}else this.lastUrl&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null,this.helperType?this.helperFunc():this.clearHelper());if(t.trim()){const e=Date.now();e-this.lastTimeType>=6e3&&(this.lastTimeType=e,this.appMessagesManager.setTyping(this.chat.peerId,{_:"sendMessageTypingAction"}))}else this.lastTimeType&&this.appMessagesManager.setTyping(this.chat.peerId,{_:"sendMessageCancelAction"}),this.appImManager.markupTooltip&&this.appImManager.markupTooltip.hide();this.editMsgId||this.saveDraftDebounced(),this.checkAutocomplete(t,i,a),this.updateSendBtn()},this.onEmojiSelected=(e,t)=>{t&&this.insertAtCaret(e,Z.b.getEmojiEntityFromEmoji(e))},this.onBtnSendClick=e=>{if(Object(c.a)(e),!this.recorder||this.recording||!this.isInputEmpty()||this.forwarding||this.editMsgId)this.recording?Date.now()-this.recordStartTime<500?this.onCancelRecordClick():this.recorder.stop():this.sendMessage();else{if(this.chat.peerId<0&&!this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,"send_media"))return void nt("Posting media content isn't allowed in this group.");this.chatInput.classList.add("is-locked"),Object(Us.a)(),this.recorder.start().then(()=>{this.recordCanceled=!1,this.chatInput.classList.add("is-recording"),this.recording=!0,this.updateSendBtn(),ua.a.setKeepAlive(!0);const e=()=>{new ht("popup-cancel-record",{titleLangKey:"DiscardVoiceMessageTitle",descriptionLangKey:"DiscardVoiceMessageDescription",buttons:[{langKey:"DiscardVoiceMessageAction",callback:()=>{Object(l.d)(this.btnCancelRecord)}},{langKey:"Continue",isCancel:!0}]}).show()};this.recordingOverlayListener=this.listenerSetter.add(document.body)("mousedown",t=>{Object(Ce.a)(t.target,"chat-input")||Object(Ce.a)(t.target,"popup-cancel-record")||(Object(c.a)(t),e())},{capture:!0,passive:!1}),B.a.pushItem(this.recordingNavigationItem={type:"voice",onPop:()=>(setTimeout(()=>{e()},0),!1)}),this.recordStartTime=Date.now();const t=this.recorder.sourceNode,s=t.context.createAnalyser();t.connect(s),s.fftSize=32;const i=new Uint8Array(s.frequencyBinCount),n=255*i.length;let a=()=>{if(!this.recording)return;s.getByteFrequencyData(i);let e=0;i.forEach(t=>{e+=t});let t=Math.min(1,e/n+.36);this.recordRippleEl.style.transform=`scale(${t})`;let o=Date.now()-this.recordStartTime,r=o%1e3,l=(""+o/1e3).toHHMMSS()+","+("00"+Math.round(r/10)).slice(-2);this.recordTimeEl.innerText=l,Object(_e.b)(a)};a()}).catch(e=>{switch(e.name){case"NotAllowedError":nt("Please allow access to your microphone");break;case"NotReadableError":nt(e.message);break;default:console.error("Recorder start error:",e,e.name,e.message),nt(e.message)}this.chatInput.classList.remove("is-recording","is-locked")})}},this.onHelperCancel=e=>{if(e&&Object(c.a)(e),this.willSendWebPage){const e=this.lastUrl;let t=!1;if(this.helperType&&(this.helperFunc(),t=!0),this.lastUrl=e,this.noWebPage=!0,this.willSendWebPage=null,t)return}this.clearHelper(),this.updateSendBtn()},this.onHelperClick=e=>{if(Object(c.a)(e),Object(Ce.a)(e.target,"reply-wrapper"))if("forward"===this.helperType){if(this.helperWaitingForward)return;this.helperWaitingForward=!0;const e=this.helperFunc;this.clearHelper(),this.updateSendBtn();let t=!1;new Ds(Object(L.a)(this.forwarding),()=>{t=!0},()=>{this.helperWaitingForward=!1,t||e()})}else"reply"===this.helperType?this.chat.setMessageId(this.replyToMsgId):"edit"===this.helperType&&this.chat.setMessageId(this.editMsgId)},this.listenerSetter=new H.a}construct(){this.chatInput=document.createElement("div"),this.chatInput.classList.add("chat-input"),this.chatInput.style.display="none",this.inputContainer=document.createElement("div"),this.inputContainer.classList.add("chat-input-container"),this.rowsWrapper=document.createElement("div"),this.rowsWrapper.classList.add("rows-wrapper","chat-input-wrapper");const e=na();this.rowsWrapper.append(e);const t=this.fakeRowsWrapper=document.createElement("div");t.classList.add("fake-wrapper","fake-rows-wrapper");const s=document.createElement("div");s.classList.add("fake-wrapper","fake-selection-wrapper"),this.inputContainer.append(this.rowsWrapper,t,s),this.chatInput.append(this.inputContainer),this.goDownBtn=$({icon:"arrow_down",className:"bubbles-corner-button bubbles-go-down hide"}),this.inputContainer.append(this.goDownBtn),Object(l.b)(this.goDownBtn,e=>{Object(c.a)(e),this.chat.bubbles.onGoDownClick()},{listenerSetter:this.listenerSetter})}constructPeerHelpers(){this.replyElements.container=document.createElement("div"),this.replyElements.container.classList.add("reply-wrapper"),this.replyElements.cancelBtn=N("close reply-cancel"),this.replyElements.container.append(this.replyElements.cancelBtn),this.newMessageWrapper=document.createElement("div"),this.newMessageWrapper.classList.add("new-message-wrapper"),this.btnToggleEmoticons=N("none toggle-emoticons",{noRipple:!0}),this.inputMessageContainer=document.createElement("div"),this.inputMessageContainer.classList.add("input-message-container"),"chat"===this.chat.type&&(this.goDownUnreadBadge=document.createElement("span"),this.goDownUnreadBadge.classList.add("badge","badge-24","badge-primary"),this.goDownBtn.append(this.goDownUnreadBadge),this.goMentionBtn=$({icon:"mention",className:"bubbles-corner-button bubbles-go-mention"}),this.goMentionUnreadBadge=document.createElement("span"),this.goMentionUnreadBadge.classList.add("badge","badge-24","badge-primary"),this.goMentionBtn.append(this.goMentionUnreadBadge),this.inputContainer.append(this.goMentionBtn),Object(l.b)(this.goMentionBtn,e=>{Object(c.a)(e),this.appMessagesManager.goToNextMention(this.chat.peerId)},{listenerSetter:this.listenerSetter}),this.btnScheduled=N("scheduled btn-scheduled float hide",{noRipple:!0}),Object(l.b)(this.btnScheduled,e=>{this.appImManager.openScheduled(this.chat.peerId)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("scheduled_new",({peerId:e})=>{this.chat.peerId===e&&this.btnScheduled.classList.remove("hide")}),this.listenerSetter.add(a.default)("scheduled_delete",({peerId:e})=>{this.chat.peerId===e&&this.appMessagesManager.getScheduledMessages(this.chat.peerId).then(e=>{this.btnScheduled.classList.toggle("hide",!e.length)})}),this.btnToggleReplyMarkup=N("botcom toggle-reply-markup float hide",{noRipple:!0}),this.replyKeyboard=new Da({appendTo:this.rowsWrapper,listenerSetter:this.listenerSetter,appMessagesManager:this.appMessagesManager,btnHover:this.btnToggleReplyMarkup,chatInput:this}),this.listenerSetter.add(this.replyKeyboard)("open",()=>this.btnToggleReplyMarkup.classList.add("active")),this.listenerSetter.add(this.replyKeyboard)("close",()=>this.btnToggleReplyMarkup.classList.remove("active"))),this.attachMenuButtons=[{icon:"image",text:"Chat.Input.Attach.PhotoOrVideo",onClick:()=>{this.fileInput.value="";const e=[...g].join(", ");this.fileInput.setAttribute("accept",e),this.willAttachType="media",this.fileInput.click()},verify:(e,t)=>this.appMessagesManager.canSendToPeer(e,t,"send_media")},{icon:"document",text:"Chat.Input.Attach.Document",onClick:()=>{this.fileInput.value="",this.fileInput.removeAttribute("accept"),this.willAttachType="document",this.fileInput.click()},verify:(e,t)=>this.appMessagesManager.canSendToPeer(e,t,"send_media")},{icon:"poll",text:"Poll",onClick:()=>{new ba(this.chat).show()},verify:(e,t)=>e<0&&this.appMessagesManager.canSendToPeer(e,t,"send_polls")}],this.attachMenu=Ie({noRipple:!0,listenerSetter:this.listenerSetter},"top-left",this.attachMenuButtons),this.attachMenu.classList.add("attach-file","tgico-attach"),this.attachMenu.classList.remove("tgico-more"),this.recordTimeEl=document.createElement("div"),this.recordTimeEl.classList.add("record-time"),this.fileInput=document.createElement("input"),this.fileInput.type="file",this.fileInput.multiple=!0,this.fileInput.style.display="none",this.newMessageWrapper.append(...[this.btnToggleEmoticons,this.inputMessageContainer,this.btnScheduled,this.btnToggleReplyMarkup,this.attachMenu,this.recordTimeEl,this.fileInput].filter(Boolean)),this.rowsWrapper.append(this.replyElements.container),this.autocompleteHelperController=new _a,this.stickersHelper=new Ea(this.rowsWrapper,this.autocompleteHelperController),this.emojiHelper=new xa(this.rowsWrapper,this.autocompleteHelperController,this,this.appEmojiManager),this.commandsHelper=new Oa(this.rowsWrapper,this.autocompleteHelperController,this,this.chat.appProfileManager,this.chat.appUsersManager),this.mentionsHelper=new Fa(this.rowsWrapper,this.autocompleteHelperController,this,this.chat.appProfileManager,this.chat.appUsersManager),this.inlineHelper=new Ra(this.rowsWrapper,this.autocompleteHelperController,this.chat,this.appUsersManager,this.appInlineBotsManager),this.rowsWrapper.append(this.newMessageWrapper),this.btnCancelRecord=N("delete danger btn-circle z-depth-1 btn-record-cancel"),this.btnSendContainer=document.createElement("div"),this.btnSendContainer.classList.add("btn-send-container"),this.recordRippleEl=document.createElement("div"),this.recordRippleEl.classList.add("record-ripple"),this.btnSend=N("none btn-circle z-depth-1 btn-send animated-button-icon"),this.btnSend.insertAdjacentHTML("afterbegin",'\n \n \n \n \n '),this.btnSendContainer.append(this.recordRippleEl,this.btnSend),"scheduled"!==this.chat.type&&(this.sendMenu=new pa({onSilentClick:()=>{this.sendSilent=!0,this.sendMessage()},onScheduleClick:()=>{this.scheduleSending(void 0)},listenerSetter:this.listenerSetter,openSide:"top-left",onContextElement:this.btnSend,onOpen:()=>!this.isInputEmpty()}),this.btnSendContainer.append(this.sendMenu.sendMenu)),this.inputContainer.append(this.btnCancelRecord,this.btnSendContainer),Jn.attachButtonListener(this.btnToggleEmoticons,this.listenerSetter),this.listenerSetter.add(Jn)("open",this.onEmoticonsOpen),this.listenerSetter.add(Jn)("close",this.onEmoticonsClose),this.attachMessageInputField(),this.listenerSetter.add(a.default)("settings_updated",()=>{(this.stickersHelper||this.emojiHelper)&&(this.previousQuery="",this.checkAutocomplete()),this.messageInputField&&this.messageInputField.onFakeInput()}),this.listenerSetter.add(a.default)("draft_updated",({peerId:e,threadId:t,draft:s,force:i})=>{this.chat.threadId===t&&this.chat.peerId===e&&this.setDraft(s,!0,i)}),this.listenerSetter.add(a.default)("peer_changing",e=>{this.chat===e&&this.saveDraft()}),"scheduled"===this.chat.type?this.listenerSetter.add(a.default)("scheduled_delete",({peerId:e,mids:t})=>{this.chat.peerId===e&&t.includes(this.editMsgId)&&this.onMessageSent()}):this.listenerSetter.add(a.default)("history_delete",({peerId:e,msgs:t})=>{this.chat.peerId===e&&(t.has(this.editMsgId)&&this.onMessageSent(),this.replyToMsgId&&t.has(this.replyToMsgId)&&this.clearHelper("reply"))});try{this.recorder=new ha.a({encoderSampleRate:48e3,monitorGain:0,numberOfChannels:1,recordingGain:1,reuseWorker:!0})}catch(e){console.error("Recorder constructor error:",e)}this.updateSendBtn(),this.listenerSetter.add(this.fileInput)("change",e=>{let t=e.target.files;t.length&&(new fa(this.chat,Array.from(t).slice(),this.willAttachType),this.fileInput.value="")},!1),Object(l.b)(this.btnSend,this.onBtnSendClick,{listenerSetter:this.listenerSetter,touchMouseDown:!0}),this.recorder&&(Object(l.b)(this.btnCancelRecord,this.onCancelRecordClick,{listenerSetter:this.listenerSetter}),this.recorder.onstop=()=>{this.recording=!1,this.chatInput.classList.remove("is-recording","is-locked"),this.updateSendBtn(),this.recordRippleEl.style.transform=""},this.recorder.ondataavailable=e=>{if(this.recordingOverlayListener&&(this.listenerSetter.remove(this.recordingOverlayListener),this.recordingOverlayListener=void 0),this.recordingNavigationItem&&(B.a.removeItem(this.recordingNavigationItem),this.recordingNavigationItem=void 0),this.recordCanceled)return;const{peerId:t,threadId:s}=this.chat,i=this.replyToMsgId,n=(Date.now()-this.recordStartTime)/1e3|0,a=new Blob([e],{type:"audio/ogg"});ua.a.decode(e,!0).then(e=>{ua.a.setKeepAlive(!1),this.appMessagesManager.sendFile(t,a,{isVoiceMessage:!0,isMedia:!0,duration:n,waveform:e.waveform,objectURL:e.url,replyToMsgId:i,threadId:s,clearDraft:!0}),this.onMessageSent(!1,!0)})}),Object(l.b)(this.replyElements.cancelBtn,this.onHelperCancel,{listenerSetter:this.listenerSetter}),Object(l.b)(this.replyElements.container,this.onHelperClick,{listenerSetter:this.listenerSetter}),this.saveDraftDebounced=ot(()=>this.saveDraft(),2500,!1,!0)}constructPinnedHelpers(){const e=document.createElement("div");e.classList.add("pinned-container"),this.pinnedControlBtn=Object(U.a)("btn-primary btn-transparent text-bold pinned-container-button",{icon:"unpin"}),e.append(this.pinnedControlBtn);const t=e.cloneNode(!0);this.fakePinnedControlBtn=t.firstChild,this.fakeRowsWrapper.append(t),this.listenerSetter.add(this.pinnedControlBtn)("click",()=>{const e=this.chat.peerId;new aa(e,0,!0,()=>{this.chat.appImManager.setPeer(0);const e=this.chat.appImManager.chat;e.topbar.pinnedMessage&&e.topbar.pinnedMessage.pinnedMessageContainer.toggle(!0)})}),this.rowsWrapper.append(e),this.chatInput.classList.add("type-pinned"),this.rowsWrapper.classList.add("is-centered")}getReadyToSend(e){return"scheduled"===this.chat.type?(this.scheduleSending(e),!0):(e(),!1)}setUnreadCount(){const e=this.appMessagesManager.getDialogOnly(this.chat.peerId),t=null==e?void 0:e.unread_count;if(this.goDownUnreadBadge.innerText=""+(t||""),this.goDownUnreadBadge.classList.toggle("badge-gray",this.appNotificationsManager.isPeerLocalMuted(this.chat.peerId,!0)),this.goMentionUnreadBadge&&"chat"===this.chat.type){const t=!!(null==e?void 0:e.unread_mentions_count);this.goMentionUnreadBadge.innerText=t?""+e.unread_mentions_count:"",this.goMentionBtn.classList.toggle("is-visible",t)}}saveDraft(){if(!this.chat.peerId||this.editMsgId||"scheduled"===this.chat.type)return;const{value:e,entities:t}=Object(ma.a)(this.messageInputField.input);let s;(e.length||this.replyToMsgId)&&(s={_:"draftMessage",date:Object(re.f)(!0)+this.serverTimeManager.serverTimeOffset,message:e,entities:t.length?t:void 0,pFlags:{no_webpage:this.noWebPage},reply_to_msg_id:this.replyToMsgId}),this.appDraftsManager.syncDraft(this.chat.peerId,this.chat.threadId,s)}destroy(){this.listenerSetter.removeAll()}cleanup(e=!0){this.chat.peerId||(this.chatInput.style.display="none",this.goDownBtn.classList.add("hide")),Ns(),this.lastTimeType=0,this.messageInput&&(this.clearInput(),e&&this.clearHelper())}setDraft(e,t=!0,s=!1){return!(!s&&!Object(ga.a)(this.messageInput)||"scheduled"===this.chat.type)&&(!(!e&&!(e=this.appDraftsManager.getDraft(this.chat.peerId,this.chat.threadId)))&&((this.messageInputField.value!==e.rMessage||this.replyToMsgId!==e.reply_to_msg_id)&&(this.clearHelper(),this.noWebPage=e.pFlags.no_webpage,e.reply_to_msg_id&&this.initMessageReply(e.reply_to_msg_id),this.setInputValue(e.rMessage,t,t),!0)))}finishPeerChange(){const e=this.chat.peerId;this.chatInput.style.display="";const t=this.appPeersManager.isBroadcast(e);if(this.goDownBtn.classList.toggle("is-broadcast",t),this.goDownBtn.classList.remove("hide"),this.goDownUnreadBadge&&this.setUnreadCount(),"pinned"===this.chat.type&&this.chatInput.classList.toggle("can-pin",this.appPeersManager.canPinMessage(e)),this.btnScheduled){this.btnScheduled.classList.add("hide");const t=this.chat.bubbles.getMiddleware();this.appMessagesManager.getScheduledMessages(e).then(e=>{t()&&this.btnScheduled.classList.toggle("hide",!e.length)})}this.replyKeyboard&&this.replyKeyboard.setPeer(e),this.sendMenu&&this.sendMenu.setPeerId(e),this.messageInput?this.updateMessageInput():this.pinnedControlBtn&&(this.appPeersManager.canPinMessage(this.chat.peerId)?(this.pinnedControlBtn.append(Object(A.i18n)("Chat.Input.UnpinAll")),this.fakePinnedControlBtn.append(Object(A.i18n)("Chat.Input.UnpinAll"))):(this.pinnedControlBtn.append(Object(A.i18n)("Chat.Pinned.DontShow")),this.fakePinnedControlBtn.append(Object(A.i18n)("Chat.Pinned.DontShow"))))}updateMessageInput(){const{peerId:e,threadId:t}=this.chat,s=this.appMessagesManager.canSendToPeer(e,t);this.chatInput.classList.add("no-transition"),this.chatInput.classList.toggle("is-hidden",!s),this.chatInput.offsetLeft,this.chatInput.classList.remove("no-transition");const i=A.default.weakMap.get(this.messageInput);if(i){let s;s=t?"Comment":this.appPeersManager.isBroadcast(e)?"ChannelBroadcast":this.appMessagesManager.isAnonymousSending(e)?"SendAnonymously":"Message",i.key!==s&&(i.key=s,i.update())}const n=this.attachMenuButtons.filter(s=>{const i=s.verify(e,t);return s.element.classList.toggle("hide",!i),i});s?(this.messageInput.setAttribute("contenteditable","true"),this.setDraft(void 0,!1),this.messageInput.innerHTML||this.messageInputField.onFakeInput()):this.messageInput.removeAttribute("contenteditable"),this.attachMenu.toggleAttribute("disabled",!n.length),this.attachMenu.classList.toggle("btn-disabled",!n.length),this.updateSendBtn()}attachMessageInputField(){const e=this.messageInputField;this.messageInputField=new F.b({placeholder:"Message",name:"message",animate:!0}),this.messageInputField.input.classList.replace("input-field-input","input-message-input"),this.messageInputField.inputFake.classList.replace("input-field-input","input-message-input"),this.messageInput=this.messageInputField.input,this.messageInput.classList.add("no-scrollbar"),this.attachMessageInputListeners(),Ha.a&&Object(Ha.b)(this.messageInput),e?(e.input.replaceWith(this.messageInputField.input),e.inputFake.replaceWith(this.messageInputField.inputFake)):this.inputMessageContainer.append(this.messageInputField.input,this.messageInputField.inputFake)}attachMessageInputListeners(){this.listenerSetter.add(this.messageInput)("keydown",e=>{if(Object(ka.a)(e))this.sendMessage();else if(e.ctrlKey||e.metaKey)this.handleMarkdownShortcut(e);else if(("PageUp"===e.key||"PageDown"===e.key)&&!e.shiftKey)if(e.preventDefault(),"PageUp"===e.key){const e=document.createRange(),t=window.getSelection();e.setStart(this.messageInput.childNodes[0]||this.messageInput,0),e.collapse(!0),t.removeAllRanges(),t.addRange(e)}else Object(va.a)(this.messageInput)}),pe.IS_TOUCH_SUPPORTED&&Object(l.b)(this.messageInput,e=>{this.appImManager.selectTab(1),Jn.toggle(!1)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(this.messageInput)("input",this.onMessageInput),this.listenerSetter.add(this.messageInput)("keyup",()=>{this.checkAutocomplete()}),"chat"!==this.chat.type&&"discussion"!==this.chat.type||this.listenerSetter.add(this.messageInput)("focusin",()=>{this.chat.bubbles.scrollable.loadedAll.bottom&&this.appMessagesManager.readAllHistory(this.chat.peerId,this.chat.threadId)})}applyMarkdown(e,t){const s={bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",monospace:()=>document.execCommand("fontName",!1,"monospace"),link:t?()=>document.execCommand("createLink",!1,t):()=>document.execCommand("unlink",!1,null)};if(!s[e])return!1;const i=s[e],n=this.prepareDocumentExecute(),a=[];if(a.push(document.execCommand("styleWithCSS",!1,"true")),"monospace"===e){let t=!1;const s=window.getSelection();if(!s.isCollapsed){const i=s.getRangeAt(0),n=Ta.b[e],a=i.commonAncestorContainer;(a.parentNode.matches(n.match)||a instanceof HTMLElement&&a.matches(n.match))&&(t=!0)}t?a.push(document.execCommand("fontName",!1,"Roboto")):a.push("function"==typeof i?i():document.execCommand(i,!1,null))}else a.push("function"==typeof i?i():document.execCommand(i,!1,null));return a.push(document.execCommand("styleWithCSS",!1,"false")),n(),this.appImManager.markupTooltip&&this.appImManager.markupTooltip.setActiveMarkupButton(),!0}insertAtCaret(e,t,s=!0){const{value:i,caretPos:n,entities:a}=Pa(this.messageInput),o=n>=0?n:i.length,r=i.substr(0,o),l=i.substr(o),c=s?r.match(Ua.AUTO_COMPLETE_REG_EXP):null,d=c?c.index+(c[0].length-c[2].length):r.length,h=r.slice(0,d)+e+l,u=Z.b.parseEntities(i);Z.b.mergeEntities(a,u);const p=t?Math.max(t.length,e.length):e.length,m=[];t&&(m.push(t),t.offset=d),m.push({_:"messageEntityCaret",length:0,offset:d+p});const g=p-(c?c[2].length:r.length);a.forEach(e=>{e.offset>=d&&(e.offset+=g)}),Z.b.mergeEntities(a,m),this.messageInputField.setValueSilently(Z.b.wrapDraftText(h,{entities:a}),!0);const b=this.messageInput.querySelector(".composer-sel");!function(e,t,s){if(e.focus(),!t||t.parentNode!=e||t.nextSibling||s||(e.removeChild(t),t=null),window.getSelection&&document.createRange){const i=document.createRange();t?i.selectNode(t):i.selectNodeContents(e),s||i.collapse(!1);const n=window.getSelection();n.removeAllRanges(),n.addRange(i)}}(this.messageInput,b),b.remove(),this.onMessageInput()}checkAutocomplete(e,t,s){if(void 0===e){const i=Pa(this.messageInputField.input,!0);e=i.value,t=i.caretPos,s=i.entities}if(-1===t&&(t=e.length),void 0===s){const t=Z.b.parseMarkdown(e,s,!0);s=Z.b.mergeEntities(s,Z.b.parseEntities(t))}if(e=e.substr(0,t),this.previousQuery===e)return;this.previousQuery=e;const i=e.match(Ua.AUTO_COMPLETE_REG_EXP);let n;if(i){const t=s[0];let o=i[2];const r=o[0];if(this.stickersHelper&&a.default.settings.stickers.suggest&&this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,"send_stickers")&&"messageEntityEmoji"===(null==t?void 0:t._)&&t.length===e.length&&!t.offset)n=this.stickersHelper,this.stickersHelper.checkEmoticon(e);else if("@"===r){const e=this.chat.threadId?this.appMessagesIdsManager.getServerMessageId(this.chat.threadId):void 0;this.mentionsHelper.checkQuery(o,this.chat.peerId>0?0:this.chat.peerId,e)&&(n=this.mentionsHelper)}else i[1]||"/"!==r?a.default.settings.emoji.suggest&&(o=o.replace(/^\s*/,""),e.match(/^\s*:(.+):\s*$/)||e.match(/:[;!@#$%^&*()-=|]/)||!o||(n=this.emojiHelper,this.emojiHelper.checkQuery(o,r))):this.commandsHelper.checkQuery(o,this.chat.peerId)&&(n=this.commandsHelper)}n=this.checkInlineAutocomplete(e,n),this.autocompleteHelperController.hideOtherHelpers(n)}checkInlineAutocomplete(e,t){let s=!1;if(!t){const i=e.match(/^@([a-zA-Z\\d_]{3,32})\s/);if(i){const n=i[1],a=e.slice(i[0].length);s=i[0].length===e.length,t=this.inlineHelper,this.btnPreloader?Object(Xt.a)(this.btnPreloader,"show",!0,400):(this.btnPreloader=N("none btn-preloader float show disable-hover",{noRipple:!0}),Object(se.f)(this.btnPreloader,!0),this.inputMessageContainer.parentElement.insertBefore(this.btnPreloader,this.inputMessageContainer.nextSibling)),this.inlineHelper.checkQuery(this.chat.peerId,n,a).then(({user:e,renderPromise:t})=>{s&&e.bot_inline_placeholder&&(this.messageInput.dataset.inlinePlaceholder=e.bot_inline_placeholder),t.then(()=>{Object(Xt.a)(this.btnPreloader,"show",!1,400)})}).catch(Ae.a)}}return s||delete this.messageInput.dataset.inlinePlaceholder,t!==this.inlineHelper&&this.btnPreloader&&Object(Xt.a)(this.btnPreloader,"show",!1,400),t}clearInput(e=!0,t=!0,s=""){if(document.activeElement===this.messageInput&&h.IS_MOBILE_SAFARI){const e=document.createElement("input");document.body.append(e),Object(ja.a)(e),this.messageInputField.setValueSilently(s),Object(ja.a)(this.messageInput),e.remove()}else this.messageInputField.setValueSilently(s);pe.IS_TOUCH_SUPPORTED||(this.canRedoFromHTML="",this.undoHistory.length=0,this.executedHistory.length=0,this.canUndoFromHTML="");let i=!1;e&&(i=this.setDraft(void 0,!1)),!i&&t&&this.onMessageInput()}isInputEmpty(){return Object(ga.a)(this.messageInput)}updateSendBtn(){let e;const t=this.isInputEmpty();e=this.editMsgId?"edit":!this.recorder||this.recording||!t||this.forwarding?"scheduled"===this.chat.type?"schedule":"send":"record",["send","record","edit","schedule"].forEach(t=>{this.btnSend.classList.toggle(t,e===t)}),this.btnScheduled&&this.btnScheduled.classList.toggle("show",t),this.btnToggleReplyMarkup&&this.btnToggleReplyMarkup.classList.toggle("show",t)}onMessageSent(e=!0,t){"scheduled"!==this.chat.type&&this.appMessagesManager.readAllHistory(this.chat.peerId,this.chat.threadId,!0),this.scheduleDate=void 0,this.sendSilent=void 0;const s=this.messageInputField.value;Z.b.parseEntities(s).filter(e=>"messageEntityEmoji"===e._).forEach(e=>{const t=Object(ne.a)(e.unicode);this.appEmojiManager.pushRecentEmoji(t)}),e&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null,this.clearInput()),(t||e)&&this.clearHelper(),this.updateSendBtn()}sendMessage(e=!1){if("scheduled"===this.chat.type&&!e&&!this.editMsgId)return void this.scheduleSending();const{value:t,entities:s}=Object(ma.a)(this.messageInputField.input);if(this.editMsgId){const e=this.chat.getMessage(this.editMsgId);if(!t.trim()&&!e.media)return void new Bs(this.chat.peerId,[this.editMsgId],this.chat.type);this.appMessagesManager.editMessage(e,t,{entities:s,noWebPage:this.noWebPage})}else this.appMessagesManager.sendText(this.chat.peerId,t,{entities:s,replyToMsgId:this.replyToMsgId,threadId:this.chat.threadId,noWebPage:this.noWebPage,webPage:this.getWebPagePromise?void 0:this.willSendWebPage,scheduleDate:this.scheduleDate,silent:this.sendSilent,clearDraft:!0});if(this.forwarding){const e=Object(L.a)(this.forwarding),t=this.chat.peerId,s=this.sendSilent,i=this.scheduleDate;setTimeout(()=>{for(const n in e)this.appMessagesManager.forwardMessages(t,+n,e[n],{silent:s,scheduleDate:i})},0)}this.onMessageSent()}sendMessageWithDocument(e,t=!1,s=!1){var i;const n="sticker"===(e=this.appDocsManager.getDoc(e)).type?"send_stickers":"gif"===e.type?"send_gifs":"send_media";return this.chat.peerId<0&&!this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,n)?(nt("Posting media content isn't allowed in this group."),!1):"scheduled"!==this.chat.type||t?!!e&&(this.appMessagesManager.sendFile(this.chat.peerId,e,{isMedia:!0,replyToMsgId:this.replyToMsgId,threadId:this.chat.threadId,silent:this.sendSilent,scheduleDate:this.scheduleDate,clearDraft:s||void 0}),this.onMessageSent(s,!0),"sticker"===e.type&&(null===(i=Jn.stickersTab)||void 0===i||i.pushRecentSticker(e)),!0):(this.scheduleSending(()=>this.sendMessageWithDocument(e,!0,s)),!1)}initMessageEditing(e){const t=this.chat.getMessage(e);let s=Z.b.wrapDraftText(t.message,{entities:t.totalEntities});const i=()=>{const n=this.appMessagesManager.wrapMessageForReply(t,void 0,[t.mid]);this.setTopInfo("edit",i,Object(A.i18n)("AccDescrEditing"),n,s,t),this.editMsgId=e,s=void 0};i()}initMessagesForward(e){const t=()=>{const s=Object.keys(e).map(e=>+e),i=new Set;let n=0;s.forEach(t=>{const s=e[t];s.forEach(e=>{var s;const n=this.appMessagesManager.getMessageByPeer(t,e);!(null===(s=n.fwd_from)||void 0===s?void 0:s.from_name)||n.fromId||n.fwdFromId?i.add(n.fromId):i.add(n.fwd_from.from_name)}),n+=s.length});const a=i.size>2,o=[...i].map(e=>"number"==typeof e?new ft.a({peerId:e,dialog:!1,onlyFirstName:a}).element:a?e.split(" ")[0]:e),r=document.createDocumentFragment();let l,c;if(o.length<3?r.append(...Object(A.join)(o,!1)):r.append(o[0],Object(A.i18n)("AndOther",[o.length-1])),1===s.length){const t=s[0],i=e[t];if(l=this.appMessagesManager.getMessageByPeer(t,i[0]),c=!!l.grouped_id,c){const e=this.appMessagesManager.getMidsByMessage(l);(e.length!==n||e.find(e=>!i.includes(e)))&&(c=!1)}}if(c||1===n){const i=e[s[0]],n=this.appMessagesManager.wrapMessageForReply(l,void 0,i);this.setTopInfo("forward",t,r,n)}else this.setTopInfo("forward",t,r,Object(A.i18n)("ForwardedMessageCount",[n]));this.forwarding=e};t()}initMessageReply(e){let t=this.chat.getMessage(e);const s=()=>{let i;"messageEmpty"===t._?(i=Object(A.i18n)("Loading"),this.chat.appMessagesManager.wrapSingleMessage(this.chat.peerId,e).then(()=>{this.replyToMsgId===e&&(t=this.chat.getMessage(e),"messageEmpty"===t._?this.clearHelper("reply"):s())})):i=new ft.a({peerId:t.fromId,dialog:!1}).element,this.setTopInfo("reply",s,i,t&&t.message,void 0,t),this.replyToMsgId=e};s()}clearHelper(e){"edit"===this.helperType&&"edit"!==e&&this.clearInput(),e&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null),this.replyToMsgId=void 0,this.forwarding=void 0,this.editMsgId=void 0,this.helperType=this.helperFunc=void 0,this.chat.container.classList.contains("is-helper-active")&&(B.a.removeByType("input-helper"),this.chat.container.classList.remove("is-helper-active"))}setInputValue(e,t=!0,s=!0){e||(e=""),t?this.clearInput(!1,!1,e):this.messageInputField.setValueSilently(e),Object(_e.b)(()=>{s&&Object(va.a)(this.messageInput),this.onMessageInput(),this.messageInput.scrollTop=this.messageInput.scrollHeight})}setTopInfo(e,t,s="",i="",n,a){"webpage"!==e&&(this.clearHelper(e),this.helperType=e,this.helperFunc=t);const o=this.replyElements.container;"DIV"===o.lastElementChild.tagName&&o.lastElementChild.remove(),o.append(Es(s,i,a)),this.chat.container.classList.add("is-helper-active"),h.IS_MOBILE||B.a.pushItem({type:"input-helper",onPop:()=>{this.onHelperCancel()}}),void 0!==n&&this.setInputValue(n),setTimeout(()=>{this.updateSendBtn()},0)}}Ua.AUTO_COMPLETE_REG_EXP=/(\s|^)((?:(?:@|^\/)\S*)|(?::|^[^:@\/])(?!.*[:@\/]).*)$/;const Na=["is-pinned-message-shown","is-pinned-audio-shown"];class za{constructor(e){this.floating=!1,Object(L.g)(this,e);const{divAndCaption:t,className:s}=this;t.container.classList.add("pinned-container","hide"),t.title.classList.add("pinned-container-title"),t.subtitle.classList.add("pinned-container-subtitle"),t.content.classList.add("pinned-container-content"),this.btnClose=document.createElement("button"),this.btnClose.classList.add("pinned-container-close",`pinned-${s}-close`,"btn-icon","tgico-close"),this.wrapper=document.createElement("div"),this.wrapper.classList.add("pinned-container-wrapper"),Object(ie.ripple)(this.wrapper),this.wrapperUtils=document.createElement("div"),this.wrapperUtils.classList.add("pinned-container-wrapper-utils"),this.wrapperUtils.append(this.btnClose),this.wrapper.append(...Array.from(t.container.children),this.wrapperUtils),t.container.append(this.wrapper),this.attachOnCloseEvent(this.btnClose)}attachOnCloseEvent(e){Object(l.b)(e,e=>{Object(c.a)(e),((this.onClose?this.onClose():null)||Promise.resolve(!0)).then(e=>{e&&this.toggle(!0)})},{listenerSetter:this.listenerSetter})}toggle(e){const t=this.divAndCaption.container.classList.contains("hide");if(void 0===e)e=!t;else if(e===t)return;const s=this.chat.bubbles.scrollable,i=(this.floating||v.b.isMobile)&&!e,n=i||this.divAndCaption.container.classList.contains("is-floating")?s.scrollTop:void 0;this.divAndCaption.container.classList.toggle("is-floating",i),this.divAndCaption.container.classList.toggle("hide",e),this.topbar.container.classList.toggle("is-pinned-floating",i),this.topbar.container.classList.toggle(`is-pinned-${this.className}-shown`,!e);const a=Na.filter(e=>this.topbar.container.classList.contains(e)),o=e?0:1;void 0!==n&&a.length<=o&&(s.scrollTop=n+52*(e?-1:1)),this.topbar.setFloating(),this.topbar.setUtilsWidth()}fill(e,t,s){this.divAndCaption.container.dataset.peerId=""+s.peerId,this.divAndCaption.container.dataset.mid=""+s.mid,this.divAndCaption.fill(e,t,s),this.topbar.setUtilsWidth()}}class Va extends za{constructor(e,t,s){super({topbar:e,chat:t,listenerSetter:e.listenerSetter,className:"audio",divAndCaption:new He("pinned-audio",(e,t)=>{Object(x.a)(this.divAndCaption.title,e),Object(x.a)(this.divAndCaption.subtitle,t)}),onClose:()=>{fe.stop()},floating:!0}),this.topbar=e,this.chat=t,this.appMessagesManager=s,this.divAndCaption.border.remove();const i=N("pprevious active",{noRipple:!0}),n=N("nnext active",{noRipple:!0});i.innerHTML='',n.innerHTML='';const o=(e,t)=>{Object(l.b)(e,e=>{Object(c.a)(e),t()},{listenerSetter:this.topbar.listenerSetter})};o(i,()=>{fe.previous()}),o(n,()=>{fe.next()}),this.toggleEl=N("",{noRipple:!0}),this.toggleEl.classList.add("active","pinned-audio-ico","tgico"),o(this.toggleEl,()=>{fe.toggle()}),this.wrapper.prepend(this.wrapper.firstElementChild,i,this.toggleEl,n),this.volumeSelector=new Te(this.listenerSetter,!0);const r=document.createElement("div");r.classList.add("progress-line-container"),r.append(this.volumeSelector.container);const d=document.createElement("div");d.classList.add("pinned-audio-volume-tunnel"),this.volumeSelector.btn.classList.add("pinned-audio-volume","active"),this.volumeSelector.btn.prepend(d),this.volumeSelector.btn.append(r),this.wrapperUtils.prepend(this.volumeSelector.btn);const h=document.createElement("div");h.classList.add("pinned-audio-progress-wrapper"),this.progressLine=new ke(void 0,void 0,!0,!0),this.progressLine.container.classList.add("pinned-audio-progress"),h.append(this.progressLine.container),this.wrapper.insertBefore(h,this.wrapperUtils),this.topbar.listenerSetter.add(a.default)("media_play",({doc:e,message:t,media:s})=>{let i,n;"voice"===e.type||"round"===e.type?(i=new ft.a({peerId:t.fromId}).element,n=Object(re.c)(t.date)):(i=e.audioTitle||e.fileName,n=e.audioPerformer||Object(A.i18n)("AudioUnknownArtist")),this.progressLine.setMedia(s),this.fill(i,n,t),this.toggleEl.classList.add("flip-icon"),this.toggle(!1)}),this.topbar.listenerSetter.add(a.default)("media_pause",()=>{this.toggleEl.classList.remove("flip-icon")})}}var Wa;!function(e){e[e.ONE=32]="ONE",e[e.TWO=15]="TWO",e[e.THREE=10]="THREE",e[e.FOUR=8]="FOUR",e[e.MORE=8]="MORE"}(Wa||(Wa={}));class Ka{constructor(){this.drawRect=(e,t,s,i,n)=>`M${e},${t+n}a${n},${n},0,0,1,${s},0v${i-2*n}a${n},${n},0,0,1,${-s},0Z`,this.getClipPath=(e,t,s)=>{let i="";if(2===s)i=this.drawRect(0,0,2,t,1)+this.drawRect(0,t+2,2,t,1);else for(let e=0;e{let s;return e<=1?s=Wa.ONE:2===e?s=Wa.TWO:3===e?s=Wa.THREE:4===e?s=Wa.FOUR:e>3&&(s=Wa.MORE),s},this.getMarkHeight=(e,t)=>{let s;return e<=1?s=Wa.ONE:2===e?s=Wa.TWO:3===e?s=Wa.THREE:4===e?s=Wa.FOUR:e>3&&(s=Wa.MORE),s},this.getMarkTranslateY=(e,t,s)=>1===s?0:2===s?e?t+1:0:3===s?e?1===e?t+1:2*t+2+1:0:(t+1)*e,this.getTrackTranslateY=(e,t,s,i)=>t<=4||e<=1?0:e>=t-2?i-Wa.ONE-s:(e-2)*s+1*e,this.getTrackHeight=(e,t)=>e<=3?Wa.ONE:t*e+1*(e-1)}render(e,t){if(this.border||(this.border=document.createElement("div"),this.border.classList.add("pinned-message-border"),this.wrapper=document.createElement("div"),this.border.append(this.wrapper)),1===e)return this.count!==e&&(this.wrapper.className="pinned-message-border-wrapper-1",this.border.classList.remove("pinned-message-border-mask"),this.wrapper.innerHTML=this.wrapper.style.cssText=""),this.border;const s=this.getBarHeight(e,t),i=this.getMarkHeight(e,t),n=this.getTrackHeight(e,s),a="clipPath_"+e,o=this.getClipPath(a,s,e),r=this.getMarkTranslateY(t,s,e),l=this.getTrackTranslateY(t,e,s,n);return this.border.classList.toggle("pinned-message-border-mask",e>4),t<=1?(this.border.classList.add("mask-bottom"),this.border.classList.remove("mask-top")):t>=e-2?(this.border.classList.add("mask-top"),this.border.classList.remove("mask-bottom")):this.border.classList.add("mask-top","mask-bottom"),this.wrapper.className="pinned-message-border-wrapper",this.wrapper.style.cssText=`clip-path: url(#${a}); width: 2px; height: ${n}px; transform: translateY(-${l}px);`,this.svg||(this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttributeNS(null,"height","0"),this.svg.setAttributeNS(null,"width","0"),this.defs=document.createElementNS("http://www.w3.org/2000/svg","defs"),this.defs.append(o),this.svg.append(this.defs),this.mark=document.createElement("div"),this.mark.classList.add("pinned-message-border-mark")),this.svg.parentElement||this.wrapper.append(this.svg,this.mark),this.mark.style.cssText=`height: ${i}px; transform: translateY(${r}px);`,this.count=e,this.index=t,this.border}}var Ga=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class qa{constructor(){this.rows={},this.container=document.createElement("div"),this.container.className=qa.BASE_CLASS}getRow(e,t=!1){if(this.rows[e])return this.rows[e].element;const s=document.createElement("div"),i=!Object.keys(this.rows).length&&!t;return s.className=qa.BASE_CLASS+"-row"+(i?"":" is-hiding hide"),this.rows[e]={element:s,new:!0},this.container.append(s),s}clearRow(e){this.rows[e]&&(this.rows[e].element.remove(),delete this.rows[e])}clearRows(e){this.clearTimeout&&clearTimeout(this.clearTimeout),this.clearTimeout=window.setTimeout(()=>{for(const t in this.rows)+t!==e&&this.clearRow(+t)},qa.DURATION)}setNewRow(e,t=!1){const s=this.rows[e];s.new&&(t?(s.element.classList.remove("hide"),s.element.offsetLeft):s.element.classList.remove("is-hiding","hide"),delete s.new),this.clearRows(e)}animate(e,t,s=e>t,i=!1){if(e===t)return this.setNewRow(e);const n=this.rows[e],a=this.rows[t];if(!a&&!i)return this.setNewRow(e);const o=["from-top","from-bottom"];s||o.reverse(),n.element.classList.add(o[0]),n.element.classList.remove(o[1]),a&&(a.element.classList.add(o[1]),a.element.classList.remove(o[0])),n.new&&this.setNewRow(e,!0),n.element.classList.toggle("is-hiding",!1),a&&a.element.classList.toggle("is-hiding",!0),this.clearRows(e)}}qa.DURATION=200,qa.BASE_CLASS="animated-super";class Qa{constructor(e=!1){this.reverse=e,this.decimals=[],this.previousNumber=0,this.container=document.createElement("div"),this.container.className=Qa.BASE_CLASS}getDecimal(e){if(this.decimals[e])return this.decimals[e];const t=document.createElement("div");t.className=Qa.BASE_CLASS+"-decimal";const s=document.createElement("div");s.className=Qa.BASE_CLASS+"-decimal-placeholder";const i=new qa;return i.container.className=Qa.BASE_CLASS+"-decimal-wrapper",t.append(s,i.container),this.container.append(t),this.decimals[e]={container:t,placeholder:s,animatedSuper:i}}clear(e){this.clearTimeout&&clearTimeout(this.clearTimeout);const t=(""+e).length;t>=this.decimals.length||(this.clearTimeout=window.setTimeout(()=>{this.decimals.splice(t,this.decimals.length-t).forEach(e=>{e.container.remove()})},qa.DURATION))}hideLeft(e){const t=(""+e).length;this.decimals.slice(t).forEach(t=>{const s=+t.placeholder.innerText||0;t.animatedSuper.getRow(Qa.EMPTY_INDEX,!0);t.animatedSuper.animate(Qa.EMPTY_INDEX,s,this.reverse?ethis.previousNumber,!0)}),this.clear(e)}setCount(e){const t=Array.from(""+this.previousNumber).map(e=>+e);Array.from(""+e).map(e=>+e).forEach((s,i)=>{var n;const a=this.getDecimal(i),o=a.animatedSuper.getRow(s,!0),r=null!==(n=t[i])&&void 0!==n?n:Qa.EMPTY_INDEX;o.innerText=a.placeholder.innerText=""+s,a.animatedSuper.animate(s,r,this.reverse?ethis.previousNumber,!0)}),this.hideLeft(e),this.previousNumber=e}}Qa.EMPTY_INDEX=-1,Qa.BASE_CLASS="animated-counter";class $a{constructor(e,t,s,i){this.topbar=e,this.chat=t,this.appMessagesManager=s,this.appPeersManager=i,this.pinnedMaxMid=0,this.pinnedMid=0,this.pinnedIndex=-1,this.wasPinnedIndex=0,this.wasPinnedMediaIndex=0,this.locked=!1,this.waitForScrollBottom=!1,this.count=0,this.mids=[],this.offsetIndex=0,this.loading=!1,this.loadedBottom=!1,this.loadedTop=!1,this.scrollDownListenerSetter=null,this.hidden=!1,this.getCurrentIndexPromise=null,this.isStatic=!1,this.debug=!1,this.listenerSetter=new H.a;const n=new Ne("pinned-message");this.pinnedMessageContainer=new za({topbar:e,chat:t,listenerSetter:this.listenerSetter,className:"message",divAndCaption:n,onClose:()=>Ga(this,void 0,void 0,(function*(){return i.canPinMessage(this.topbar.peerId)?new aa(this.topbar.peerId,this.pinnedMid,!0):new aa(this.topbar.peerId,0,!0),!1}))}),this.pinnedMessageBorder=new Ka,n.border.replaceWith(this.pinnedMessageBorder.render(1,0)),this.animatedSubtitle=new qa,n.subtitle.append(this.animatedSubtitle.container),this.animatedMedia=new qa,this.animatedMedia.container.classList.add("pinned-message-media-container"),n.content.prepend(this.animatedMedia.container),this.animatedCounter=new Qa(!0),n.title.append(Object(A.i18n)("PinnedMessage")," ",this.animatedCounter.container);const o=this.pinnedMessageContainer.btnClose.cloneNode(!0);this.pinnedMessageContainer.attachOnCloseEvent(o),n.container.prepend(o),this.btnOpen=N("pinlist pinned-container-close pinned-message-pinlist",{noRipple:!0}),this.pinnedMessageContainer.wrapperUtils.prepend(this.btnOpen),Object(l.b)(this.btnOpen,e=>{Object(c.a)(e),this.topbar.openPinned(!0)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("peer_pinned_messages",({peerId:e})=>{e===this.topbar.peerId&&(this.hidden&&this.pinnedMessageContainer.toggle(this.hidden=!1),this.loadedTop=this.loadedBottom=!1,this.pinnedIndex=-1,this.pinnedMid=0,this.count=0,this.mids=[],this.offsetIndex=0,this.pinnedMaxMid=0,this.setCorrectIndex(0))}),this.listenerSetter.add(a.default)("peer_pinned_hidden",({peerId:e})=>{e===this.topbar.peerId&&this.pinnedMessageContainer.toggle(this.hidden=!0)}),this.setPinnedMessage=ot(()=>this._setPinnedMessage(),100,!0,!0),this.isStatic="discussion"===this.chat.type}destroy(){this.pinnedMessageContainer.divAndCaption.container.remove(),this.pinnedMessageContainer.toggle(!0),this.listenerSetter.removeAll(),this.unsetScrollDownListener(!1)}setCorrectIndex(e){if(this.isStatic)return;if(this.locked||this.hidden)return;if((this.loadedBottom||this.loadedTop)&&!this.count)return;let t=this.chat.bubbles.getBubbleByPoint("bottom");if(!t)return;const s=t.dataset.mid;t&&void 0!==s&&this.testMid(+s,e)}testMid(e,t){if(this.isStatic)return;if(this.hidden)return;let s=this.mids.findIndex(t=>t<=e);if(-1===s||this.isNeededMore(s)){if(!(this.loadedTop&&es))return;this.pinnedIndex=s,this.pinnedMid=this.mids.find(t=>t<=e)||this.mids[this.mids.length-1],this.setPinnedMessage()}}isNeededMore(e){return this.count>$a.LOAD_COUNT&&(!this.loadedBottom&&e<=$a.LOAD_OFFSET||!this.loadedTop&&this.count-1-e<=$a.LOAD_OFFSET)}getCurrentIndex(e,t=!0){return Ga(this,void 0,void 0,(function*(){if(!this.loading){this.loading=!0;try{let s=!1;const i=[this.appMessagesManager.getSearch({peerId:this.topbar.peerId,inputFilter:{_:"inputMessagesFilterPinned"},maxId:e,limit:$a.LOAD_COUNT,backLimit:$a.LOAD_COUNT}).then(e=>(s=!0,e))];if(!this.pinnedMaxMid){const e=this.appMessagesManager.getPinnedMessage(this.topbar.peerId).then(e=>{e.maxId&&(this.pinnedMaxMid=e.maxId,!s&&t&&(this.mids=[this.pinnedMaxMid],this.count=e.count,this.pinnedIndex=0,this.pinnedMid=this.mids[0],this.setPinnedMessage()))});i.push(e)}const n=(yield Promise.all(i))[0];let a=n.history.findIndex(t=>t.mid<=e);-1===a&&(a=n.history.length),this.offsetIndex=n.offset_id_offset?n.offset_id_offset-a:0,this.mids=n.history.map(e=>e.mid).slice(),this.count=n.count,this.count||this.pinnedMessageContainer.toggle(!0),this.loadedTop=this.offsetIndex+this.mids.length===this.count,this.loadedBottom=!this.offsetIndex,this.debug&&this.chat.log("[PM]: getCurrentIndex result:",e,n,a,this.offsetIndex,this.loadedTop,this.loadedBottom)}catch(e){this.chat.log.error("[PM]: getCurrentIndex error",e)}this.loading=!1,this.locked?this.testMid(e):t&&this.setCorrectIndex(0),this.getCurrentIndexPromise=null}}))}setScrollDownListener(){this.waitForScrollBottom=!0,this.scrollDownListenerSetter||(this.scrollDownListenerSetter=new H.a,function(e,t,s,i){if(pe.IS_TOUCH_SUPPORTED){let n;const a={passive:!0};i.add(e)("touchstart",t=>{t.touches.length>1?r():(n=t.touches[0].clientY,i.add(e)("touchmove",o,a),i.add(e)("touchend",r,a))},a);const o=e=>{const i=e.touches[0].clientY,a=i{i.removeManual(e,"touchmove",o,a),i.removeManual(e,"touchend",r,a)}}else i.add(e)("wheel",e=>{const i=e.deltaY>0;"bottom"===t&&i?s():"top"!==t||i||s()},{passive:!0})}(this.chat.bubbles.scrollable.container,"bottom",()=>{this.unsetScrollDownListener()},this.scrollDownListenerSetter))}unsetScrollDownListener(e=!0){this.waitForScrollBottom=!1,this.scrollDownListenerSetter&&(this.scrollDownListenerSetter.removeAll(),this.scrollDownListenerSetter=null),e&&this.setCorrectIndex(0)}handleFollowingPinnedMessage(){return Ga(this,void 0,void 0,(function*(){this.locked=!0,this.debug&&this.chat.log("[PM]: handleFollowingPinnedMessage");try{this.setScrollDownListener();const e=this.chat.setPeerPromise;e instanceof Promise&&(yield e),yield Object(Cs.c)(),this.getCurrentIndexPromise&&(yield this.getCurrentIndexPromise),this.debug&&this.chat.log("[PM]: handleFollowingPinnedMessage: unlock"),this.locked=!1}catch(e){this.chat.log.error("[PM]: handleFollowingPinnedMessage error:",e),this.locked=!1,this.waitForScrollBottom=!1,this.setCorrectIndex(0)}}))}followPinnedMessage(e){return Ga(this,void 0,void 0,(function*(){const t=this.chat.getMessage(e);t&&!t.deleted&&(this.chat.setMessageId(e),(this.chat.setPeerPromise||Promise.resolve()).then(()=>{this.handleFollowingPinnedMessage(),this.testMid(this.pinnedIndex>=this.count-1?this.pinnedMaxMid:e-1)}))}))}_setPinnedMessage(){return Ga(this,void 0,void 0,(function*(){const e=this.count;if(e){const t=this.pinnedIndex,s=this.chat.getMessage(this.pinnedMid),i=0===t;this.animatedCounter.container.classList.toggle("is-last",i),i||this.animatedCounter.setCount(e-t),this.pinnedMessageContainer.toggle(!1);const n=t>this.wasPinnedIndex;this.debug&&this.chat.log("[PM]: setPinnedMessage: fromTop",n,t,this.wasPinnedIndex);const a=this.animatedSubtitle.getRow(t),o=this.animatedMedia.getRow(t);o.classList.add("pinned-message-media");const r=[],l=Ue({title:void 0,titleEl:null,subtitle:s.message,subtitleEl:a,message:s,mediaEl:o,loadPromises:r});yield Promise.all(r),this.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-media",l),this.animatedSubtitle.animate(t,this.wasPinnedIndex),l?(this.animatedMedia.animate(t,this.wasPinnedMediaIndex),this.wasPinnedMediaIndex=t):this.animatedMedia.clearRows(),this.pinnedMessageBorder.render(e,e-t-1),this.wasPinnedIndex=t,this.pinnedMessageContainer.divAndCaption.container.dataset.mid=""+s.mid}else this.pinnedMessageContainer.toggle(!0),this.wasPinnedIndex=0;this.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-many",this.count>1)}))}}$a.LOAD_COUNT=50,$a.LOAD_OFFSET=5;class Ya{constructor(e,t,s,i,n,a,o,r){this.chat=e,this.appSidebarRight=t,this.appMessagesManager=s,this.appPeersManager=i,this.appChatsManager=n,this.appNotificationsManager=a,this.appProfileManager=o,this.appUsersManager=r,this.menuButtons=[],this.onResize=()=>{this.setUtilsWidth(!0),this.setFloating()},this.onChangeScreen=(e,t)=>{this.container.classList.toggle("is-pinned-floating",v.b.isMobile),this.pinnedMessage&&this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-floating",t===v.a.mobile),this.onResize()},this.setUtilsWidth=(e=!1)=>{this.setUtilsRAF&&window.cancelAnimationFrame(this.setUtilsRAF),h.IS_SAFARI&&e&&this.chatUtils.classList.add("hide"),this.setUtilsRAF=window.requestAnimationFrame(()=>{h.IS_SAFARI&&e&&this.chatUtils.classList.remove("hide");const t=this.chatUtils.getBoundingClientRect().width;this.chat.log("utils width:",t),this.chatInfo.style.setProperty("--utils-width",t+"px"),this.setUtilsRAF=0})},this.setFloating=()=>{const e=[this.chatAudio,this.pinnedMessage&&this.pinnedMessage.pinnedMessageContainer].filter(Boolean).reduce((e,t)=>{const s=t.divAndCaption.container.classList.contains("is-floating");return this.container.classList.toggle(`is-pinned-${t.className}-floating`,s),e+ +s},0);this.container.dataset.floating=""+e},this.setPeerStatus=(e=!1)=>{if(!this.subtitle)return;const t=this.peerId;this.chat.appImManager.setPeerStatus(this.peerId,this.subtitle,e,!1,()=>t===this.peerId)},this.listenerSetter=new H.a}construct(){this.container=document.createElement("div"),this.container.classList.add("sidebar-header","topbar"),this.container.dataset.floating="0",this.btnBack=N("left sidebar-close-button",{noRipple:!0}),this.chatInfo=document.createElement("div"),this.chatInfo.classList.add("chat-info");const e=document.createElement("div");e.classList.add("person");const t=document.createElement("div");t.classList.add("content");const s=document.createElement("div");s.classList.add("top"),this.title=document.createElement("div"),this.title.classList.add("user-title"),s.append(this.title);const i=document.createElement("div");i.classList.add("bottom"),this.subtitle&&i.append(this.subtitle),t.append(s,i),this.avatarElement&&e.append(this.avatarElement),e.append(t),this.chatInfo.append(e),this.chatUtils=document.createElement("div"),this.chatUtils.classList.add("chat-utils"),this.chatAudio=new Va(this,this.chat,this.appMessagesManager),this.menuButtons.length&&(this.btnMore=Ie({listenerSetter:this.listenerSetter},"bottom-left",this.menuButtons,e=>{Object(c.a)(e),this.menuButtons.forEach(e=>{e.element.classList.toggle("hide",!e.verify())}),this.menuButtons[this.menuButtons.length-1].element.lastChild.replaceWith(Object(A.i18n)(this.appPeersManager.getDeleteButtonText(this.peerId)))})),this.chatUtils.append(...[this.pinnedMessage?this.pinnedMessage.pinnedMessageContainer.divAndCaption.container:null,this.btnJoin,this.btnPinned,this.btnMute,this.btnSearch,this.btnMore].filter(Boolean)),this.container.append(this.btnBack,this.chatInfo,this.chatUtils),this.chatAudio&&this.container.append(this.chatAudio.divAndCaption.container,this.chatUtils),this.listenerSetter.add(window)("resize",this.onResize),this.listenerSetter.add(v.b)("changeScreen",this.onChangeScreen),Object(l.b)(this.container,e=>{const t=Object(Ce.a)(e.target,"pinned-container");if(Object(Us.a)(),t){if(Object(c.a)(e),Object(Ce.a)(e.target,"progress-line"))return;const s=+t.dataset.mid,i=+t.dataset.peerId;if(t.classList.contains("pinned-message"))this.pinnedMessage.followPinnedMessage(s);else{const e=fe.getSearchContext();this.chat.appImManager.setInnerPeer(i,s,e.isScheduled?"scheduled":e.threadId?"discussion":void 0,e.threadId)}}else v.b.activeScreen===v.a.medium&&document.body.classList.contains("is-left-column-shown")?n():Object(mt.a)(e.target,"AVATAR-ELEMENT")?this.appSidebarRight.toggleSidebar(!document.body.classList.contains("is-right-column-shown")):this.appSidebarRight.toggleSidebar(!0)},{listenerSetter:this.listenerSetter});const n=e=>{if(e&&Object(c.a)(e),v.b.activeScreen===v.a.medium&&document.body.classList.contains("is-left-column-shown"))this.chat.appImManager.setPeer(this.peerId);else{const e=0===this.chat.appImManager.chats.indexOf(this.chat);B.a.back(e?"im":"chat")}};Object(l.b)(this.btnBack,n,{listenerSetter:this.listenerSetter})}constructUtils(){this.menuButtons=[{icon:"search",text:"Search",onClick:()=>{this.chat.initSearch()},verify:()=>v.b.isMobile},{icon:"mute",text:"ChatList.Context.Mute",onClick:()=>{this.appMessagesManager.mutePeer(this.peerId)},verify:()=>"chat"===this.chat.type&&a.default.myId!==this.peerId&&!this.appNotificationsManager.isPeerLocalMuted(this.peerId,!1)},{icon:"unmute",text:"ChatList.Context.Unmute",onClick:()=>{this.appMessagesManager.mutePeer(this.peerId)},verify:()=>"chat"===this.chat.type&&a.default.myId!==this.peerId&&this.appNotificationsManager.isPeerLocalMuted(this.peerId,!1)},{icon:"comments",text:"ViewDiscussion",onClick:()=>{this.appProfileManager.getChannelFull(-this.peerId).then(e=>{e.linked_chat_id&&this.chat.appImManager.setInnerPeer(-e.linked_chat_id)})},verify:()=>{var e;const t=this.appProfileManager.chatsFull[-this.peerId];return"chat"===this.chat.type&&this.appPeersManager.isBroadcast(this.peerId)&&!!(null===(e=t)||void 0===e?void 0:e.linked_chat_id)}},{icon:"select",text:"Chat.Menu.SelectMessages",onClick:()=>{const e=this.chat.selection;e.toggleSelection(!0,!0),k.default.getState().then(t=>{if(t.chatContextMenuHintWasShown)return;const s=e.toggleByElement.bind(e);e.toggleByElement=t=>{k.default.pushToState("chatContextMenuHintWasShown",!0),nt(Object(A.i18n)("Chat.Menu.Hint")),e.toggleByElement=s,e.toggleByElement(t)}})},verify:()=>!this.chat.selection.isSelecting&&!!Object.keys(this.chat.bubbles.bubbles).length},{icon:"select",text:"Chat.Menu.ClearSelection",onClick:()=>{this.chat.selection.cancelSelection()},verify:()=>this.chat.selection.isSelecting},{icon:"adduser",text:"AddContact",onClick:()=>{if(!this.appSidebarRight.isTabExists(Ft)){const e=new Ft(this.appSidebarRight);e.peerId=this.peerId,e.open(),this.appSidebarRight.toggleSidebar(!0)}},verify:()=>this.peerId>0&&!this.appUsersManager.isContact(this.peerId)},{icon:"forward",text:"ShareContact",onClick:()=>{const e=this.peerId;new It({peerTypes:["dialogs","contacts"],onSelect:t=>new Promise((s,i)=>{new ht("",{titleLangKey:"SendMessageTitle",descriptionLangKey:"SendContactToGroupText",descriptionLangArgs:[new ft.a({peerId:t,dialog:!0}).element],buttons:[{langKey:"Send",callback:()=>{s(),this.appMessagesManager.sendOther(t,this.appUsersManager.getContactMediaInput(e)),this.chat.appImManager.setInnerPeer(t)}},{langKey:"Cancel",callback:()=>{i()},isCancel:!0}],peerId:t,overlayClosable:!0}).show()}),placeholder:"ShareModal.Search.Placeholder",chatRightsAction:"send_messages",selfPresence:"ChatYourSelf"})},verify:()=>a.default.myId!==this.peerId&&this.peerId>0&&this.appUsersManager.isContact(this.peerId)},{icon:"lock",text:"BlockUser",onClick:()=>{new ht("",{peerId:this.peerId,titleLangKey:"BlockUser",descriptionLangKey:"AreYouSureBlockContact2",descriptionLangArgs:[new ft.a({peerId:this.peerId}).element],buttons:[{langKey:"BlockUser",isDanger:!0,callback:()=>{this.appUsersManager.toggleBlock(this.peerId,!0).then(e=>{e&&at({langPackKey:"UserBlocked"})})}}]}).show()},verify:()=>{var e;const t=this.appProfileManager.usersFull[this.peerId];return this.peerId>0&&this.peerId!==a.default.myId&&t&&!(null===(e=t.pFlags)||void 0===e?void 0:e.blocked)}},{icon:"lockoff",text:"Unblock",onClick:()=>{this.appUsersManager.toggleBlock(this.peerId,!1).then(e=>{e&&at({langPackKey:"UserUnblocked"})})},verify:()=>{var e;const t=this.appProfileManager.usersFull[this.peerId];return this.peerId>0&&!!(null===(e=null==t?void 0:t.pFlags)||void 0===e?void 0:e.blocked)}},{icon:"delete danger",text:"Delete",onClick:()=>{new xt(this.peerId)},verify:()=>"chat"===this.chat.type&&!!this.appMessagesManager.getDialogOnly(this.peerId)}],this.btnSearch=N("search"),Object(l.b)(this.btnSearch,e=>{Object(c.a)(e),this.chat.initSearch()},{listenerSetter:this.listenerSetter})}constructPeerHelpers(){return this.avatarElement=new ko,this.avatarElement.setAttribute("dialog","1"),this.avatarElement.classList.add("avatar-42","person-avatar"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("info"),this.pinnedMessage=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager),this.btnJoin=Object(U.a)("btn-primary btn-color-primary chat-join hide"),this.btnPinned=N("pinlist"),this.btnMute=N("mute"),Object(l.b)(this.btnPinned,e=>{Object(c.a)(e),Object(Us.a)(),this.openPinned(!0)},{listenerSetter:this.listenerSetter}),Object(l.b)(this.btnMute,e=>{Object(c.a)(e),Object(Us.a)(),this.appMessagesManager.mutePeer(this.peerId)},{listenerSetter:this.listenerSetter}),Object(l.b)(this.btnJoin,e=>{Object(c.a)(e),Object(Us.a)();const t=this.chat.bubbles.getMiddleware();this.btnJoin.setAttribute("disabled","true");const s=-this.peerId;let i;i=this.appChatsManager.isChannel(s)?this.appChatsManager.joinChannel(s):this.appChatsManager.addChatUser(s,a.default.myId),i.finally(()=>{t()&&this.btnJoin.removeAttribute("disabled")})},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("chat_update",e=>{var t,s;if(this.peerId===-e){const i=this.appChatsManager.getChat(e);this.btnJoin.classList.toggle("hide",!(null===(s=null===(t=i)||void 0===t?void 0:t.pFlags)||void 0===s?void 0:s.left)),this.setUtilsWidth()}}),this.listenerSetter.add(a.default)("dialog_notify_settings",e=>{e.peerId===this.peerId&&this.setMutedState()}),this.listenerSetter.add(a.default)("peer_typings",({peerId:e})=>{this.peerId===e&&this.setPeerStatus()}),this.listenerSetter.add(a.default)("user_update",e=>{this.peerId===e&&this.setPeerStatus()}),this.pinnedMessage&&this.chat.addEventListener("setPeer",(e,t)=>{const s=this.chat.bubbles.getMiddleware();k.default.getState().then(i=>{s()&&(this.pinnedMessage.hidden=!!i.hiddenPinnedMessages[this.chat.peerId],t?(this.pinnedMessage.unsetScrollDownListener(),this.pinnedMessage.testMid(e,0)):this.pinnedMessage.locked||(this.pinnedMessage.handleFollowingPinnedMessage(),this.pinnedMessage.testMid(e)))})}),this.setPeerStatusInterval=window.setInterval(this.setPeerStatus,6e4),this}constructPinnedHelpers(){this.listenerSetter.add(a.default)("peer_pinned_messages",e=>{const{peerId:t,mids:s,pinned:i}=e;t===this.peerId&&s&&this.setTitle()})}constructDiscussionHelpers(){this.pinnedMessage=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager)}openPinned(e){this.chat.appImManager.setInnerPeer(this.peerId,e?+this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.dataset.mid:0,"pinned")}destroy(){this.listenerSetter.removeAll(),window.clearInterval(this.setPeerStatusInterval),this.pinnedMessage&&this.pinnedMessage.destroy(),delete this.chatAudio,delete this.pinnedMessage}setPeer(e){this.wasPeerId=this.peerId,this.peerId=e,this.container.style.display=e?"":"none"}finishPeerChange(e,t,s){var i,n;const a=this.peerId;this.avatarElement&&(this.avatarElement.setAttribute("peer",""+a),this.avatarElement.update());const o=this.appPeersManager.isBroadcast(a);this.btnMute&&this.btnMute.classList.toggle("hide",!o),this.btnJoin&&(Object(x.a)(this.btnJoin,Object(A.i18n)(this.appChatsManager.isChannel(-a)?"Chat.Subscribe":"ChannelJoin")),this.btnJoin.classList.toggle("hide",!(null===(n=null===(i=this.appChatsManager.getChat(-a))||void 0===i?void 0:i.pFlags)||void 0===n?void 0:n.left))),this.setUtilsWidth();const r=this.chat.bubbles.getMiddleware();if(this.pinnedMessage)if("chat"===this.chat.type){if(void 0!==this.wasPeerId){const e=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager);this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.replaceWith(e.pinnedMessageContainer.divAndCaption.container),this.pinnedMessage.destroy(),this.pinnedMessage=e}k.default.getState().then(t=>{r()&&(this.pinnedMessage.hidden=!!t.hiddenPinnedMessages[a],e||this.pinnedMessage.setCorrectIndex(0))})}else"discussion"===this.chat.type&&(this.pinnedMessage.pinnedMid=this.chat.threadId,this.pinnedMessage.count=1,this.pinnedMessage.pinnedIndex=0,this.pinnedMessage._setPinnedMessage());Object(_e.b)(()=>{this.setTitle(),this.setPeerStatus(!0),this.setMutedState()})}setTitle(e){var t;let s;if("pinned"===this.chat.type?(s=void 0===e?Object(A.i18n)("Loading"):Object(A.i18n)("PinnedMessagesCount",[e]),void 0===e&&this.appMessagesManager.getSearchCounters(this.peerId,[{_:"inputMessagesFilterPinned"}],!1).then(e=>{const t=e[0].count;if(this.setTitle(t),!t){this.chat.appImManager.setPeer(0);const e=this.chat.appImManager.chat;e.topbar.pinnedMessage&&e.topbar.pinnedMessage.pinnedMessageContainer.toggle(!0)}})):"scheduled"===this.chat.type?(s=this.peerId===a.default.myId?Object(A.i18n)("Reminders"):Object(A.i18n)("ScheduledMessages"),void 0===e&&this.appMessagesManager.getScheduledMessages(this.peerId).then(e=>{this.setTitle(e.length)})):"discussion"===this.chat.type?(s=void 0===e?Object(A.i18n)("Loading"):Object(A.i18n)("Chat.Title.Comments",[e]),void 0===e&&Promise.all([this.appMessagesManager.getHistory(this.peerId,0,1,0,this.chat.threadId),Promise.resolve()]).then(()=>{const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId).count;null===e?setTimeout(()=>{this.setTitle()},30):this.setTitle(e)})):"chat"===this.chat.type&&(s=new ft.a({peerId:this.peerId,dialog:!0}).element),Object(x.a)(this.title,s),"chat"===this.chat.type){const e=this.appPeersManager.getPeer(this.peerId);(null===(t=null==e?void 0:e.pFlags)||void 0===t?void 0:t.verified)&&this.title.append(Bt())}}setMutedState(){if(!this.btnMute)return;const e=this.peerId;let t=this.appNotificationsManager.isPeerLocalMuted(e,!1);this.appPeersManager.isBroadcast(e)?(this.btnMute.classList.remove("tgico-mute","tgico-unmute"),this.btnMute.classList.add(t?"tgico-unmute":"tgico-mute"),this.btnMute.style.display=""):this.btnMute.style.display="none"}}class Xa extends V{constructor(){super(...arguments),this.peerId=0,this.threadId=0,this.query=""}onOpenAfterTimeout(){this.appSearch.beginSearch(this.peerId,this.threadId,this.query)}init(){this.container.id="search-private-container",this.container.classList.add("chatlist-container"),this.inputSearch=new j("Search"),this.title.replaceWith(this.inputSearch.container),this.btnPickDate=N("calendar sidebar-header-right"),this.header.append(this.btnPickDate);const e=document.createElement("div");e.classList.add("chatlist-container"),this.scrollable.container.replaceWith(e),this.appSearch=new _(e,this.inputSearch,{messages:new O("Chat.Search.PrivateSearch","messages")})}open(e,t,s,i){const n=super.open();return this.peerId?this.appSearch.beginSearch(this.peerId,this.threadId,i):(this.query=i,this.peerId=e,this.threadId=t,this.onDatePick=s,this.btnPickDate.classList.toggle("hide",!this.onDatePick),this.onDatePick&&Object(l.b)(this.btnPickDate,()=>{new dn(new Date,this.onDatePick).show()}),i&&this.appSearch.searchInput.inputField.setValueSilently(i),$t.toggleSidebar(!0)),n}}class Ja{constructor(e,t,s){this.topbar=e,this.chat=t,this.query=s,this.foundCount=0,this.selectedIndex=0,this.onDateClick=e=>{Object(c.a)(e),new dn(new Date,this.chat.bubbles.onDatePick).show()},this.selectResult=e=>{if(this.setPeerPromise)return this.setPeerPromise;const t=+e.dataset.peerId,s=+e.dataset.mid||void 0,i=Object(Ts.a)(e);i===this.foundCount-1?this.upBtn.setAttribute("disabled","true"):this.upBtn.removeAttribute("disabled"),i?this.downBtn.removeAttribute("disabled"):this.downBtn.setAttribute("disabled","true"),this.results.classList.remove("active"),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active");const n=this.chat.setPeer(t,s);this.setPeerPromise=(n instanceof Promise?n:Promise.resolve(n)).then(()=>{this.selectedIndex=i,Object(x.a)(this.foundCountEl,Object(A.i18n)("Of",[i+1,this.foundCount]));const e=this.searchGroup.list.childElementCount;this.selectedIndex>=e-6&&this.appSearch.searchMore()}).finally(()=>{this.setPeerPromise=null})},this.onResultsClick=e=>{const t=Object(mt.a)(e.target,"LI");t&&this.selectResult(t)},this.onFooterClick=e=>{this.foundCount&&(this.chat.bubbles.bubblesContainer.classList.toggle("search-results-active"),this.results.classList.toggle("active"))},this.onUpClick=e=>{Object(c.a)(e),this.selectResult(this.searchGroup.list.children[this.selectedIndex+1])},this.onDownClick=e=>{Object(c.a)(e),this.selectResult(this.searchGroup.list.children[this.selectedIndex-1])},this.element=document.createElement("div"),this.element.classList.add("sidebar-header","chat-search","chatlist-container"),this.backBtn=document.createElement("button"),this.backBtn.classList.add("btn-icon","tgico-left","sidebar-close-button"),Object(ie.ripple)(this.backBtn),this.backBtn.addEventListener("click",()=>{this.topbar.container.classList.remove("hide-pinned"),this.element.remove(),this.inputSearch.remove(),this.results.remove(),this.footer.remove(),this.footer.removeEventListener("click",this.onFooterClick),this.dateBtn.removeEventListener("click",this.onDateClick),this.upBtn.removeEventListener("click",this.onUpClick),this.downBtn.removeEventListener("click",this.onDownClick),this.searchGroup.list.removeEventListener("click",this.onResultsClick),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active")},{once:!0}),this.inputSearch=new j("Search"),this.results=document.createElement("div"),this.results.classList.add("chat-search-results","chatlist-container"),this.searchGroup=new O(!1,"messages",void 0,"",!1),this.searchGroup.list.addEventListener("click",this.onResultsClick),this.appSearch=new _(this.results,this.inputSearch,{messages:this.searchGroup},e=>{this.foundCount=e,this.foundCount?this.selectResult(this.searchGroup.list.children[0]):(this.foundCountEl.replaceWith(this.inputSearch.value?Object(A.i18n)("NoResult"):""),this.results.classList.remove("active"),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active"),this.upBtn.setAttribute("disabled","true"),this.downBtn.setAttribute("disabled","true"))}),this.appSearch.beginSearch(this.chat.peerId,this.chat.threadId),this.chat.bubbles.bubblesContainer.append(this.results),this.footer=document.createElement("div"),this.footer.classList.add("chat-search-footer"),this.footer.addEventListener("click",this.onFooterClick),Object(ie.ripple)(this.footer),this.foundCountEl=document.createElement("span"),this.foundCountEl.classList.add("chat-search-count"),this.dateBtn=document.createElement("button"),this.dateBtn.classList.add("btn-icon","tgico-calendar"),this.controls=document.createElement("div"),this.controls.classList.add("chat-search-controls"),this.upBtn=document.createElement("button"),this.upBtn.classList.add("btn-icon","tgico-up"),this.downBtn=document.createElement("button"),this.downBtn.classList.add("btn-icon","tgico-down"),this.upBtn.setAttribute("disabled","true"),this.downBtn.setAttribute("disabled","true"),this.dateBtn.addEventListener("click",this.onDateClick),this.upBtn.addEventListener("click",this.onUpClick),this.downBtn.addEventListener("click",this.onDownClick),this.controls.append(this.upBtn,this.downBtn),this.footer.append(this.foundCountEl,this.dateBtn,this.controls),this.topbar.container.parentElement.insertBefore(this.footer,t.input.chatInput),this.element.append(this.backBtn,this.inputSearch.container),this.topbar.container.classList.add("hide-pinned"),this.topbar.container.parentElement.append(this.element),this.inputSearch.input.focus(),s&&(this.inputSearch.inputField.value=s)}}class Za extends R.a{constructor(e,t,s,i,n,a,o,r,l,c,d,h,u,p,m,g,b,v,f){super(),this.appImManager=e,this.appChatsManager=t,this.appDocsManager=s,this.appInlineBotsManager=i,this.appMessagesManager=n,this.appPeersManager=a,this.appPhotosManager=o,this.appProfileManager=r,this.appStickersManager=l,this.appUsersManager=c,this.appWebPagesManager=d,this.appPollsManager=h,this.apiManager=u,this.appDraftsManager=p,this.serverTimeManager=m,this.storage=g,this.appNotificationsManager=b,this.appEmojiManager=v,this.appMessagesIdsManager=f,this.wasAlreadyUsed=!1,this.peerId=0,this.type="chat",this.inited=!1,this.container=document.createElement("div"),this.container.classList.add("chat","tabs-tab"),this.backgroundEl=document.createElement("div"),this.backgroundEl.classList.add("chat-background"),this.log=Object(J.b)("CHAT",J.a.Log|J.a.Warn|J.a.Debug|J.a.Error),this.container.append(this.backgroundEl),this.appImManager.chatsContainer.append(this.container)}setBackground(e){const t=a.default.getTheme();let s;if("color"===t.background.type&&"grabbing"===document.documentElement.style.cursor){const e=this.backgroundEl.lastElementChild;e&&e.dataset.type===t.background.type&&(s=e)}return s||(s=document.createElement("div"),s.classList.add("chat-background-item"),s.dataset.type=t.background.type),"color"===t.background.type&&(s.style.backgroundColor=t.background.color,s.style.backgroundImage="none"),new Promise(t=>{const i=()=>{const e=this.backgroundEl.lastElementChild;e!==s?(this.backgroundEl.append(s),Object(_e.b)(()=>{Object(_e.b)(()=>{Object(Xt.a)(s,"is-visible",!0,200,e?()=>{e.remove()}:null)})}),t()):t()};e?Object(Rt.a)(s,e,i):i()})}setType(e){this.type=e,"scheduled"===this.type&&(this.getMessagesStorage=()=>this.appMessagesManager.getScheduledMessagesStorage(this.peerId))}init(){this.topbar=new Ya(this,$t,this.appMessagesManager,this.appPeersManager,this.appChatsManager,this.appNotificationsManager,this.appProfileManager,this.appUsersManager),this.bubbles=new ia(this,this.appMessagesManager,this.appStickersManager,this.appUsersManager,this.appInlineBotsManager,this.appPhotosManager,this.appPeersManager,this.appProfileManager,this.appDraftsManager,this.appMessagesIdsManager),this.input=new Ua(this,this.appMessagesManager,this.appMessagesIdsManager,this.appDocsManager,this.appChatsManager,this.appPeersManager,this.appWebPagesManager,this.appImManager,this.appDraftsManager,this.serverTimeManager,this.appNotificationsManager,this.appEmojiManager,this.appUsersManager,this.appInlineBotsManager),this.selection=new Gs(this,this.bubbles,this.input,this.appMessagesManager),this.contextMenu=new ca(this.bubbles.bubblesContainer,this,this.appMessagesManager,this.appPeersManager,this.appPollsManager,this.appDocsManager,this.appMessagesIdsManager),"chat"===this.type?(this.topbar.constructUtils(),this.topbar.constructPeerHelpers()):"pinned"===this.type?this.topbar.constructPinnedHelpers():"discussion"===this.type&&(this.topbar.constructUtils(),this.topbar.constructDiscussionHelpers()),this.topbar.construct(),this.input.construct(),"chat"===this.type?(this.bubbles.constructPeerHelpers(),this.input.constructPeerHelpers()):"pinned"===this.type?(this.bubbles.constructPinnedHelpers(),this.input.constructPinnedHelpers()):"scheduled"===this.type?(this.bubbles.constructScheduledHelpers(),this.input.constructPeerHelpers()):"discussion"===this.type&&(this.bubbles.constructPeerHelpers(),this.input.constructPeerHelpers()),this.container.classList.add("type-"+this.type),this.container.append(this.topbar.container,this.bubbles.bubblesContainer,this.input.chatInput),this.bubbles.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{this.peerId===e&&this.setPeer(t)}),this.bubbles.listenerSetter.add(a.default)("dialog_drop",e=>{e.peerId===this.peerId&&this.appImManager.setPeer(0)})}beforeDestroy(){this.bubbles.cleanup()}destroy(){this.topbar.destroy(),this.bubbles.destroy(),this.input.destroy(),delete this.topbar,delete this.bubbles,delete this.input,delete this.selection,delete this.contextMenu,this.container.remove()}cleanup(e=!0){this.input.cleanup(e),this.selection.cleanup()}setPeer(e,t){e?this.inited||(this.init&&(this.init(),this.init=null),this.inited=!0):this.inited=!1;const s=this.peerId===e;if(s){if(this.setPeerPromise)return}else a.default.dispatchEvent("peer_changing",this),this.peerId=e;if(!e)return $t.toggleSidebar(!1),this.cleanup(!0),this.topbar.setPeer(e),this.bubbles.setPeer(e),void a.default.dispatchEvent("peer_changed",e);if(!s){const t=$t.getTab(Xa);t&&t.close(),$t.sharedMediaTab.setPeer(e,this.threadId),this.input.clearHelper(),this.selection.cleanup(),this.setAutoDownloadMedia()}this.peerChanged=s;const i=this.bubbles.setPeer(e,t);if(!i)return;const{promise:n}=i,o=this.setPeerPromise=n.finally(()=>{this.setPeerPromise===o&&(this.setPeerPromise=null)});return s||($t.sharedMediaTab.setLoadMutex(this.setPeerPromise),$t.sharedMediaTab.loadSidebarMedia(!0)),i}setAutoDownloadMedia(){let e;e=this.peerId<0?this.appPeersManager.isBroadcast(this.peerId)?"channels":"groups":this.appUsersManager.isContact(this.peerId)?"contacts":"private",this.noAutoDownloadMedia=!a.default.settings.autoDownload[e]}setMessageId(e){return this.setPeer(this.peerId,e)}finishPeerChange(e,t,s){if(this.peerChanged)return;let i=this.peerId;this.peerChanged=!0,this.cleanup(!1),this.topbar.setPeer(i),this.topbar.finishPeerChange(e,t,s),this.bubbles.finishPeerChange(),this.input.finishPeerChange(),$t.sharedMediaTab.fillProfileElements(),this.log.setPrefix("CHAT-"+i+"-"+this.type),a.default.dispatchEvent("peer_changed",i),this.wasAlreadyUsed=!0}getMessagesStorage(){return this.appMessagesManager.getMessagesStorage(this.peerId)}getMessage(e){return this.appMessagesManager.getMessageFromStorage(this.getMessagesStorage(),e)}getMidsByMid(e){return this.appMessagesManager.getMidsByMessage(this.getMessage(e))}isAnyGroup(){return this.peerId===a.default.myId||this.peerId===gn.b||this.appPeersManager.isAnyGroup(this.peerId)}initSearch(e){if(this.peerId)if(v.b.isMobile)new Ja(this.topbar,this,e);else{let t=$t.getTab(Xa);t||(t=new Xa($t)),t.open(this.peerId,this.threadId,this.bubbles.onDatePick,e)}}}var eo=s(137);class to{constructor(e){this.appImManager=e,this.buttons={},this.addedListener=!1,this.waitingForMouseUp=!1,this.mouseUpCounter=0,this.onMouseUpSingle=e=>{if(this.waitingForMouseUp=!1,pe.IS_TOUCH_SUPPORTED){if(Object(c.a)(e),0!=this.mouseUpCounter++)return void this.hide();this.resetSelection(this.savedRange)}this.show()}}init(){this.container=document.createElement("div"),this.container.classList.add("markup-tooltip","z-depth-1","hide"),this.wrapper=document.createElement("div"),this.wrapper.classList.add("markup-tooltip-wrapper");const e=document.createElement("div"),t=document.createElement("div");e.classList.add("markup-tooltip-tools"),t.classList.add("markup-tooltip-tools");["bold","italic","underline","strikethrough","monospace","link"].forEach(t=>{const s=N(t,{noRipple:!0});e.append(this.buttons[t]=s),"link"!==t?s.addEventListener("mousedown",e=>{Object(c.a)(e),this.appImManager.chat.input.applyMarkdown(t),this.cancelClosening()}):Object(l.b)(s,e=>{Object(c.a)(e),this.showLinkEditor(),this.cancelClosening()})}),this.linkBackButton=N("left",{noRipple:!0}),this.linkInput=document.createElement("input"),Object(A._i18n)(this.linkInput,"MarkupTooltip.LinkPlaceholder",void 0,"placeholder"),this.linkInput.classList.add("input-clear"),this.linkInput.addEventListener("keydown",e=>{const t=!this.linkInput.value.length||!!Z.b.matchUrl(this.linkInput.value);"Enter"===e.code&&(t?this.applyLink(e):(this.linkInput.classList.contains("error")&&(this.linkInput.classList.remove("error"),this.linkInput.offsetLeft),this.linkInput.classList.add("error")))}),this.linkInput.addEventListener("input",e=>{const t=this.isLinkValid();this.linkInput.classList.toggle("is-valid",t),this.linkInput.classList.remove("error")}),this.linkBackButton.addEventListener("mousedown",e=>{Object(c.a)(e),this.container.classList.remove("is-link"),this.resetSelection(),this.setTooltipPosition(),this.cancelClosening()}),this.linkApplyButton=N("check markup-tooltip-link-apply",{noRipple:!0}),this.linkApplyButton.addEventListener("mousedown",e=>{this.applyLink(e)});const s=document.createElement("div");s.classList.add("markup-tooltip-link-apply-container");const i=document.createElement("span"),n=document.createElement("span"),a=document.createElement("span");i.classList.add("markup-tooltip-delimiter"),n.classList.add("markup-tooltip-delimiter"),a.classList.add("markup-tooltip-delimiter"),e.insertBefore(i,this.buttons.link),s.append(a,this.linkApplyButton),t.append(this.linkBackButton,n,this.linkInput,s),this.wrapper.append(e,t),this.container.append(this.wrapper),document.body.append(this.container),window.addEventListener("resize",()=>{this.hide()})}showLinkEditor(){this.container&&this.container.classList.contains("is-visible")||this.show();const e=this.buttons.link;this.container.classList.add("is-link");const t=document.getSelection();if(this.savedRange=t.getRangeAt(0),e.classList.contains("active")){const e=this.savedRange.startContainer.parentElement;this.linkInput.value=e.href}else this.linkInput.value="";this.setTooltipPosition(!0),setTimeout(()=>{this.linkInput.focus()},200),this.linkInput.classList.toggle("is-valid",this.isLinkValid())}applyLink(e){Object(c.a)(e),this.resetSelection();let t=this.linkInput.value;t&&!Z.b.matchUrlProtocol(t)&&(t="https://"+t),this.appImManager.chat.input.applyMarkdown("link",t),setTimeout(()=>{this.hide()},0)}isLinkValid(){return!this.linkInput.value.length||!!Z.b.matchUrl(this.linkInput.value)}resetSelection(e=this.savedRange){const t=window.getSelection();t.removeAllRanges(),t.addRange(e),this.appImManager.chat.input.messageInput.focus()}hide(){this.init||(this.container.classList.remove("is-visible"),document.removeEventListener("mouseup",this.onMouseUpSingle),this.waitingForMouseUp=!1,B.a.removeByType("markup"),this.hideTimeout&&clearTimeout(this.hideTimeout),this.hideTimeout=window.setTimeout(()=>{this.hideTimeout=void 0,this.container.classList.add("hide"),this.container.classList.remove("is-link")},200))}getActiveMarkupButton(){const e=function(){const e=[],t=window.getSelection();for(let s=0;s!!e)}(),t=[...new Set(e.map(e=>e.parentNode))],s=new Set;return t.forEach(e=>{for(const t in Ta.b){const i=Ta.b[t];e.closest(i.match+", [contenteditable]")!==this.appImManager.chat.input.messageInput&&s.add(this.buttons[t])}}),[...s]}setActiveMarkupButton(){const e=this.getActiveMarkupButton();for(const t in this.buttons){const s=this.buttons[t];s.classList.toggle("active",e.includes(s))}}setTooltipPosition(e=!1){const t=document.getSelection().getRangeAt(0),s=document.body.getBoundingClientRect(),i=t.getBoundingClientRect(),n=this.appImManager.chat.input.rowsWrapper.getBoundingClientRect();this.container.style.maxWidth=n.width+"px";const a=i.top+-1*s.top,o=(this.container.classList.contains("is-link")?this.wrapper.lastElementChild:this.wrapper.firstElementChild).getBoundingClientRect(),r=a-o.height-8,l=n.left,c=n.left+n.width-Math.min(n.width,o.width);let d;if(e){const e=this.container.getBoundingClientRect();d=Object(C.a)(e.left,l,c)}else{const e=i.left+(i.width-o.width)/2;d=Object(C.a)(e,l,c)}this.container.style.transform=`translate3d(${d}px, ${r}px, 0)`}show(){if(this.init&&(this.init(),this.init=null),oa())return void this.hide();if(void 0!==this.hideTimeout&&clearTimeout(this.hideTimeout),this.container.classList.contains("is-visible"))return;this.setActiveMarkupButton(),this.container.classList.remove("is-link");const e=this.container.classList.contains("hide");e&&(this.container.classList.remove("hide"),this.container.classList.add("no-transition")),this.setTooltipPosition(),e&&(this.container.offsetLeft,this.container.classList.remove("no-transition")),this.container.classList.add("is-visible"),h.IS_MOBILE||B.a.pushItem({type:"markup",onPop:()=>{this.hide()}})}setMouseUpEvent(){this.waitingForMouseUp||(this.waitingForMouseUp=!0,document.addEventListener("mouseup",this.onMouseUpSingle,{once:!0}))}cancelClosening(){pe.IS_TOUCH_SUPPORTED&&!h.IS_APPLE&&(document.removeEventListener("mouseup",this.onMouseUpSingle),document.addEventListener("mouseup",e=>{Object(c.a)(e),this.mouseUpCounter=1,this.waitingForMouseUp=!1,this.setMouseUpEvent()},{once:!0}))}handleSelection(){this.addedListener||(this.addedListener=!0,document.addEventListener("selectionchange",e=>{if(document.activeElement===this.linkInput)return;if(document.activeElement!==this.appImManager.chat.input.messageInput)return void this.hide();const t=document.getSelection();if(oa(t))this.hide();else if(pe.IS_TOUCH_SUPPORTED)if(h.IS_APPLE)this.show(),this.setTooltipPosition();else{if(2===this.mouseUpCounter)return void(this.mouseUpCounter=0);this.savedRange=t.getRangeAt(0),this.setMouseUpEvent()}else this.setMouseUpEvent()}))}}function so(e,t,s,i,n,a,o){return[e,",",t," ",s," ",i,",",n," ",a,",",o].join("")}function io(e,t,s,i,n,a,o,r){const l=[];return l.push("M"+(e+s/2)+","+t),l.push("H"+(e+s-a)),a>0&&l.push("A"+so(a,a,0,0,1,e+s,t+a)),l.push("V"+(t+i-o)),o>0&&l.push("A"+so(o,o,0,0,1,e+s-o,t+i)),l.push("H"+(e+r)),r>0&&l.push("A"+so(r,r,0,0,1,e+0,t+i-r)),l.push("V"+(t+n)),n>0&&l.push("A"+so(n,n,0,0,1,e+n,t+0)),l.push("Z"),l.join(" ")}de.a.generatePathData=io;class no{constructor(e,t){this.options=t,this.onDragOver=e=>{this.container.classList.add("is-dragover")},this.onDragLeave=e=>{this.container.classList.remove("is-dragover")},this.onDrop=e=>{this.options.onDrop(e)},this.container=document.createElement("div"),this.container.classList.add("drop","z-depth-1"),this.outlineWrapper=document.createElement("div"),this.outlineWrapper.classList.add("drop-outline-wrapper"),this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.classList.add("drop-outline"),this.path=document.createElementNS("http://www.w3.org/2000/svg","path"),this.path.classList.add("drop-outline-path");const s=document.createElement("div");s.classList.add("drop-icon","tgico-"+t.icon);const i=document.createElement("div");i.classList.add("drop-header"),i.append(Object(A.i18n)(t.header));const n=document.createElement("div");n.classList.add("drop-subtitle"),n.append(Object(A.i18n)(t.subtitle)),this.svg.append(this.path),this.outlineWrapper.append(this.svg),this.container.append(this.outlineWrapper,s,i,n),e.append(this.container),this.container.addEventListener("dragover",this.onDragOver),this.container.addEventListener("dragleave",this.onDragLeave),this.container.addEventListener("drop",this.onDrop)}destroy(){delete this.options,this.container.remove(),this.container.removeEventListener("dragover",this.onDragOver),this.container.removeEventListener("dragleave",this.onDragLeave),this.container.removeEventListener("drop",this.onDrop)}setPath(){const e=this.outlineWrapper.getBoundingClientRect();this.svg.setAttributeNS(null,"preserveAspectRatio","none"),this.svg.setAttributeNS(null,"viewBox",`0 0 ${e.width} ${e.height}`),this.svg.setAttributeNS(null,"width",""+e.width),this.svg.setAttributeNS(null,"height",""+e.height);const t=io(5,5,e.width-10,e.height-10,10,10,10,10);this.path.setAttributeNS(null,"d",t)}}function ao(e){e.forEach(e=>e.classList.add("no-transition")),Object(_e.a)().then(()=>{e.forEach(e=>e.classList.remove("no-transition"))})}var oo,ro=s(132);class lo extends ct.b{constructor(e,t){super("popup-join-chat-invite",Object(ct.a)([{langKey:t.pFlags.broadcast?"JoinByPeekChannelTitle":"JoinByPeekGroupTitle",callback:()=>{rt.a.invokeApi("messages.importChatInvite",{hash:e}).then(e=>{Xs.a.processUpdateMessage(e);const t=-e.chats[0].id;a.default.dispatchEvent("history_focus",{peerId:t})})}}]),{closable:!0,overlayClosable:!0,body:!0}),this.header.remove();const s=new ko;s.setAttribute("dialog","0"),s.classList.add("avatar-100"),"photo"===t.photo._?(t.photo=r.a.savePhoto(t.photo),ys({container:s,message:null,photo:t.photo,boxHeight:100,boxWidth:100,withoutPreloader:!0}),s.style.width=s.style.height=""):d.a.putPhoto(s,-0,!1,t.title);const i=document.createElement("div");i.classList.add("chat-title"),i.innerHTML=Z.b.wrapEmojiText(t.title);const n=t.pFlags.broadcast,o=Object(A.i18n)(n?"Subscribers":"Members",[t.participants_count]);o.classList.add("chat-participants-count"),this.body.append(s,i,o)}}!function(e){e[e.MESSAGE=0]="MESSAGE",e[e.PRIVATE_POST=1]="PRIVATE_POST",e[e.STICKER_SET=2]="STICKER_SET",e[e.JOIN_CHAT=3]="JOIN_CHAT"}(oo||(oo={}));var co=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ho="chat",uo=pe.IS_TOUCH_SUPPORTED?"touchstart":"mousemove";const po=new class{constructor(){this.columnEl=document.getElementById("column-center"),this.offline=!1,this.updateStatusInterval=0,this.setPeerPromise=null,this.tabId=-1,this.chats=[],this.backgroundPromises={},this.onHashChange=()=>{const e=location.hash,t=e.split("?"),s=this.parseUriParams(e,t);if(this.log("hashchange",e,t[0],s),s.tgaddr){B.a.replaceState();const{onclick:e}=Z.b.wrapUrl(s.tgaddr);if(e){const t=document.createElement("a");t.href=s.tgaddr,window[e](t)}}else switch(t[0]){case"#/im":{const e=s.p;let t=void 0!==s.post?f.a.generateMessageId(+s.post):void 0;switch(e[0]){case"@":this.openUsername(e,t);break;default:this.setInnerPeer(t?-+e:+e,t)}}}},this.setSettings=()=>{document.documentElement.style.setProperty("--messages-text-size",a.default.settings.messagesTextSize+"px"),document.body.classList.toggle("animation-level-0",!a.default.settings.animationsEnabled),document.body.classList.toggle("animation-level-1",!1),document.body.classList.toggle("animation-level-2",a.default.settings.animationsEnabled),this.chatsSelectTabDebounced=ot(()=>{const e=this.chat.topbar;e.pinnedMessage&&e.pinnedMessage.setCorrectIndex(0),rt.a.setQueueId(this.chat.bubbles.lazyLoadQueue.queueId)},a.default.settings.animationsEnabled?250:0,!1,!0),le.b.setLoop(a.default.settings.stickers.loop),I.a.checkAnimations(!1);for(const e of this.chats)e.setAutoDownloadMedia()},this.onDocumentPaste=(e,t)=>{if(this.canDrag()){if(e instanceof DragEvent){const t=e.dataTransfer.types;(t.contains?t.contains("Files"):t.indexOf("Files")>=0)&&Object(c.a)(e)}Object(me.c)(e).then(e=>{if(e.length){e.find(e=>!g.has(e.type))&&(t="document");const s=this.chat.input;s.willAttachType=t||(g.has(e[0].type)?"media":"document"),new fa(this.chat,e,s.willAttachType)}})}},Xs.a.attach(),_t.a.start(),this.log=Object(J.b)("IM",J.a.Log|J.a.Warn|J.a.Debug|J.a.Error),this.selectTab(0),window.addEventListener("blur",()=>{I.a.checkAnimations(!0),this.offline=a.default.idle.isIDLE=!0,this.updateStatus(),clearInterval(this.updateStatusInterval),a.default.dispatchEvent("idle",a.default.idle.isIDLE),window.addEventListener("focus",()=>{this.offline=a.default.idle.isIDLE=!1,this.updateStatus(),this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4),I.a.checkAnimations(!1),a.default.dispatchEvent("idle",a.default.idle.isIDLE)},{once:!0})}),window.addEventListener(uo,()=>{this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4),this.updateStatus(),this.offline=a.default.idle.isIDLE=!1,a.default.dispatchEvent("idle",a.default.idle.isIDLE)},{once:!0,passive:!0}),this.chatsContainer=document.createElement("div"),this.chatsContainer.classList.add("chats-container","tabs-container"),this.chatsContainer.dataset.animation="navigation",this.columnEl.append(this.chatsContainer),this.createNewChat(),this.chatsSelectTab(this.chat.container),B.a.onHashChange=this.onHashChange,this.setSettings(),a.default.addEventListener("settings_updated",this.setSettings),Object(Cs.a)(()=>{I.a.setOnlyOnePlayableGroup("lock"),I.a.checkAnimations(!0)},()=>{I.a.setOnlyOnePlayableGroup(""),I.a.checkAnimations(!1)}),this.applyCurrentTheme(),v.b.addEventListener("changeScreen",(e,t)=>{document.body.classList.contains("is-left-column-shown")&&document.body.classList.contains("is-right-column-shown")&&$t.toggleSidebar(!1)}),a.default.addEventListener("history_focus",e=>{let{peerId:t,threadId:s,mid:i}=e;s&&(s=f.a.generateMessageId(s)),i&&(i=f.a.generateMessageId(i)),this.setInnerPeer(t,i,s?"discussion":void 0,s)}),a.default.addEventListener("peer_changing",e=>{this.saveChatPosition(e)}),a.default.addEventListener("theme_change",()=>{this.applyCurrentTheme()}),a.default.addEventListener("instance_deactivated",()=>{const e=new ct.b("popup-instance-deactivated",void 0,{overlayClosable:!0}),t=document.createElement("div");t.classList.add("instance-deactivated-container"),e.container.replaceWith(t);const s=document.createElement("div");s.classList.add("header"),s.append(Object(A.i18n)("Deactivated.Title"));const i=document.createElement("div");i.classList.add("subtitle"),i.append(Object(A.i18n)("Deactivated.Subtitle")),t.append(s,i),document.body.classList.add("deactivated"),e.onClose=()=>{document.body.classList.add("deactivated-backwards"),ro.a.activateInstance(),setTimeout(()=>{document.body.classList.remove("deactivated","deactivated-backwards")},333)},e.show()}),Sn.a.get("chatPositions").then(e=>{Sn.a.setToCache("chatPositions",e||{})}),ro.a.activateInstance(),this.addAnchorListener({name:"showMaskedAlert",callback:(e,t)=>{const s=t.href,i=t.cloneNode(!0);i.className="anchor-url",i.innerText=s,i.removeAttribute("onclick"),new ht("popup-masked-url",{titleLangKey:"OpenUrlTitle",descriptionLangKey:"OpenUrlAlert2",descriptionLangArgs:[i],buttons:[{langKey:"Open",callback:()=>{i.click()}}]}).show()}}),this.addAnchorListener({name:"execBotCommand",callback:({uriParams:e})=>{const{command:t,bot:s}=e;i.a.sendText(this.chat.peerId,"/"+t+(s?"@"+s:""))}}),this.addAnchorListener({name:"searchByHashtag",callback:({uriParams:e})=>{const{hashtag:t}=e;t&&this.chat.initSearch("#"+t+" ")}}),this.addAnchorListener({name:"addstickers",callback:({pathnameParams:e})=>{const t={_:oo.STICKER_SET,set:e[1]};this.processInternalLink(t)}}),this.addAnchorListener({name:"joinchat",callback:({pathnameParams:e})=>{const t={_:oo.JOIN_CHAT,invite:e[1]};this.processInternalLink(t)}}),this.addAnchorListener({name:"im",callback:({pathnameParams:e,uriParams:t})=>co(this,void 0,void 0,(function*(){let s;s="c"===e[0]?{_:oo.PRIVATE_POST,channel:e[1],post:e[2],thread:"thread"in t?t.thread:void 0,comment:t.comment}:{_:oo.MESSAGE,domain:e[0],post:e[1],comment:t.comment},this.processInternalLink(s)}))}),this.addAnchorListener({name:"resolve",protocol:"tg",callback:({uriParams:e})=>{let t;"telegrampassport"===e.domain||(t=this.makeLink(oo.MESSAGE,e)),this.processInternalLink(t)}}),this.addAnchorListener({name:"privatepost",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.PRIVATE_POST,e);this.processInternalLink(t)}}),this.addAnchorListener({name:"addstickers",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.STICKER_SET,e);this.processInternalLink(t)}}),this.addAnchorListener({name:"joinchat",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.JOIN_CHAT,e);this.processInternalLink(t)}}),this.onHashChange(),this.attachKeydownListener()}get myId(){return a.default.myId}get chat(){return this.chats[this.chats.length-1]}attachKeydownListener(){const e=new Set(["PageUp","PageDown","Meta","Control"]);document.body.addEventListener("keydown",t=>{if(a.default.isOverlayActive||e.has(t.key))return;const s=t.target,n=this.chat;if("KeyC"!==t.code||!t.ctrlKey&&!t.metaKey||"INPUT"===s.tagName){if(!t.altKey||"ArrowUp"!==t.code&&"ArrowDown"!==t.code){if("ArrowUp"===t.code){if(n.input.editMsgId||!n.input.isInputEmpty())return;{const e=i.a.getHistoryStorage(n.peerId,n.threadId).history.slice;if(e.isEnd(bn.a.Bottom)&&e.length){let s;for(const t of e){const e=n.getMessage(t);if((this.myId===n.peerId?e.fromId===this.myId:e.pFlags.out)&&i.a.canEditMessage(n.getMessage(t),"text")){s=t;break}}s&&(n.input.initMessageEditing(s),Object(c.a)(t))}}}else if("ArrowDown"===t.code)return}else{const e=i.a.dialogsStorage.getFolder(a.default.filterId,!0);let s;if(a.default.peerId){const i=e.findIndex(e=>e.peerId===a.default.peerId);if(-1!==i){s=e["ArrowUp"===t.code?i-1:i+1]}}else"ArrowDown"===t.code&&(s=e[0]);s&&this.setPeer(s.peerId)}!n.input.messageInput||t.target===n.input.messageInput||"INPUT"===s.tagName||s.hasAttribute("contenteditable")||pe.IS_TOUCH_SUPPORTED||v.b.isMobile&&1!==this.tabId||this.chat.selection.isSelecting||this.chat.input.recording||(n.input.messageInput.focus(),Object(va.a)(n.input.messageInput))}})}makeLink(e,t){return Object.assign({_:e},t)}processInternalLink(e){return co(this,void 0,void 0,(function*(){switch(null==e?void 0:e._){case oo.MESSAGE:{const t=e.post?f.a.generateMessageId(+e.post):void 0,s=e.comment?f.a.generateMessageId(+e.comment):void 0;this.openUsername(e.domain,t,void 0,s);break}case oo.PRIVATE_POST:{const t=-+e.channel;if(G.a.getChat(-t).deleted)try{yield G.a.resolveChannel(-t)}catch(e){throw at({langPackKey:"LinkNotFound"}),e}const s=f.a.generateMessageId(+e.post),i=e.thread?f.a.generateMessageId(+e.thread):void 0;i?this.openThread(t,s,i):this.setInnerPeer(t,s);break}case oo.STICKER_SET:new Di({id:e.set}).show();break;case oo.JOIN_CHAT:rt.a.invokeApi("messages.checkChatInvite",{hash:e.invite}).then(t=>{t.chat&&G.a.saveApiChat(t.chat,!0),"chatInviteAlready"!==t._&&"chatInvitePeek"!==t._?new lo(e.invite,t).show():this.setInnerPeer(-t.chat.id)},e=>{"INVITE_HASH_EXPIRED"===e.type&&nt(Object(A.i18n)("InviteExpired"))});break;default:this.log.warn("Not supported internal link:",e)}}))}addAnchorListener(e){window[(e.protocol?e.protocol+"_":"")+e.name]=t=>{Object(c.a)(null);const s=t.href;let i,n;e.noPathnameParams||(i=new URL(t.href).pathname.split("/").slice(1)),e.noUriParams||(n=this.parseUriParams(s));const a=e.callback({pathnameParams:i,uriParams:n},t);return void 0===a&&a}}parseUriParams(e,t=e.split("?")){const s={};return t[1]?(t[1].split("&").forEach(e=>{s[e.split("=")[0]]=decodeURIComponent(e.split("=")[1])}),s):s}openUsername(e,t,s,i){return T.a.resolveUsername(e).then(e=>{const n="user"===e._?e.id:-e.id;return s?this.openThread(n,t,s):i?this.openComment(n,t,i):this.setInnerPeer(n,t)},e=>{"USERNAME_NOT_OCCUPIED"===e.type?at({langPackKey:"NoUsernameFound"}):"USERNAME_INVALID"===e.type&&at({langPackKey:"Alert.UserDoesntExists"})})}openThread(e,t,s){return i.a.wrapSingleMessage(e,s).then(()=>{const n=i.a.getMessageByPeer(e,s);return i.a.generateThreadServiceStartMessage(n),this.setInnerPeer(e,t,"discussion",s)})}openComment(e,t,s){return i.a.getDiscussionMessage(e,t).then(e=>this.openThread(e.peerId,s,e.mid))}setCurrentBackground(e=!1){const t=a.default.getTheme();if("image"===t.background.type||"default"===t.background.type&&t.background.slug){const s=k.AppStateManager.STATE_INIT.settings.themes.find(e=>e.name===t.name);if(!(t.background.blur===s.background.blur&&t.background.slug===s.background.slug))return this.getBackground(t.background.slug).then(t=>this.setBackground(t,e),()=>(t.background=Object(L.a)(s.background),this.setBackground("",!0)))}return this.setBackground("",e)}getBackground(e){return this.backgroundPromises[e]?this.backgroundPromises[e]:this.backgroundPromises[e]=he.a.cacheStorage.getFile("backgrounds/"+e).then(e=>URL.createObjectURL(e))}setBackground(e,t=!0){const s=this.chats.map(t=>t.setBackground(e));return s[s.length-1].then(()=>{t&&a.default.dispatchEvent("background_change")})}saveChatPosition(e){if(!["chat","discussion"].includes(e.type)||!e.peerId)return;const t=e.bubbles,s=t.scrollable.scrollTop,i=e.peerId+(e.threadId?"_"+e.threadId:""),n=Sn.a.getFromCache("chatPositions");if(t.scrollable.getDistanceToEnd()<=16&&t.scrollable.loadedAll.bottom||!Object.keys(t.bubbles).length)delete n[i],this.log("deleted chat position");else{const e={mids:Object(L.e)(t.bubbles,"desc"),top:s};n[i]=e,this.log("saved chat position:",e)}Sn.a.set({chatPositions:n},!0)}getChatSavedPosition(e){if(!["chat","discussion"].includes(e.type)||!e.peerId)return;const t=e.peerId+(e.threadId?"_"+e.threadId:""),s=Sn.a.getFromCache("chatPositions");return s&&s[t]}applyHighlightningColor(){let e;const t=a.default.getTheme();t.background.highlightningColor?(e=t.background.highlightningColor,document.documentElement.style.setProperty("--message-highlightning-color",e)):document.documentElement.style.removeProperty("--message-highlightning-color"),!pe.IS_TOUCH_SUPPORTED&&e&&(a.default.themeColor=function(e){return Ti(e).slice(0,-2)}(e))}applyCurrentTheme(e,t,s){return this.applyHighlightningColor(),a.default.setTheme(),t&&(this.backgroundPromises[e]=Promise.resolve(t)),this.setCurrentBackground(void 0===s?!!e:s)}chatsSelectTab(e,t){if(this.prevTab!==e){if(!1===t&&this.prevTab&&ao([e,this.prevTab].filter(Boolean)),this.prevTab){this.prevTab.classList.remove("active"),this.chatsSelectTabDebounced(),a.default.settings.animationsEnabled&&!1!==t&&Object(Cs.b)(Object(yn.a)(400),400);const s=Object(Ts.a)(this.prevTab);Object(Ts.a)(e)>s&&B.a.pushItem({type:"chat",onPop:e=>{this.setPeer(0,void 0,e),Object(Us.a)()}})}e.classList.add("active"),this.prevTab=e}}init(){document.addEventListener("paste",this.onDocumentPaste,!0),pe.IS_TOUCH_SUPPORTED||this.attachDragAndDropListeners(),this.markupTooltip=new to(this),this.markupTooltip.handleSelection()}attachDragAndDropListeners(){const e=[];let t=!1;const s=(a,o)=>co(this,void 0,void 0,(function*(){if(o===t)return;const r=a.dataTransfer.types,l=r.contains?r.contains("Files"):r.indexOf("Files")>=0;if(l&&this.canDrag()){if(o&&!e.length){const t=yield Object(me.c)(a,!0),i=l&&!t.length,o=t.filter(e=>g.has(e)).length,r=t.length-o;this.log("drag files",t),(t.length||i)&&e.push(new no(n,{icon:"dragfiles",header:"Chat.DropTitle",subtitle:"Chat.DropAsFilesDesc",onDrop:e=>{s(e,!1),po.log("drop",e),po.onDocumentPaste(e,"document")}})),(o&&!r||i)&&e.push(new no(n,{icon:"dragmedia",header:"Chat.DropTitle",subtitle:"Chat.DropQuickDesc",onDrop:e=>{s(e,!1),po.log("drop",e),po.onDocumentPaste(e,"media")}})),this.chat.container.append(n)}Object(Xt.a)(n,"is-visible",o,200,()=>{o||(e.forEach(e=>{e.destroy()}),e.length=0)}),o?e.forEach(e=>{e.setPath()}):i=0,document.body.classList.toggle("is-dragging",o),t=o}else i=0}));let i=0;document.body.addEventListener("dragenter",e=>{i++}),document.body.addEventListener("dragover",e=>{s(e,!0),Object(c.a)(e)}),document.body.addEventListener("dragleave",e=>{i--,0===i&&s(e,!1)});const n=document.createElement("div");n.classList.add("drops-container")}canDrag(){var e;const t=null===(e=this.chat)||void 0===e?void 0:e.peerId;return!(!t||a.default.isOverlayActive||!i.a.canSendToPeer(t,this.chat.threadId,"send_media"))}selectTab(e,t){!1===t&&ao([ln.sidebarEl,this.columnEl,$t.sidebarEl]),document.body.classList.toggle("is-left-column-shown",0===e);const s=this.tabId;this.log("selectTab",e,s);let i=a.default.settings.animationsEnabled?Object(_e.a)():Promise.resolve();if(-1!==s&&s!==e&&a.default.settings.animationsEnabled&&!1!==t){const e=100+(v.b.isMobile?250:200);i=Object(yn.a)(e),Object(Cs.b)(i,e)}return this.tabId=e,Object(Us.a)(),v.b.isMobile&&2===s&&e<2&&document.body.classList.remove("is-right-column-shown"),-1!==s&&e>s&&(e<2||!B.a.findItemByType("im"))&&B.a.pushItem({type:"im",onPop:e=>{this.setPeer(0,void 0,e)}}),a.default.dispatchEvent("im_tab_change",e),i}updateStatus(){return this.myId?(T.a.setUserStatus(this.myId,this.offline),rt.a.invokeApiSingle("account.updateStatus",{offline:this.offline})):Promise.resolve()}createNewChat(){const e=new Za(this,G.a,M.a,zn,i.a,o.a,r.a,n.default,hs,T.a,eo.a,$e.a,rt.a,Si.a,Ye.a,Sn.a,_t.a,Cn,f.a);this.chats.length&&e.backgroundEl.append(this.chat.backgroundEl.lastElementChild.cloneNode(!0)),this.chats.push(e)}spliceChats(e,t=!0,s,i){if(!(e>=this.chats.length)){this.chats.length>1&&t&&a.default.dispatchEvent("peer_changing",this.chat),i||(i=this.chats.splice(e,this.chats.length-e));for(let e=0;e1&&i.slice(0,-1).forEach(e=>{e.container.remove()}),this.chatsSelectTab(this.chat.container,s),t){a.default.dispatchEvent("peer_changed",this.chat.peerId);const e=$t.getTab(Xa);e&&e.close();$t.sharedMediaTab.setPeer(this.chat.peerId,this.chat.threadId)&&($t.sharedMediaTab.loadSidebarMedia(!0),$t.sharedMediaTab.fillProfileElements())}i.forEach(e=>{e.beforeDestroy()}),setTimeout(()=>{i.forEach(e=>{e.destroy()})},350)}}setPeer(e,t,s){this.init&&(this.init(),this.init=null);const i=this.chat,n=this.chats.indexOf(i);if(e){if(n>0&&i.peerId&&i.peerId!==e){const s=this.chats.splice(1,this.chats.length-1);if(this.chat.peerId===e)return void this.spliceChats(0,!0,!0,s);{const i=this.setPeer(e,t);return this.spliceChats(0,!1,!1,s),i}}}else{if(n>0)return void this.spliceChats(n,void 0,s);if(v.b.activeScreen===v.a.medium)return void this.selectTab(+!this.tabId,s)}if(e===i.peerId&&v.b.activeScreen<=v.a.medium&&document.body.classList.contains("is-left-column-shown"))return this.selectTab(1,s),!1;if(e||v.b.activeScreen!==v.a.mobile){const n=i.setPeer(e,t),a=(null==n?void 0:n.cached)?n.promise:Promise.resolve();e&&a.then(()=>{setTimeout(()=>{setTimeout(()=>{this.chatsSelectTab(this.chat.container)},0),this.selectTab(1,s)},0)})}return e?void 0:(this.selectTab(0,s),!1)}setInnerPeer(e,t,s="chat",i){const n=this.chats.findIndex(t=>t.peerId===e&&t.type===s);if(-1!==n)return this.spliceChats(n+1),this.setPeer(e,t);return this.chat.inited&&this.createNewChat(),s&&(this.chat.setType(s),i&&(this.chat.threadId=i)),this.setPeer(e,t)}openScheduled(e){this.setInnerPeer(e,void 0,"scheduled")}getTypingElement(e){const t=document.createElement("span");switch(t.classList.add("peer-typing"),t.dataset.action=e._,e._){case"sendMessageTypingAction":{const e="peer-typing-text";t.classList.add(e);for(let s=0;s<3;++s){const s=document.createElement("span");s.className=e+"-dot",t.append(s)}break}case"sendMessageUploadAudioAction":case"sendMessageUploadDocumentAction":case"sendMessageUploadRoundAction":case"sendMessageUploadVideoAction":case"sendMessageUploadPhotoAction":{const e="peer-typing-upload";t.classList.add(e);break}case"sendMessageRecordAudioAction":case"sendMessageRecordRoundAction":case"sendMessageRecordVideoAction":{const e="peer-typing-record";t.classList.add(e);break}}return t}getPeerTyping(e,t){if(!T.a.isBot(e)){const s=n.default.getPeerTypings(e);if(!s||!s.length)return;const i=s[0],a={private:{sendMessageTypingAction:"Peer.Activity.User.TypingText",sendMessageUploadAudioAction:"Peer.Activity.User.SendingFile",sendMessageUploadDocumentAction:"Peer.Activity.User.SendingFile",sendMessageUploadPhotoAction:"Peer.Activity.User.SendingPhoto",sendMessageUploadVideoAction:"Peer.Activity.User.SendingVideo",sendMessageUploadRoundAction:"Peer.Activity.User.SendingVideo",sendMessageRecordVideoAction:"Peer.Activity.User.RecordingVideo",sendMessageRecordAudioAction:"Peer.Activity.User.RecordingAudio",sendMessageRecordRoundAction:"Peer.Activity.User.RecordingVideo",sendMessageGamePlayAction:"Peer.Activity.User.PlayingGame"},chat:{sendMessageTypingAction:"Peer.Activity.Chat.TypingText",sendMessageUploadAudioAction:"Peer.Activity.Chat.SendingFile",sendMessageUploadDocumentAction:"Peer.Activity.Chat.SendingFile",sendMessageUploadPhotoAction:"Peer.Activity.Chat.SendingPhoto",sendMessageUploadVideoAction:"Peer.Activity.Chat.SendingVideo",sendMessageUploadRoundAction:"Peer.Activity.Chat.SendingVideo",sendMessageRecordVideoAction:"Peer.Activity.Chat.RecordingVideo",sendMessageRecordAudioAction:"Peer.Activity.Chat.RecordingAudio",sendMessageRecordRoundAction:"Peer.Activity.Chat.RecordingVideo",sendMessageGamePlayAction:"Peer.Activity.Chat.PlayingGame"},multi:{sendMessageTypingAction:"Peer.Activity.Chat.Multi.TypingText1",sendMessageUploadAudioAction:"Peer.Activity.Chat.Multi.SendingFile1",sendMessageUploadDocumentAction:"Peer.Activity.Chat.Multi.SendingFile1",sendMessageUploadPhotoAction:"Peer.Activity.Chat.Multi.SendingPhoto1",sendMessageUploadVideoAction:"Peer.Activity.Chat.Multi.SendingVideo1",sendMessageUploadRoundAction:"Peer.Activity.Chat.Multi.SendingVideo1",sendMessageRecordVideoAction:"Peer.Activity.Chat.Multi.RecordingVideo1",sendMessageRecordAudioAction:"Peer.Activity.Chat.Multi.RecordingAudio1",sendMessageRecordRoundAction:"Peer.Activity.Chat.Multi.RecordingVideo1",sendMessageGamePlayAction:"Peer.Activity.Chat.Multi.PlayingGame1"}},o=e>0?a.private:s.length>1?a.multi:a.chat;let r=i.action;if(s.length>1){const e={};s.forEach(t=>{const s=t.action._;void 0===e[s]&&(e[s]=0),++e[s]}),Object.keys(e).length>1&&(r={_:"sendMessageTypingAction"})}const l=o[r._];if(!l)return;t||(t=document.createElement("span")).classList.add("online","peer-typing-container");let c,d=t.firstElementChild;d?d.dataset.action!==r._&&d.replaceWith(this.getTypingElement(r)):(d=this.getTypingElement(r),t.prepend(d)),e<0&&(c=[new ft.a({peerId:i.userId,onlyFirstName:!0}).element,s.length-1]);const h=Object(A.i18n)(l,c);return h.classList.add("peer-typing-description"),t.childElementCount>1?t.lastElementChild.replaceWith(h):t.append(h),t}}getPeerStatus(e){var t;return co(this,void 0,void 0,(function*(){let s;if(!e)return"";if(e<0){let t=this.getPeerTyping(e);if(t)return t;const i=yield n.default.getChatFull(-e);this.chat.log("chatInfo res:",i);i.participants_count||i.participants&&i.participants.participants&&i.participants.participants.length;return s=n.default.getChatMembersString(-e),s}{const i=T.a.getUser(e);if(a.default.myId===e)return"";if(i){if(s=T.a.getUserStatusString(i.id),!T.a.isBot(e)){let n=this.getPeerTyping(e);if(n||"userStatusOnline"!==(null===(t=i.status)||void 0===t?void 0:t._)||(n=document.createElement("span"),n.classList.add("online"),n.append(s)),n)return n}return s}}}))}setPeerStatus(e,t,s,i,n){s&&(t.innerHTML=i?"‎":"");const a=t.querySelector(".peer-typing-container");a&&this.getPeerTyping(e,a)||this.getPeerStatus(e).then(e=>{n()&&Object(x.a)(t,e||(i?"‎":""))})}};de.a&&(de.a.appImManager=po);var mo=po;var go=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class bo extends R.a{constructor(e,t){super(!1),this.listLoader=e,this.author={},this.content={},this.buttons={},this.tempId=0,this.preloader=null,this.preloaderStreamable=null,this.isFirstOpen=!0,this.pageEl=document.getElementById("page-chats"),this.zoomElements={},this.zoomSwipeStartX=0,this.zoomSwipeStartY=0,this.zoomSwipeX=0,this.zoomSwipeY=0,this.setZoomValue=(e=this.zoomElements.rangeSelector.value)=>{1===e&&(this.zoomSwipeX=0,this.zoomSwipeY=0),this.moversContainer.style.transform=`matrix(${e}, 0, 0, ${e}, ${this.zoomSwipeX}, ${this.zoomSwipeY})`,this.zoomElements.btnOut.classList.toggle("inactive",.5===e),this.zoomElements.btnIn.classList.toggle("inactive",4===e),this.toggleZoom(1!==e)},this.onClick=e=>{if(this.setMoverAnimationPromise)return;const t=e.target;if("A"===t.tagName)return;if(Object(c.a)(e),pe.IS_TOUCH_SUPPORTED)return this.highlightSwitchersTimeout?clearTimeout(this.highlightSwitchersTimeout):this.wholeDiv.classList.add("highlight-switchers"),void(this.highlightSwitchersTimeout=window.setTimeout(()=>{this.wholeDiv.classList.remove("highlight-switchers"),this.highlightSwitchersTimeout=0},3e3));const s=this.isZooming();let i=null;const n=["ckin__player","media-viewer-buttons","media-viewer-author","media-viewer-caption","zoom-container"];s&&n.push("media-viewer-movers"),n.find(e=>{try{if(i=Object(Ce.a)(t,e),i)return!0}catch(e){return!1}}),i&&(s||"IMG"!==t.tagName&&"image"!==t.tagName)||this.buttons.close.click()},this.onKeyDown=e=>{if(a.default.overlaysActive>1)return;let t=!0;"ArrowRight"===e.key?this.buttons.next.click():"ArrowLeft"===e.key?this.buttons.prev.click():"-"===e.key||"="===e.key?this.ctrlKeyDown&&this.changeZoom("="===e.key):t=!1,(e.ctrlKey||e.metaKey)&&(this.ctrlKeyDown=!0),t&&Object(c.a)(e)},this.onKeyUp=e=>{a.default.overlaysActive>1||e.ctrlKey||e.metaKey||(this.ctrlKeyDown=!1,this.isZooming()&&this.setZoomValue())},this.onWheel=e=>{if(!(a.default.overlaysActive>1||Object(Ce.a)(e.target,"media-viewer-caption")&&!this.ctrlKeyDown)&&(Object(c.a)(e),this.ctrlKeyDown)){const t=e.deltaY<0;this.changeZoom(!!t)}},this.log=Object(J.b)("AMV"),this.preloader=new ye.a,this.preloaderStreamable=new ye.a({cancelable:!1,streamable:!0}),this.preloader.construct(),this.preloaderStreamable.construct(),this.lazyLoadQueue=new te.a,this.wholeDiv=document.createElement("div"),this.wholeDiv.classList.add("media-viewer-whole"),this.overlaysDiv=document.createElement("div"),this.overlaysDiv.classList.add("overlays");const s=document.createElement("div");s.classList.add("media-viewer");const i=this.topbar=document.createElement("div");i.classList.add("media-viewer-topbar","media-viewer-appear");const n=document.createElement("div");n.classList.add("media-viewer-topbar-left"),this.buttons["mobile-close"]=N("close",{onlyMobile:!0}),this.author.container=document.createElement("div"),this.author.container.classList.add("media-viewer-author","no-select");const o=document.createElement("div");this.author.avatarEl=new ko,this.author.avatarEl.classList.add("media-viewer-userpic","avatar-44"),this.author.nameEl=document.createElement("div"),this.author.nameEl.classList.add("media-viewer-name"),this.author.date=document.createElement("div"),this.author.date.classList.add("media-viewer-date"),o.append(this.author.nameEl,this.author.date),this.author.container.append(this.author.avatarEl,o);const r=document.createElement("div");r.classList.add("media-viewer-buttons"),t.concat(["download","zoom","close"]).forEach(e=>{const t=N(e,{noRipple:!0});this.buttons[e]=t,r.append(t)}),this.buttons.zoom.classList.add("zoom-in"),this.zoomElements.container=document.createElement("div"),this.zoomElements.container.classList.add("zoom-container"),this.zoomElements.btnOut=N("zoomout",{noRipple:!0}),this.zoomElements.btnOut.addEventListener("click",()=>this.changeZoom(!1)),this.zoomElements.btnIn=N("zoomin",{noRipple:!0}),this.zoomElements.btnIn.addEventListener("click",()=>this.changeZoom(!0)),this.zoomElements.rangeSelector=new Le({step:.5,min:.5,max:4,withTransition:!0},1),this.zoomElements.rangeSelector.setListeners(),this.zoomElements.rangeSelector.setHandlers({onScrub:this.setZoomValue,onMouseUp:()=>this.setZoomValue()}),this.zoomElements.container.append(this.zoomElements.btnOut,this.zoomElements.rangeSelector.container,this.zoomElements.btnIn),this.wholeDiv.append(this.zoomElements.container),this.content.main=document.createElement("div"),this.content.main.classList.add("media-viewer-content"),this.content.container=document.createElement("div"),this.content.container.classList.add("media-viewer-container"),this.content.media=document.createElement("div"),this.content.media.classList.add("media-viewer-media"),this.content.container.append(this.content.media),this.content.main.append(this.content.container),s.append(this.content.main),this.overlaysDiv.append(s),n.append(this.buttons["mobile-close"],this.author.container),i.append(n,r),this.buttons.prev=document.createElement("div"),this.buttons.prev.className="media-viewer-switcher media-viewer-switcher-left",this.buttons.prev.innerHTML='',this.buttons.next=document.createElement("div"),this.buttons.next.className="media-viewer-switcher media-viewer-switcher-right",this.buttons.next.innerHTML='',this.moversContainer=document.createElement("div"),this.moversContainer.classList.add("media-viewer-movers"),this.wholeDiv.append(this.overlaysDiv,this.buttons.prev,this.buttons.next,this.topbar,this.moversContainer),this.setNewMover()}get target(){return this.listLoader.current}set target(e){this.listLoader.current=e}setListeners(){if(this.buttons.download.addEventListener("click",this.onDownloadClick),[this.buttons.close,this.buttons["mobile-close"],this.preloaderStreamable.preloader].forEach(e=>{e.addEventListener("click",this.close.bind(this))}),[[-1,this.buttons.prev],[1,this.buttons.next]].forEach(([e,t])=>{t.addEventListener("click",t=>{Object(c.a)(t),this.setMoverPromise||this.listLoader.go(e)})}),this.buttons.zoom.addEventListener("click",()=>{this.isZooming()?this.toggleZoom(!1):this.changeZoom(!0)}),this.wholeDiv.addEventListener("click",this.onClick),this.listLoader.onJump=(e,t)=>{t?this.onNextClick(e):this.onPrevClick(e)},pe.IS_TOUCH_SUPPORTED){new zt({element:this.wholeDiv,onSwipe:(e,t)=>{if(Pe.isFullScreen())return;if(Math.abs(e)/yt.a.windowW>.2||e>125)return e<0?this.buttons.prev.click():this.buttons.next.click(),!0;return(Math.abs(t)/yt.a.windowH>.2||t>125)&&(this.buttons.close.click(),!0)},verifyTouchTarget:e=>"INPUT"!==e.target.tagName&&!Object(Ce.a)(e.target,"media-viewer-caption")})}}toggleZoom(e){const t=this.isZooming();if((this.zoomElements.rangeSelector.mousedown||this.ctrlKeyDown)&&(e=!0),t===e)return;void 0===e&&(e=!t),this.buttons.zoom.classList.toggle("zoom-in",!e),this.zoomElements.container.classList.toggle("is-visible",e);const s=e?this.zoomElements.rangeSelector.value:1;if(this.setZoomValue(s),this.zoomElements.rangeSelector.setProgress(s),this.videoPlayer&&this.videoPlayer.lockControls(!e&&void 0),e){if(this.zoomSwipeHandler)this.zoomSwipeHandler.setListeners();else{let e,t;const s=-1;this.zoomSwipeHandler=new zt({element:this.moversContainer,onFirstSwipe:()=>{e=t=0,this.moversContainer.classList.add("no-transition")},onSwipe:(i,n)=>{[i,n]=[i*s,n*s],this.zoomSwipeX+=i-e,this.zoomSwipeY+=n-t,[e,t]=[i,n],this.setZoomValue()},onReset:()=>{this.moversContainer.classList.remove("no-transition")},cursor:"move"})}this.zoomElements.rangeSelector.setProgress(s)}else e||this.zoomSwipeHandler.removeListeners()}changeZoom(e){this.zoomElements.rangeSelector.addProgress(.5*(e?1:-1)),this.setZoomValue()}isZooming(){return this.zoomElements.container.classList.contains("is-visible")}setBtnMenuToggle(e){const t=Ie({onlyMobile:!0},"bottom-left",e);this.topbar.append(t)}close(e){var t;if(e&&Object(c.a)(e),this.setMoverAnimationPromise)return Promise.reject();B.a.removeByType("media"),this.lazyLoadQueue.clear();const s=this.setMoverToTarget(null===(t=this.target)||void 0===t?void 0:t.element,!0).then(({onAnimationEnd:e})=>e);return this.listLoader.reset(),this.listLoader.cleanup&&this.listLoader.cleanup(),this.setMoverPromise=null,this.tempId=-1,window.appMediaViewer=void 0,this.zoomSwipeHandler&&(this.zoomSwipeHandler.removeListeners(),this.zoomSwipeHandler=void 0),window.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("keyup",this.onKeyUp),window.removeEventListener("wheel",this.onWheel,{capture:!0}),s.finally(()=>{this.wholeDiv.remove(),a.default.isOverlayActive=!1,I.a.checkAnimations(!1)}),s}setMoverToTarget(e,t=!1,s=0){return go(this,void 0,void 0,(function*(){this.dispatchEvent("setMoverBefore");const i=this.content.mover;t||(i.innerHTML="");const n=this.isZooming()&&t?this.zoomElements.rangeSelector.value:1;this.removeCenterFromMover(i);const o=0!==s,r=a.default.settings.animationsEnabled?o?350:200:0;let l,c;e&&(e instanceof ko||e.classList.contains("grid-item")?(l=e,c=e.getBoundingClientRect()):e instanceof SVGImageElement||e.parentElement instanceof SVGForeignObjectElement?(l=Object(Ce.a)(e,"attachment"),c=l.getBoundingClientRect()):e.classList.contains("profile-avatars-avatar")&&(l=Object(Ce.a)(e,"profile-avatars-container"),c=l.getBoundingClientRect(),t&&e.getBoundingClientRect().left!==c.left&&(e=l=c=void 0))),e||(e=this.content.media),c||(l=e.parentElement,c=e.getBoundingClientRect());let d=!1;if(e!==this.content.media&&!e.classList.contains("profile-avatars-avatar")){const s=function(e,t){const s=e.getBoundingClientRect(),i=t.getBoundingClientRect();let{top:n,bottom:a}=i;const o=t.querySelector(".sticky");if(o){n=o.getBoundingClientRect().bottom}if(s.top>=a||s.bottom<=n||s.right<=i.left||s.left>=i.right)return null;const r={top:!1,right:!1,bottom:!1,left:!1,vertical:0,horizontal:0},l="visualViewport"in window?window.visualViewport:window,c=(l.width||l.innerWidth,l.height||l.innerHeight);return{rect:{top:s.topa&&a!==c?(r.bottom=!0,++r.vertical,a):s.bottom,left:0},overflow:r}}(l,Object(Ce.a)(l,"scrollable"));!t||s&&2!==s.overflow.vertical&&2!==s.overflow.horizontal?!s||1!==s.overflow.vertical&&1!==s.overflow.horizontal||(d=!0):(l=(e=this.content.media).parentElement,c=e.getBoundingClientRect())}const h=this.content.media.getBoundingClientRect();let u,p,m,g="";if(o?(u=1===s?yt.a.windowW:-h.width,p=h.top):(u=c.left,p=c.top),g+=`translate3d(${u}px,${p}px,0) `,e instanceof HTMLImageElement||e instanceof HTMLVideoElement||"DIV"===e.tagName){if(i.firstElementChild&&i.firstElementChild.classList.contains("media-viewer-aspecter")){m=i.firstElementChild;const e=m.querySelector(".ckin__player");if(e){const t=e.firstElementChild;m.append(t),e.remove()}m.style.cssText||(i.classList.remove("active"),this.setFullAspect(m,h,c),i.offsetLeft,i.classList.add("active"))}else m=document.createElement("div"),m.classList.add("media-viewer-aspecter"),i.prepend(m);m.style.cssText=`width: ${c.width}px; height: ${c.height}px; transform: scale3d(${h.width/c.width}, ${h.height/c.height}, 1);`}i.style.width=h.width+"px",i.style.height=h.height+"px";const b=c.width/h.width,v=c.height/h.height;o||(g+=`scale3d(${b},${v},1) `);let f=window.getComputedStyle(l).getPropertyValue("border-radius");const y=function(e){let t=e.split(" ");if(4!==t.length){t[0]||(t[0]="0px");for(let e=t.length;e<4;++e)t[e]=t[e%2]||t[0]||"0px"}return t}(f);if(f=y.map(e=>parseInt(e)/b+"px").join(" "),o||(i.style.borderRadius=f),t&&1!==n){const e=yt.a.windowW/2-c.width/2,t=yt.a.windowH/2-c.height/2,s=c.left-e,i=c.top-t;this.moversContainer.style.transform=`matrix(${b}, 0, 0, ${v}, ${s}, ${i})`}else i.style.transform=g;let w;d&&(i.style.opacity="0");const L=e.classList.contains("is-out"),S=this.setMoverAnimationPromise=Object(oe.a)(),E={onAnimationEnd:S},M=setTimeout(()=>{S.isFulfilled||S.isRejected||S.resolve()},1e3);if(S.finally(()=>{this.dispatchEvent("setMoverAfter"),this.setMoverAnimationPromise===S&&(this.setMoverAnimationPromise=null),clearTimeout(M)}),t)return e instanceof SVGSVGElement&&(w=i.querySelector("path"),w&&this.sizeTailPath(w,h,b,r,!1,L,f)),e.classList.contains("media-viewer-media")&&i.classList.add("hiding"),this.wholeDiv.classList.add("backwards"),setTimeout(()=>{this.wholeDiv.classList.remove("active")},0),setTimeout(()=>{i.style.borderRadius=f,i.firstElementChild&&(i.firstElementChild.style.borderRadius=f)},r/2),setTimeout(()=>{i.innerHTML="",i.classList.remove("moving","active","hiding"),i.style.cssText="display: none;",S.resolve()},r),i.classList.remove("opening"),E;{let t,s;if(e instanceof HTMLVideoElement){const t=Array.from(e.parentElement.querySelectorAll("img"));t.length&&(e=t.pop())}if("DIV"===e.tagName||"AVATAR-ELEMENT"===e.tagName){const n=Array.from(e.querySelectorAll("img")).pop();n&&(t=new Image,s=n.src,i.append(t))}else if(e instanceof HTMLImageElement)t=new Image,s=e.src;else if(e instanceof HTMLVideoElement)t=document.createElement("video"),t.src=e.src;else if(e instanceof SVGSVGElement){const t=e.dataset.clipId,s=t+"-mv",{width:n,height:a}=h,o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.setAttributeNS(null,"width",""+n),o.setAttributeNS(null,"height",""+a),o.setAttributeNS(null,"viewBox",`0 0 ${n} ${a}`),o.setAttributeNS(null,"preserveAspectRatio","xMidYMid meet"),o.insertAdjacentHTML("beforeend",e.firstElementChild.outerHTML.replace(t,s)),o.insertAdjacentHTML("beforeend",e.lastElementChild.outerHTML.replace(t,s));const r=o.firstElementChild,l=r.firstElementChild.firstElementChild;if(l instanceof SVGUseElement){let e,t=l.getAttributeNS(null,"transform");t=t.replace(/translate\((.+?), (.+?)\) scale\((.+?), (.+?)\)/,(e,t,s,i,o)=>`translate(${t=2!==(t=+t)?n-2/b:2/b}, ${a}) scale(${+i/b}, ${+o/v})`),l.setAttributeNS(null,"transform",t),w=r.firstElementChild.lastElementChild;const s=f.split(" ").map(e=>parseInt(e));e=L?io(0,0,n-9/b,a,...s):io(9/b,0,n-9/b,a,...s),w.setAttributeNS(null,"d",e)}const c=o.lastElementChild;c.setAttributeNS(null,"width",""+h.width),c.setAttributeNS(null,"height",""+h.height),i.prepend(o)}m&&(m.style.borderRadius=f,t&&m.append(t)),t=i.querySelector("video, img"),t instanceof HTMLImageElement&&(t.classList.add("thumbnail"),m||(t.style.width=h.width+"px",t.style.height=h.height+"px"),s&&(yield Object(Rt.b)(t,s))),i.style.display="",Object(_e.b)(()=>{i.classList.add(o?"moving":"active")})}return i.classList.add("opening"),yield Object(_e.a)(),i.style.transform=`translate3d(${h.left}px,${h.top}px,0) scale3d(1,1,1)`,d&&(i.style.opacity=""),m&&this.setFullAspect(m,h,c),setTimeout(()=>{i.style.borderRadius="",i.firstElementChild&&(i.firstElementChild.style.borderRadius="")},0),i.dataset.timeout=""+setTimeout(()=>{i.classList.remove("moving","opening"),m&&(i.querySelector("video"),i.classList.remove("active"),m.style.cssText="",i.offsetLeft),i.classList.add("center","no-transition"),i.classList.add("active"),delete i.dataset.timeout,S.resolve()},r),w&&this.sizeTailPath(w,h,b,r,!0,L,f),E}))}setFullAspect(e,t,s){const i=t.width/t.height;let{width:n,height:a}=s;i>0?n=a*i:a=n*i,e.style.cssText=`width: ${n}px; height: ${a}px; transform: scale3d(${t.width/n}, ${t.height/a}, 1);`}sizeTailPath(e,t,s,i,n,a,o){const r=Date.now(),{width:l,height:c}=t;i/=2;const d=o.split(" ").map(e=>parseInt(e)),h=()=>{const t=Date.now()-r;let o=i?t/i:1;o>1&&(o=1),n&&(o=1-o);const u=d.map(e=>e*o);let p;p=a?io(0,0,l-9/s*o,c,...u):io(9/s*o,0,l,c,...u),e.setAttributeNS(null,"d",p),t{const a=t?-i.width:s;return e.replace(n,a+"px")});e.style.transform=n,setTimeout(()=>{e.remove()},350)}setNewMover(){const e=document.createElement("div");if(e.classList.add("media-viewer-mover"),e.style.display="none",this.content.mover){this.content.mover.parentElement.append(e)}else this.moversContainer.append(e);return this.content.mover=e}updateMediaSource(e,t,s){const i=e.tagName.toLowerCase()===s?e:e.querySelector(s);if(i){if(!e.classList.contains("document-ico")&&Object(Ce.a)(e,"attachment")){const t=e.parentElement.parentElement.querySelector(".preloader-container");if(t){if("video"===s)return void(t.classList.contains("manual")&&t.click());t.remove()}}Object(Rt.a)(i,t),i.classList.contains("thumbnail")&&i.parentElement.classList.contains("media-container-aspecter")&&i.classList.remove("thumbnail")}}setAuthorInfo(e,t){Object(x.a)(this.author.date,Object(re.c)(t)),Object(x.a)(this.author.nameEl,new ft.a({peerId:e,dialog:!1,onlyFirstName:!1,plainText:!1}).element);let s=this.author.avatarEl;this.author.avatarEl=this.author.avatarEl.cloneNode(),this.author.avatarEl.setAttribute("peer",""+(e||a.default.myId)),s.parentElement.replaceChild(this.author.avatarEl,s)}_openMedia(e,t,s,i,n,o=!1,l=[],c=[],d){return go(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;this.setAuthorInfo(s,t);const u="document"===e._,p=u&&e.mime_type&&(["video","gif"].includes(e.type)||0===e.mime_type.indexOf("video/"));this.isFirstOpen&&(this.isFirstOpen=!1,this.listLoader.setTargets(l,c,o),window.appMediaViewer=this),this.buttons.prev.classList.toggle("hide",!this.listLoader.previous.length),this.buttons.next.classList.toggle("hide",!this.listLoader.next.length);const m=this.content.media,g=!n||n===m;g&&(n=m),this.target={element:n};const b=++this.tempId;m.firstElementChild&&(m.innerHTML="");if(0!==i)this.moveTheMover(this.content.mover,1===i),this.setNewMover();else{window.addEventListener("keydown",this.onKeyDown),window.addEventListener("keyup",this.onKeyUp),pe.IS_TOUCH_SUPPORTED||window.addEventListener("wheel",this.onWheel,{passive:!1,capture:!0});const e=document.getElementById("main-columns");this.pageEl.insertBefore(this.wholeDiv,e),this.wholeDiv.offsetLeft,this.wholeDiv.classList.add("active"),a.default.isOverlayActive=!0,I.a.checkAnimations(!0),h.IS_MOBILE_SAFARI||B.a.pushItem({type:"media",onPop:e=>{if(this.setMoverAnimationPromise)return!1;this.close()}})}const f=this.content.mover,y=yt.a.windowW;let w=0;const L=yt.a.windowH;L<1e6&&!v.b.isMobile&&(w=120);const S=L-120-w;let E=Promise.resolve();const C=r.a.setAttachmentSize(e,m,y,S,!v.b.isMobile,void 0,!!(u&&e.w&&e.h)).photoSize;if(g){const t=he.a.getCacheContext(e,C.type);let s;if(t.downloaded)s=new Image,s.src=t.url;else{const i=r.a.getStrippedThumbIfNeeded(e,t,!0);i&&(E=i.loadPromise,s=i.image)}s&&(s.classList.add("thumbnail"),m.append(s))}const k=!(!u||!e.supportsStreaming),T=k?this.preloaderStreamable:this.preloader;let P;if(p){const t=d&&"gif"!==e.type,s=document.createElement("video"),a=()=>this.setMoverToTarget(n,!1,i).then(({onAnimationEnd:i})=>{const a=f.firstElementChild&&f.firstElementChild.classList.contains("media-viewer-aspecter")?f.firstElementChild:f,o=f.querySelector("video");o&&o.remove(),s.setAttribute("playsinline","true"),s.addEventListener("timeupdate",()=>{this.tempId!==b&&s.pause()}),s.addEventListener("error",()=>{4!==s.error.code&&this.log.error("Error "+s.error.code+"; details: "+s.error.message),T&&T.detach()},{once:!0}),this.addEventListener("setMoverAfter",()=>{s.src="",s.load()},{once:!0}),h.IS_SAFARI&&(s.autoplay=!0),"gif"===e.type&&(s.muted=!0,s.autoplay=!0,s.loop=!0),a.append(s);const r=new Promise(e=>{s.addEventListener("canplay",e,{once:!0})}),l=()=>{"gif"!==e.type&&(s.dataset.ckin="default",s.dataset.overlay="1",Promise.all([r,i]).then(()=>{if(this.tempId!==b)return;(this.videoPlayer=new Pe(s,!0,k)).addEventListener("toggleControls",e=>{this.wholeDiv.classList.toggle("has-video-controls",e)}),this.addEventListener("setMoverBefore",()=>{this.wholeDiv.classList.remove("has-video-controls"),this.videoPlayer.removeListeners(),this.videoPlayer=void 0},{once:!0}),this.isZooming()&&this.videoPlayer.lockControls(!1)}))};if(k){i.then(()=>{s.readyState{s.addEventListener("canplay",()=>{T.detach(),s.parentElement.classList.remove("is-buffering")},{once:!0})};s.addEventListener("waiting",()=>{const t=s.networkState===s.NETWORK_LOADING,i=s.readyState{const o=he.a.getCacheContext(e),r=k?Promise.resolve():M.a.downloadDoc(e);return k||i.then(()=>{o.url||T.attach(f,!0,r)}),Promise.all([r,i]).then(()=>{if(this.tempId!==b)return void this.log.warn("media viewer changed video");if(t){const e=fe.setSingleMedia(s,d);this.addEventListener("setMoverBefore",()=>{e()},{once:!0})}const e=o.url;n instanceof SVGSVGElement?a.firstElementChild.lastElementChild.append(s):Object(Rt.a)(s,e),this.updateMediaSource(n,e,"video"),l()}),r}})});P=E.then(a)}else{const t=()=>this.setMoverToTarget(n,!1,i).then(({onAnimationEnd:t})=>{this.lazyLoadQueue.unshift({load:()=>{const s=he.a.getCacheContext(e,C.type),i=u?M.a.downloadDoc(e):r.a.preloadPhoto(e,C);return t.then(()=>{s.url||this.preloader.attachPromise(i)}),Promise.all([t,i]).then(()=>{var e;if(this.tempId!==b)return void this.log.warn("media viewer changed photo");const t=s.url;if(n instanceof SVGSVGElement){if(this.updateMediaSource(n,t,"img"),this.updateMediaSource(f,t,"img"),v.b.isMobile){const e=f.querySelectorAll("img");e&&e.length&&e.forEach(e=>{e.classList.remove("thumbnail")})}}else{const s=f.firstElementChild&&f.firstElementChild.classList.contains("media-viewer-aspecter")?f.firstElementChild:f,i="IMG"===(null===(e=s.firstElementChild)||void 0===e?void 0:e.tagName)?s.firstElementChild:null;if(!i||i.src!==t){let e=new Image;e.classList.add("thumbnail"),Object(Rt.a)(e,t,()=>{this.updateMediaSource(n,t,"img"),i&&Object(_e.b)(()=>{i.remove()}),s.append(e)})}}}).catch(e=>{this.log.error(e),this.preloader.attach(f),this.preloader.setManual()}),i}})});P=E.then(t)}return this.setMoverPromise=P.catch(()=>{this.setMoverAnimationPromise=null}).finally(()=>{this.setMoverPromise=null})}))}}var vo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class fo extends bo{constructor(){let e;super(new E({processItem:e=>{const t="inputMessagesFilterDocument"===this.searchContext.inputFilter._,{mid:s,peerId:n}=e,a=i.a.getMediaFromMessage(e);if(a&&(!t||fo.isMediaCompatibleForDocumentViewer(a)))return{element:null,mid:s,peerId:n}}}),["delete","forward"]),this.onPrevClick=e=>{this.openMedia(this.getMessageByPeer(e.peerId,e.mid),e.element,-1)},this.onNextClick=e=>{this.openMedia(this.getMessageByPeer(e.peerId,e.mid),e.element,1)},this.onDeleteClick=()=>{const e=this.target;new Bs(e.peerId,[e.mid],"chat",()=>{this.target={element:this.content.media},this.close()})},this.onForwardClick=()=>{const e=this.target;e.mid&&new Ds({[e.peerId]:[e.mid]},()=>this.close())},this.onAuthorClick=e=>{const{mid:t,peerId:s}=this.target;if(t&&t!==Number.MAX_SAFE_INTEGER){const i=this.searchContext.threadId;this.close(e).then(()=>{if(v.b.isMobile){const e=$t.getTab(qt);e&&e.close()}const e=this.getMessageByPeer(s,t);mo.setInnerPeer(e.peerId,t,i?"discussion":void 0,i)})}},this.onDownloadClick=()=>{const{peerId:e,mid:t}=this.target,s=this.getMessageByPeer(e,t);if(s.media.photo)r.a.savePhotoFile(s.media.photo,mo.chat.bubbles.lazyLoadQueue.queueId);else{let e=null;e=s.media.webpage?s.media.webpage.document:s.media.document,e&&M.a.saveDocFile(e,mo.chat.bubbles.lazyLoadQueue.queueId)}},this.listLoader.onEmptied=()=>{this.close()},this.content.caption=document.createElement("div"),this.content.caption.classList.add("media-viewer-caption");const t=()=>{e&&clearTimeout(e),e=window.setTimeout(()=>{e=void 0,this.content.caption.classList.remove("is-focused")},800)};this.content.caption.addEventListener("touchstart",()=>{v.b.isMobile&&(this.content.caption.classList.add("is-focused"),e&&(clearTimeout(e),e=void 0),document.addEventListener("touchend",t,{once:!0}))});new P.b(this.content.caption).onAdditionalScroll=t,this.wholeDiv.append(this.content.caption),Object(l.b)(this.buttons.delete,this.onDeleteClick);const s=[{icon:"forward",text:"Forward",onClick:this.onForwardClick},{icon:"download",text:"MediaViewer.Context.Download",onClick:this.onDownloadClick},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick}];this.setBtnMenuToggle(s),this.btnMenuDelete=s[s.length-1].element,this.setListeners()}get searchContext(){return this.listLoader.searchContext}setListeners(){super.setListeners(),this.buttons.forward.addEventListener("click",this.onForwardClick),this.author.container.addEventListener("click",this.onAuthorClick);const e=t=>{if(t.target instanceof HTMLAnchorElement){const s=t.target.getAttribute("onclick");if(!s||s.includes("showMaskedAlert"))return;return Object(c.a)(t),this.close().then(()=>{this.content.caption.removeEventListener("click",e,{capture:!0}),t.target.click()}),!1}};this.content.caption.addEventListener("click",e,{capture:!0})}getMessageByPeer(e,t){return this.searchContext.isScheduled?i.a.getScheduledMessageByPeer(e,t):i.a.getMessageByPeer(e,t)}setCaption(e){const t=e.message;let s="";t&&(s=Z.b.wrapRichText(t,{entities:e.totalEntities})),b(this.content.caption.firstElementChild,s),this.content.caption.classList.toggle("hide",!t)}setSearchContext(e){return this.listLoader.setSearchContext(e),this}openMedia(e,t,s=0,n=!1,a=[],o=[]){const r=Object.create(null,{_openMedia:{get:()=>super._openMedia}});return vo(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;const l=e.mid,c=e.fromId,d=i.a.getMediaFromMessage(e);this.buttons.forward.classList.toggle("hide","messageService"===e._);const h=i.a.canDeleteMessage(e);[this.buttons.delete,this.btnMenuDelete].forEach(e=>{e.classList.toggle("hide",!h)}),this.setCaption(e);const u=r._openMedia.call(this,d,e.date,c,s,t,n,a,o,e);return this.target.mid=l,this.target.peerId=e.peerId,u}))}static isMediaCompatibleForDocumentViewer(e){return"photo"===e._||g.has(e.mime_type)}}class yo extends S{constructor(e){super(Object.assign(Object.assign({},e),{loadMore:(e,t,s)=>{if(this.peerId<0||!t)return Promise.resolve({count:0,items:[]});const i=null==e?void 0:e.photoId;return r.a.getUserPhotos(this.peerId,i,s).then(e=>{const t=e.photos.map(e=>({element:null,photoId:e}));return{count:e.count,items:t}})}})),this.loadedAllUp=!0,this.peerId=e.peerId}}var wo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Lo extends bo{constructor(e){super(new yo({peerId:e}),[]),this.onPrevClick=e=>{this.openMedia(e.photoId,e.element,-1)},this.onNextClick=e=>{this.openMedia(e.photoId,e.element,1)},this.onDownloadClick=()=>{r.a.savePhotoFile(r.a.getPhoto(this.target.photoId),mo.chat.bubbles.lazyLoadQueue.queueId)},this.peerId=e,this.setBtnMenuToggle([{icon:"download",text:"MediaViewer.Context.Download",onClick:this.onDownloadClick}]),this.setListeners()}openMedia(e,t,s=0,i,n){const a=Object.create(null,{_openMedia:{get:()=>super._openMedia}});return wo(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;const o=r.a.getPhoto(e),l=a._openMedia.call(this,o,o.date,this.peerId,s,t,!1,i,n);return this.target.photoId=o.id,l}))}}var So=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const Eo=e=>{d.a.removeFromAvatarsCache(e),Array.from(document.querySelectorAll('avatar-element[peer="'+e+'"]')).forEach(e=>{e.update()})};function Mo(e,t,s,a,o,l){return So(this,void 0,void 0,(function*(){let c=yield n.default.getFullPhoto(t);if(!s()||!c)return;const d=()=>Array.from(e.querySelectorAll("img")).find(e=>!e.classList.contains("emoji"))?e:null;if(t<0){const e=!!a,n="inputMessagesFilterChatPhotos";if(!a&&(a=yield i.a.getSearch({peerId:t,inputFilter:{_:n},maxId:0,limit:1}).then(e=>e.history[0]),!s()))return;if(a){a.action.photo.id!==c.id&&(e||(a=i.a.generateFakeAvatarMessage(t,c)));const s=e=>e.map(e=>({element:e.element,mid:e.item.mid,peerId:e.item.peerId}));return void(new fo).setSearchContext({peerId:t,inputFilter:{_:n}}).openMedia(a,d(),void 0,void 0,o?s(o):void 0,l?s(l):void 0)}}if(c){"string"==typeof a&&(c=r.a.getPhoto(a));const e=e=>e.map(e=>({element:e.element,photoId:e.item}));new Lo(t).openMedia(c.id,d(),void 0,o?e(o):void 0,l?e(l):void 0)}}))}a.default.addEventListener("avatar_update",Eo),a.default.addEventListener("peer_title_edit",e=>{d.a.isAvatarCached(e)||Eo(e)});const Io=new Map,Co=new Set;class ko extends HTMLElement{constructor(){super(...arguments),this.isDialog=!1,this.addedToQueue=!1}connectedCallback(){if(this.isDialog="1"===this.getAttribute("dialog"),""===this.getAttribute("clickable")){this.setAttribute("clickable","set");let e=!1;Object(l.b)(this,t=>So(this,void 0,void 0,(function*(){if(Object(c.a)(t),e)return;const s=this.peerId;e=!0,yield Mo(this,this.peerId,()=>this.peerId===s),e=!1})))}}disconnectedCallback(){const e=Io.get(this.peerId);e&&e.has(this)&&(e.delete(this),e.size||Io.delete(this.peerId)),this.lazyLoadQueue&&this.lazyLoadQueue.unobserve(this)}static get observedAttributes(){return["peer","dialog","peer-title"]}attributeChangedCallback(e,t,s){if("peer"===e){if(this.peerId===+s)return;this.peerId=o.a.getPeerMigratedTo(+s)||+s;const e=+t;if(e){const t=Io.get(e);t&&(t.delete(this),t.size||Io.delete(e))}this.update()}else"peer-title"===e?this.peerTitle=s:"dialog"===e&&(this.isDialog="1"===s)}r(e=!1){const t=d.a.putPhoto(this,this.peerId,this.isDialog,this.peerTitle,e),s=t?t.loadPromise:Promise.resolve();return this.loadPromises&&(t&&t.cached&&this.loadPromises.push(s),s.finally(()=>{this.loadPromises=void 0})),t}update(){if(this.lazyLoadQueue){if(!Co.has(this.peerId)){if(this.addedToQueue)return;this.addedToQueue=!0;let e=Io.get(this.peerId);return e||(e=new Set,Io.set(this.peerId,e)),e.add(this),this.r(!0),void this.lazyLoadQueue.push({div:this,load:()=>(Co.add(this.peerId),this.update())})}this.addedToQueue&&this.lazyLoadQueue.unobserve(this)}Co.add(this.peerId);const e=this.r(),t=e?e.loadPromise:Promise.resolve();this.addedToQueue&&t.finally(()=>{this.addedToQueue=!1});const s=Io.get(this.peerId);if(s){s.delete(this);const e=Array.from(s);Io.delete(this.peerId);for(let t=0,s=e.length;t{let e=i.a.getDialogOnly(this.selectedId);e&&i.a.editPeerFolders([e.peerId],+!e.folder_id)},this.onPinClick=()=>{i.a.toggleDialogPin(this.selectedId,this.filterId).catch(e=>{"PINNED_DIALOGS_TOO_MUCH"===e.type&&(this.filterId>=1?at({langPackKey:"PinFolderLimitReached"}):new ht("pinned-dialogs-too-much",{buttons:[{langKey:"OK",isCancel:!0},{langKey:"FiltersSetupPinAlert",callback:()=>{new Ki(ln).open()}}],descriptionLangKey:"PinToTopLimitReached2",descriptionLangArgs:[Object(A.i18n)("Chats",[a.default.config.pinned_dialogs_count_max])]}).show())})},this.onUnmuteClick=()=>{i.a.mutePeer(this.selectedId,!1)},this.onMuteClick=()=>{i.a.mutePeer(this.selectedId,!0)},this.onUnreadClick=()=>{const e=i.a.getDialogOnly(this.selectedId);e&&(e.unread_count?(i.a.readHistory(this.selectedId,e.top_message),i.a.markDialogUnread(this.selectedId,!0)):i.a.markDialogUnread(this.selectedId))},this.onDeleteClick=()=>{new xt(this.selectedId)},this.onContextMenu=e=>{this.init&&(this.init(),this.init=null);let t=null;try{t=Object(mt.a)(e.target,"LI")}catch(e){}if(t){if(e instanceof MouseEvent&&e.preventDefault(),this.element.classList.contains("active"))return!1;e instanceof MouseEvent&&(e.cancelBubble=!0),this.filterId=Do.filterId,this.selectedId=+t.dataset.peerId,this.dialog=i.a.getDialogOnly(this.selectedId),this.buttons.forEach(e=>{const t=e.verify();e.element.classList.toggle("hide",!t)}),this.buttons[this.buttons.length-1].element.lastChild.replaceWith(Object(A.i18n)(o.a.getDeleteButtonText(this.selectedId))),t.classList.add("menu-open"),Object(se.e)(e,this.element),Object(se.d)(this.element,()=>{t.classList.remove("menu-open"),this.selectedId=this.dialog=this.filterId=void 0})}}}init(){this.buttons=[{icon:"unread",text:"MarkAsUnread",onClick:this.onUnreadClick,verify:()=>{var e;return!!(!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.unread_mark)&&!this.dialog.unread_count)}},{icon:"readchats",text:"MarkAsRead",onClick:this.onUnreadClick,verify:()=>{var e;return!(!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.unread_mark)&&!this.dialog.unread_count)}},{icon:"pin",text:"ChatList.Context.Pin",onClick:this.onPinClick,verify:()=>{var e;return!(this.filterId>1?i.a.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId):!!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.pinned))}},{icon:"unpin",text:"ChatList.Context.Unpin",onClick:this.onPinClick,verify:()=>{var e;return this.filterId>1?i.a.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId):!!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.pinned)}},{icon:"mute",text:"ChatList.Context.Mute",onClick:this.onMuteClick,verify:()=>this.selectedId!==a.default.myId&&!_t.a.isPeerLocalMuted(this.dialog.peerId)},{icon:"unmute",text:"ChatList.Context.Unmute",onClick:this.onUnmuteClick,verify:()=>this.selectedId!==a.default.myId&&_t.a.isPeerLocalMuted(this.dialog.peerId)},{icon:"archive",text:"Archive",onClick:this.onArchiveClick,verify:()=>0===this.filterId&&this.selectedId!==a.default.myId},{icon:"unarchive",text:"Unarchive",onClick:this.onArchiveClick,verify:()=>1===this.filterId&&this.selectedId!==a.default.myId},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>!0}],this.element=Ee(this.buttons),this.element.id="dialogs-contextmenu",this.element.classList.add("contextmenu"),document.getElementById("page-chats").append(this.element)}}var Po,xo;!function(e){e[e.Connected=0]="Connected",e[e.Connecting=1]="Connecting",e[e.Closed=2]="Closed",e[e.TimedOut=3]="TimedOut"}(Po||(Po={}));class Ao{constructor(e){this.hadConnect=!1,this.connecting=!1,this.timedOut=!1,this.updating=!1,this.setConnectionStatus=()=>{sn.a.get("dc").then(e=>{e||(e=tn.a.baseDcId),this.setFirstConnectionTimeout&&(clearTimeout(this.setFirstConnectionTimeout),this.setFirstConnectionTimeout=0);const t=a.default.connectionStatus["NET-"+e],s=t&&t.status===Po.Connected;this.connecting&&s&&Xs.a.forceGetDifference(),s&&!this.hadConnect&&(this.hadConnect=!0),this.timedOut=t&&t.status===Po.TimedOut,this.connecting=!s,this.retryAt=t&&t.retryAt,de.b&&this.log("connecting",this.connecting),this.setState()})},this.setStatusText=(e,t)=>{this.currentLangPackKey!==e&&(this.currentLangPackKey=e,Object(x.a)(this.statusEl,Object(A.i18n)(e,t)),this.statusPreloader.attach(this.statusEl))},this.setState=()=>{const e=Ao.CHANGE_STATE_DELAY;if(this.connecting)if(this.timedOut){const e=this.getA("ConnectionStatus.ForceReconnect",()=>rt.a.forceReconnect());this.setStatusText("ConnectionStatus.TimedOut",[e])}else if(this.hadConnect)if(void 0!==this.retryAt){const e=document.createElement("span"),t=this.retryAt,s=()=>{const s=Date.now();e.innerText=""+Math.round((t-s)/1e3),s>t&&clearInterval(i)},i=setInterval(s,1e3);s();const n=this.getA("ConnectionStatus.Reconnect",()=>rt.a.forceReconnectTimeout());this.setStatusText("ConnectionStatus.ReconnectIn",[e,n])}else this.setStatusText("ConnectionStatus.Reconnecting");else this.setStatusText("ConnectionStatus.Waiting");else this.updating&&this.setStatusText("Updating");de.b&&this.log("setState",this.connecting||this.updating),window.requestAnimationFrame(()=>{this.setStateTimeout&&clearTimeout(this.setStateTimeout);this.setStateTimeout=window.setTimeout(()=>{Object(Xt.a)(this.statusContainer,"is-shown",this.connecting||this.updating,200),this.setStateTimeout=0,de.b&&this.log("setState: isShown:",this.connecting||this.updating)},e)})},this.log=Object(J.b)("CS"),this.statusContainer=document.createElement("div"),this.statusContainer.classList.add("connection-status"),this.statusEl=Object(U.a)("btn-primary bg-warning connection-status-button",{noRipple:!0}),this.statusPreloader=new ye.a({cancelable:!1}),this.statusPreloader.constructContainer({color:"transparent",bold:!0}),this.statusContainer.append(this.statusEl),e.prepend(this.statusContainer),a.default.addEventListener("connection_status_change",e=>{const t=e;console.log(t),this.setConnectionStatus()}),a.default.addEventListener("state_synchronizing",e=>{e||(this.updating=!0,de.b&&this.log("updating",this.updating),this.setState())}),a.default.addEventListener("state_synchronized",e=>{const t=e;de.b&&this.log("state_synchronized",t),t||(this.updating=!1,de.b&&this.log("updating",this.updating),this.setState())}),this.setFirstConnectionTimeout=window.setTimeout(this.setConnectionStatus,Ao.CHANGE_STATE_DELAY+1e3)}getA(e,t){const s=document.createElement("a");return s.classList.add("force-reconnect"),s.append(Object(A.i18n)(e)),s.addEventListener("click",e=>{Object(c.a)(e),t()}),s}}Ao.CHANGE_STATE_DELAY=1e3,function(e){e[e.Error=-1]="Error",e[e.Pending=0]="Pending",e[e.Sent=1]="Sent",e[e.Read=2]="Read"}(xo||(xo={}));var Oo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class _o extends xs{constructor(e,t){super({getIndex:e=>i.a.getDialogOnly(e)[this.indexKey],onDelete:e=>{e.dom.listEl.remove(),jo.onListLengthChange()},onSort:(e,t)=>{const s=e.dom.listEl.parentElement!==this.list;Ps(e.dom.listEl,this.list,t),s&&jo.onListLengthChange()},onElementCreate:(e,t)=>{const s=t?[]:void 0,{dom:i}=jo.addListDialog({dialog:e.id,loadPromises:s,isBatch:t});return e.dom=i,(null==s?void 0:s.length)&&(e.loadPromises=s,Promise.all(s).finally(()=>{delete e.loadPromises})),e},updateElementWith:_e.c}),this.list=e,this.indexKey=t}clear(){this.list.innerHTML="",super.clear()}}class Fo{constructor(){this.chatsContainer=document.getElementById("chatlist-container"),this.scroll=null,this.log=Object(J.b)("DIALOGS",J.a.Log|J.a.Error|J.a.Warn|J.a.Debug),this.contextMenu=new To,this.sortedLists={},this.scrollables={},this.folders={menu:document.getElementById("folders-tabs"),menuScrollContainer:null,container:document.getElementById("folders-container")},this.filtersRendered={},this.lastActiveElements=new Set,this.offsets={top:0,bottom:0},this.onTabChange=()=>{this.scroll=this.scrollables[this.filterId],this.scroll.loadedAll.top=!0,this.scroll.loadedAll.bottom=!1,this.offsets.top=this.offsets.bottom=0,this.loadDialogsPromise=void 0,this.sortedList=this.sortedLists[this.filterId],this.onChatsScroll()},this._onListLengthChange=()=>{if(this.checkIfPlaceholderNeeded(),this.filterId>0)return;const e=this.chatList,t=e.childElementCount,s=e.parentElement.parentElement,i=e.parentElement.nextElementSibling,n=!!i.childElementCount;if(t>=10)return void(n&&(s.classList.remove("with-contacts"),i.innerHTML="",this.loadContacts=void 0,this.processContact=void 0));if(n)return;s.classList.add("with-contacts");const a=new nn({name:"Contacts",noDelimiter:!0,fakeGradientDelimiter:!0});a.container.classList.add("hide"),T.a.getContacts(void 0,void 0,"online").then(e=>{const t=new Os({avatarSize:42,new:!0});this.loadContacts=()=>{const s=yt.a.windowH/60|0;e.splice(0,s).filter(this.verifyUserIdForContacts).forEach(e=>{t.add(e)}),e.length||(this.loadContacts=void 0)},this.loadContacts(),this.processContact=e=>{if(e<0)return;const s=this.verifyUserIdForContacts(e),i=t.has(e);!i&&s?t.add(e):i&&!s&&t.delete(e)};const s=t.list;s.classList.add("chatlist-new"),this.setListClickListener(s),a.content.append(s),a.container.classList.remove("hide")}),i.append(a.container)},this.verifyUserIdForContacts=e=>!i.a.getDialogOnly(e),this.onChatsRegularScroll=()=>{this.sliceTimeout&&clearTimeout(this.sliceTimeout),this.sliceTimeout=window.setTimeout(()=>{this.sliceTimeout=void 0,this.chatList.childElementCount&&!this.processContact&&Object(_e.c)(()=>{const e=performance.now(),t=this.scroll.scrollTop,s=this.chatList.firstElementChild,i=this.scroll.container.getBoundingClientRect(),n=s.getBoundingClientRect(),a=Array.from(this.scroll.splitUp.children);let o=this.scroll.splitUp.offsetTop;o&&t{const t=+e.dataset.peerId;this.deleteDialog(t)}),this.setOffsets(),this.scroll.scrollTop=c.offsetTop-u,this.log("slice time",performance.now()-e)})},200)},this.onChatsScrollTop=()=>{this.onChatsScroll("top")},this.onChatsScroll=(e="bottom")=>{if(!this.scroll.loadedAll[e])return this.loadDialogsPromise?this.loadDialogsPromise:(this.log("onChatsScroll",e),this.loadDialogs(e));this.loadContacts&&this.loadContacts()},this.chatsPreloader=Object(se.f)(null,!0),this.allUnreadCount=this.folders.menu.querySelector(".badge"),this.folders.menuScrollContainer=this.folders.menu.parentElement;const e=document.createElement("div");e.classList.add("connection-status-bottom"),e.append(this.folders.container),pe.IS_TOUCH_SUPPORTED&&_s(this.folders.container,e=>{const t=s.prevId();s(e?t+1:t-1)}),this.setFilterId(0),this.addFilter({id:this.filterId,title:"",titleEl:Object(A.i18n)("ChatList.Filter.AllChats"),orderIndex:0}),this.sortedList=this.sortedLists[this.filterId],this.scroll=this.scrollables[this.filterId],a.default.addEventListener("user_update",e=>{var t;const s=this.getDialogDom(e);if(s&&!T.a.isBot(e)&&e!==a.default.myId){const i="userStatusOnline"===(null===(t=T.a.getUser(e).status)||void 0===t?void 0:t._);s.avatarEl.classList.toggle("is-online",i)}}),a.default.addEventListener("dialog_flush",({peerId:e})=>{const t=i.a.getDialogOnly(e);t&&(this.setLastMessage(t,void 0,void 0,void 0,void 0,void 0,!0),this.validateDialogForFilter(t),this.setFiltersUnreadCount())}),a.default.addEventListener("dialogs_multiupdate",e=>{for(const t in e){const s=e[t];this.updateDialog(s),this.processContact&&this.processContact(+t),this.validateDialogForFilter(s)}this.setFiltersUnreadCount()}),a.default.addEventListener("dialog_drop",({peerId:e})=>{this.deleteDialog(e),this.setFiltersUnreadCount(),this.processContact&&this.processContact(e)}),a.default.addEventListener("dialog_unread",({peerId:e})=>{const t=i.a.getDialogOnly(e);t&&(this.setUnreadMessages(t),this.validateDialogForFilter(t),this.setFiltersUnreadCount())}),a.default.addEventListener("dialog_notify_settings",e=>{this.setUnreadMessages(e)}),a.default.addEventListener("dialog_draft",({dialog:e,drop:t,peerId:s})=>{t?this.sortedList.delete(s):this.updateDialog(e),this.processContact&&this.processContact(s)}),a.default.addEventListener("peer_changed",e=>{for(const t of this.lastActiveElements)+t.dataset.peerId!==e&&(t.classList.remove("active"),this.lastActiveElements.delete(t));Array.from(document.querySelectorAll(`[data-autonomous="0"] li[data-peer-id="${e}"]`)).forEach(e=>{e.classList.add("active"),this.lastActiveElements.add(e)})}),a.default.addEventListener("filter_update",e=>{if(!this.filtersRendered[e.id])return void this.addFilter(e);if(e.id===this.filterId){const t=i.a.dialogsStorage.getFolder(e.id);this.validateListForFilter();for(let e=0,s=t.length;e{const t=this.filtersRendered[e.id];t&&(this.folders.menu.firstElementChild.click(),t.container.remove(),t.menu.remove(),delete this.sortedLists[e.id],delete this.scrollables[e.id],delete this.filtersRendered[e.id],Object.keys(this.filtersRendered).length<=1&&this.folders.menuScrollContainer.classList.add("hide"))}),a.default.addEventListener("filter_order",e=>{const t=this.folders.menu;e.forEach(e=>{const s=i.a.filtersStorage.getFilter(e),n=this.filtersRendered[e];this.sortedLists[e].indexKey=i.a.dialogsStorage.getDialogIndexKey(e),Ps(n.menu,t,s.orderIndex),Ps(n.container,this.folders.container,s.orderIndex)}),this.indexKey=i.a.dialogsStorage.getDialogIndexKey(this.filterId)}),a.default.addEventListener("peer_typings",({peerId:e,typings:t})=>{const s=i.a.getDialogOnly(e);s&&(t.length?this.setTyping(s):this.unsetTyping(s))}),a.default.addEventListener("state_cleared",()=>{k.default.getState().then(e=>{T.a.clear(),G.a.clear();const t=i.a.filtersStorage.filters;for(const e in t)a.default.dispatchEvent("updateDialogFilter",{_:"updateDialogFilter",id:+e});i.a.clear(),this.validateListForFilter(),this.onStateLoaded(e)})});const t=new P.a(this.folders.menuScrollContainer);e.prepend(this.folders.menuScrollContainer);const s=Object(ee.a)(this.folders.menu,this.folders.container,(e,t)=>{e=+t.dataset.filterId||0,this.filterId!==e&&(this.sortedLists[e].clear(),this.setFilterId(e),this.onTabChange())},()=>{for(const e in this.sortedLists)+e!==this.filterId&&this.sortedLists[e].clear()},void 0,t);this.folders.menu.firstElementChild.click(),i.a.construct(),k.default.getState().then(e=>this.onStateLoaded(e)).then(()=>{const e=i.a.dialogsStorage.isDialogsLoaded(0),t=i.a.dialogsStorage.isDialogsLoaded(1),s=e||t,n=e?Promise.resolve():i.a.getConversationsAll("",0),a=t?Promise.resolve():i.a.getConversationsAll("",1);n.finally(()=>{a.then(()=>{this.accumulateArchivedUnread(),s&&(Xs.a.updatesState.syncLoading||Promise.resolve()).then(()=>{i.a.refreshConversations()})})})}),new Ao(this.chatsContainer),this.chatsContainer.append(e),setTimeout(()=>{le.b.loadLottieWorkers()},200),this.onListLengthChange=ot(this._onListLengthChange,100,!1,!0)}get chatList(){return this.sortedList.list}setFilterId(e){this.filterId=e,this.indexKey=i.a.dialogsStorage?i.a.dialogsStorage.getDialogIndexKey(this.filterId):"index",a.default.filterId=e}onStateLoaded(e){return Oo(this,void 0,void 0,(function*(){_t.a.getNotifyPeerTypeSettings();const t=i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.addFilter(t)});return e.filters&&Object.keys(e.filters).length&&(yield t,this.showFiltersPromise&&(yield this.showFiltersPromise)),k.default.storagesResults.dialogs.length&&Si.a.addMissedDialogs(),this.onChatsScroll()}))}getOffsetIndex(e){return{index:this.scroll.loadedAll[e]?0:this.offsets[e]}}isDialogMustBeInViewport(e){if(void 0!==e.migratedTo||!this.testDialogForFilter(e))return!1;const t=this.getOffsetIndex("top"),s=this.getOffsetIndex("bottom");if(!t.index&&!s.index)return!0;const i=e[this.indexKey];return(!t.index||i<=t.index)&&(!s.index||i>=s.index)}deleteDialog(e){this.sortedList.delete(e)}updateDialog(e){if(!this.isDialogMustBeInViewport(e))return void this.deleteDialog(e.peerId);if(!this.sortedList.has(e.peerId))return void this.sortedList.add(e.peerId);const t=this.getDialogDom(e.peerId);t&&(this.setLastMessage(e,void 0,t,void 0,void 0,void 0,!0),this.sortedList.update(e.peerId))}setFilterUnreadCount(e,t){var s;const n=0===e?this.allUnreadCount:null===(s=this.filtersRendered[e])||void 0===s?void 0:s.unread;if(!n)return;t=t||i.a.dialogsStorage.getFolder(e);let a=0,o=0;t.forEach(t=>{const s=_t.a.isPeerLocalMuted(t.peerId,!0);if(s&&0===e)return;const i=+!!t.unread_count||+t.pFlags.unread_mark||0;s?a+=i:o+=i}),n.classList.toggle("badge-gray",a&&!o);const r=a+o;n.innerText=r?""+r:""}setFiltersUnreadCount(){for(const e in this.filtersRendered)this.setFilterUnreadCount(+e);this.setFilterUnreadCount(0)}validateListForFilter(){const e=i.a.filtersStorage.getFilter(this.filterId);this.sortedList.getAll().forEach(t=>{const s=i.a.getDialogOnly(t.id);this.testDialogForFilter(s,e||null)||this.deleteDialog(t.id)})}validateDialogForFilter(e,t){this.getDialogDom(e.peerId)&&(this.testDialogForFilter(e,t)||this.deleteDialog(e.peerId))}testDialogForFilter(e,t=i.a.filtersStorage.getFilter(this.filterId)){return!(!e||t&&!i.a.filtersStorage.testDialogForFilter(e,t)||!t&&this.filterId!==e.folder_id)}generateScrollable(e,t){const s=new P.b(null,"CL",500);s.container.addEventListener("scroll",this.onChatsRegularScroll),s.container.dataset.filterId=""+t,s.onScrolledTop=this.onChatsScrollTop,s.onScrolledBottom=this.onChatsScroll,s.setVirtualContainer(e);const n=new _o(e,i.a.dialogsStorage?i.a.dialogsStorage.getDialogIndexKey(t):"index");return this.scrollables[t]=s,this.sortedLists[t]=n,s}addFilter(e){if(this.filtersRendered[e.id])return;const t=document.createElement("div");t.classList.add("menu-horizontal-div-item");const s=document.createElement("span"),i=document.createElement("span");i.classList.add("text-super"),e.titleEl?i.append(e.titleEl):i.innerHTML=Z.a.wrapEmojiText(e.title);const n=document.createElement("div");n.classList.add("badge","badge-20","badge-primary");const a=document.createElement("i");s.append(i,n,a),t.append(s),Object(ie.ripple)(t);Ps(t,this.folders.menu,e.orderIndex);const o=this.createChatList(),r=this.generateScrollable(o,e.id);r.container.classList.add("tabs-tab","chatlist-parts");const l=document.createElement("div");l.classList.add("chatlist-top");const c=document.createElement("div");c.classList.add("chatlist-bottom"),l.append(o),r.container.append(l,c);const d=r.container;Ps(r.container,this.folders.container,e.orderIndex),this.setListClickListener(o,null,!0),this.filtersRendered[e.id]={menu:t,container:d,unread:n,title:i},!this.showFiltersPromise&&Object.keys(this.filtersRendered).length>1&&(this.showFiltersPromise=new Promise(e=>{window.setTimeout(()=>{this.showFiltersPromise=void 0,Object.keys(this.filtersRendered).length>1&&(this.folders.menuScrollContainer.classList.remove("hide"),this.setFiltersUnreadCount()),e()},0)}))}loadDialogs(e){if(this.loadDialogsPromise)return this.loadDialogsPromise;const t=new Promise(s=>Oo(this,void 0,void 0,(function*(){const{chatList:n,filterId:a}=this;let o=yt.a.windowH/72*1.25|0,r=0;const{index:l}=this.getOffsetIndex(e);if(l)if("top"===e){const e=i.a.dialogsStorage.getFolder(a,!0),t=e.findIndex(e=>e[this.indexKey]<=l),s=Math.max(0,t-o);o=t-s,r=e[s][this.indexKey]+1}else r=l;try{const s=i.a.getConversations("",r,o,a,!0);if(!s.cached&&!n.childElementCount){n.parentElement.append(this.chatsPreloader)}const l=yield s.promise;if(this.loadDialogsPromise!==t)return;if("bottom"===e?l.isEnd&&(this.scroll.loadedAll[e]=!0):l.isTopEnd&&(this.scroll.loadedAll[e]=!0),l.dialogs.length){const t="top"===e?l.dialogs.slice().reverse():l.dialogs,s=[],i=[],n=e=>{i.push(e)};t.forEach(e=>{const t=this.sortedList.add(e.peerId,!0,n,!1);t.loadPromises&&s.push(...t.loadPromises)}),yield Promise.all(s).finally(),i.forEach(e=>e())}else this.onListLengthChange();const c=l.dialogs["top"===e?0:l.dialogs.length-1];c&&(this.offsets[e]=c[this.indexKey]),this.log.debug("getDialogs "+o+" dialogs by offset:",r,l,n.childElementCount),setTimeout(()=>{this.scroll.onScroll()},0)}catch(e){this.log.error(e)}this.chatsPreloader.parentElement&&this.chatsPreloader.remove(),s()}))).finally(()=>{this.loadDialogsPromise=void 0});return this.loadDialogsPromise=t}generateEmptyPlaceholder(e){const t="empty-placeholder",s=document.createElement("div");s.classList.add(t,t+"-"+e.classNameType);const i=document.createElement("div");i.classList.add(t+"-header"),Object(A._i18n)(i,e.title);const n=document.createElement("div");return n.classList.add(t+"-subtitle"),e.subtitle&&Object(A._i18n)(n,e.subtitle,e.subtitleArgs),s.append(i,n),{container:s,header:i,subtitle:n}}checkIfPlaceholderNeeded(){if(1===this.filterId)return;const e=this.chatList,t=e.parentElement;let s=Array.from(t.children).find(e=>e.matches(".empty-placeholder"));const n=this.scroll.loadedAll.bottom&&!e.childElementCount;if(n&&s)return;if(!n)return void(s&&(t.classList.remove("with-placeholder"),s.remove()));let a;if(this.filterId){a=this.generateEmptyPlaceholder({title:"FilterNoChatsToDisplay",subtitle:"FilterNoChatsToDisplayInfo",classNameType:"folder"}),s=a.container,s.prepend(function({emoji:e,width:t,height:s}){const i=document.createElement("div"),n=hs.getAnimatedEmojiSticker(e);return n?Ls({doc:n,div:i,loop:!1,play:!0,width:t,height:s,emoji:e}).then(()=>{}):i.classList.add("media-sticker-wrapper"),{container:i}}({emoji:"📂",width:128,height:128}).container);const e=Object(U.a)("btn-primary btn-color-primary btn-control tgico",{text:"FilterHeaderEdit",icon:"settings"});Object(l.b)(e,()=>{new Vi(ln).open(i.a.filtersStorage.getFilter(this.filterId))}),s.append(e)}else{a=this.generateEmptyPlaceholder({title:"ChatList.Main.EmptyPlaceholder.Title",classNameType:"dialogs"}),s=a.container;const e=document.createElement("img");e.classList.add("empty-placeholder-dialogs-icon"),Promise.all([T.a.getContacts().then(e=>{let t,s;e.length?(t="ChatList.Main.EmptyPlaceholder.Subtitle",s=[Object(A.i18n)("Contacts.Count",[e.length])]):(t="ChatList.Main.EmptyPlaceholder.SubtitleNoContacts",s=[]);new A.default.IntlElement({key:t,args:s,element:a.subtitle})}),Object(Rt.b)(e,"assets/img/EmptyChats.svg"),Object(_e.d)()]).then(()=>{s.classList.add("visible")}),s.prepend(e)}t.append(s),t.classList.add("with-placeholder")}setOffsets(){const e=this.chatList,t=this.getDialogFromElement(e.firstElementChild),s=this.getDialogFromElement(e.lastElementChild);this.offsets.top=t[this.indexKey],this.offsets.bottom=s[this.indexKey]}getDialogFromElement(e){return i.a.getDialogOnly(+e.dataset.peerId)}setListClickListener(e,t,s=!1,n=!1,a=!1){let o;const r=(a?mo.setInnerPeer:mo.setPeer).bind(mo);e.dataset.autonomous=""+ +n,e.addEventListener("mousedown",e=>{if(0!==e.button)return;this.log("dialogs click list");const s=e.target,i=Object(mt.a)(s,"LI");if(i){if(n){const e=o===i;o&&!e&&o.classList.remove("active"),i&&(i.classList.add("active"),o=i,this.lastActiveElements.add(i))}if(i){t&&t();const e=+i.dataset.peerId,s=+i.dataset.mid||void 0;r(e,s)}else r(0)}},{capture:!0}),de.b&&e.addEventListener("dblclick",e=>{const t=Object(mt.a)(e.target,"LI");if(t){const e=+t.dataset.peerId;this.log("debug dialog:",i.a.getDialogByPeerId(e))}}),s&&Object(se.a)(e,this.contextMenu.onContextMenu)}createChatList(e={}){const t=document.createElement("ul");return t.classList.add("chatlist"),e.new&&t.classList.add("chatlist-new"),t}setLastMessage(e,t,s,n,l,c=!1,d=!1){if(!s&&!(s=this.getDialogDom(e.peerId)))return;let h;if(t||(e.draft&&"draftMessage"===e.draft._&&(h=e.draft),t=i.a.getMessageByPeer(e.peerId,e.top_message)),"messageEmpty"===t._)return s.lastMessageSpan.innerHTML="",s.lastTimeSpan.innerHTML="",delete s.listEl.dataset.mid,void(d&&this.setUnreadMessages(e,s,c));const u=e.peerId;{let e;if(!t.deleted&&!h){const s=i.a.getMediaFromMessage(t);if(s&&("photo"===s._||["video","gif"].includes(s.type))){const i=r.a.choosePhotoSize(s,20,20);if("photoSizeEmpty"!==i._&&(e=document.createElement("div"),e.classList.add("dialog-subtitle-media"),ys({photo:s,message:t,container:e,withoutPreloader:!0,size:i,loadPromises:l}),"video"===s.type)){const t=document.createElement("span");t.classList.add("tgico-play"),e.append(t)}}}const c=!!e&&!!(null==t?void 0:t.message);let d;if(d=n&&t.message?i.a.wrapMessageForReply(t,void 0,void 0,!1,n,c):h?i.a.wrapMessageForReply(h):t.deleted?document.createDocumentFragment():i.a.wrapMessageForReply(t,void 0,void 0,!1,void 0,c),e&&d.prepend(e),Object(x.a)(s.lastMessageSpan,d),h){const e=document.createElement("b");e.classList.add("danger"),e.append(Object(A.i18n)("Draft"),": "),s.lastMessageSpan.prepend(e)}else if(u<0&&u!==t.fromId&&!t.action){const e=o.a.getPeer(t.fromId);if(e&&e.id){const i=document.createElement("b");e.id===a.default.myId?i.append(Object(A.i18n)("FromYou")):i.append(new ft.a({peerId:t.fromId,onlyFirstName:!0}).element),i.append(": "),s.lastMessageSpan.prepend(i)}}}if(!t.deleted||h){const e=h?Math.max(h.date,t.date||0):t.date;Object(x.a)(s.lastTimeSpan,Object(re.b)(new Date(1e3*e)))}else s.lastTimeSpan.textContent="";null!==d&&(d?this.setUnreadMessages(e,s,c):s.listEl.dataset.mid=t.mid)}setUnreadMessages(e,t=this.getDialogDom(e.peerId),s=!1){var n;if(1===e.folder_id&&this.accumulateArchivedUnread(),!t)return;if(!s){const s=_t.a.isPeerLocalMuted(e.peerId,!0);s!==t.listEl.classList.contains("is-muted")&&Object(Xt.a)(t.listEl,"is-muted",s,200)}let o;if("draftMessage"!==(null===(n=e.draft)||void 0===n?void 0:n._)){const t=i.a.getMessageByPeer(e.peerId,e.top_message);!t.deleted&&t.pFlags.out&&t.peerId!==a.default.myId&&(o=t)}!function(e,t,s){let i;if((null==t?void 0:t.pFlags.out)&&(i=t.pFlags.is_outgoing?"sending":t.pFlags.unread?"check":"checks"),!i)return void(e.textContent="");const n="tgico-"+i,a=e.lastElementChild;if(a&&a.classList.contains(n))return;const o=document.createElement("i");o.classList.add("sending-status-icon",n),e.append(o),a&&a.remove()}(t.statusSpan,o);const r=i.a.filtersStorage.getFilter(this.filterId);let l;l=r?-1!==r.pinned_peers.indexOf(e.peerId):!!e.pFlags.pinned;const c=l||!!e.unread_count||e.pFlags.unread_mark,d=Object(us.a)(t.unreadBadge);c&&!d&&t.subtitleEl.append(t.unreadBadge);const h=e.unread_mentions_count>1,u=t.mentionsBadge&&Object(us.a)(t.mentionsBadge);h&&(t.mentionsBadge||(t.mentionsBadge=document.createElement("div"),t.mentionsBadge.className="dialog-subtitle-badge badge badge-24 mention mention-badge",t.mentionsBadge.innerText="@",t.subtitleEl.insertBefore(t.mentionsBadge,t.lastMessageSpan.nextSibling)));const p=s?0:200;if(Object(Xt.a)(t.unreadBadge,"is-visible",c,p,c?void 0:()=>{t.unreadBadge.remove()},d?0:2),t.mentionsBadge&&Object(Xt.a)(t.mentionsBadge,"is-visible",h,p,h?void 0:()=>{t.mentionsBadge.remove(),delete t.mentionsBadge},u?0:2),!c)return;l?t.unreadBadge.classList.add("tgico-chatspinned","tgico"):t.unreadBadge.classList.remove("tgico-chatspinned","tgico");let m=!0,g=!1;e.unread_mentions_count&&1===e.unread_count?(t.unreadBadge.innerText="@",g=!0):e.unread_count||e.pFlags.unread_mark?t.unreadBadge.innerText=""+(e.unread_count||" "):(t.unreadBadge.innerText="",m=!1),t.unreadBadge.classList.toggle("unread",m),t.unreadBadge.classList.toggle("mention",g)}accumulateArchivedUnread(){this.accumulateArchivedTimeout||(this.accumulateArchivedTimeout=window.setTimeout(()=>{this.accumulateArchivedTimeout=0;const e=i.a.dialogsStorage.getFolder(1).reduce((e,t)=>e+t.unread_count,0);a.default.dispatchEvent("dialogs_archived_unread",{count:e})},0))}getDialogDom(e){const t=this.sortedList.get(e);return null==t?void 0:t.dom}getDialog(e){if("number"==typeof e){const t=i.a.getDialogOnly(e);return t||{peerId:e,peer:o.a.getOutputPeer(e),pFlags:{}}}return e}addListDialog(e){const t=this.getDialog(e.dialog);e.autonomous=!1;const s=this.addDialogNew(e);if(s){_t.a.isPeerLocalMuted(t.peerId,!0)&&s.dom.listEl.classList.add("is-muted"),this.setLastMessage(t,void 0,s.dom,void 0,e.loadPromises,e.isBatch,!0)}return s}addDialogNew(e){return this.addDialog(e.dialog,e.container,e.drawStatus,e.rippleEnabled,e.onlyFirstName,e.meAsSaved,e.append,e.avatarSize,e.autonomous,e.lazyLoadQueue,e.loadPromises)}addDialog(e,t,s=!0,i=!0,n=!1,r=!0,l=!0,c=54,d=!!t,h,u){var p,m;const g=this.getDialog(e),b=g.peerId,v=new ko;if(v.loadPromises=u,v.lazyLoadQueue=h,v.setAttribute("dialog",r?"1":"0"),v.setAttribute("peer",""+b),v.classList.add("dialog-avatar","avatar-"+c),s&&b!==a.default.myId&&b>0){const e=T.a.getUser(b);e.status&&"userStatusOnline"===e.status._&&v.classList.add("is-online")}const f=document.createElement("div");f.classList.add("user-caption");const y=document.createElement("span");y.classList.add("user-title");const w=new ft.a({peerId:b,dialog:r,onlyFirstName:n,plainText:!1});y.append(w.element),y.classList.add("tgico");const L=o.a.getPeer(b);(null===(p=null==L?void 0:L.pFlags)||void 0===p?void 0:p.verified)&&y.append(Bt());const S=document.createElement("span");S.classList.add("user-last-message"),S.setAttribute("dir","auto");const E=document.createElement("li");i&&Object(ie.ripple)(E),E.append(v,f),E.dataset.peerId=""+b;const M=document.createElement("span");M.classList.add("message-status","sending-status");const I=document.createElement("span");I.classList.add("message-time");const C=document.createElement("div");C.className="dialog-subtitle-badge badge badge-24";const k=document.createElement("p");k.classList.add("dialog-title");const P=document.createElement("span");P.classList.add("dialog-title-details"),P.append(M,I),k.append(y,P);const x=document.createElement("p");x.classList.add("dialog-subtitle"),x.append(S),f.append(k,x);const A={avatarEl:v,captionDiv:f,titleSpan:w.element,titleSpanContainer:y,statusSpan:M,lastTimeSpan:I,unreadBadge:C,lastMessageSpan:S,containerEl:E,listEl:E,subtitleEl:x};if(t){t[l?"append":"prepend"](E)}return d||(null===(m=mo.chat)||void 0===m?void 0:m.peerId)!==b||(E.classList.add("active"),this.lastActiveElements.add(E)),{dom:A,dialog:g}}setTyping(e){const t=this.getDialogDom(e.peerId);if(!t)return;let s=t.lastMessageSpan.querySelector(".peer-typing-container");s?mo.getPeerTyping(e.peerId,s):(s=mo.getPeerTyping(e.peerId),Object(x.a)(t.lastMessageSpan,s),t.lastMessageSpan.classList.add("user-typing"))}unsetTyping(e){const t=this.getDialogDom(e.peerId);t&&(t.lastMessageSpan.classList.remove("user-typing"),this.setLastMessage(e,null,t,void 0,void 0,void 0,null))}}const jo=new Fo;de.a.appDialogsManager=jo;var Do=t.default=jo},143:function(e,t,s){"undefined"!=typeof self&&self,e.exports=function(e){var t={};function s(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,s),n.l=!0,n.exports}return s.m=e,s.c=t,s.d=function(e,t,i){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)s.d(i,n,function(t){return e[t]}.bind(null,n));return i},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=0)}([function(e,t,s){"use strict";(function(t){var s=t.AudioContext||t.webkitAudioContext,i=function(e){if(!i.isRecordingSupported())throw new Error("Recording is not supported in this browser");e||(e={}),this.state="inactive",this.config=Object.assign({bufferLength:4096,encoderApplication:2049,encoderFrameSize:20,encoderPath:"encoderWorker.min.js",encoderSampleRate:48e3,maxFramesPerPage:40,mediaTrackConstraints:!0,monitorGain:0,numberOfChannels:1,recordingGain:1,resampleQuality:3,streamPages:!1,reuseWorker:!1,wavBitDepth:16},e),this.encodedSamplePosition=0};i.isRecordingSupported=function(){return s&&t.navigator&&t.navigator.mediaDevices&&t.navigator.mediaDevices.getUserMedia&&t.WebAssembly},i.prototype.clearStream=function(){this.stream&&(this.stream.getTracks?this.stream.getTracks().forEach((function(e){e.stop()})):this.stream.stop(),delete this.stream),this.audioContext&&this.closeAudioContext&&(this.audioContext.close(),delete this.audioContext)},i.prototype.encodeBuffers=function(e){if("recording"===this.state){for(var t=[],s=0;s{this.encodeBuffers(e.inputBuffer)},this.monitorGainNode=this.audioContext.createGain(),this.setMonitorGain(this.config.monitorGain),this.monitorGainNode.connect(this.audioContext.destination),this.recordingGainNode=this.audioContext.createGain(),this.setRecordingGain(this.config.recordingGain),this.recordingGainNode.connect(this.scriptProcessorNode)},i.prototype.initSourceNode=function(e){return e&&e.context?t.Promise.resolve(e):t.navigator.mediaDevices.getUserMedia({audio:this.config.mediaTrackConstraints}).then(e=>(this.stream=e,this.audioContext.createMediaStreamSource(e)))},i.prototype.loadWorker=function(){this.encoder||(this.encoder=new t.Worker(this.config.encoderPath))},i.prototype.initWorker=function(){var e=(this.config.streamPages?this.streamPage:this.storePage).bind(this);return this.recordedPages=[],this.totalLength=0,this.loadWorker(),new Promise((t,s)=>{var i=s=>{switch(s.data.message){case"ready":t();break;case"page":this.encodedSamplePosition=s.data.samplePosition,e(s.data.page);break;case"done":this.encoder.removeEventListener("message",i),this.finish()}};this.encoder.addEventListener("message",i),this.encoder.postMessage(Object.assign({command:"init",originalSampleRate:this.audioContext.sampleRate,wavSampleRate:this.audioContext.sampleRate},this.config))})},i.prototype.pause=function(e){if("recording"===this.state){if(this.state="paused",e&&this.config.streamPages){var t=this.encoder;return new Promise((e,s)=>{var i=s=>{"flushed"===s.data.message&&(t.removeEventListener("message",i),this.onpause(),e())};t.addEventListener("message",i),t.postMessage({command:"flush"})})}return this.onpause(),Promise.resolve()}},i.prototype.resume=function(){"paused"===this.state&&(this.state="recording",this.onresume())},i.prototype.setRecordingGain=function(e){this.config.recordingGain=e,this.recordingGainNode&&this.audioContext&&this.recordingGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.setMonitorGain=function(e){this.config.monitorGain=e,this.monitorGainNode&&this.audioContext&&this.monitorGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.start=function(e){if("inactive"===this.state)return this.initAudioContext(e),this.initAudioGraph(),this.encodedSamplePosition=0,this.initWorker().then(()=>this.initSourceNode(e)).then(e=>{this.sourceNode=e,this.state="recording",this.onstart(),this.encoder.postMessage({command:"getHeaderPages"}),this.sourceNode.connect(this.monitorGainNode),this.sourceNode.connect(this.recordingGainNode)})},i.prototype.stop=function(){if("inactive"!==this.state){this.state="inactive",this.monitorGainNode.disconnect(),this.scriptProcessorNode.disconnect(),this.recordingGainNode.disconnect(),this.sourceNode.disconnect(),this.clearStream();var e=this.encoder;return new Promise(t=>{var s=i=>{"done"===i.data.message&&(e.removeEventListener("message",s),t())};e.addEventListener("message",s),e.postMessage({command:"done"}),this.config.reuseWorker||e.postMessage({command:"close"})})}return Promise.resolve()},i.prototype.destroyWorker=function(){"inactive"===this.state&&this.encoder&&(this.encoder.postMessage({command:"close"}),delete this.encoder)},i.prototype.storePage=function(e){this.recordedPages.push(e),this.totalLength+=e.length},i.prototype.streamPage=function(e){this.ondataavailable(e)},i.prototype.finish=function(){if(!this.config.streamPages){var e=new Uint8Array(this.totalLength);this.recordedPages.reduce((function(t,s){return e.set(s,t),t+s.length}),0),this.ondataavailable(e)}this.onstop(),this.config.reuseWorker||delete this.encoder},i.prototype.ondataavailable=function(){},i.prototype.onpause=function(){},i.prototype.onresume=function(){},i.prototype.onstart=function(){},i.prototype.onstop=function(){},e.exports=i}).call(this,s(1))},function(e,t){var s;s=function(){return this}();try{s=s||new Function("return this")()}catch(e){"object"==typeof window&&(s=window)}e.exports=s}])},17:function(e,t,s){"use strict";s.r(t),s.d(t,"ripple",(function(){return l}));var i=s(5),n=s(53),a=s(1),o=s(15);let r=0;function l(e,t=(()=>Promise.resolve()),s=null,l=!1){if(e.querySelector(".c-ripple"))return;e.classList.add("rp");let c=document.createElement("div");c.classList.add("c-ripple");let d;e.classList.contains("rp-square")&&c.classList.add("is-square"),e[l?"prepend":"append"](c);const h=(e,i)=>{const o=Date.now(),l=document.createElement("div"),h=r++,u=1e3*+window.getComputedStyle(c).getPropertyValue("--ripple-duration").replace("s","");d=()=>{let e=Date.now()-o;const t=()=>{n.a.mutate(()=>{l.remove()}),s&&s(h)};if(el.classList.add("hiding"),Math.max(s-u/2,0)),setTimeout(t,s)}else l.classList.add("hiding"),setTimeout(t,u/2);a.IS_TOUCH_SUPPORTED||window.removeEventListener("contextmenu",d),d=null,p=!1},t&&t(h),window.requestAnimationFrame(()=>{const t=c.getBoundingClientRect();l.classList.add("c-ripple__circle");const s=e-t.left,n=i-t.top,a=Math.sqrt(Math.pow(Math.abs(n-t.height/2)+t.height/2,2)+Math.pow(Math.abs(s-t.width/2)+t.width/2,2)),o=s-a/2,r=n-a/2;l.style.width=l.style.height=a+"px",l.style.left=o+"px",l.style.top=r+"px",c.append(l)})},u=t=>t.target!==e&&(["BUTTON","A"].includes(t.target.tagName)||Object(i.a)(t.target,"c-ripple")!==c);let p=!1;if(a.IS_TOUCH_SUPPORTED){let t=()=>{d&&d()};e.addEventListener("touchstart",s=>{if(!o.default.settings.animationsEnabled)return;if(s.touches.length>1||p||u(s))return;p=!0;let{clientX:i,clientY:n}=s.touches[0];h(i,n),e.addEventListener("touchend",t,{once:!0}),window.addEventListener("touchmove",s=>{s.cancelBubble=!0,s.stopPropagation(),t(),e.removeEventListener("touchend",t)},{once:!0})},{passive:!0})}else e.addEventListener("mousedown",t=>{if(![0,2].includes(t.button))return;if(!o.default.settings.animationsEnabled)return;if("0"===e.dataset.ripple||u(t))return;if(p)return void(p=!1);let{clientX:s,clientY:i}=t;h(s,i),window.addEventListener("mouseup",d,{once:!0,passive:!0}),window.addEventListener("contextmenu",d,{once:!0,passive:!0})},{passive:!0})}},28:function(e,t,s){"use strict";s.d(t,"a",(function(){return a})),s.d(t,"b",(function(){return o})),s.d(t,"c",(function(){return r})),s.d(t,"d",(function(){return l}));var i=s(1),n=s(47);const a=i.IS_TOUCH_SUPPORTED?"mousedown":"click";function o(e,t,s={}){const i=s.listenerSetter?s.listenerSetter.add(e):e.addEventListener.bind(e);s.touchMouseDown=!0,i(a,t,s)}function r(e,t,s){e.removeEventListener(a,t,s)}function l(e){Object(n.a)(e,a)}},31:function(e,t,s){"use strict";var i=s(14),n=s(17);t.a=(e,t={})=>{const s=document.createElement(t.asDiv?"div":"button");return s.className=e+(t.icon?" tgico-"+t.icon:""),t.noRipple||(t.rippleSquare&&s.classList.add("rp-square"),Object(n.ripple)(s)),t.onlyMobile&&s.classList.add("only-handhelds"),t.disabled&&s.setAttribute("disabled","true"),t.text&&s.append(Object(i.i18n)(t.text)),s}},33:function(e,t,s){"use strict";s.d(t,"f",(function(){return h})),s.d(t,"g",(function(){return u})),s.d(t,"c",(function(){return g})),s.d(t,"d",(function(){return y})),s.d(t,"e",(function(){return w})),s.d(t,"b",(function(){return E})),s.d(t,"a",(function(){return M}));var i=s(27),n=s(4),a=s(28),o=s(37),r=s(1),l=s(0),c=s(15),d=s(44);function h(e,t=!1){const s='\n \n \n ';if(t){const t=document.createElement("div");return t.classList.add("preloader"),t.innerHTML=s,e&&e.appendChild(t),t}return e.insertAdjacentHTML("beforeend",s),e.lastElementChild}function u(e,t="check"){return e.classList.remove("tgico-"+t),e.disabled=!0,h(e),()=>{e.innerHTML="",e.classList.add("tgico-"+t),e.removeAttribute("disabled")}}i.a.putPreloader=h;let p=e=>{let t=b.getBoundingClientRect(),{clientX:s,clientY:i}=e,n=s>=t.right?s-t.right:t.left-s,a=i>=t.bottom?i-t.bottom:t.top-i;(n>=100||a>=100)&&g()};const m=e=>{g()},g=()=>{b&&(b.classList.remove("active"),b.parentElement.classList.remove("menu-open"),f&&f.remove(),b=null,c.default.dispatchEvent("context_menu_toggle",!1)),v&&(v(),v=null),r.IS_TOUCH_SUPPORTED||(window.removeEventListener("mousemove",p),window.removeEventListener("contextmenu",m)),document.removeEventListener(a.a,m),l.IS_MOBILE_SAFARI||d.a.removeByType("menu")};window.addEventListener("resize",()=>{b&&g()});let b=null,v=null,f=null;function y(e,t){g(),l.IS_MOBILE_SAFARI||d.a.pushItem({type:"menu",onPop:e=>{g()}}),b=e,b.classList.add("active"),b.parentElement.classList.add("menu-open"),f||(f=document.createElement("div"),f.classList.add("btn-menu-overlay"),f.addEventListener(a.a,e=>{Object(n.a)(e),m()})),b.parentElement.insertBefore(f,b),v=t,r.IS_TOUCH_SUPPORTED||(window.addEventListener("mousemove",p),window.addEventListener("contextmenu",m,{once:!0})),document.addEventListener(a.a,m),c.default.dispatchEvent("context_menu_toggle",!0)}function w({pageX:e,pageY:t},s,i){let{scrollWidth:n,scrollHeight:a}=s;const r=document.body.getBoundingClientRect(),l=r.width,c=r.height;i=o.b.isMobile?"right":"left";let d="top";const h={x:{left:e,right:e-n},intermediateX:"right"===i?8:l-n-8,y:{top:t,bottom:t-a},intermediateY:t=8},p={top:h.y.top+a+8<=c,bottom:h.y.bottom-8>=8};{let e;e=u[i]?h.x[i]:(i="center",h.intermediateX),s.style.left=e+"px"}{let e;e=p[d]?h.y[d]:(d="center",h.intermediateY),s.style.top=e+"px"}s.className=s.className.replace(/(top|center|bottom)-(left|center|right)/g,""),s.classList.add(("center"===d?d:"bottom")+"-"+("center"===i?i:"left"===i?"right":"left"))}let L=!1,S=0;function E(){S&&clearTimeout(S),S=window.setTimeout(()=>{S=0,L=!1},400),L=!0}function M(e,t,s){const i=s?s.add(e):e.addEventListener.bind(e),a=s?s.removeManual.bind(s,e):e.removeEventListener.bind(e);if(l.IS_APPLE&&r.IS_TOUCH_SUPPORTED){let s;const o={capture:!0},r=()=>{clearTimeout(s),a("touchmove",r,o),a("touchend",r,o),a("touchcancel",r,o)};i("touchstart",a=>{a.touches.length>1?r():(i("touchmove",r,o),i("touchend",r,o),i("touchcancel",r,o),s=window.setTimeout(()=>{L?r():(t(a.touches[0]),r(),b&&e.addEventListener("touchend",n.a,{once:!0}))},400))})}else i("contextmenu",r.IS_TOUCH_SUPPORTED?s=>{t(s),b&&e.addEventListener("touchend",n.a,{once:!0})}:t)}},44:function(e,t,s){"use strict";var i=s(27),n=s(0),a=s(40),o=s(35),r=s(6),l=s(4);const c=new class{constructor(){this.navigations=[],this.id=Date.now(),this.manual=!1,this.log=Object(a.b)("NC"),this.debug=!0,this.currentHash=window.location.hash;let e=!1;if(window.addEventListener("popstate",t=>{if(this.debug&&this.log("popstate",t,e),window.location.hash!==this.currentHash)return this.onHashChange&&this.onHashChange(),void this.replaceState();this.currentHash=window.location.hash;if(t.state!==this.id)return void this.pushState();const s=this.navigations.pop();s?(this.manual=!e,this.handleItem(s)):this.pushState()}),window.addEventListener("keydown",e=>{const t=this.navigations[this.navigations.length-1];t&&("Escape"!==e.key||t.onEscape&&!t.onEscape()||(Object(l.a)(e),this.back(t.type)))},{capture:!0,passive:!1}),n.IS_MOBILE_SAFARI){const t={passive:!0};window.addEventListener("touchstart",s=>{if(s.touches.length>1)return;this.debug&&this.log("touchstart");const i=()=>{window.removeEventListener("touchend",r),window.removeEventListener("touchmove",a)};let n=!1;const a=e=>{this.debug&&this.log("touchmove"),e.touches.length>1?i():n=!0},r=t=>{this.debug&&this.log("touchend"),t.touches.length>1||!n||(e=!0,Object(o.a)().then(()=>{e=!1})),i()};window.addEventListener("touchend",r,t),window.addEventListener("touchmove",a,t)},t)}history.scrollRestoration="manual",this.pushState()}handleItem(e){const t=e.onPop(!!this.manual&&void 0);this.debug&&this.log("popstate, navigation:",e,this.navigations),!1===t?this.pushItem(e):e.noBlurOnPop||Object(r.a)(),this.manual=!1}findItemByType(e){for(let t=this.navigations.length-1;t>=0;--t){const s=this.navigations[t];if(s.type===e)return{item:s,index:t}}}back(e){if(e){const t=this.findItemByType(e);if(t)return this.manual=!0,this.navigations.splice(t.index,1),void this.handleItem(t.item)}history.back()}pushItem(e){this.navigations.push(e),this.debug&&this.log("pushstate",e,this.navigations),e.noHistory||this.pushState()}pushState(){this.manual=!1,history.pushState(this.id,"")}replaceState(){history.replaceState(this.id,"",location.origin+location.pathname)}removeItem(e){this.navigations.findAndSplice(t=>t===e)}removeByType(e,t=!1){for(let s=this.navigations.length-1;s>=0;--s){if(this.navigations[s].type===e&&(this.navigations.splice(s,1),t))break}}};i.a.appNavigationController=c,t.a=c},47:function(e,t,s){"use strict";function i(e,t){const s=new Event(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(s)}s.d(t,"a",(function(){return i}))},53:function(e,t,s){"use strict";var i=s(35),n=s(42),a=s(27),o=s(55);const r=new class{constructor(){this.promises={},this.raf=i.b.bind(null),this.scheduled=!1}do(e,t){let s=this.promises[e];return s||(this.scheduleFlush(),s=this.promises[e]=Object(n.a)()),void 0!==t&&s.then(()=>t()),s}measure(e){return this.do("read",e)}mutate(e){return this.do("write",e)}mutateElement(e,t){const s=Object(o.a)(e)?this.mutate():Promise.resolve();return void 0!==t&&s.then(()=>t()),s}scheduleFlush(){this.scheduled||(this.scheduled=!0,this.raf(()=>{this.promises.read&&this.promises.read.resolve(),this.promises.write&&this.promises.write.resolve(),this.scheduled=!1,this.promises={}}))}};a.a&&(a.a.sequentialDom=r),t.a=r},74:function(e,t,s){"use strict";var i=s(27),n=s(36),a=s(30);const o=new class{getState(){return a.a.invokeApi("account.getPassword").then(e=>e)}updateSettings(e={}){return this.getState().then(t=>{let s,i;const n={password:null,new_settings:{_:"account.passwordInputSettings",hint:e.hint,email:e.email}};s=e.currentPassword?a.a.invokeCrypto("computeSRP",e.currentPassword,t,!1):Promise.resolve({_:"inputCheckPasswordEmpty"});const o=t.new_algo,r=new Uint8Array(o.salt1.length+32);return r.randomize(),r.set(o.salt1,0),o.salt1=r,i=e.newPassword?a.a.invokeCrypto("computeSRP",e.newPassword,t,!0):Promise.resolve(new Uint8Array),Promise.all([s,i]).then(e=>(n.password=e[0],n.new_settings.new_algo=o,n.new_settings.new_password_hash=e[1],a.a.invokeApi("account.updatePasswordSettings",n)))})}check(e,t,s={}){return a.a.invokeCrypto("computeSRP",e,t,!1).then(e=>a.a.invokeApi("auth.checkPassword",{password:e},s).then(e=>("auth.authorization"===e._&&(n.a.saveApiUser(e.user),a.a.setUserAuth(e.user.id)),e)))}confirmPasswordEmail(e){return a.a.invokeApi("account.confirmPasswordEmail",{code:e})}resendPasswordEmail(){return a.a.invokeApi("account.resendPasswordEmail")}cancelPasswordEmail(){return a.a.invokeApi("account.cancelPasswordEmail")}};i.a.passwordManager=o,t.a=o},90:function(e,t,s){"use strict";s.d(t,"a",(function(){return a}));var i=s(4),n=s(38);class a extends n.b{constructor(e={}){super(Object.assign({plainText:!0},e)),this.passwordVisible=!1,this.onVisibilityClick=e=>{Object(i.a)(e),this.passwordVisible=!this.passwordVisible,this.toggleVisible.classList.toggle("eye-hidden",this.passwordVisible),this.input.type=this.passwordVisible?"text":"password",this.onVisibilityClickAdditional&&this.onVisibilityClickAdditional()};const t=this.input;t.type="password",t.setAttribute("required",""),t.autocomplete="off";const s=document.createElement("input");s.classList.add("stealthy"),s.tabIndex=-1,s.type="password",t.parentElement.prepend(s),t.parentElement.insertBefore(s.cloneNode(),t.nextSibling);const n=this.toggleVisible=document.createElement("span");n.classList.add("toggle-visible","tgico"),this.container.classList.add("input-field-password"),this.container.append(n),n.addEventListener("click",this.onVisibilityClick),n.addEventListener("touchend",this.onVisibilityClick)}}},96:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(49);class n{constructor(e,t){this.passwordInputField=e,this.size=t,this.needFrame=0,this.container=document.createElement("div"),this.container.classList.add("media-sticker-wrapper")}load(){return this.loadPromise?this.loadPromise:this.loadPromise=i.b.loadAnimationFromURL({container:this.container,loop:!1,autoplay:!1,width:this.size,height:this.size,noCache:!0},"assets/img/TwoFactorSetupMonkeyPeek.tgs").then(e=>(this.animation=e,this.animation.addEventListener("enterFrame",e=>{(1===this.animation.direction&&e>=this.needFrame||-1===this.animation.direction&&e<=this.needFrame)&&(this.animation.setSpeed(1),this.animation.pause())}),this.passwordInputField.onVisibilityClickAdditional=()=>{this.passwordInputField.passwordVisible?(this.animation.setDirection(1),this.animation.curFrame=0,this.needFrame=16,this.animation.play()):(this.animation.setDirection(-1),this.animation.curFrame=16,this.needFrame=0,this.animation.play())},i.b.waitForFirstFrame(e)))}remove(){this.animation&&this.animation.remove()}}}}]); -//# sourceMappingURL=15.04217e6c6e21ea0189db.chunk.js.map \ No newline at end of file diff --git a/public/15.04217e6c6e21ea0189db.chunk.js.map b/public/15.04217e6c6e21ea0189db.chunk.js.map deleted file mode 100644 index efead004..00000000 --- a/public/15.04217e6c6e21ea0189db.chunk.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///15.e4683b80fa29be614579.chunk.js"],"names":["this","push","104","module","__webpack_exports__","__webpack_require__","d","TrackingMonkey","_lib_lottieLoader__WEBPACK_IMPORTED_MODULE_0__","[object Object]","inputField","size","max","needFrame","container","document","createElement","classList","add","input","addEventListener","playAnimation","e","value","length","animation","frame","Math","min","round","idleAnimation","stop","canvas","style","display","direction","setDirection","setSpeed","play","loadPromise","Promise","all","loadAnimationFromURL","loop","autoplay","width","height","then","waitForFirstFrame","_animation","currentFrame","pause","remove","105","CodeInputField","_inputField__WEBPACK_IMPORTED_MODULE_0__","options","super","Object","assign","plainText","type","setAttribute","autocomplete","lastLength","setLabel","replace","slice","setValueSilently","onFill","138","r","appDialogsManager_AppDialogsManager","appManagers_appMessagesManager","appManagers_appProfileManager","rootScope","appManagers_appPeersManager","appManagers_appPhotosManager","clickEvent","cancelEvent","appAvatarsManager","userAgent","movSupport","canPlayType","webpSupport","MEDIA_MIME_TYPES_SUPPORTED","Set","mediaMimeTypesSupport","setInnerHTML","elem","html","innerHTML","mediaSizes","appManagers_appMessagesIdsManager","array","filterChatPhotosMessages","history","message","idx","arr","action","photo","splice","undefined","count","object","listLoader_ListLoader","previous","next","reverse","loadCount","loadWhenLeft","loadedAllUp","loadedAllDown","index","loadedAll","current","loadPromiseUp","loadPromiseDown","dispatchJump","items","item","pop","shift","unshift","load","onJump","older","resolve","anchor","promise","loadMore","result","forEach","bind","processed","processItem","onLoadedMore","searchListLoader_SearchListLoader","_a","backLimit","maxId","mid","incrementMessageId","getSearch","searchContext","peerId","limit","inputFilter","_","next_rate","nextRate","filterMids","onHistoryDelete","msgs","shouldBeDeleted","has","filter","go","onEmptied","onHistoryMultiappend","obj","folderId","mids","sorted","Array","from","sort","a","b","targets","map","Boolean","onMessageSent","storage","isScheduled","getScheduledMessagesStorage","getMessagesStorage","filterMessagesByInputFilter","context","useSearch","reset","removeEventListener","appManagers_appDocsManager","animationIntersector","number","appStateManager","appManagers_appUsersManager","components_scrollable","replaceContent","langPack","appSearch_SearchGroup","name","clearable","className","clickable","autonomous","onFound","list","appManagers_appDialogsManager","createChatList","nameEl","append","setListClickListener","childElementCount","setActive","clear","appSearch_AppSearch","searchInput","searchGroups","onSearch","minMsgId","loadedCount","foundCount","searchPromise","searchTimeout","query","listsContainer","threadId","scrollable","i","messages","setVirtualContainer","onChange","searchMore","onScrolledBottom","trim","window","setTimeout","focus","res","searchGroup","fromId","dialog","dom","addDialogNew","drawStatus","avatarSize","meAsSaved","listEl","dataset","setLastMessage","toggle","catch","err","console","error","components_inputField","inputSearch_InputSearch","placeholder","prevValue","timeout","onInput","clearTimeout","onClearClick","onClear","searchIcon","clearBtn","components_transition","appNavigationController","eventListenerBase","helpers_listenerSetter","components_button","buttonIcon","icon","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","rejected","done","apply","sliderTab_SliderSuperTab","slider","destroyable","_constructor","header","closeBtn","noRipple","title","content","addTab","listenerSetter","closeTab","args","init","selectTab","tabs","delete","removeAll","key","sliderTab_SliderSuperTabEventable","eventListener","dispatchEvent","cleanup","onCloseAfterTimeout","slider_SidebarSlider","historyTabIds","canHideFirst","onCloseBtnClick","findItemByType","navigationType","back","id","animate","isNavigation","closingId","onCloseTab","tab","_selectTab","Map","tabsContainer","sidebarEl","querySelector","querySelectorAll","el","get","onOpen","onOpenAfterTimeout","pushItem","onPop","canAnimate","findAndSplice","tabConstructor","preserveTab","removeTabFromHistory","find","t","getTab","removeByType","onClose","parentElement","appManagers_appChatsManager","popups_avatar","avatarEdit_AvatarEdit","open","getContext","clearRect","buttonCorner","newGroup_AppNewGroupTab","arguments","uploadAvatar","setTitle","avatarEdit","_upload","inputWrapper","groupNameInputField","label","maxLength","nextBtn","contains","disabled","createChat","userIds","chatId","inputFile","editPhoto","sidebarLeft","chatsContainer","userId","rippleEnabled","lastMessageSpan","getUserStatusString","textContent","string","logger","richtextprocessor","horizontalMenu","components_lazyLoadQueue","misc","ripple","vendor_emoji","helpers_blob","helpers_cancellablePromise","helpers_date","lottieLoader","webpWorkerController","debug","appDownloadManager","touchSupport","helpers_files","appMediaPlaybackController_awaiter","SHOULD_USE_SAFARI_FIX","navigator","match","appMediaPlaybackController","media","scheduled","mediaDetails","waitingMediaForLoad","waitingScheduledMediaForLoad","waitingDocumentsForLoad","_volume","_muted","_playbackRate","seekBackward","details","playingMedia","currentTime","seekOffset","seekForward","duration","seekTo","seekTime","onMediaDocumentLoad","doc","getDoc","docId","supportsStreaming","handleSafariStreamable","cacheContext","getCacheContext","src","url","set","onPlay","target","getMessageByMedia","verify","element","listLoader","jumpLength","findIndex","setTargets","setMedia","getMediaFromMessage","onPause","onEnded","isTrusted","paused","clean","s","playItem","getMedia","resolveWaitingForLoadMedia","lockedSwitchers","cssText","body","mediaSession","actions","seekbackward","seekforward","seekto","previoustrack","nexttrack","setActionHandler","warn","properties","_key","dispatchPlaybackParams","defineProperties","volume","muted","playbackRate","autoload","pFlags","is_scheduled","media_unread","myId","readMessages","once","deferred","w","waitingStorage","downloadDoc","safariBuffering","artwork","isVoice","artist","thumbs","bytes","sizes","h","preloadPhoto","setNewMediadata","peerPhoto","getPeerPhoto","loadAvatar","cached","getPeerTitle","format","attribute","attributes","file_name","performer","metadata","MediaMetadata","getScheduledMessageByPeer","getMessageByPeer","willBePlayedMedia","prev","addMedia","setSearchContext","wasPlaying","willBePlayed","toggleSwitchers","enabled","components_appMediaPlaybackController","components_preloader","attachGrabListeners","onStart","onMove","onEnd","onMouseMove","event","x","pageX","y","pageY","onMouseUp","onMouseDown","button","onTouchMove","preventDefault","touches","clientX","clientY","isTouch","onTouchEnd","onTouchStart","passive","rangeSelector_RangeSelector","mousedown","events","withTransition","useTransform","vertical","scrub","rect","getBoundingClientRect","seek","setFilled","onScrub","filled","setProgress","stepStr","indexOf","decimals","_removeListeners","percents","transform","rectMax","offsetAxisValue","bottom","left","toFixed","ButtonMenuItem","text","onClick","regularText","checkboxField","checked","keepOpen","buttonMenu","buttons","ButtonMenuToggleHandler","openedMenu","buttonMenuToggle","asDiv","btnMenu","findUpClassName","mediaPlayer_MediaProgressLine","streamable","progressRAF","onLoadedData","requestAnimationFrame","cancelAnimationFrame","setLoadProgress","onTimeUpdate","onProgress","removeListeners","filledLoad","prepend","setSeekMax","setListeners","setHandlers","scrubTime","isSafariBuffering","buf","buffered","numRanges","nearestStart","end","start","mediaPlayer_VolumeSelector","onMuteClick","setVolume","volumeSvg","btn","firstElementChild","mediaPlayer_VideoPlayer","video","showControlsTimeout","hideControls","isShown","wrapper","controlsLocked","showControls","setHideTimeout","toggleControls","show","onFullScreen","webkitFullscreenElement","parentNode","insertBefore","appendChild","skin","stylePlayer","controls","progress","finally","initDuration","player","buildControls","timeDuration","insertAdjacentHTML","fullScreenButton","timeElapsed","String","toHHMMSS","volumeSelector","togglePlay","relatedTarget","overlaysActive","good","code","toggleFullScreen","altKey","split","eventName","visible","rate","settingsButton","fullscreenElement","mozFullScreenElement","msFullscreenElement","webkitEnterFullscreen","enterFullscreen","isFullScreen","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","msExitFullscreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","middleEllipsis","noop","htmlToSpan","schedulers","throttleWithRaf","fn","schedulerFn","waiting","_args","throttleWith","wrapVoiceMessage","audioEl","out","barHeightMax","isMobile","svg","createElementNS","setAttributeNS","timeDiv","waveform","Uint8Array","valueCount","dataView","DataView","buffer","byteIndex","bitShift","getUint16","decodeWaveform","normValue","wfSize","barCount","maxValue","maxDelta","barX","sumI","bar_value","barWidth","rects","children","audio","lastIndex","ceil","node","throttledTimeUpdate","addAudioListener","readyPromise","mousemove","offsetX","MouseEvent","targetTouches","constructDownloadPreloader","tryAgainOnFail","preloader","cancelable","construct","circle","totalLength","attr","findAudioTargets","justAudioSelector","selector","matches","elements","mediaItems","audio_AudioElement","HTMLElement","withTime","voiceAsMusic","showSender","isRealVoice","isOutgoing","is_outgoing","uploading","durationStr","downloadDiv","onTypeLoad","descriptionEl","parts","audioPerformer","date","wrapSenderToPeer","titleEl","middleEllipsisEl","fontWeight","audioTitle","fileName","wrapSentTime","subtitleDiv","launched","progressLine","lastChild","replaceWith","wrapAudio","audioTimeDiv","onLoad","readyState","HAVE_CURRENT_DATA","onTypeDisconnect","getTimeStr","innerText","attach","noAutoDownload","imgs","wrapped","wrapPhoto","boxWidth","boxHeight","loadPromises","withoutPreloader","lazyLoadQueue","images","thumb","full","img","shouldPlay","onDownloadInit","pauseListener","notifyAll","total","cancel","Error","playListener","download","setDownloadFunction","capture","isConnected","customElements","define","DivAndCaption","fill","border","subtitle","wrapReplyDivAndCaption","subtitleEl","mediaEl","wrapEmojiText","isRound","mediaChildren","middleware","wrapMessageForReply","webpage","appManagers_appImManager","chat","bubbles","getMiddleware","wrapSticker","div","group","CHAT_ANIMATION_GROUP","choosePhotoSize","noBlur","child","replyContainer_ReplyContainer","isMediaSet","RectPart","groupedLayout_Layouter","maxWidth","minWidth","spacing","maxHeight","ratios","countRatios","proportions","countProportions","averageRatio","maxSizeRatio","groupedLayout_ComplexLayouter","layout","layoutTwo","layoutThree","layoutFour","layoutTwoTopBottom","layoutTwoLeftRightEqual","layoutTwoLeftRight","layoutThreeLeftAndOther","layoutThreeTopAndOther","layoutFourTopAndOther","layoutFourLeftAndOther","geometry","sides","minimalWidth","secondWidth","firstWidth","firstHeight","thirdHeight","secondHeight","rightWidth","leftWidth","thirdWidth","h0","w0","w2","w1","h1","h2","ratio","join","cropRatios","attempts","multiHeight","offset","sum","pushAttempt","lineCounts","heights","first","second","third","fourth","optimalAttempt","optimalDiff","attempt","counts","lineCount","totalHeight","minLineHeight","bad1","bad2","line","diff","abs","optimalCounts","optimalHeights","rowCount","row","colCount","lineHeight","col","appManagers_appPollsManager","mtproto_serverTimeManager","editPeer_EditPeer","_disabled","isChanged","validLength","requiredLength","requiredValidLength","inputFields","isValid","required","handleChange","toggleAttribute","withoutAvatar","avatarElem","doNotEditAvatar","unlockOnSuccess","row_Row","freezed","radioField","subtitleLangKey","subtitleLangArgs","havePadding","isToggle","titleRight","noCheckboxSubtitle","titleLangKey","c","navigationTab","RadioFormFromRows","rows","radios","form","RadioForm","copyTextToClipboard","clipboard","writeText","textArea","top","position","select","execCommand","removeChild","fallbackCopyTextToClipboard","helpers_random","radioField_RadioField","stateKey","getState","state","setByKey","main","langKey","Event","toastEl","toast","toastNew","langPackKey","debounce","ms","shouldRunFirst","shouldRunLast","waitingTimeout","waitingPromise","hadNewCall","_resolve","_reject","mtprotoworker","usernameInputField_UsernameInputField","checkUsernameDebounced","checkUsername","getValue","originalValue","setState","Neutral","isUsernameValid","setError","invalidText","head","username","checkUsernamePromise","invokeApi","channel","getChannelInput","available","Valid","availableText","takenText","popups","components_checkboxField","peer_PopupPeer","overlayClosable","avatarEl","avatar_AvatarElement","noTitle","titleLangArgs","fragment","createDocumentFragment","descriptionLangKey","description","p","descriptionLangArgs","checkboxes","o","withRipple","callback","original","nextElementSibling","toggleDisability","chatType_AppChatTypeTab","isBroadcast","section","sidebarLeft_SettingSection","random","privateRow","publicRow","privateSection","publicSection","getChat","linkRow","chatFull","exported_invite","link","btnRevoke","getChatInviteLink","caption","noDelimiter","changed","linkInputField","applyBtn","migrateChat","channelId","updateUsername","close","setOriginalValue","findUpTag","scrollableLoader_ScrollableLoader","loading","loaded","getPromise","checkForTriggers","fastSmoothScroll","findUpAttribute","components_peerTitle","windowSize","appSelectPeers_awaiter","loadAllDialogsPromise","loadedAllDialogs","appSelectPeers_AppSelectPeers","selected","offsetIndex","loadedWhat","renderedPeerIds","peerType","multiSelect","tempIds","selfPresence","needSwitchList","includes","cachedContacts","getMoreResults","f","renderResultsFunc","renderResults","peerIds","splitUp","notRendered","topContainer","selectedContainer","selectedScrollable","delimiter","li","click","checkbox","debouncedInput","appendTo","getResultsPromise","onFirstRender","testSelfSearch","dialogs","archived","pageCount","windowH","tempId","getTempId","getConversations","newOffsetIndex","chatRightsAction","filterByRights","renderSaved","isEnd","getMoreDialogs","contacts","getMoreContacts","canSendToUser","hasRights","getContacts","searchContacts","searchResult","resultPeerIds","my_results","concat","results","channelParticipants","getChannelParticipants","q","participants","participant","getParticipantPeerId","u","promises","getConversationsAll","getMoreChannelParticipants","isNonContactUser","containerEl","getChatMembersString","scroll","insertAdjacentElement","scrollIntoViewNew","offsetWidth","onAnimationEnd","settings","animationsEnabled","values","Static","pickUser_awaiter","pickUser_PopupPickUser","closable","getSelected","onSelect","hide","peerTypes","userPermissions_AppUserPermissionsTab","destroyListener","new","groupPermissions_ChatPermissions","rights","takeOut","banned_rights","editBanned","btnDeleteException","clearChannelParticipantBannedRights","btnDelete","kickFromChannel","groupPermissions_awaiter","v","flags","exceptionText","toggleWith","send_messages","defaultBannedRights","default_banned_rights","combineParticipantBannedRights","info","mainFlag","restriction","until_date","flag","groupPermissions_AppGroupPermissionsTab","chatPermissions","editChatDefaultBannedRights","addExceptionRow","openPermissions","getChannelParticipant","generateContentElement","setSubtitle","bannedRights","cantWhat","getPeerId","peer","update","_b","_c","needAdd","new_participant","view_messages","user_id","prev_participant","exceptionsCount","setLength","loader","setLoader","isChannel","migrateFrom","migrateTo","onScroll","deleteDialog_PopupDeleteDialog","getDialogType","peerTitleElement","callbackLeave","flush","leave","flushHistory","callbackDelete","descriptionArgs","deleteChannel","isDanger","textArgs","editChat_awaiter","editChat_AppEditChatTab","getChatFull","chatUpdateListeners","addChatUpdateListener","chatNameInputField","descriptionInputField","about","editPeer","chatTypeRow","setChatTypeSubtitle","permissionsRow","setPermissionsLength","reduce","acc","editTitle","editAbout","race","removeAttribute","signMessagesCheckboxField","signatures","toggleSignatures","showChatHistoryCheckboxField","togglePreHistoryHidden","onChatUpdate","hidden_prehistory","_init","appManagers_appNotificationsManager","editContact_AppEditContactTab","isNew","isContact","nameInputField","lastNameInputField","user","getUser","setDraftValue","first_name","last_name","notificationsCheckboxField","mutePeer","isMuted","notify_settings","profileNameDiv","profileSubtitleDiv","phoneRow","phone","formatUserPhone","notificationsRow","isPeerLocalMuted","addContact","deleteContacts","addMembers_AppAddMembersTab","skippable","attachToPromise","removeLoader","ret","selectedPeerIds","addInitial","parallaxSupport","generateVerifiedIcon","use","use2","renderImageFromUrl","getEvent","attachGlobalListenerTo","RESET_GLOBAL","swipeHandler_SwipeHandler","cursor","hadMove","xDown","yDown","handleMove","onReset","handleStart","_e","verifyTouchTarget","xUp","yUp","xDiff","yDiff","setProperty","onFirstSwipe","onSwipeResult","onSwipe","peerProfileAvatars_awaiter","peerProfileAvatars_PeerProfileAvatars","photoId","avatar","BASE_CLASS","getPhoto","Image","draggable","putAvatar","avatars","gradient","arrowPrevious","arrowNext","checkScrollTop","scrollTop","freeze","clickX","prevTargets","nextTargets","openAvatarViewer","toRight","right","distance","offsetLeft","cancelNextClick","lastDiffX","minX","lastX","SCALE","TRANSLATE_TEMPLATE","addIndex","getUserPhotos","photos","Number","MAX_SAFE_INTEGER","m","chat_photo","generateFakeAvatarMessage","activeTab","photo_id","setText","peerProfile_PeerProfile","setPeerStatus","needClear","bio","tagName","getProfileByPeerId","getPeer","notifications","generateDelimiter","setBio","self","setPeerStatusInterval","setInterval","setBioTimeout","oldAvatars","setPeer","cleaned","cleanupHTML","setAvatar","getPeerUsername","verified","override","getProfile","userFull","rAbout","wrapRichText","canSetNext","sharedMedia_AppSharedMediaTab","historiesStorage","newCloseBtn","animatedCloseIcon","transitionContainer","transitionFirstItem","editBtn","transitionLastItem","secondTitle","cloneNode","profile","onAdditionalScroll","searchSuper","nav","isSharedMedia","transition","cleanScrollPositions","isHeavyAnimationInProgress","toggleEditBtn","msgIdsByPeer","renderNewMessages","deleteDeletedMessages","appSearchSuper_AppSearchSuper","mediaTabs","onChangeTab","mediaTab","btnAddMembers","showConfirmation","onError","inviteToChannel","addChatUser","filtered","filterMessagesByType","usedFromHistory","performSearchResult","selection","isSelecting","toggleByElement","canViewMembers","loadMutex","peerChanged","setQuery","historyStorage","fillProfileElements","single","justLoad","sidebarRight_appSidebarRight","getElementById","isColumnProportionSet","to","medium","mobile","toggleSidebar","setColumnProportion","sharedMediaTab","proportion","scrollWidth","previousElementSibling","documentElement","enable","active","willChange","animationPromise","appSidebarRight","sidebarRight","pollResults_AppPollResultsTab","resultsDiv","poll","getPoll","quiz","rQuestion","voters","total_voters","roundPercents","hr","answer","answers","answerEl","answerTitle","answerPercents","minHeight","getVotes","option","votesList","votes","vote","showMore","lastElementChild","next_offset","down","singleTransition","lineTotalLength","minIndex","minRemainder","k","remainder","maxRemainder","pollElement","isClosed","closed","performResults","chosenIndexes","prevQuizHint","hideQuizHint","prevQuizHintOnHide","prevQuizHintTimeout","poll_PollElement","setMaxLength","resizePolls","onHide","isQuiz","isRetracted","isPublic","isMultiple","chosingIndexes","sentVote","windowW","MAX_LENGTH","MAX_OFFSET","svgLines","setLineProgress","getTotalLength","pollId","descKey","public_voters","multiple_choice","multipleSelect","descDiv","typeDiv","avatarsDiv","close_period","close_date","timeLeftDiv","quizTimer","strokeWidth","radius","circumference","PI","period","closeTime","serverTimeOffset","quizInterval","time","Date","now","timeLeft","color","stroke","strokeDashoffset","strokeDasharray","clearInterval","getResults","answerDivs","numberDivs","footerDiv","viewResults","votersCountDiv","isTabExists","sendVoteBtn","sendVotes","canVote","setVotersCount","clickHandler","solution","solution_entities","toggleHint","textEl","entities","bubblesContainer","setQuizHint","correctResult","correct","chosen","answerIndex","foundIndex","indexes","sendVotePromise","sendVote","initQuizHint","timeEl","setResults","recent_voters","isVoted","hideSendVoteBtn","hideViewResultsBtn","maxPercents","cb","getPercentValue","iterate","fullTime","times","votersCount","multiplier","helpers_animation","sequentialDom","lib_storage","databases_state","appStickersManager_awaiter","appStickersManager_appStickersManager","getStickerSetPromises","getStickersByEmoticonsPromises","getAnimatedEmojiStickerSet","addMultipleEventsListeners","updateNewStickerSet","saveStickerSet","stickerset","getGreetingStickersTimeout","getGreetingSticker","justPreload","getGreetingStickersPromise","getStickersByEmoticon","docs","greetingStickers","saveDoc","params","overwrite","cachedSet","documents","refreshTime","useCache","saveStickers","stickerSet","getStickerSetInput","saveById","getStickerSet","invokeApiHashable","stickers","emoji","getFromCache","pack","packs","emoticon","getAnimatedEmojiSticker","newSet","setToCache","needSave","installed_date","dcId","thumb_dc_id","isAnimated","animated","location","thumb_version","mimeType","access_hash","short_name","sets","covered","excludeFeatured","exclude_featured","foundSaved","cache","getCache","toLowerCase","cover","getAllStickers","allStickers","includeOurStickers","preloadStickerSets","getRecentStickers","messagesStickers","installedSets","recentStickers","foundStickers","sticker","cachedStickersAnimated","cachedStickersStatic","iteratePacks","appStickersManager","appManagers_appStickersManager","isInDOM","cleanSearchText","helpers_blur","wrappers_awaiter","roundVideoCircumference","wrapVideo","withTail","isOut","noInfo","onlyPreview","noPlayButton","isAlbumItem","canAutoplay","autoPlay","gifs","videos","spanTime","spanPlay","needPlayButton","mime_type","photoRes","divRound","halfSize","ctx","globalVideo","setPeerPromise","onPaused","onFrame","drawImage","detached","foreignObject","getAttributeNS","gotThumb","getThumb","poster","aspecter","isUpload","downloaded","attachMethod","renderDeferred","detach","isFulfilled","addAnimation","loadPhotoThumbFunc","loadFunc","setManual","queueId","render","wrapDocument","audioElement","extSplitted","ext","isArray","docDiv","icoDiv","descriptionParts","nameDiv","_downloadDiv","save","saveDocFile","downloading","noThumb","noFadeIn","blurAfter","setAttachmentSize","regular","thumbImage","image","isFit","loadThumbPromise","photoSize","getStrippedThumbIfNeeded","needFadeIn","renderOnLoad","renderImageWithFadeIn","canAttachPreloader","renderPromise","mutateElement","mutate","onlyThumb","withThumb","stickerType","loadLottieWorkers","toneIndex","haveThumbCached","stickerCachedThumbs","afterRender","getPathFromPhotoPathSize","stickerThumbConverted","getPreviewURLFromThumb","convert","getThumbURL","json","loadAnimationWorker","animationData","saveLottiePreview","getAnimation","restart","wrapStickerSetThumb","downloadOptions","getStickerSetThumbDownloadOptions","needUpscale","blob","URL","createObjectURL","wrapReply","replyContainer","prepareAlbum","widthItem","heightItem","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","forMedia","mediaDiv","wrapAlbum","groupId","attachmentDiv","getMidsByAlbum","getMessage","album","useHeavyAnimationCheck","helpers_middleware","whichChild","positionElementByIndex","pos","prevPos","sortedList_SortedList","updateElementWith","updateListWith","onSort","canUpdate","_updateList","batch","updateBatch","base","onElementCreate","noScheduler","onDelete","getIndex","onUpdate","sortedUserList_awaiter","sortedUserList_SortedUserList","getUserStatusForSort","status","doTimeout","updateList","SORT_INTERVAL","handleTabSwipe","formatPhoneNumber","forward_awaiter","forward_PopupForward","peerIdMids","overrideOnSelect","setInnerPeer","initMessagesForward","deleteMessages_PopupDeleteMessages","onConfirm","revoke","deleteScheduledMessages","deleteMessages","titleArgs","isMegagroup","canRevoke","htmlToDocumentFragment","sendNow_PopupSendNow","sendScheduledMessages","blurActiveElement","cancelSelection","getSelection","empty","removeAllRanges","findUpAsChild","accumulateMapSet","selection_AppSelection","selectedMids","onCancelSelection","toggleSelection","listenElement","selectedText","toString","createRange","verifyTouchLongPress","getElementFromTarget","getElementsBetween","last","firstRect","lastRect","isHigher","parent","lookupBetweenParentClassName","lookupBetweenElementsQuery","firstIndex","targetLookupClassName","verifyTarget","seen","selecting","firstTarget","processElement","checkBetween","seenSet","isSelected","isMidSelected","seenLength","elementsBetween","toggleByMid","canceledSelection","verifyMouseMoveTarget","removeManual","documentListenerOptions","hasCheckbox","getCheckboxInputFromElement","isElementShouldBeSelected","appendCheckbox","forceSelection","cantForward","cantDelete","cantSend","appMessagesManager","getMessageFromStorage","canDeleteMessage","onUpdateContainer","toggleCheckboxes","wasSelecting","forwards","onToggleSelection","updateContainer","toggleElementCheckbox","unselect","config","forwarded_count_max","selection_SearchSelection","toggleMid","updateElementSelection","contentTab","selectionCountEl","selectionGotoBtn","selectionForwardBtn","selectionDeleteBtn","navScrollableContainer","selectionContainer","btnCancel","attachClickOptions","keys","fromPeerId","isPrivate","transitionElement","opacity","selection_ChatSelection","recording","bubble","canSelectBubble","isGroupedBubbleSelected","getMidsByMid","getBubbleGroupedItems","groupContainer","isGroupedSelected","isGroupedMidsSelected","mounted","getMountedBubble","borderRadius","rowsWrapper","fakeSelectionWrapper","fakeRowsWrapper","fakeSelectionRect","fakeRowsRect","widthFrom","widthTo","scale","initTranslateX","br","selectionInputWrapper","selectionSendNowBtn","isGrouped","groupedCheckboxInput","appSearchSuper_awaiter","appSearchSuper_SearchContextMenu","attachTo","onGotoClick","onForwardClick","onSelectClick","onClearSelectionClick","onDeleteClick","onContextMenu","cancelBubble","withSelection","prevTabId","urlsToRevoke","nextRates","loadedChats","firstLoad","log","monthContainers","mediaTabsMap","asChatList","groupByMonth","hideEmptyTabs","onTransitionStart","onTransitionEnd","searchContextMenu","navScrollable","tabsMenu","menuTab","span","prevId","searchGroupMedia","tabContent","skipScroll","newMediaTab","fromMediaTab","offsetTop","scrollHeight","rect2","onMediaClick","targetClassName","appMediaViewer_AppMediaViewer","copySearchContext","openMedia","inputMessagesFilterPhotoVideo","inputMessagesFilterDocument","lock","unlockAndRefresh","elemsToAppend","sharedMediaDiv","entity","totalEntities","display_url","sliced","matchUrl","same","hostname","rDescription","previewDiv","getAbbreviation","rTitle","subtitleFragment","HTMLAnchorElement","decodeURIComponent","href","firstChild","wrapPlainText","method","monthContainer","getMonthContainerByTimestamp","afterPerforming","inputMessagesFilterEmpty","showMembersCount","participants_count","regExp","RegExp","titleSpan","formatted","arg","globalContacts","isShort","minDate","renderRecentSearch","recent","recentSearch","getTopPeers","peers","people","onlyFirstName","renderParticipants","membersList","deleted","LOAD_COUNT","loadMembers","loadChats","logStr","used","slicedLength","ids","filters","counters","getSearchCounters","firstMediaTab","counter","membersTab","toLoad","loadType","timestamp","setHours","setDate","dateTimestamp","getTime","containers","month","getFullYear","year","dateElement","IntlDateElement","haveTimestamps","goFirst","revokeObjectURL","newInputFilter","maxDate","PrivacyType","apiUpdatesManager","appPrivacyManager","privacy","updatePrivacy","rules","inputKey","privacyRules","saveApiUsers","users","saveApiChats","chats","processLocalUpdate","inputRule","rule","privacyKey","types","allowPeers","disallowPeers","appManagers_appPrivacyManager","privacySection_PrivacySection","onRadioChange","captions","captionElement","radioSection","exceptions","Everybody","Nobody","radioRows","Contacts","skipTypes","noExceptions","generateSection","exceptionTexts","exception","_peerIds","newPeerIds","generateStr","splitPeersByType","getPrivacy","getPrivacyRulesDetails","setRadio","chatKey","usersKey","splitted","getUserInput","setPrivacy","phoneNumber_AppPrivacyPhoneNumberTab","phoneSection","nextSibling","passwordManager","passwordSet_AppTwoStepVerificationSetTab","stickerContainer","inputContent","btnReturn","sliceTabsUntilTab","settings_AppSettingsTab","codeInputField","canFocus","isFirstInput","emailConfirmation_AppTwoStepVerificationEmailConfirmationTab","isFirst","email","confirmPasswordEmail","goNext","btnChange","btnResend","disable","cancelPasswordEmail","email_AppTwoStepVerificationEmailTab","resendPasswordEmail","onContinueClick","btnContinue","btnSkip","matchEmail","toggleButtons","updateSettings","hint","currentPassword","plainPassword","newPassword","symbols","isCancel","monkeys_password","components_passwordInputField","tracking","hint_AppTwoStepVerificationHintTab","onSkipClick","saveHint","reEnterPassword_AppTwoStepVerificationReEnterPasswordTab","passwordInputField","monkey","verifyInput","enterPassword_AppTwoStepVerificationEnterPasswordTab","has_password","labelText","IntlElement","getStateInterval","_state","check","auth","_2fa_AppTwoStepVerificationTab","btnChangePassword","btnDisablePassword","btnSetRecoveryEmail","has_recovery","btnSetPassword","lastSeen_AppPrivacyLastSeenTab","profilePhoto_AppPrivacyProfilePhotoTab","forwardMessages_AppPrivacyForwardMessagesTab","addToGroups_AppPrivacyAddToGroupsTab","calls_AppPrivacyCallsTab","activeSessions_AppActiveSessionsTab","Session","app_name","app_version","ip","country","date_active","date_created","hash","midtitle","device_model","system_version","platform","authorizations","session","btnTerminate","otherSection","privacyTab","updateActiveSessions","onTerminateClick","menuElement","blockedUsers_AppBlockedUsersTab","btnAdd","toggleBlock","bot","blocked","getBlocked","appManagers_appDraftsManager","privacyAndSecurity_AppPrivacyAndSecurityTab","blockedPeerIds","blockedUsersRow","passwordState","twoFactorRow","email_unconfirmed_pattern","activeSessionsRow","setBlockedCount","updateBlocked","rowsByKeys","numberVisibilityRow","lastSeenTimeRow","photoVisibilityRow","callRow","linkAccountRow","groupChatsAddRow","updatePrivacyRow","disallowLength","allowLength","sensitive_can_change","sensitive_enabled","sensitiveRow","_enabled","deleteButton","clearAllDrafts","auths","rgbaToHsla","g","l","hslaToRgba","hue2rgb","hexaToRgba","hexa","parseInt","rgbaToHexa","rgba","hslaStringToHexa","hsla","alpha","val","endsWith","hslaStringToRgba","highlightningColor","throttle","colorPicker_ColorPicker","hue","saturation","lightness","onGrabStart","boxDragger","onGrabEnd","box","sliders","hueDragger","hexInputField","rgbInputField","inputs","valid","setColor","rgbRegExp","attachBoxListeners","attachHueListeners","boxRect","saturationHandler","hueRect","hueHandler","updateHexInput","updateRgbInput","hexaToHsla","rgb","boxX","percentY","boxY","percentHue","hueX","updatePicker","rgbaArray","hex","hsl","getCurrentColor","maxX","maxY","posX","posY","lightnessX","lightnessY","backgroundColor_AppBackgroundColorTab","_applyColor","updateColorPicker","colorPicker","background","theme","pushToState","applyCurrentTheme","onColorChange","applyColor","getTheme","grid","backgroundColor","uploadTempId","background_AppBackgroundTab","clicked","onUploadClick","file","dc_id","file_reference","wallpaper","slug","upload","addNotifyListener","_wallpaper","newDoc","newCacheContext","setBackgroundDocument","addWallPaper","onResetClick","defaultTheme","themes","blurCheckboxField","blur","onGridClick","saveToCache","fetch","response","cacheStorage","_tempId","onReady","imageUrl","naturalWidth","naturalHeight","pixel","pixels","getImageData","data","pixelsLength","outPixel","Uint8ClampedArray","averageColor","uploadButton","colorButton","resetButton","accountWallpapers","wallpapers","pattern","assumeType","stickers_PopupStickers","stickerSetInput","onStickersClick","fileId","sendMessageWithDocument","h6","setOnlyOnePlayableGroup","stickersDiv","stickersFooter","loadStickerSet","toggleStickerSet","esgSticker","generalSettings_RangeSettingSelector","initialValue","minValue","valueDiv","range","generalSettings_AppGeneralSettingsTab","messagesTextSize","chatBackgroundButton","animationsCheckboxField","enterRow","ctrlEnterRow","contactsCheckboxField","privateCheckboxField","groupsCheckboxField","channelsCheckboxField","gifsCheckboxField","videosCheckboxField","suggestCheckboxField","bigCheckboxField","loopCheckboxField","stickerSets","renderStickerSet","editProfile_awaiter","editProfile_AppEditProfileTab","firstNameInputField","bioInputField","getSelf","usernameInputField","setProfileUrl","profileUrlContainer","profileUrlAnchor","updateProfile","uploadProfilePhoto","includedChats_awaiter","includedChats_AppIncludedChatsTab","foundInFilters","dialogsByFilters","onSelectChange","confirmBtn","pinned_peers","other","editFolderTab","setFilter","filtersStorage","getDialogFilters","dialogsStorage","getFolder","categoriesSection","exclude_muted","ico","exclude_archived","exclude_read","non_contacts","groups","broadcasts","bots","chatsSection","selectedPeers","include_peers","exclude_peers","addedInitial","_add","hasOwnProperty","originalFilter","editFolder_AppEditFolderTab","deleteFolderButton","updateDialogFilter","bool","menuBtn","generateList","h2Text","categories","includedFlagsContainer","excludedFlagsContainer","include","createDialogFilter","editCheckForChange","loadAnimationPromise","wrapDraftText","ul","renderMore","_length","firstTime","onEditOpen","onCreateOpen","chatFolders_awaiter","chatFolders_AppChatFoldersTab","filtersRendered","dialogFilter","folder","channels","isAnyGroup","filterId","getFilter","orderIndex","createFolderBtn","foldersSection","suggestedSection","onFiltersContainerUpdate","renderFolder","getSuggestedFilters","suggestedFilters","notifications_AppNotificationsTab","NotifySection","enabledRow","typeText","previewEnabledRow","inputNotifyPeer","getNotifySettings","notifySettings","applySettings","show_previews","mute","showPreviews","inputSettings","mute_until","updateNotifySettings","contactsSignUpRow","soundRow","sound","getContactSignUpNotification","setContactSignUpNotification","language_awaiter","language_AppLanguageTab","invokeApiCacheable","lang_pack","languages","language","lang_code","native_name","getLangPack","getCacheLangPack","logOut","phoneDiv","buttonsDiv","edit","folders","general","fillElements","newChannel_AppNewChannelTab","channelNameInputField","channelDescriptionInputField","onLengthChange","createChannel","components_telInputField","createContact_PopupCreateContact","withConfirm","btnConfirm","importContact","telInputField","lockWithPromise","validate","country_code","contacts_AppContactsTab","inputSearch","openContacts","sortedUserList","createList","renderPage","archivedTab_AppArchivedTab","sortedLists","chatList","generateScrollable","scrollables","wasFilterId","setFilterId","onTabChange","app","sessionStorage","fakeGradientDelimiter","appSidebarLeft","sidebarHeader","onContactsClick","backBtn","btnArchive","themeCheckboxField","menuButtons","openUsername","kz_version","isMainDomain","toolsBtn","btnMenuFooter","rel","stopPropagation","suffix","versionFull","newBtnMenu","initSearch","archivedCount","requestPeer","searchContainer","pickedElements","selectedPeerId","selectedMinDate","selectedMaxDate","updatePicked","removeProperty","helper","unselectEntity","renderEntity","dates","dateData","getAttribute","peopleContainer","hideNewBtnMenuTimeout","onFocus","clearRecentSearchBtn","bubbleGroups_BubbleGroups","detailsMap","newGroupDiff","updateGroup","viaBotId","fwdFromId","removeBubble","insertObject","foundBubble","foundAtIndex","foundMidOnSameTimestamp","_timestamp","_mid","bubbleGroup","insertIndex","datePicker_PopupDatePicker","initDate","onPick","noButtons","selectedDate","onPrevClick","selectedMonth","setMonth","getMonth","minMonth","prevBtn","onNextClick","maxMonth","onDateClick","selectedEl","setTimeTitle","setFullYear","getDate","controlsDiv","monthTitle","monthsContainer","handleTimeInput","onOverflow","maxString","hoursInputField","minutesInputField","setMinutes","getMinutes","getHours","popupCenterer","timeOptions","minute","hour","sendDate","dateOptions","day","weekday","firstDate","weekStartDate","getDay","renderElement","dayIndex","clonedDate","showOverflowMonths","lines","StickyIntersector","handler","observeHeaders","observeElements","headersObserver","IntersectionObserver","entries","entry","targetInfo","boundingClientRect","stickyTarget","rootBoundsInfo","rootBounds","threshold","root","elementsObserver","isIntersecting","sentinel","headerSentinel","addSentinel","observe","disconnect","unobserve","replies_RepliesElement","updated","postKey","replies","leftPart","recent_repliers","getHistoryStorage","channel_id","isUnread","read_max_id","max_id","readMaxId","textSpan","iconSpan","rippleContainer","subscribeRepliesThread","updateMessage","messageRender_MessageRender","MessageRender","setTime","bubbleContainer","messageDiv","views","postAuthor","post_author","fwd_from","saved_from_msg_id","forward","edit_date","edit_hide","pinned","timeSpan","renderReplies","isFooter","repliesFooter","setReply","isReplacing","currentReplyDiv","reply_to_mid","replyToPeerId","reply_to","reply_to_peer_id","appPeersManager","originalPeerTitle","originalMessage","wrapSingleMessage","needUpdate","replyMid","mtproto_config","slicedArray","getElementByPoint","verticalSide","horizontalSide","floor","elementFromPoint","reflowScrollableElement","bin_utils","searchIndex","stateStorage","EMOJI_LANG_PACK","keywords","version","langCode","langPackCode","appEmojiManager_AppEmojiManager","keywordLangPacks","indexedLangPacks","getKeywordsPromises","storageKey","from_version","keywordsDifference","packKeywords","keyword","emoticons","getEmojiKeywords","lastRequestedLangCode","getRecentEmojis","indexObject","emojis","indexEmojis","search","POPULAR_EMOJI","getRecentEmojisPromise","recentEmoji","fixEmoji","appEmojiManager_appEmojiManager","appEmojiManager","appManagers_appEmojiManager","emojiSupport","loadedURLs","appendEmoji","unify","spanEmoji","kek","wrapSingleEmoji","getEmojiFromElement","nodeType","nodeValue","emoji_EmojiTab","closeScrollTop","onContentClick","messageInput","inputHTML","inserted","savedRange","components_emoticonsDropdown","getSavedRange","sel","addRange","getRangeAt","rangeCount","deleteContents","insertNode","setStart","setStartAfter","collapse","divs","Emoji","category","titleDiv","itemsDiv","unified","menu","emojiScroll","hasRecent","activeId","emoticonsDropdown_EmoticonsDropdown","menuOnClick","stickyIntersector","setMenuActive","recentItemsDiv","observeStickyHeaderChanges","calcImageInBox","gifsMasonry_awaiter","gifsMasonry_GifsMasonry","scrollPromise","processInvisibleDiv","intersector","isVisible","getAnimations","checkAnimation","processVisibleDiv","gifWidth","gifHeight","willUseWidth","gifsMasonry_width","gifs_GifsTab","gifsContainer","masonry","EMOTICONSSTICKERGROUP","addLazyLoadQueueRepeat","stickers_awaiter","stickers_SuperStickerRenderer","regularLazyLoadQueue","animatedDivs","checkAnimationContainer","renderSticker","observeAnimatedDiv","stickers_StickersTab","queueCategoryPush","categoryDiv","categoryTitle","superStickerRenderer","recentDiv","categoryPush","menuWrapper","menuScroll","appInlineBotsManager_awaiter","appInlineBotsManager_appInlineBotsManager","inlineResults","setHash","geo","lat","long","accuracy_radius","botId","getInputPeerById","geo_point","getGeoInput","stopTime","noErrorBox","botResults","queryId","query_id","savePhoto","generateQId","resultId","topPeers","topPeer","rating","setKeyValueToStorage","startParam","startBot","bot_inline_placeholder","peerData","setDraft","msg_id","getServerMessageId","callbackAnswer","noLinks","noLinebreaks","queryAndResultIds","inlineResult","pushPopularBot","queryID","resultID","send_message","reply_markup","replyMarkup","sendText","inputMedia","sendMessage","getMediaInput","geoPoint","address","provider","venue_id","venue_type","phone_number","vcard","percent","sendOther","appInlineBotsManager","appManagers_appInlineBotsManager","gifs_awaiter","gifs_AppGifsTab","nextOffset","onGifsClick","gifsDiv","checkAnimations","newSearch","gifBotPeerId","resolveUsername","getInlineResults","stickers_AppStickersTab","setsDiv","countDiv","stickerDiv","renderFeatured","getFeaturedStickers","coveredSets","filterRendered","renderSet","searchStickerSets","dropdownHover_awaiter","dropdownHover_DropdownHover","forceClose","inited","onMouseOut","displayTimeout","isActive","toElement","willBeActive","onmouseout","onmouseover","emoticonsDropdown_awaiter","tabId","onSelectTabClick","searchButton","deleteBtn","checkRights","tabsEl","tabsElements","canSendStickers","canSendToPeer","canSendGifs","chatInput","getGoodRange","lockIntersectionGroup","unlockIntersectionGroup","unlock","refresh","emojiTab","stickersTab","gifsTab","0","1","2","getVisible","clearVisible","activeElement","jumpedTo","stuck","which","scrollLeft","clearDraft","emoticonsDropdown","bubbles_awaiter","IGNORE_ACTIONS","TEST_SCROLL","bubbles_queueId","bubbles_ChatBubbles","appUsersManager","appPhotosManager","appProfileManager","appDraftsManager","appMessagesIdsManager","unreadOut","skippedMids","dateMessages","scrolledDown","isScrollingTimeout","unreaded","unreadedSeen","loadedTopTimes","loadedBottomTimes","messagesQueuePromise","messagesQueue","messagesQueueOnRender","messagesQueueOnRenderAdditional","firstUnreadBubble","replyFollowHistory","isFirstLoad","passEntities","viewsMids","onBubblesClick","chatInner","onDatePick","contactDiv","appImManager","bubbleMid","reply_to_top_id","lastMsgId","openThread","filterMessages","getDiscussionMessage","savedFrom","msgId","isVideoComponentElement","messageId","documentDiv","isMediaCompatibleForDocumentViewer","parents","hasAspecter","albumItem","getMidsByMessage","isReplyClick","replyToMid","reply_to_msg_id","getDistanceToEnd","topbar","pinnedMessage","setCorrectIndex","lastScrollDirection","requestHistory","setMessageId","setScroll","bubbleGroups","setBubblePosition","scrollingToBubble","scrollToBubbleEnd","deleteMessagesByIds","_d","tempMessage","repliesElement","grouped_id","newPoll","safeRenderMessage","scrollToBubbleIfLast","getGroupedBubble","updatePosition","deleteEmptyDateGroups","deletedMids","renderedId","renderMaxId","groupedMessagesStorage","highlightBubble","initMessageReply","dateMessage","renderNewMessagesByIds","msgIds","setUnreadCount","updateUnreadByDialog","finishPeerChange","updateMessageInput","isScrolledDown","setMessagesQueuePromise","performHistoryResult","postViewsElements","str","different","postViews","unreadedObserver","onUnreadedInViewport","viewsObserver","sendViewCountersDebounced","incrementMessageViews","wasHeight","offsetHeight","resizing","skip","scrolled","part","rAF","onResizeEnd","setEndRAF","ResizeObserver","contentRect","realDiff","_part","needScrollTop","readUnreaded","readPromise","idle","focusPromise","bubblesMaxId","readContents","isMentionUnread","readHistory","bad","getHistoryTopPromise","getHistoryBottomPromise","getHistory","setLoaded","onScrolledTop","loadMoreHistory","readOutboxMaxId","permanent","emptyPlaceholderMid","deleteSelectedMids","replyTo","getLastBubble","lastDateGroup","getLastDateGroup","forceDirection","forceDuration","dateGroup","scrollToBubble","lastElem","lastTime","firstTimestamp","datasetKey","today","bubbleContent","serviceMsg","bubblesToo","attachedUnreadBubble","fetchNewPromise","onAnimateLadder","resolveLadderAnimation","samePeer","topMessage","pinnedMessages","isTarget","savedPosition","getChatSavedPosition","getReadMaxIdIfUnread","isJump","apiManager","setQueueId","messageEntityBotCommand","isBot","additionMsgId","maxBubbleId","getBubbleByPoint","oldChatInner","lockGroup","lastScrollTop","unlockGroup","fromUp","followingUnread","mountedByLastMsgId","findNextMountedBubbleByMsgId","afterSetPromise","needFetchInterval","isFetchIntervalNeeded","getNewHistory","isBottomEnd","Bottom","onScrolledAllDown","getDialogOnly","unread_mark","markDialogUnread","canWrite","queue","setUnreadDelimiter","getDateContainerByMessage","addBubble","multipleRender","albumMustBeRenderedFull","our","contentWrapper","wasClassNames","classNames","transitionDelay","originalMid","unread","chat_id","wrapMessageActionTextNew","renderMessagesQueue","is_single","messageMessage","messageMedia","getAlbumText","richText","canHaveTail","isStandaloneMedia","needToSetHTML","emojiEntities","strLength","curr","big","containerDiv","rowDiv","buttonEl","same_peer","checkSwitchReturn","switchInlineQuery","column","callbackButtonClick","messageWithReplies","getMessageWithReplies","withReplies","nameContainer","processingWebPage","noAutoDownloadMedia","previewResizer","preview","quote","quoteTextDiv","site_name","textDiv","isSquare","emojiSticker","animatedSticker","staticSticker","newNameContainer","wrapGroupedDocuments","lastContainer","texts","wrapPoll","needName","isForwardFromChannel","from_id","isHidden","from_name","getPeerColorById","goto","generateTail","renderMessage","isBackLimit","previousScrollHeightMinusTop","needReflowScroll","processLocalMessageRender","firstSlice","lastSlice","Top","newScrollTop","getScheduledMessages","additionMsgIds","isAdditionRender","animateAsLadder","targetMid","sortedMids","topIds","middleIds","bottomIds","setBubbles","delay","lastMsDelay","topRes","middleRes","bottomRes","delays","listElements","creator","renderEmptyPlaceholder","service","generateMessageId","peer_id","getOutputPeer","saveMessages","side","checkPlaceholders","bot_info","checkIfEmptyPlaceholderNeeded","generateLocalFirstMessage","getRenderedLength","realLoadCount","Both","resultPromise","isFirstMessageRender","processResult","historyResult","serviceStartMessageId","threadsServiceMessagesIdsStorage","sup","processPromise","waitPromise","safeCount","mustBeCount","unpinMessage_PopupPinMessage","unpin","canUnpin","canPinMessage","oneSide","silent","unpinAllMessages","hidePinnedMessages","updatePinnedMessage","buttonText","pinButtonText","isSelectionEmpty","selectionRange","START_TO_END","reportMessagesConfirm_PopupReportMessagesConfirm","reason","reportMessages","STICKER_EMOJI","reportMessages_PopupReportMessages","preloadStickerPromise","preloadAnimatedEmojiSticker","margin","marginTop","contextMenu_ChatContextMenu","appPollsManager","appDocsManager","onSendScheduledClick","onReplyClick","onEditClick","initMessageEditing","onCopyClick","onCopyAnchorLinkClick","onCopyLinkClick","threadMessage","channel_post","onPinClick","onUnpinClick","onRetractVote","onStopPoll","stopPoll","isTargetAGroupedItem","isSelectable","isTextSelected","isAnchorTarget","isUsernameTarget","selectedMid","groupedItem","hasAttribute","notDirect","scheduleSending","editMessage","scheduleDate","canEditMessage","hasTarget","isGoodType","recorder_min","recorder_min_default","n","opusDecodeController","sendContextMenu_SendMenu","sendMenuButtons","onSilentClick","onScheduleClick","sendMenu","openSide","onContextElement","getRichValue","isInputEmpty","createPoll_PopupCreatePoll","onSubmitClick","send","radioLabel","isEmpty","questions","appendMoreField","correctAnswers","optionInputFields","labelOptions","weakMap","questionInputField","sendSilent","setPeerId","dd","settingsCaption","anonymousCheckboxField","multipleCheckboxField","quizCheckboxField","quizSolutionField","quizElements","quizSolutionCaption","quizHr","quizSolutionContainer","quizSolutionSubtitle","onEscape","getFilledAnswers","HTMLInputElement","question","quizSolution","force","quizSolutionEntities","inputMediaPoll","getInputMediaPoll","replyToMsgId","helperType","clearHelper","questionField","placeCaretAtEnd","newMedia_PopupNewMedia","files","willAttachType","confirmShortcutIsSendShortcut","wasInputValue","willAttach","sendFileDetails","onKeyDown","attachFile","itemDiv","isVideo","source","objectURL","videoWidth","videoHeight","audioDecodedByteCount","webkitAudioDecodedByteCount","noSound","onload","isPhoto","isAudio","finish","onerror","mediaContainer","caption_length_max","showLengthOn","messageInputField","groupCheckboxField","attachFiles","isMedia","firstType","sendAlbum","sendFile","foundPhotos","foundVideos","albumsLength","albumContainer","AXIS_Y_KEYS","AXIS_X_KEYS","attachListNavigation","waitForKey","keyNames","getCurrentTarget","setCurrentTarget","_target","scrollTo","hadTarget","getNextTargetX","currentTarget","isNext","nextTarget","handleArrowKey","property","endProperty","currentRect","targetRect","getNextTargetY","fireSelect","canContinue","resetTarget","_onKeyDown","autocompleteHelper_AutocompleteHelper","hidden","onVisible","listType","navigationItem","noBlurOnPop","removeItem","attachNavigation","controller","addHelper","fromController","hideOtherHelpers","stickersHelper_StickersHelper","onChangeScreen","ready","getMinDate","getMaxDate","schedule_PopupSchedule","canSendWhenOnline","btnSendWhenOnline","isSendShortcutPressed","getRichElementValue","getRichValueWithCaret","field","withEntities","selNode","selOffset","startContainer","endContainer","startOffset","endOffset","caretPos","substr","combineSameEntities","emojiHelper_EmojiHelper","onEmojiSelected","firstChar","getBothEmojiKeywords","searchEmojis","autocompletePeerHelper_AutocompletePeerHelper","listElement","BASE","BASE_CLASS_LIST_ELEMENT","commandsHelper_CommandsHelper","getReadyToSend","botInfos","ignoreCase","commands","botInfo","botCommand","command","found","autocompleteHelperController_AutocompleteHelperController","helpers","preserveHelper","mentionsHelper_MentionsHelper","insertAtCaret","topMsgId","trimmed","getMentions","fixSafariStickyInput","replyKeyboard_ReplyKeyboard","onBodyTouchStart","btnHover","attachButtonListener","checkAvailability","checkForceReply","touchListener","getReplyMarkup","inlineHelper_awaiter","inlineHelper_InlineHelper","sendInlineResult","_checkQuery","gifsMasonry","isGallery","gallery","noCommands","separator","dataURL","switch_pm","btnSwitchToPM","switchToPM","start_param","checkQuery","fixSafariStickyInputFocusing","input_ChatInput","appChatsManager","appWebPagesManager","serverTimeManager","appNotificationsManager","lastUrl","lastTimeType","replyElements","willSendWebPage","recordCanceled","recordStartTime","lockRedo","canRedoFromHTML","undoHistory","executedHistory","canUndoFromHTML","onCancelRecordClick","recorder","setKeepAlive","onEmoticonsOpen","toggleClass","btnToggleEmoticons","onEmoticonsClose","isUserOnlineVisible","openScheduled","prepareDocumentExecute","undoRedo","needHTML","sameHTMLTimes","currentHTML","handleMarkdownShortcut","formatKeys","B","I","U","S","M","K","markupTooltip","showLinkEditor","applyMarkdown","shiftKey","onMessageInput","richValue","markdownEntities","parseMarkdown","mergeEntities","parseEntities","urlEntities","getWebPagePromise","saveWebPage","setTopInfo","noWebPage","onHelperCancel","helperFunc","setTyping","editMsgId","saveDraftDebounced","checkAutocomplete","updateSendBtn","getEmojiEntityFromEmoji","onBtnSendClick","forwarding","showDiscardPopup","btnCancelRecord","recordingOverlayListener","recordingNavigationItem","sourceNode","analyser","createAnalyser","connect","fftSize","frequencyData","frequencyBinCount","getByteFrequencyData","recordRippleEl","recordTimeEl","needReturn","onHelperClick","helperWaitingForward","inputContainer","tail","goDownBtn","onGoDownClick","cancelBtn","newMessageWrapper","inputMessageContainer","goDownUnreadBadge","goMentionBtn","goMentionUnreadBadge","goToNextMention","btnScheduled","btnToggleReplyMarkup","replyKeyboard","attachMenuButtons","fileInput","accept","attachMenu","multiple","autocompleteHelperController","stickersHelper","emojiHelper","commandsHelper","mentionsHelper","inlineHelper","btnSendContainer","btnSend","attachMessageInputField","previousQuery","onFakeInput","draft","saveDraft","encoderSampleRate","monitorGain","numberOfChannels","recordingGain","reuseWorker","touchMouseDown","onstop","ondataavailable","typedArray","dataBlob","Blob","decode","isVoiceMessage","pinnedControlBtn","fakeContainer","fakePinnedControlBtn","originalChat","pinnedMessageContainer","unread_count","hasMentions","unread_mentions_count","no_webpage","syncDraft","helperToo","clearInput","fromUpdate","getDraft","rMessage","setInputValue","isAnonymousSending","oldInputField","inputFake","attachMessageInputListeners","ctrlKey","metaKey","childNodes","readAllHistory","commandsMap","bold","italic","underline","strikethrough","monospace","saveExecuted","executed","haveThisType","isCollapsed","tag","commonAncestorContainer","setActiveMarkupButton","insertText","insertEntity","isHelper","fullValue","prefix","AUTO_COMPLETE_REG_EXP","matchIndex","newValue","hadEntities","insertLength","addEntities","caret","selectNode","noCollapse","selectNodeContents","setRichFocus","_value","foundHelper","suggest","checkEmoticon","checkInlineAutocomplete","needPlaceholder","inlineMatch","btnPreloader","inlinePlaceholder","canSetDraft","fireEvent","clearValue","clearReply","unicode","pushRecentEmoji","webPage","forwardMessages","pushRecentSticker","replyFragment","fromPeerIdsMids","fromPeerIds","smth","peerTitles","firstMessage","usingFullAlbum","albumMids","peerTitleEl","callerFunc","replyParent","pinnedContainer_classNames","pinnedContainer_PinnedContainer","floating","divAndCaption","CLASSNAME_BASE","btnClose","wrapperUtils","attachOnCloseEvent","needClose","isFloating","maxActive","setFloating","setUtilsWidth","audio_ChatAudio","prevEl","nextEl","attachClick","toggleEl","volumeProgressLineContainer","tunnel","progressWrapper","BAR_HEIGHTS","PinnedMessageBorder","drawRect","getClipPath","barHeight","GAP","clipPath","path","getBarHeight","ONE","TWO","THREE","FOUR","MORE","getMarkHeight","markHeight","getMarkTranslateY","getTrackTranslateY","trackHeight","getTrackHeight","pinnedMessageBorder_BASE_CLASS","clipPathId","markTranslateY","trackTranslateY","defs","mark","pinnedMessage_awaiter","AnimatedSuper","animateFirst","currentIndex","clearRow","DURATION","reflow","clearRows","previousIndex","fromTop","ignorePrevious","setNewRow","previousRow","AnimatedCounter","previousNumber","animatedSuper","decimal","previousDecimalNumber","getRow","EMPTY_INDEX","previousByDecimal","decimalNumber","getDecimal","hideLeft","pinnedMessage_ChatPinnedMessage","pinnedMaxMid","pinnedMid","pinnedIndex","wasPinnedIndex","wasPinnedMediaIndex","locked","waitForScrollBottom","loadedBottom","loadedTop","scrollDownListenerSetter","getCurrentIndexPromise","isStatic","dAC","pinnedMessageBorder","animatedSubtitle","animatedMedia","animatedCounter","btnOpen","openPinned","setPinnedMessage","_setPinnedMessage","unsetScrollDownListener","testMid","isNeededMore","getCurrentIndex","LOAD_OFFSET","correctAfter","gotRest","getPinnedMessage","backLimited","offset_id_offset","lastY","isDown","deltaY","handleScrollSideEvent","refreshPosition","setScrollDownListener","handleFollowingPinnedMessage","isLast","setCount","writeTo","writeMediaTo","topbar_ChatTopbar","onResize","resize","setUtilsRAF","chatUtils","chatInfo","chatAudio","btnBack","person","avatarElement","btnMore","getDeleteButtonText","btnJoin","btnPinned","btnMute","btnSearch","followPinnedMessage","getSearchContext","activeScreen","onBtnBackClick","isFirstChat","getChannelFull","channelFull","linked_chat_id","chatsFull","chatContextMenuHintWasShown","contactPeerId","getContactMediaInput","usersFull","joinChannel","setMutedState","isTopMessage","hiddenPinnedMessages","byCurrent","destroy","wasPeerId","newPinnedMessage","search_AppPrivateSearchTab","appSearch","beginSearch","btnPickDate","search_ChatSearch","selectedIndex","selectResult","upBtn","downBtn","foundCountEl","renderedCount","onResultsClick","onFooterClick","onUpClick","onDownClick","footer","dateBtn","chat_Chat","wasAlreadyUsed","backgroundEl","Log","Warn","Debug","_item","backgroundImage","contextMenu","constructUtils","constructPeerHelpers","constructPinnedHelpers","constructDiscussionHelpers","constructScheduledHelpers","searchTab","setAutoDownloadMedia","setLoadMutex","loadSidebarMedia","autoDownload","setPrefix","appManagers_appWebPagesManager","markupTooltip_MarkupTooltip","addedListener","waitingForMouseUp","mouseUpCounter","onMouseUpSingle","resetSelection","tools1","tools2","cancelClosening","linkBackButton","linkInput","applyLink","isLinkValid","setTooltipPosition","linkApplyButton","applyDiv","delimiter1","delimiter2","delimiter3","matchUrlProtocol","hideTimeout","nodes","getSelectedNodes","currentMarkups","closest","activeButtons","getActiveMarkupButton","isLinkToggle","bodyRect","selectionRect","inputRect","selectionTop","sizesRect","containerRect","isFirstShow","setMouseUpEvent","arcParameter","rx","ry","xAxisRotation","largeArcFlag","sweepFlag","generatePathData","tl","tr","bl","dragAndDrop_ChatDragAndDrop","onDragOver","onDragLeave","onDrop","outlineWrapper","dropIcon","dropHeader","dropSubtitle","disableTransition","INTERNAL_LINK_TYPE","singleInstance","joinChatInvite_PopupJoinChatInvite","chatInvite","broadcast","updates","processUpdateMessage","putPhoto","peopleCount","appImManager_awaiter","FOCUS_EVENT_NAME","appImManager_appImManager","columnEl","offline","updateStatusInterval","backgroundPromises","onHashChange","parseUriParams","tgaddr","replaceState","onclick","wrapUrl","postId","post","setSettings","chatsSelectTabDebounced","setLoop","onDocumentPaste","attachType","canDrag","DragEvent","_types","dataTransfer","isIDLE","updateStatus","createNewChat","chatsSelectTab","saveChatPosition","popup","activateInstance","addAnchorListener","uriParams","hashtag","pathnameParams","STICKER_SET","processInternalLink","JOIN_CHAT","invite","PRIVATE_POST","thread","comment","MESSAGE","domain","protocol","makeLink","attachKeydownListener","IGNORE_KEYS","isOverlayActive","goodMid","nextDialog","commentId","resolveChannel","saveApiChat","noPathnameParams","pathname","noUriParams","uri","openComment","generateThreadServiceStartMessage","broadcastEvent","STATE_INIT","getBackground","setBackground","getFile","chatBubbles","chatPositions","themeColor","hslaStringToHex","backgroundUrl","applyHighlightningColor","setTheme","setCurrentBackground","prevTab","prevIdx","attachDragAndDropListeners","handleSelection","drops","mount","isFiles","foundMedia","foundDocuments","dropsContainer","drop","setPath","transitionTime","setUserStatus","invokeApiSingle","fromIndex","justReturn","spliced","beforeDestroy","chatIndex","spliceChats","existingIndex","setType","dot","typings","getPeerTypings","typing","langPackKeys","private","sendMessageTypingAction","sendMessageUploadAudioAction","sendMessageUploadDocumentAction","sendMessageUploadPhotoAction","sendMessageUploadVideoAction","sendMessageUploadRoundAction","sendMessageRecordVideoAction","sendMessageRecordAudioAction","sendMessageRecordRoundAction","sendMessageGamePlayAction","multi","mapa","typingElement","getTypingElement","descriptionElement","getPeerTyping","useWhitespace","typingContainer","getPeerStatus","appMediaViewerBase_awaiter","appMediaViewerBase_AppMediaViewerBase","topButtons","author","preloaderStreamable","isFirstOpen","pageEl","zoomElements","zoomSwipeStartX","zoomSwipeStartY","zoomSwipeX","zoomSwipeY","setZoomValue","rangeSelector","moversContainer","btnOut","btnIn","toggleZoom","setMoverAnimationPromise","highlightSwitchersTimeout","wholeDiv","isZooming","mover","ctrlKeyDown","changeZoom","onKeyUp","onWheel","scrollingUp","MEDIA_VIEWER_CLASSNAME","overlaysDiv","mainDiv","topbarLeft","onlyMobile","authorRight","zoom","setNewMover","onDownloadClick","moveLength","setMoverPromise","evt","zoomValue","videoPlayer","lockControls","zoomSwipeHandler","lastDiffY","addProgress","btnMenuToggle","setMoverToTarget","appMediaViewer","closing","fromRight","removeCenterFromMover","wasActive","realParent","SVGImageElement","SVGForeignObjectElement","needOpacity","visibleRect","overflowElement","overflowRect","overflowTop","overflowBottom","sticky","overflow","horizontal","visualViewport","windowHeight","innerWidth","innerHeight","getVisibleRect","HTMLImageElement","HTMLVideoElement","setFullAspect","scaleX","scaleY","getComputedStyle","getPropertyValue","brSplitted","fillPropertyValue","willBeLeft","willBeTop","isRejected","SVGSVGElement","sizeTailPath","mediaElement","clipId","newClipId","newSvg","outerHTML","SVGUseElement","sX","sY","upscale","_br","toLeft","newTransform","p1","newMover","oldAvatar","replaceChild","setAuthorInfo","isDocument","useContainerAsTarget","moveTheMover","mainColumns","padding","thumbPromise","useController","moverVideo","canPlayThrough","createPlayer","ckin","overlay","HAVE_FUTURE_DATA","attachCanPlay","networkState","NETWORK_LOADING","isntEnoughData","rollback","setSingleMedia","updateMediaSource","cancellablePromise","attachPromise","haveImage","appMediaViewer_awaiter","captionTimeout","isForDocument","onAuthorClick","savePhotoFile","setCaptionTimeout","setBtnMenuToggle","btnMenuDelete","onCaptionClick","_super","create","_openMedia","setCaption","call","avatarListLoader_AvatarListLoader","appMediaViewerAvatar_awaiter","appMediaViewerAvatar_AppMediaViewerAvatar","avatar_awaiter","onAvatarUpdate","removeFromAvatarsCache","getFullPhoto","getTarget","hadMessage","isAvatarCached","believeMe","avatar_seen","isDialog","addedToQueue","observedAttributes","oldValue","getPeerMigratedTo","peerTitle","dialogsContextMenu_DialogsContextMenu","onArchiveClick","selectedId","editPeerFolders","folder_id","toggleDialogPin","pinned_dialogs_count_max","onUnmuteClick","onUnreadClick","top_message","ConnectionStatus","SENDING_STATUS","connectionStatus_ConnectionStatusComponent","hadConnect","connecting","timedOut","updating","setConnectionStatus","baseDcId","setFirstConnectionTimeout","connectionStatus","online","Connected","forceGetDifference","TimedOut","retryAt","setStatusText","currentLangPackKey","statusEl","statusPreloader","CHANGE_STATE_DELAY","getA","forceReconnect","timerSpan","interval","forceReconnectTimeout","setStateTimeout","statusContainer","constructContainer","appDialogsManager_awaiter","appDialogsManager_SortedDialogList","indexKey","appDialogsManager","onListLengthChange","willChangeLength","addListDialog","isBatch","menuScrollContainer","lastActiveElements","offsets","loadDialogsPromise","sortedList","onChatsScroll","_onListLengthChange","checkIfPlaceholderNeeded","hasContacts","loadContacts","processContact","verifyUserIdForContacts","added","onChatsRegularScroll","sliceTimeout","perf","performance","scrollTopWas","rectContainer","rectTarget","firstY","firstElement","lastElement","elementOverflow","sliceFromStart","sliceFromEnd","deleteDialog","setOffsets","onChatsScrollTop","loadDialogs","chatsPreloader","allUnreadCount","bottomPart","addFilter","getDialogDom","validateDialogForFilter","setFiltersUnreadCount","updateDialog","setUnreadMessages","validateListForFilter","order","containerToAppend","renderedFilter","getDialogIndexKey","unsetTyping","onStateLoaded","foldersScrollable","isLoadedMain","isDialogsLoaded","isLoadedArchive","wasLoaded","accumulateArchivedUnread","updatesState","syncLoading","refreshConversations","getNotifyPeerTypeSettings","renderFiltersPromise","showFiltersPromise","storagesResults","addMissedDialogs","migratedTo","testDialogForFilter","topOffset","getOffsetIndex","bottomOffset","isDialogMustBeInViewport","unreadSpan","mutedCount","notMutedCount","setFilterUnreadCount","getAll","sortedDialogList","currentOffsetIndex","needIndex","getConversationsResult","isTopEnd","callbacks","cccc","offsetDialog","classNameType","subtitleArgs","placeholderContainer","generateEmptyPlaceholder","wrapLocalSticker","firstDialog","getDialogFromElement","lastDialog","withContext","openInner","lastActiveListElement","setPeerFunc","sameElement","getDialogByPeerId","lastMessage","highlightWord","setUnread","draftMessage","lastTimeSpan","playIcon","withoutMediaType","sender","senderBold","setStatusMessage","disableAnimationIfRippleFound","iconClassName","setSendingStatus","statusSpan","isPinned","hasUnreadBadge","isUnreadBadgeMounted","unreadBadge","hasMentionsBadge","isMentionBadgeMounted","mentionsBadge","transitionDuration","isMention","accumulateArchivedTimeout","originalDialog","getDialog","addDialog","_dialog","captionDiv","titleSpanContainer","titleP","rightSpan","143","exports","defineProperty","enumerable","Symbol","toStringTag","__esModule","default","prototype","AudioContext","webkitAudioContext","isRecordingSupported","bufferLength","encoderApplication","encoderFrameSize","encoderPath","maxFramesPerPage","mediaTrackConstraints","resampleQuality","streamPages","wavBitDepth","encodedSamplePosition","mediaDevices","getUserMedia","WebAssembly","clearStream","stream","getTracks","audioContext","closeAudioContext","encodeBuffers","getChannelData","encoder","postMessage","buffers","initAudioContext","initAudioGraph","scriptProcessorNode","createScriptProcessor","destination","onaudioprocess","inputBuffer","monitorGainNode","createGain","setMonitorGain","recordingGainNode","setRecordingGain","initSourceNode","createMediaStreamSource","loadWorker","Worker","initWorker","streamPage","storePage","recordedPages","samplePosition","page","originalSampleRate","sampleRate","wavSampleRate","onpause","resume","onresume","gain","setTargetAtTime","onstart","destroyWorker","Function","17","_helpers_dom_findUpClassName__WEBPACK_IMPORTED_MODULE_0__","_helpers_sequentialDom__WEBPACK_IMPORTED_MODULE_1__","_environment_touchSupport__WEBPACK_IMPORTED_MODULE_2__","_lib_rootScope__WEBPACK_IMPORTED_MODULE_3__","rippleClickId","drawRipple","startTime","clickId","elapsedTime","touchStartFired","clickY","sqrt","pow","isRippleUnneeded","touchEnd","28","CLICK_EVENT_NAME","attachClickEvent","detachClickEvent","simulateClickEvent","_environment_touchSupport__WEBPACK_IMPORTED_MODULE_0__","_dispatchEvent__WEBPACK_IMPORTED_MODULE_1__","31","_lib_langPack__WEBPACK_IMPORTED_MODULE_0__","_ripple__WEBPACK_IMPORTED_MODULE_1__","rippleSquare","33","putPreloader","setButtonLoader","closeBtnMenu","openBtnMenu","positionMenu","cancelContextMenuOpening","attachContextMenuListener","_config_debug__WEBPACK_IMPORTED_MODULE_0__","_helpers_dom_cancelEvent__WEBPACK_IMPORTED_MODULE_1__","_helpers_dom_clickEvent__WEBPACK_IMPORTED_MODULE_2__","_helpers_mediaSizes__WEBPACK_IMPORTED_MODULE_3__","_environment_touchSupport__WEBPACK_IMPORTED_MODULE_4__","_environment_userAgent__WEBPACK_IMPORTED_MODULE_5__","_lib_rootScope__WEBPACK_IMPORTED_MODULE_6__","_appNavigationController__WEBPACK_IMPORTED_MODULE_7__","returnDiv","diffX","diffY","menuOverlay","openedMenuOnClose","menuWidth","menuHeight","windowWidth","intermediateX","intermediateY","possibleSides","_cancelContextMenuOpening","_cancelContextMenuOpeningTimeout","onCancel","44","_environment_userAgent__WEBPACK_IMPORTED_MODULE_1__","_lib_logger__WEBPACK_IMPORTED_MODULE_2__","_helpers_schedulers__WEBPACK_IMPORTED_MODULE_3__","_helpers_dom_blurActiveElement__WEBPACK_IMPORTED_MODULE_4__","_helpers_dom_cancelEvent__WEBPACK_IMPORTED_MODULE_5__","navigations","manual","currentHash","isPossibleSwipe","pushState","handleItem","moved","scrollRestoration","noHistory","origin","47","simulateEvent","53","_schedulers__WEBPACK_IMPORTED_MODULE_0__","_cancellablePromise__WEBPACK_IMPORTED_MODULE_1__","_config_debug__WEBPACK_IMPORTED_MODULE_2__","_dom_isInDOM__WEBPACK_IMPORTED_MODULE_3__","raf","kind","scheduleFlush","do","read","write","74","_appManagers_appUsersManager__WEBPACK_IMPORTED_MODULE_1__","_mtprotoworker__WEBPACK_IMPORTED_MODULE_2__","currentHashPromise","newHashPromise","password","new_settings","invokeCrypto","newAlgo","new_algo","salt1","randomize","hashes","new_password_hash","inputCheckPassword","saveApiUser","setUserAuth","90","PasswordInputField","_helpers_dom_cancelEvent__WEBPACK_IMPORTED_MODULE_0__","_inputField__WEBPACK_IMPORTED_MODULE_1__","passwordVisible","onVisibilityClick","toggleVisible","onVisibilityClickAdditional","stealthy","tabIndex","96","PasswordMonkey","noCache","curFrame"],"mappings":"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","file":"15.04217e6c6e21ea0189db.chunk.js","sourceRoot":""} \ No newline at end of file diff --git a/public/15.1a3e11966cccf1381885.chunk.js b/public/15.1a3e11966cccf1381885.chunk.js new file mode 100644 index 00000000..bd069e52 --- /dev/null +++ b/public/15.1a3e11966cccf1381885.chunk.js @@ -0,0 +1,2 @@ +(this.webpackJsonp=this.webpackJsonp||[]).push([[15],{104:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(49);class n{constructor(e,t){this.inputField=e,this.size=t,this.max=45,this.needFrame=0,this.container=document.createElement("div"),this.container.classList.add("media-sticker-wrapper");const s=e.input;s.addEventListener("blur",()=>{this.playAnimation(0)}),s.addEventListener("input",t=>{this.playAnimation(e.value.length)})}playAnimation(e){if(!this.animation)return;let t;(e=Math.min(e,30))?(t=Math.round(Math.min(this.max,e)*(165/this.max)+11.33),this.idleAnimation&&(this.idleAnimation.stop(!0),this.idleAnimation.canvas.style.display="none"),this.animation.canvas.style.display=""):t=0;const s=this.needFrame>t?-1:1;this.animation.setDirection(s),0!==this.needFrame&&0===t&&this.animation.setSpeed(7),this.needFrame=t,this.animation.play()}load(){return this.loadPromise?this.loadPromise:this.loadPromise=Promise.all([i.b.loadAnimationFromURL({container:this.container,loop:!0,autoplay:!0,width:this.size,height:this.size},"assets/img/TwoFactorSetupMonkeyIdle.tgs").then(e=>(this.idleAnimation=e,this.inputField.value.length||e.play(),i.b.waitForFirstFrame(e))),i.b.loadAnimationFromURL({container:this.container,loop:!1,autoplay:!1,width:this.size,height:this.size},"assets/img/TwoFactorSetupMonkeyTracking.tgs").then(e=>(this.animation=e,this.inputField.value.length||(this.animation.canvas.style.display="none"),this.animation.addEventListener("enterFrame",e=>{(1===this.animation.direction&&e>=this.needFrame||-1===this.animation.direction&&e<=this.needFrame)&&(this.animation.setSpeed(1),this.animation.pause()),0===e&&0===this.needFrame&&this.idleAnimation&&(this.idleAnimation.canvas.style.display="",this.idleAnimation.play(),this.animation.canvas.style.display="none")}),i.b.waitForFirstFrame(e)))])}remove(){this.animation&&this.animation.remove(),this.idleAnimation&&this.idleAnimation.remove()}}},105:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(38);class n extends i.b{constructor(e){super(Object.assign({plainText:!0},e));const t=this.input;t.type="tel",t.setAttribute("required",""),t.autocomplete="off";let s=0;this.input.addEventListener("input",t=>{this.input.classList.remove("error"),this.setLabel();const i=this.value.replace(/\D/g,"").slice(0,e.length);this.setValueSilently(i);const n=this.value.length;if(n===e.length)e.onFill(this.value);else if(n===s)return;s=n})}}},138:function(e,t,s){"use strict";s.r(t),s.d(t,"AppDialogsManager",(function(){return Fo}));var i=s(39),n=s(67),a=s(15),o=s(41),r=s(46),l=s(28),c=s(4),d=s(110),h=s(0);var u=!!document.createElement("video").canPlayType("video/quicktime")||h.IS_SAFARI||h.IS_APPLE_MOBILE,p=s(113);const m=new Set(["image/jpeg","image/png","image/gif","image/bmp","video/mp4","video/webm"]);u&&m.add("video/quicktime"),p.a&&m.add("image/webp");var g=m;function b(e,t){e.setAttribute("dir","auto"),e.innerHTML=t}var v=s(37),f=s(97),y=s(56);function w(e){Object(y.d)(e.history,(t,s,i)=>{t.action.photo||(i.splice(s,1),void 0!==e.count&&--e.count)})}var L=s(32);class S{constructor(e){this.previous=[],this.next=[],this.reverse=!1,this.loadCount=50,this.loadWhenLeft=20,this.loadedAllUp=!1,this.loadedAllDown=!1,Object(L.g)(this,e)}setTargets(e,t,s){this.previous=e,this.next=t,this.reverse=s}get index(){return void 0!==this.count?this.previous.length:-1}reset(e=!1){this.current=void 0,this.previous=[],this.next=[],this.loadedAllUp=this.loadedAllDown=e,this.loadPromiseUp=this.loadPromiseDown=null}go(e,t=!0){let s,i;if(e>0){if(s=this.next.splice(0,e),i=s.pop(),!i)return;this.previous.push(this.current,...s)}else{if(s=this.previous.splice(this.previous.length+e,-e),i=s.shift(),!i)return;this.next.unshift(...s,this.current)}return this.next.length0),this.current}load(e){if(e&&this.loadedAllDown)return Promise.resolve();if(!e&&this.loadedAllUp)return Promise.resolve();if(e&&this.loadPromiseDown)return this.loadPromiseDown;if(!e&&this.loadPromiseUp)return this.loadPromiseUp;let t;t=e?this.reverse?this.previous[0]:this.next[this.next.length-1]:this.reverse?this.next[this.next.length-1]:this.previous[0];const s=this.loadMore(t,e,this.loadCount).then(t=>{if(e&&this.loadPromiseDown!==s||!e&&this.loadPromiseUp!==s)return;t.items.length{const s=this.processItem?this.processItem(t):t;s&&(e?this.reverse?this.previous.unshift(s):this.next.push(s):this.reverse?this.next.push(s):this.previous.unshift(s))}),this.onLoadedMore&&this.onLoadedMore()},()=>{}).then(()=>{e?this.loadPromiseDown=null:this.loadPromiseUp=null});return e?this.loadPromiseDown=s:this.loadPromiseUp=s,s}}class E extends S{constructor(e={}){super(Object.assign(Object.assign({},e),{loadMore:(e,t,s)=>{var n;const a=t?0:s;let o=null===(n=this.current)||void 0===n?void 0:n.mid;return e&&(o=e.mid),t||(o=f.a.incrementMessageId(o,1)),i.a.getSearch(Object.assign(Object.assign({},this.searchContext),{peerId:this.searchContext.peerId||(null==e?void 0:e.peerId),maxId:o,limit:a?0:s,backLimit:a})).then(e=>("inputMessagesFilterChatPhotos"===this.searchContext.inputFilter._&&w(e),e.next_rate&&(this.searchContext.nextRate=e.next_rate),{count:e.count,items:e.history}))},processItem:t=>{if(this.filterMids([t.mid]).length)return e.processItem(t)}})),this.onHistoryDelete=({peerId:e,msgs:t})=>{const s=s=>s.peerId===e&&t.has(s.mid),i=(e,t,i)=>{s(e)&&i.splice(t,1)};Object(y.d)(this.previous,i),Object(y.d)(this.next,i),this.current&&s(this.current)&&this.onEmptied&&this.onEmptied()},this.onHistoryMultiappend=e=>{if(void 0!==this.searchContext.folderId)return;if(!this.loadedAllUp||this.loadPromiseUp)return;const t=e[this.searchContext.peerId];if(!t)return;const s=Array.from(t).sort((e,t)=>e-t),i=this.filterMids(s).map(e=>this.processItem(e)).filter(Boolean);i.length&&this.next.push(...i)},this.onMessageSent=({message:e})=>{this.onHistoryMultiappend({[e.peerId]:new Set([e.mid])})},a.default.addEventListener("history_delete",this.onHistoryDelete),a.default.addEventListener("history_multiappend",this.onHistoryMultiappend),a.default.addEventListener("message_sent",this.onMessageSent)}filterMids(e){const t=this.searchContext.isScheduled?i.a.getScheduledMessagesStorage(this.searchContext.peerId):i.a.getMessagesStorage(this.searchContext.peerId);return i.a.filterMessagesByInputFilter(this.searchContext.inputFilter._,e,t,e.length)}setSearchContext(e){this.searchContext=e,void 0!==this.searchContext.folderId&&(this.loadedAllUp=!0,void 0===this.searchContext.nextRate&&(this.loadedAllDown=!0)),"inputMessagesFilterChatPhotos"===this.searchContext.inputFilter._&&(this.loadedAllUp=!0),this.searchContext.useSearch||(this.loadedAllDown=this.loadedAllUp=!0)}reset(){super.reset(),this.searchContext=void 0}cleanup(){this.reset(),a.default.removeEventListener("history_delete",this.onHistoryDelete),a.default.removeEventListener("history_multiappend",this.onHistoryMultiappend),a.default.removeEventListener("message_sent",this.onMessageSent),this.onEmptied=void 0}}var M=s(61),I=s(68),C=s(63),k=s(16),T=s(36),P=s(45),x=s(34),A=s(14);class O{constructor(e,t,s=!0,i,n=!0,a=!0,o){this.name=e,this.type=t,this.clearable=s,this.autonomous=a,this.onFound=o,this.list=Do.createChatList(),this.container=document.createElement("div"),i&&(this.container.className=i),e&&(this.nameEl=document.createElement("div"),this.nameEl.classList.add("search-group__name"),"string"==typeof e&&this.nameEl.append(Object(A.i18n)(e)),this.container.append(this.nameEl)),this.container.classList.add("search-group","search-group-"+t),this.container.append(this.list),this.container.style.display="none",n&&Do.setListClickListener(this.list,o,void 0,a)}clear(){this.container.style.display="none",this.clearable&&(this.list.innerHTML="")}setActive(){this.container.style.display=""}toggle(){this.list.childElementCount?this.setActive():this.clear()}}class _{constructor(e,t,s,i){this.container=e,this.searchInput=t,this.searchGroups=s,this.onSearch=i,this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1,this.searchPromise=null,this.searchTimeout=0,this.query="",this.listsContainer=null,this.peerId=0,this.threadId=0,this.scrollable=new P.b(this.container),this.listsContainer=this.scrollable.container;for(let e in this.searchGroups)this.listsContainer.append(this.searchGroups[e].container);this.searchGroups.messages&&this.scrollable.setVirtualContainer(this.searchGroups.messages.list),this.searchInput.onChange=e=>{this.query=e,this.reset(!1),this.searchMore()},this.scrollable.onScrolledBottom=()=>{this.query.trim()&&(this.searchTimeout||(this.searchTimeout=window.setTimeout(()=>{this.searchMore(),this.searchTimeout=0},0)))}}reset(e=!0){e&&(this.searchInput.value="",this.query="",this.peerId=0,this.threadId=0),this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1;for(let e in this.searchGroups)this.searchGroups[e].clear();this.searchPromise=null}beginSearch(e=0,t=0,s=""){this.peerId=e,this.threadId=t,this.query!==s&&(this.searchInput.inputField.value=s),this.searchInput.input.focus()}searchMore(){if(this.searchPromise)return this.searchPromise;const e=this.query;if(!e.trim())return void(this.onSearch&&this.onSearch(0));if(-1!==this.foundCount&&this.loadedCount>=this.foundCount)return Promise.resolve();const t=this.minMsgId||0;return this.searchPromise=i.a.getSearch({peerId:this.peerId,query:e,inputFilter:{_:"inputMessagesFilterEmpty"},maxId:t,limit:20,threadId:this.threadId}).then(t=>{if(this.searchPromise=null,this.searchInput.value!==e)return;const{count:s,history:i}=t;i.length&&i[0].mid===this.minMsgId&&i.shift();const n=this.searchGroups.messages;i.forEach(t=>{const s=this.peerId?t.fromId:t.peerId,{dialog:i,dom:n}=Do.addDialogNew({dialog:s,container:this.scrollable,drawStatus:!1,avatarSize:54,meAsSaved:!1});t.peerId!==s&&(n.listEl.dataset.peerId=""+t.peerId),Do.setLastMessage(i,t,n,e)}),n.toggle(),this.minMsgId=i.length&&i[i.length-1].mid,-1===this.loadedCount&&(this.loadedCount=0),this.loadedCount+=i.length,-1===this.foundCount&&(this.foundCount=s,n.nameEl&&Object(x.a)(n.nameEl,Object(A.i18n)(s?"Chat.Search.MessagesFound":"Chat.Search.NoMessagesFound",[s])),this.onSearch&&this.onSearch(this.foundCount))}).catch(e=>{console.error("search error",e),this.searchPromise=null})}}var F=s(38);class j{constructor(e,t){this.prevValue="",this.timeout=0,this.onInput=()=>{if(!this.onChange)return;let e=this.value;e!==this.prevValue&&(this.prevValue=e,clearTimeout(this.timeout),this.timeout=window.setTimeout(()=>{this.onChange(e)},200))},this.onClearClick=()=>{this.value="",this.onChange&&this.onChange(""),this.onClear&&this.onClear()},this.inputField=new F.b({placeholder:e,plainText:!0}),this.container=this.inputField.container,this.container.classList.remove("input-field"),this.container.classList.add("input-search"),this.onChange=t,this.input=this.inputField.input,this.input.classList.add("input-search-input");const s=document.createElement("i");s.classList.add("tgico","tgico-search"),this.clearBtn=document.createElement("i"),this.clearBtn.classList.add("tgico","btn-icon","tgico-close"),this.input.addEventListener("input",this.onInput),this.clearBtn.addEventListener("click",this.onClearClick),this.container.append(s,this.clearBtn)}get value(){return this.inputField.value}set value(e){this.prevValue=e,clearTimeout(this.timeout),this.inputField.value=e}remove(){clearTimeout(this.timeout),this.input.removeEventListener("input",this.onInput),this.clearBtn.removeEventListener("click",this.onClearClick)}}var D=s(116),B=s(44),R=s(52),H=s(84),U=s(31);var N=(e,t={})=>Object(U.a)("btn-icon",Object.assign({icon:e||void 0},t)),z=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class V{constructor(e,t){this._constructor(e,t)}_constructor(e,t=!0){this.slider=e,this.destroyable=t,this.container=document.createElement("div"),this.container.classList.add("tabs-tab","sidebar-slider-item"),this.header=document.createElement("div"),this.header.classList.add("sidebar-header"),this.closeBtn=N("left sidebar-close-button",{noRipple:!0}),this.title=document.createElement("div"),this.title.classList.add("sidebar-header__title"),this.header.append(this.closeBtn,this.title),this.content=document.createElement("div"),this.content.classList.add("sidebar-content"),this.scrollable=new P.b(this.content,void 0,void 0,!0),this.container.append(this.header,this.content),this.slider.addTab(this),this.listenerSetter=new H.a}close(){return this.slider.closeTab(this)}open(...e){return z(this,void 0,void 0,(function*(){if(this.init)try{const e=this.init();this.init=null,e instanceof Promise&&(yield e)}catch(e){console.error("open tab error",e)}return this.slider.selectTab(this)}))}init(){}onCloseAfterTimeout(){this.destroyable&&(this.slider.tabs.delete(this),this.container.remove()),this.listenerSetter&&this.listenerSetter.removeAll()}setTitle(e){this.title.innerHTML="",this.title.append(Object(A.i18n)(e))}}class W extends V{constructor(e){super(e),this.eventListener=new R.a}onCloseAfterTimeout(){return this.eventListener.dispatchEvent("destroy"),this.eventListener.cleanup(),super.onCloseAfterTimeout()}}class K{constructor(e){this.historyTabIds=[],this.canHideFirst=!1,this.onCloseBtnClick=()=>{B.a.findItemByType(this.navigationType)?B.a.back(this.navigationType):this.historyTabIds.length&&this.closeTab(this.historyTabIds[this.historyTabIds.length-1])},this.closeTab=(e,t,s)=>{if(void 0!==e&&this.historyTabIds[this.historyTabIds.length-1]!==e)return!1;const i=this.historyTabIds.pop();this.onCloseTab(i,t,s);const n=this.historyTabIds[this.historyTabIds.length-1];return this._selectTab(void 0!==n?n instanceof V?n.container:n:this.canHideFirst?-1:0,t),!0},Object(L.g)(this,e),this.tabs||(this.tabs=new Map),this.tabsContainer=this.sidebarEl.querySelector(".sidebar-slider"),this._selectTab=Object(D.a)(this.tabsContainer,"navigation",250),this.canHideFirst||this._selectTab(0),Array.from(this.sidebarEl.querySelectorAll(".sidebar-close-button")).forEach(e=>{Object(l.b)(e,this.onCloseBtnClick)})}selectTab(e){if(this.historyTabIds[this.historyTabIds.length-1]===e)return!1;const t=e instanceof V?e:this.tabs.get(e);return t&&(t.onOpen&&t.onOpen(),t.onOpenAfterTimeout&&setTimeout(()=>{t.onOpenAfterTimeout()},250)),B.a.pushItem({type:this.navigationType,onPop:e=>(this.closeTab(void 0,e,!0),!0)}),this.historyTabIds.push(e),this._selectTab(e instanceof V?e.container:e),!0}removeTabFromHistory(e){this.historyTabIds.findAndSplice(t=>t===e),this.onCloseTab(e,void 0)}sliceTabsUntilTab(e,t){for(let s=this.historyTabIds.length-1;s>=0;--s){const i=this.historyTabIds[s];if(i!==t){if(i instanceof e)break;this.removeTabFromHistory(i)}}}getTab(e){return this.historyTabIds.find(t=>t instanceof e)}isTabExists(e){return!!this.getTab(e)}onCloseTab(e,t,s){s||B.a.removeByType(this.navigationType,!0);const i=e instanceof V?e:this.tabs.get(e);i&&(i.onClose&&i.onClose(),i.onCloseAfterTimeout&&setTimeout(()=>{i.onCloseAfterTimeout()},250))}addTab(e){e.container.parentElement||(this.tabsContainer.append(e.container),e.closeBtn&&e.closeBtn.addEventListener("click",this.onCloseBtnClick))}}var G=s(43),q=s(131);class Q{constructor(e){this.container=document.createElement("div"),this.container.classList.add("avatar-edit"),this.canvas=document.createElement("canvas"),this.canvas.classList.add("avatar-edit-canvas"),this.icon=document.createElement("span"),this.icon.classList.add("tgico","tgico-cameraadd"),this.container.append(this.canvas,this.icon),this.container.addEventListener("click",()=>{(new q.a).open(this.canvas,e)})}clear(){this.canvas.getContext("2d").clearRect(0,0,this.canvas.width,this.canvas.height)}}var $=(e={})=>Object(U.a)("btn-circle btn-corner z-depth-1"+(e.className?" "+e.className:""),e);class Y extends V{constructor(){super(...arguments),this.searchGroup=new O(!0,"contacts",!0,"new-group-members disable-hover",!1),this.uploadAvatar=null}init(){this.container.classList.add("new-group-container"),this.setTitle("NewGroup"),this.avatarEdit=new Q(e=>{this.uploadAvatar=e});const e=document.createElement("div");e.classList.add("input-wrapper"),this.groupNameInputField=new F.b({label:"CreateGroup.NameHolder",maxLength:128}),e.append(this.groupNameInputField.container),this.groupNameInputField.input.addEventListener("input",()=>{const e=this.groupNameInputField.value;this.nextBtn.classList.toggle("is-visible",!!e.length&&!this.groupNameInputField.input.classList.contains("error"))}),this.nextBtn=$({icon:"arrow_next"}),this.nextBtn.addEventListener("click",()=>{const e=this.groupNameInputField.value;this.nextBtn.disabled=!0,G.a.createChat(e,this.userIds).then(e=>{this.uploadAvatar&&this.uploadAvatar().then(t=>{G.a.editPhoto(e,t)}),ln.removeTabFromHistory(this),ln.selectTab(0)})});const t=document.createElement("div");t.classList.add("chatlist-container"),t.append(this.searchGroup.container),this.content.append(this.nextBtn),this.scrollable.append(this.avatarEdit.container,e,t)}onCloseAfterTimeout(){this.searchGroup.clear(),this.avatarEdit.clear(),this.uploadAvatar=null,this.groupNameInputField.value="",this.nextBtn.disabled=!1}open(e){const t=super.open();return t.then(()=>{this.userIds=e,this.userIds.forEach(e=>{let{dom:t}=Do.addDialogNew({dialog:e,container:this.searchGroup.list,drawStatus:!1,rippleEnabled:!1,avatarSize:48});t.lastMessageSpan.append(T.a.getUserStatusString(e))}),this.searchGroup.nameEl.textContent="",this.searchGroup.nameEl.append(Object(A.i18n)("Members",[this.userIds.length])),this.searchGroup.setActive()}),t}}var X=s(73),J=s(40),Z=s(29),ee=s(115),te=s(70),se=s(33),ie=s(17),ne=s(94),ae=s(87),oe=s(42),re=s(51),le=s(49),ce=s(139),de=s(27),he=s(65),ue=s(47),pe=s(1),me=s(99),ge=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const be=(()=>{try{return h.IS_SAFARI&&+navigator.userAgent.match(/ Version\/(\d+)/)[1]<14}catch(e){return!1}})();const ve=new class{constructor(){if(this.media=new Map,this.scheduled=new Map,this.mediaDetails=new Map,this.waitingMediaForLoad=new Map,this.waitingScheduledMediaForLoad=new Map,this.waitingDocumentsForLoad={},this._volume=1,this._muted=!1,this._playbackRate=1,this.seekBackward=e=>{const t=this.playingMedia;t&&(t.currentTime=Math.max(0,t.currentTime-(e.seekOffset||10)))},this.seekForward=e=>{const t=this.playingMedia;t&&(t.currentTime=Math.min(t.duration,t.currentTime+(e.seekOffset||10)))},this.seekTo=e=>{const t=this.playingMedia;t&&(t.currentTime=e.seekTime)},this.onMediaDocumentLoad=e=>{const t=this.mediaDetails.get(e),s=M.a.getDoc(t.docId);"audio"===s.type&&s.supportsStreaming&&be&&this.handleSafariStreamable(e);const i=he.a.getCacheContext(s);e.src=i.url;const n=this.waitingDocumentsForLoad[s.id];n&&(n.delete(e),n.size||delete this.waitingDocumentsForLoad[s.id])},this.onPlay=e=>{const t=e.target,s=this.mediaDetails.get(t),{peerId:n,mid:o}=s,r=this.getMessageByMedia(t);if(this.playingMedia!==t){this.stop();const e=e=>e.mid===o&&e.peerId===n;if(!this.listLoader.current||!e(this.listLoader.current)){let t,s=this.listLoader.previous.findIndex(e);-1!==s?t=-(this.listLoader.previous.length-s):(s=this.listLoader.next.findIndex(e),-1!==s&&(t=s+1)),-1!==s?t&&this.listLoader.go(t,!1):this.setTargets({peerId:n,mid:o})}this.setMedia(t,r)}setTimeout(()=>{a.default.dispatchEvent("media_play",{doc:i.a.getMediaFromMessage(r),message:r,media:t})},0)},this.onPause=e=>{a.default.dispatchEvent("media_pause")},this.onEnded=e=>{e.isTrusted&&(this.onPause(e),this.next()||(this.stop(),a.default.dispatchEvent("media_stop")))},this.play=()=>this.toggle(!0),this.pause=()=>this.toggle(!1),this.stop=()=>{const e=this.playingMedia;if(!e)return!1;e.paused||e.pause(),e.currentTime=0,Object(ue.a)(e,"ended");const t=this.mediaDetails.get(e);if(null==t?void 0:t.clean){e.src="";const s=t.peerId,i=t.isScheduled?this.scheduled:this.media,n=i.get(s);n&&(n.delete(t.mid),n.size||i.delete(s)),e.remove(),this.mediaDetails.delete(e)}return this.playingMedia=void 0,!0},this.playItem=e=>{const{peerId:t,mid:s}=e,i=this.searchContext.isScheduled;this.getMedia(t,s,i).play(),setTimeout(()=>{this.resolveWaitingForLoadMedia(t,s,i)},0)},this.next=()=>!this.lockedSwitchers&&this.listLoader.go(1),this.previous=()=>{const e=this.playingMedia;return e&&e.currentTime>5?(e.currentTime=0,void this.toggle(!0)):!this.lockedSwitchers&&this.listLoader.go(-1)},this.container=document.createElement("div"),this.container.style.cssText="display: none;",document.body.append(this.container),navigator.mediaSession){const e={play:this.play,pause:this.pause,stop:this.stop,seekbackward:this.seekBackward,seekforward:this.seekForward,seekto:this.seekTo,previoustrack:this.previous,nexttrack:this.next};for(const t in e)try{navigator.mediaSession.setActionHandler(t,e[t])}catch(e){console.warn("MediaSession action is not supported:",t)}}a.default.addEventListener("document_downloaded",e=>{const t=this.waitingDocumentsForLoad[e.id];if(t)for(const e of t)this.onMediaDocumentLoad(e)});const e={};["volume","muted","playbackRate"].forEach(t=>{const s="_"+t;e[t]={get:()=>this[s],set:e=>{this[s]!==e&&(this[s]=e,this.playingMedia&&(this.playingMedia[t]=e),this.dispatchPlaybackParams())}}}),Object.defineProperties(this,e)}dispatchPlaybackParams(){const{volume:e,muted:t,playbackRate:s}=this;a.default.dispatchEvent("media_playback_params",{volume:e,muted:t,playbackRate:s})}addMedia(e,t,s){const{peerId:n,mid:o}=e,r=!!e.pFlags.is_scheduled?this.scheduled:this.media;let l=r.get(e.peerId);l||r.set(e.peerId,l=new Map);let c=l.get(o);if(c)return c;const d=i.a.getMediaFromMessage(e);l.set(o,c=document.createElement("round"===d.type||"video"===d.type?"video":"audio")),"round"===d.type&&c.setAttribute("playsinline","true");const h={peerId:n,mid:o,docId:d.id,clean:s,isScheduled:e.pFlags.is_scheduled};this.mediaDetails.set(c,h),c.volume=1,this.container.append(c),c.addEventListener("play",this.onPlay),c.addEventListener("pause",this.onPause),c.addEventListener("ended",this.onEnded),"audio"!==d.type&&(null==e?void 0:e.pFlags.media_unread)&&e.fromId!==a.default.myId&&c.addEventListener("timeupdate",()=>{i.a.readMessages(n,[o])},{once:!0});const u=Object(oe.a)();if(t)u.resolve();else{const t=e.pFlags.is_scheduled?this.waitingScheduledMediaForLoad:this.waitingMediaForLoad;let s=t.get(n);s||t.set(n,s=new Map),s.set(o,u)}return u.then(()=>{const e=he.a.getCacheContext(d);if(d.supportsStreaming||e.url)this.onMediaDocumentLoad(c);else{let e=this.waitingDocumentsForLoad[d.id];e||(e=this.waitingDocumentsForLoad[d.id]=new Set),e.add(c),M.a.downloadDoc(d)}}),c}getMedia(e,t,s){const i=(s?this.scheduled:this.media).get(e);return null==i?void 0:i.get(t)}handleSafariStreamable(e){e.addEventListener("play",()=>{const t=e.currentTime;e.addEventListener("progress",()=>{e.currentTime=e.duration-1,e.addEventListener("progress",()=>{e.currentTime=t,e.paused||e.play()},{once:!0})},{once:!0})})}resolveWaitingForLoadMedia(e,t,s){const i=s?this.waitingScheduledMediaForLoad:this.waitingMediaForLoad,n=i.get(e);if(!n)return;const a=n.get(t);a&&(a.resolve(),n.delete(t),n.size||i.delete(e))}isSafariBuffering(e){return!!e.safariBuffering}setSafariBuffering(e,t){e.safariBuffering=t}setNewMediadata(e,t=this.playingMedia){var s;return ge(this,void 0,void 0,(function*(){yield Object(me.d)(t,void 0,!1);const i=e.media.document,n=[],a="voice"===i.type||"round"===i.type;let l="",c="";if(null===(s=i.thumbs)||void 0===s?void 0:s.length){const s=i.thumbs[i.thumbs.length-1];if(!s.bytes){const a=he.a.getCacheContext(i,s.type);if(a.url)n.push({src:a.url,sizes:`${s.w}x${s.h}`,type:"image/jpeg"});else{r.a.preloadPhoto(i,s).then(()=>{this.playingMedia===t&&a.url&&this.setNewMediadata(e)})}}}else if(a){const s=e.fromId||e.peerId,a=o.a.getPeerPhoto(s);if(a){const i=d.a.loadAvatar(s,a,"photo_small");if(i.cached){const e=yield i.loadPromise;n.push({src:e,sizes:"160x160",type:"image/jpeg"})}else i.loadPromise.then(s=>{this.playingMedia===t&&s&&this.setNewMediadata(e)})}l=o.a.getPeerTitle(s,!0,!1),c=A.default.format("voice"===i.type?"AttachAudio":"AttachRound",!0)}if(!a){const e=i.attributes.find(e=>"documentAttributeAudio"===e._);l=e&&e.title||i.file_name,c=e&&e.performer}n.length||(h.IS_APPLE?pe.IS_TOUCH_SUPPORTED?n.push({src:"assets/img/apple-touch-icon-precomposed.png",sizes:"180x180",type:"image/png"}):n.push({src:"assets/img/apple-touch-icon.png",sizes:"180x180",type:"image/png"}):[72,96,144,192,256,384,512].forEach(e=>{const t=`${e}x${e}`;n.push({src:`assets/img/android-chrome-${t}.png`,sizes:t,type:"image/png"})}));const u=new MediaMetadata({title:l,artist:c,artwork:n});navigator.mediaSession.metadata=u}))}getMessageByMedia(e){const t=this.mediaDetails.get(e),{peerId:s,mid:n}=t;return t.isScheduled?i.a.getScheduledMessageByPeer(s,n):i.a.getMessageByPeer(s,n)}toggle(e){return!!this.playingMedia&&(void 0===e&&(e=this.playingMedia.paused),this.playingMedia.paused===e&&(e?this.playingMedia.play():this.playingMedia.pause(),!0))}willBePlayed(e){this.willBePlayedMedia=e}setSearchContext(e){return!Object(L.b)(this.searchContext,e)&&(this.searchContext=Object(L.a)(e),!0)}getSearchContext(){return this.searchContext}setTargets(e,t,s){this.listLoader?this.listLoader.reset():this.listLoader=new E({loadCount:10,loadWhenLeft:5,processItem:e=>(this.addMedia(e,!1),{peerId:e.peerId,mid:e.mid}),onJump:(e,t)=>{this.playItem(e)},onEmptied:()=>{a.default.dispatchEvent("media_stop"),this.stop()}});const i=void 0===this.searchContext.folderId;t?this.listLoader.setTargets(t,s,i):this.listLoader.reverse=i,this.listLoader.setSearchContext(this.searchContext),this.listLoader.current=e,this.listLoader.load(!0),this.listLoader.load(!1)}setMedia(e,t){this.playingMedia=e,this.playingMedia.volume=this.volume,this.playingMedia.muted=this.muted,this.playingMedia.playbackRate=this.playbackRate,"mediaSession"in navigator&&this.setNewMediadata(t)}setSingleMedia(e,t){const s=this.playingMedia,i=this.pause();return this.willBePlayed(void 0),e?this.setMedia(e,t):this.playingMedia=void 0,this.toggleSwitchers(!1),()=>{this.toggleSwitchers(!0),s&&(this.mediaDetails.get(s)?this.setMedia(s,this.getMessageByMedia(s)):this.next()||this.previous()),e&&this.playingMedia===e&&this.stop(),i&&this.play()}}toggleSwitchers(e){this.lockedSwitchers=!e}};de.a.appMediaPlaybackController=ve;var fe=ve,ye=s(98);function we(e,t,s,i){const n=e=>{s({x:e.pageX,y:e.pageY,event:e})},a=t=>{document.removeEventListener("mousemove",n),e.addEventListener("mousedown",o,{once:!0}),i&&i({x:t.pageX,y:t.pageY,event:t})},o=s=>{0===s.button?(t({x:s.pageX,y:s.pageY,event:s}),n(s),document.addEventListener("mousemove",n),document.addEventListener("mouseup",a,{once:!0})):e.addEventListener("mousedown",o,{once:!0})};e.addEventListener("mousedown",o,{once:!0});const r=e=>{e.preventDefault(),s({x:e.touches[0].clientX,y:e.touches[0].clientY,isTouch:!0,event:e})},l=t=>{document.removeEventListener("touchmove",r),e.addEventListener("touchstart",c,{passive:!1,once:!0}),i&&i({x:t.touches[0].clientX,y:t.touches[0].clientY,isTouch:!0,event:t})},c=e=>{t({x:e.touches[0].clientX,y:e.touches[0].clientY,isTouch:!0,event:e}),r(e),document.addEventListener("touchmove",r,{passive:!1}),document.addEventListener("touchend",l,{passive:!1,once:!0})};return e.addEventListener("touchstart",c,{passive:!1,once:!0}),()=>{e.removeEventListener("mousedown",o),document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",a),e.removeEventListener("touchstart",c),document.removeEventListener("touchmove",r),document.removeEventListener("touchend",l)}}class Le{constructor(e,t=0){this.mousedown=!1,this.events={},this.withTransition=!1,this.useTransform=!1,this.vertical=!1,this.onMouseMove=e=>{this.scrub(e)},this.onMouseDown=e=>{var t;this.rect=this.container.getBoundingClientRect(),this.mousedown=!0,this.scrub(e),this.container.classList.add("is-focused"),(null===(t=this.events)||void 0===t?void 0:t.onMouseDown)&&this.events.onMouseDown(e)},this.onMouseUp=e=>{var t;this.mousedown=!1,this.container.classList.remove("is-focused"),(null===(t=this.events)||void 0===t?void 0:t.onMouseUp)&&this.events.onMouseUp(e)},this.onInput=()=>{var e;const t=+this.seek.value;this.setFilled(t),(null===(e=this.events)||void 0===e?void 0:e.onScrub)&&this.events.onScrub(t)},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("progress-line"),this.useTransform?this.container.classList.add("use-transform"):this.withTransition&&this.container.classList.add("with-transition"),this.filled=document.createElement("div"),this.filled.classList.add("progress-line__filled");const s=this.seek=document.createElement("input");s.classList.add("progress-line__seek"),s.type="range",s.step=""+this.step,s.min=""+this.min,s.max=""+this.max,s.value=""+t,t&&this.setProgress(t);const i=""+this.step,n=i.indexOf(".");this.decimals=-1===n?0:i.length-n-1,this.container.append(this.filled,s)}get value(){return+this.seek.value}setHandlers(e){this.events=e}setListeners(){this.seek.addEventListener("input",this.onInput),this._removeListeners=we(this.container,this.onMouseDown,this.onMouseMove,this.onMouseUp)}setProgress(e){this.seek.value=""+e,this.setFilled(+this.seek.value)}addProgress(e){this.seek.value=""+(+this.seek.value+e),this.setFilled(+this.seek.value)}setFilled(e){let t=(e-this.min)/(this.max-this.min);t=Object(C.a)(t,0,1),this.useTransform?this.filled.style.transform=`scaleX(${t})`:this.filled.style.width=100*t+"%"}scrub(e){var t;const s=this.vertical?this.rect.height:this.rect.width,i=Object(C.a)(this.vertical?-(e.y-this.rect.bottom):e.x-this.rect.left,0,s);let n=this.min+i/s*(this.max-this.min);return n-this.min<(this.max-this.min)/2&&(n-=this.step/10),n=+n.toFixed(this.decimals),n=Object(C.a)(n,this.min,this.max),this.setProgress(n),(null===(t=this.events)||void 0===t?void 0:t.onScrub)&&this.events.onScrub(n),n}removeListeners(){this._removeListeners&&(this._removeListeners(),this._removeListeners=null),this.seek.removeEventListener("input",this.onInput),this.events={}}}const Se=e=>{if(e.element)return e.element;const{icon:t,text:s,onClick:i}=e,n=document.createElement("div");n.className="btn-menu-item"+(t?" tgico-"+t:""),Object(ie.ripple)(n);const a=s?Object(A.i18n)(s):document.createElement("span");e.regularText&&(a.innerHTML=e.regularText),a.classList.add("btn-menu-item-text"),n.append(a),e.checkboxField&&(n.append(e.checkboxField.label),Object(l.b)(n,()=>{e.checkboxField.checked=!e.checkboxField.checked},e.options));const o=!!e.checkboxField||!!e.keepOpen;return Object(l.b)(n,"click"!==l.a||o?e=>{Object(c.a)(e),i(e),o||Object(se.c)()}:i,e.options),e.element=n};var Ee=(e,t)=>{const s=document.createElement("div");s.classList.add("btn-menu"),t&&e.forEach(e=>{e.options?e.options.listenerSetter=t:e.options={listenerSetter:t}});const i=e.map(Se);return s.append(...i),s};const Me=(e,t,s)=>{((null==s?void 0:s.listenerSetter)?s.listenerSetter.add(e):e.addEventListener.bind(e))(l.a,s=>{if(!e.classList.contains("btn-menu-toggle"))return!1;const i=e.querySelector(".btn-menu");Object(c.a)(s),e.classList.contains("menu-open")?Object(se.c)():(t&&t(s),Object(se.d)(i))})};var Ie=(e={},t,s,i)=>{e.asDiv=!0;const n=N("more btn-menu-toggle",e),a=Ee(s,e.listenerSetter);return a.classList.add(t),Me(n,i,e),n.append(a),n},Ce=s(5);class ke extends Le{constructor(e,t,s,i){super({step:1e3/60/1e3,min:0,max:1,withTransition:s,useTransform:i},0),this.progressRAF=0,this.onLoadedData=()=>{this.max=this.media.duration,this.seek.setAttribute("max",""+this.max)},this.onEnded=()=>{this.setProgress()},this.onPlay=()=>{let e=()=>{this.setProgress(),this.progressRAF=this.media.paused?0:window.requestAnimationFrame(e)};this.progressRAF&&window.cancelAnimationFrame(this.progressRAF),this.streamable&&this.setLoadProgress(),this.progressRAF=window.requestAnimationFrame(e)},this.onTimeUpdate=()=>{this.media.paused&&(this.setProgress(),this.streamable&&this.setLoadProgress())},this.onProgress=e=>{this.setLoadProgress()},e&&this.setMedia(e,t)}setMedia(e,t=!1){this.media&&this.removeListeners(),t&&!this.filledLoad?(this.filledLoad=document.createElement("div"),this.filledLoad.classList.add("progress-line__filled","progress-line__loaded"),this.container.prepend(this.filledLoad)):this.filledLoad&&this.filledLoad.classList.toggle("hide",!t),this.media=e,this.streamable=t,(!e.paused||e.currentTime>0)&&this.onPlay();let s=!1;this.setSeekMax(),this.setListeners(),this.setHandlers({onMouseDown:()=>{s=!this.media.paused,s&&this.media.pause()},onMouseUp:e=>{s&&this.media.play()}})}scrub(e){const t=super.scrub(e);return this.media.currentTime=t,t}setLoadProgress(){if(fe.isSafariBuffering(this.media))return;const e=this.media.buffered,t=e.length,s=this.media.currentTime;let i=0,n=0;for(let a=0;a=t&&t>=i&&(i=t,n=e.end(a))}const a=this.media.duration?n/this.media.duration:0;this.filledLoad.style.width=100*a+"%"}setSeekMax(){this.max=this.media.duration||0,this.max>0?this.onLoadedData():this.media.addEventListener("loadeddata",this.onLoadedData)}setProgress(){if(fe.isSafariBuffering(this.media))return;const e=this.media.currentTime;super.setProgress(e)}setListeners(){super.setListeners(),this.media.addEventListener("ended",this.onEnded),this.media.addEventListener("play",this.onPlay),this.media.addEventListener("timeupdate",this.onTimeUpdate),this.streamable&&this.media.addEventListener("progress",this.onProgress)}removeListeners(){super.removeListeners(),this.media.removeEventListener("loadeddata",this.onLoadedData),this.media.removeEventListener("ended",this.onEnded),this.media.removeEventListener("play",this.onPlay),this.media.removeEventListener("timeupdate",this.onTimeUpdate),this.streamable&&this.media.removeEventListener("progress",this.onProgress),this.progressRAF&&(window.cancelAnimationFrame(this.progressRAF),this.progressRAF=0)}}class Te extends Le{constructor(e,t=!1){super({step:.01,min:0,max:1,vertical:t},1),this.listenerSetter=e,this.vertical=t,this.onMuteClick=e=>{e&&Object(c.a)(e),fe.muted=!fe.muted},this.setVolume=()=>{const{volume:e,muted:t}=fe;let s;s=!e||t?"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z":e>.5?"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z":e>0&&e<.25?"M7 9v6h4l5 5V4l-5 5H7z":"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z";try{this.volumeSvg.innerHTML=``}catch(e){}this.mousedown||this.setProgress(t?0:e)},this.setListeners(),this.setHandlers({onScrub:e=>{const t=Math.max(Math.min(e,1),0);fe.muted=!1,fe.volume=t}}),this.btn=document.createElement("div"),this.btn.classList.add("player-volume"),this.btn.innerHTML='\n \n ',this.btn.classList.add("btn-icon"),this.volumeSvg=this.btn.firstElementChild,this.btn.append(this.container),Object(l.b)(this.volumeSvg,this.onMuteClick,{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("media_playback_params",this.setVolume),this.setVolume()}}class Pe extends R.a{constructor(e,t=!1,s=!1,i){if(super(!1),this.video=e,this.showControlsTimeout=0,this.hideControls=()=>{clearTimeout(this.showControlsTimeout),this.showControlsTimeout=0;const e=this.wrapper.classList.contains("show-controls");if(!1!==this.controlsLocked){if(this.video.paused||!e||this.controlsLocked)return}else if(!e)return;this.dispatchEvent("toggleControls",!1),this.wrapper.classList.remove("show-controls")},this.showControls=(e=!0)=>{this.showControlsTimeout?(clearTimeout(this.showControlsTimeout),this.showControlsTimeout=0):this.wrapper.classList.contains("show-controls")||!1===this.controlsLocked||(this.dispatchEvent("toggleControls",!0),this.wrapper.classList.add("show-controls")),e&&!this.controlsLocked&&(this.showControlsTimeout=window.setTimeout(this.hideControls,3e3))},this.toggleControls=e=>{const t=this.wrapper.classList.contains("show-controls");if(void 0===e)t?this.hideControls():this.showControls();else{if(e===t)return;!1===e?this.hideControls():this.showControls()}},this.onFullScreen=()=>{null!==document.webkitFullscreenElement||this.wrapper.classList.remove("ckin__fullscreen")},this.wrapper=document.createElement("div"),this.wrapper.classList.add("ckin__player"),this.listenerSetter=new H.a,e.parentNode.insertBefore(this.wrapper,e),this.wrapper.appendChild(e),this.skin="default",this.stylePlayer(i),"default"===this.skin){const t=this.wrapper.querySelector(".default__controls.ckin__controls");this.progress=new ke(e,s),t.prepend(this.progress.container)}if(t){e.play().catch(t=>{"NotAllowedError"===t.name&&(e.muted=!0,e.autoplay=!0,e.play())}).finally(()=>{this.wrapper.classList.toggle("is-playing",!this.video.paused)})}}stylePlayer(e){const{wrapper:t,video:s,skin:i}=this;t.classList.add(i);const n=this.buildControls();let o;if(t.insertAdjacentHTML("beforeend",n),"default"===i){const e=t.querySelectorAll(".toggle"),i=t.querySelector(".fullscreen"),n=t.querySelector("#time-elapsed");o=t.querySelector("#time-duration"),o.innerHTML=String(0|s.duration).toHHMMSS();const r=new Te(this.listenerSetter);t.querySelector(".left-controls").insertBefore(r.btn,n.parentElement),Array.from(e).forEach(e=>{this.listenerSetter.add(e)("click",()=>{this.togglePlay()})}),this.listenerSetter.add(s)("click",()=>{pe.IS_TOUCH_SUPPORTED||this.togglePlay()}),pe.IS_TOUCH_SUPPORTED?this.listenerSetter.add(t)("click",()=>{this.toggleControls()}):(this.listenerSetter.add(this.wrapper)("mousemove",()=>{this.showControls()}),this.listenerSetter.add(this.wrapper)("mouseenter",()=>{this.showControls(!1)}),this.listenerSetter.add(this.wrapper)("mouseleave",e=>{Object(Ce.a)(e.relatedTarget,"media-viewer-caption")?this.showControls(!1):this.hideControls()}),this.listenerSetter.add(document)("keydown",e=>{if(a.default.overlaysActive>1)return;let t=!0;return"KeyF"===e.code?this.toggleFullScreen(i):"KeyM"===e.code?fe.muted=!fe.muted:"Space"===e.code?this.togglePlay():e.altKey&&"Equal"===e.code?fe.playbackRate+=.25:e.altKey&&"Minus"===e.code?fe.playbackRate-=.25:t=!1,t?(Object(c.a)(e),!1):void 0})),this.listenerSetter.add(s)("dblclick",()=>{pe.IS_TOUCH_SUPPORTED||this.toggleFullScreen(i)}),this.listenerSetter.add(i)("click",e=>{this.toggleFullScreen(i)}),"webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange".split(" ").forEach(e=>{this.listenerSetter.add(t)(e,this.onFullScreen,!1)}),this.listenerSetter.add(s)("timeupdate",()=>{n.innerHTML=String(0|s.currentTime).toHHMMSS()}),this.listenerSetter.add(s)("play",()=>{this.wrapper.classList.add("played")},{once:!0}),this.listenerSetter.add(s)("pause",()=>{this.showControls(!1)})}this.listenerSetter.add(s)("play",()=>{this.wrapper.classList.add("is-playing")}),this.listenerSetter.add(s)("pause",()=>{this.wrapper.classList.remove("is-playing")}),s.duration||e?o.innerHTML=String(Math.round(s.duration||e)).toHHMMSS():Object(me.d)(s).then(()=>{o.innerHTML=String(Math.round(s.duration)).toHHMMSS()})}lockControls(e){this.controlsLocked=e,this.wrapper.classList.toggle("disable-hover",!1===e),this.toggleControls(e)}togglePlay(){this.video[this.video.paused?"play":"pause"]()}buildControls(){const e=this.skin;if("default"===e)return`\n \n
\n
\n
\n
\n \n
\n \n / \n \n
\n
\n
\n \n \n
\n
\n
`}setBtnMenuToggle(){const e=[.25,.5,1,1.25,1.5,2].map(e=>({regularText:1===e?"Normal":""+e,onClick:()=>this.video.playbackRate=e})),t=Ee(e),s=this.wrapper.querySelector(".settings");t.classList.add("top-left"),Me(s),s.append(t)}static isFullScreen(){return!!(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)}toggleFullScreen(e){const t=this.wrapper;if(h.IS_APPLE_MOBILE){const e=this.video;return e.webkitEnterFullscreen(),void e.enterFullscreen()}Pe.isFullScreen()?(t.classList.remove("ckin__fullscreen"),document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen?document.webkitCancelFullScreen():document.msExitFullscreen&&document.msExitFullscreen(),e.classList.remove("tgico-smallscreen"),e.classList.add("tgico-fullscreen"),e.setAttribute("title","Full Screen")):(t.classList.add("ckin__fullscreen"),t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen(),e.classList.remove("tgico-fullscreen"),e.classList.add("tgico-smallscreen"),e.setAttribute("title","Exit Full Screen"))}removeListeners(){super.cleanup(),this.listenerSetter.removeAll(),this.progress.removeListeners()}}var xe=s(108),Ae=s(100),Oe=s(107),_e=s(35);function Fe(e){return function(e,t){let s,i=!1;return(...n)=>{s=n,i||(i=!0,e(()=>{i=!1,t(...s)}))}}(_e.b,e)}function je(e){e.classList.add("is-voice");const t=e.message,s=i.a.getMediaFromMessage(t);t.pFlags.out&&e.classList.add("is-out");const n=v.b.isMobile?16:23,a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.classList.add("audio-waveform"),a.setAttributeNS(null,"width","150"),a.setAttributeNS(null,"height",""+n),a.setAttributeNS(null,"viewBox","0 0 150 "+n);const o=document.createElement("div");o.classList.add("audio-time"),e.append(a,o);let r=s.attributes.find(e=>"documentAttributeAudio"===e._).waveform||new Uint8Array([]);r=function(e){e instanceof Uint8Array||(e=new Uint8Array(e));const t=8*e.length/5|0;if(!t)return new Uint8Array([]);let s;try{const i=new DataView(e.buffer);s=new Uint8Array(t);for(let e=0;e>n&31}}catch(e){s=new Uint8Array([])}return s}(r.slice(0,63));const d=Math.max(...r),h=r.length?r.length:100,u=Math.min(37,h);let p=0;const m=n-4;let g="";for(let e=0,t=0,s=0;e=h){s=s+u-h,s<(u+1)/2&&p\n `,t+=4,p=s<(u+1)/2?0:i}else p{let t=e.audio;const s=()=>{const e=t.currentTime===t.duration?0:Math.ceil(t.currentTime/t.duration*u);b.forEach((t,s)=>t.classList.toggle("active",s0&&t.currentTime!==t.duration)&&s();const i=Fe(s);return e.addAudioListener("timeupdate",i),e.addAudioListener("ended",i),e.readyPromise.then(()=>{let e=!1,s=!1;function i(e){let s;if(e instanceof MouseEvent)s=e.offsetX;else{const t=e.target.getBoundingClientRect();s=e.targetTouches[0].pageX-t.left}const i=s/150*t.duration;t.currentTime=i}f.addEventListener("mouseleave",i=>{e&&(t.play(),e=!1),s=!1}),f.addEventListener("mousemove",t=>{s=!0,e&&i(t)}),f.addEventListener("mousedown",s=>{s.preventDefault(),0===s.button&&(t.paused||t.pause(),i(s),e=!0)}),f.addEventListener("mouseup",i=>{s&&e&&(t.play(),e=!1)}),Object(l.b)(f,e=>{Object(c.a)(e),t.paused||i(e)})},Ae.a),()=>{f.remove(),f=null,t=null}}}function De(e=!0){const t=new ye.a({cancelable:!0,tryAgainOnFail:e});return t.construct(),e||(t.circle.setAttributeNS(null,"r","23"),t.totalLength=143.58203125),t}a.default.addEventListener("messages_media_read",({mids:e,peerId:t})=>{e.forEach(e=>{const s=`[data-mid="${e}"][data-peer-id="${t}"]`;Array.from(document.querySelectorAll(`audio-element.is-unread${s}, .media-round.is-unread${s}`)).forEach(e=>{e.classList.remove("is-unread")})})});const Be=(e,t)=>{let s,i;const n=Object(Ce.a)(e,e.classList.contains("search-super-item")?"tabs-tab":"bubbles-inner");if(n){const t=':not([data-is-outgoing="1"])',a=".audio:not(.is-voice)"+t;let o;o=e.matches(a)?a:`.audio.is-voice${t}, .media-round${t}`;const r=Array.from(n.querySelectorAll(o)),l=r.indexOf(e),c=r.map(e=>({peerId:+e.dataset.peerId,mid:+e.dataset.mid}));s=c.slice(0,l),i=c.slice(l+1)}return[s,i]};class Re extends HTMLElement{constructor(){super(...arguments),this.withTime=!1,this.voiceAsMusic=!1,this.showSender=!1,this.listenerSetter=new H.a}render(){var e;this.classList.add("audio"),this.dataset.mid=""+this.message.mid,this.dataset.peerId=""+this.message.peerId;const t=i.a.getMediaFromMessage(this.message),s="voice"===t.type,n=!this.voiceAsMusic&&s,a=this.message.pFlags.is_outgoing,o=a&&this.preloader,r=String(0|t.duration).toHHMMSS();this.innerHTML='\n
\n
\n
\n
\n
\n
';const d=this.firstElementChild,u=document.createElement("div");u.classList.add("audio-download");"audio"!==t.type&&this.message&&this.message.pFlags.media_unread&&this.classList.add("is-unread"),o&&(this.classList.add("is-outgoing"),this.append(u));const p=n?je(this):function(e){const t=e.withTime,s=e.message,n=i.a.getMediaFromMessage(s),a="voice"===n.type||"round"===n.type,o=document.createElement("div");if(o.classList.add("audio-description"),!a){const a=[];n.audioPerformer&&a.push(Object(Oe.a)(n.audioPerformer)),t?a.push(Object(re.c)(s.date)):a.length||a.push(Object(C.b)(n.size)),e.showSender&&a.push(i.a.wrapSenderToPeer(s)),o.append(...Object(A.joinElementsWith)(a," • "))}e.insertAdjacentHTML("beforeend",'\n
\n
\n
\n
');const r=e.querySelector(".audio-title"),l=new xe.a;l.dataset.fontWeight=e.dataset.fontWeight,a?l.append(i.a.wrapSenderToPeer(s)):l.innerHTML=n.audioTitle||n.fileName,r.append(l),e.showSender&&r.append(i.a.wrapSentTime(s));const c=e.querySelector(".audio-subtitle");return c.append(o),()=>{let t=!1,s=new ke(e.audio,n.supportsStreaming);e.addAudioListener("ended",()=>{e.classList.remove("audio-show-progress"),c.lastChild.replaceWith(o),t=!1});const i=()=>{t||(e.classList.add("audio-show-progress"),t=!0,s&&c.lastChild.replaceWith(s.container))};return e.addAudioListener("play",i),(!e.audio.paused||e.audio.currentTime>0)&&i(),()=>{s.removeListeners(),s.container.remove(),s=null}}}(this),m=this.querySelector(".audio-time");m.innerHTML=r;const g=this.onLoad=e=>{this.onLoad=void 0;const t=this.audio=fe.addMedia(this.message,e),s=this.readyPromise=Object(oe.a)();this.audio.readyState>=this.audio.HAVE_CURRENT_DATA?s.resolve():this.addAudioListener("canplay",()=>s.resolve(),{once:!0}),this.onTypeDisconnect=p();const i=()=>String(0|t.currentTime).toHHMMSS()+(n?" / "+r:""),a=()=>{m.innerText=i(),d.classList.toggle("playing",!t.paused)};(!t.paused||t.currentTime>0&&t.currentTime!==t.duration)&&a();const o=(e,s=t.paused)=>{if(e&&Object(c.a)(e),s){if(fe.setSearchContext(this.searchContext)){const[e,t]=Be(this,this.searchContext.useSearch);fe.setTargets({peerId:this.message.peerId,mid:this.message.mid},e,t)}t.play().catch(()=>{})}else t.pause()};return Object(l.b)(d,e=>o(e),{listenerSetter:this.listenerSetter}),this.addAudioListener("ended",()=>{d.classList.remove("playing"),m.innerText=r}),this.addAudioListener("timeupdate",()=>{!t.currentTime&&t.paused||fe.isSafariBuffering(t)||(m.innerText=i())}),this.addAudioListener("pause",()=>{d.classList.remove("playing")}),this.addAudioListener("play",a),o};if(a)o&&(this.dataset.isOutgoing="1",this.preloader.attach(u,!1));else{let s=this.preloader;if(g("audio"!==t.type&&!this.noAutoDownload),t.thumbs){const e=[],s=ys({photo:t,message:null,container:d,boxWidth:48,boxHeight:48,loadPromises:this.loadPromises,withoutPreloader:!0,lazyLoadQueue:this.lazyLoadQueue});d.style.width=d.style.height="",s.images.thumb&&e.push(s.images.thumb),s.images.full&&e.push(s.images.full),this.classList.add("audio-with-thumb"),e.forEach(e=>e.classList.add("audio-thumb"))}const i=e=>{if(this.audio.src)return;fe.resolveWaitingForLoadMedia(this.message.peerId,this.message.mid,this.message.pFlags.is_scheduled);const i=()=>{e&&(fe.willBePlayed(this.audio),h.IS_SAFARI&&!this.audio.autoplay&&(this.audio.autoplay=!0))};if(i(),!s)if(t.supportsStreaming){let e;this.classList.add("corner-download");const t=()=>{const t=De(!1),s=Object(oe.a)();s.notifyAll({done:75,total:100}),s.catch(()=>{this.audio.pause(),fe.willBePlayed(void 0)}),s.cancel=()=>{s.cancel=Ae.a;const e=new Error;e.type="CANCELED",s.reject(e)},t.attach(u,!1,s),e=this.addAudioListener("pause",()=>{s.cancel()},{once:!0}),i()},s=this.addAudioListener("play",t);this.readyPromise.then(()=>{this.listenerSetter.remove(s),this.listenerSetter.remove(e)})}else{s=De(),e||(this.readyPromise=Object(oe.a)());const n=()=>{i();const n=M.a.downloadDoc(t);return e||n.then(()=>{this.readyPromise.resolve()}),s.attach(u,!1,n),{download:n}};s.setDownloadFunction(n),n()}this.append(u),this.classList.add("downloading"),this.readyPromise.then(()=>{this.classList.remove("downloading"),u.classList.add("downloaded"),setTimeout(()=>{u.remove()},200),fe.willBePlayedMedia===this.audio&&(this.audio.play(),fe.willBePlayed(void 0))})};(null===(e=this.audio)||void 0===e?void 0:e.src)||("audio"===t.type||this.noAutoDownload?Object(l.b)(d,()=>{i(!0)},{once:!0,capture:!0,passive:!1,listenerSetter:this.listenerSetter}):i(!1))}}get addAudioListener(){return this.listenerSetter.add(this.audio)}disconnectedCallback(){this.isConnected||(this.onTypeDisconnect&&(this.onTypeDisconnect(),this.onTypeDisconnect=null),this.readyPromise&&this.readyPromise.reject(),this.listenerSetter.removeAll(),this.listenerSetter=null,this.preloader=null)}}customElements.define("audio-element",Re);class He{constructor(e,t){this.className=e,this.fill=t,this.container=document.createElement("div"),this.container.className=e,this.border=document.createElement("div"),this.border.classList.add(e+"-border"),this.content=document.createElement("div"),this.content.classList.add(e+"-content"),this.title=document.createElement("div"),this.title.classList.add(e+"-title"),this.title.setAttribute("dir","auto"),this.subtitle=document.createElement("div"),this.subtitle.classList.add(e+"-subtitle"),this.subtitle.setAttribute("dir","auto"),this.content.append(this.title,this.subtitle),this.container.append(this.border,this.content)}}function Ue(e){var t;let{title:s,titleEl:n,subtitle:a,subtitleEl:o,mediaEl:l,message:c,loadPromises:d}=e;void 0!==s&&("string"==typeof s&&(s=Object(X.f)(s,140),s=Z.a.wrapEmojiText(s)),Object(x.a)(n,s)),d||(d=[]);let h=c&&c.media,u=!1,p=!1;const m=l?Array.from(l.children).slice():[];let g;if(h&&l){if(o.textContent="",o.append(i.a.wrapMessageForReply(c)),h.webpage&&(h=h.webpage),h.photo||h.document&&-1!==["video","sticker","gif","round","photo"].indexOf(h.document.type)){g=mo.chat.bubbles.getMiddleware();const e=mo.chat.bubbles.lazyLoadQueue;if("sticker"===(null===(t=h.document)||void 0===t?void 0:t.type))u=!0,Ls({doc:h.document,div:l,lazyLoadQueue:e,group:ho,width:32,height:32,middleware:g,loadPromises:d});else{const t=h.photo||h.document;p="round"===t.type;try{ys({photo:t,container:l,boxWidth:32,boxHeight:32,size:r.a.choosePhotoSize(t,32,32),middleware:g,lazyLoadQueue:e,noBlur:!0,withoutPreloader:!0,loadPromises:d}),u=!0}catch(e){}}}}else c?(o.textContent="",o.append(i.a.wrapMessageForReply(c,c.message&&Object(X.f)(c.message,140)))):("string"==typeof a&&(a=Object(X.f)(a,140),a=Z.a.wrapEmojiText(a)),Object(x.a)(o,a||""));return Promise.all(d).then(()=>{g&&!g()||(m.forEach(e=>e.remove()),l&&l.classList.toggle("is-round",p))}),u}class Ne extends He{constructor(e){super(e,(e,t="",s)=>{this.mediaEl||(this.mediaEl=document.createElement("div"),this.mediaEl.classList.add(this.className+"-media"));const i=Ue({title:e,titleEl:this.title,subtitle:t,subtitleEl:this.subtitle,mediaEl:this.mediaEl,message:s});this.container.classList.toggle("is-media",i),i?this.content.prepend(this.mediaEl):this.mediaEl.remove()}),this.className=e}}const ze=0,Ve=1,We=2,Ke=4,Ge=8;class qe{constructor(e,t,s,i,n=t){this.sizes=e,this.maxWidth=t,this.minWidth=s,this.spacing=i,this.maxHeight=n,this.count=e.length,this.ratios=qe.countRatios(e),this.proportions=qe.countProportions(this.ratios),this.averageRatio=Object(y.a)(this.ratios,1)/this.count,this.maxSizeRatio=t/this.maxHeight}layout(){return this.count?this.count>=5||this.ratios.find(e=>e>2)?new Qe(this.ratios,this.averageRatio,this.maxWidth,this.minWidth,this.spacing).layout():2===this.count?this.layoutTwo():3===this.count?this.layoutThree():this.layoutFour():[]}layoutTwo(){return"ww"===this.proportions&&this.averageRatio>1.4*this.maxSizeRatio&&this.ratios[1]-this.ratios[0]<.2?this.layoutTwoTopBottom():"ww"===this.proportions||"qq"===this.proportions?this.layoutTwoLeftRightEqual():this.layoutTwoLeftRight()}layoutThree(){return"n"===this.proportions[0]?this.layoutThreeLeftAndOther():this.layoutThreeTopAndOther()}layoutFour(){return"w"===this.proportions[0]?this.layoutFourTopAndOther():this.layoutFourLeftAndOther()}layoutTwoTopBottom(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],Math.min(e/this.ratios[1],(this.maxHeight-this.spacing)/2)));return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:e,height:t},sides:Ge|Ke|We}]}layoutTwoLeftRightEqual(){const e=(this.maxWidth-this.spacing)/2,t=Math.round(Math.min(e/this.ratios[0],Math.min(e/this.ratios[1],1*this.maxHeight)));return[{geometry:{x:0,y:0,width:e,height:t},sides:Ve|Ge|Ke},{geometry:{x:e+this.spacing,y:0,width:e,height:t},sides:Ve|We|Ke}]}layoutTwoLeftRight(){const e=Math.round(1.5*this.minWidth),t=Math.min(Math.round(Math.max(.4*(this.maxWidth-this.spacing),(this.maxWidth-this.spacing)/this.ratios[0]/(1/this.ratios[0]+1/this.ratios[1]))),this.maxWidth-this.spacing-e),s=this.maxWidth-t-this.spacing,i=Math.min(this.maxHeight,Math.round(Math.min(s/this.ratios[0],t/this.ratios[1])));return[{geometry:{x:0,y:0,width:s,height:i},sides:Ve|Ge|Ke},{geometry:{x:s+this.spacing,y:0,width:t,height:i},sides:Ve|We|Ke}]}layoutThreeLeftAndOther(){const e=this.maxHeight,t=Math.round(Math.min((this.maxHeight-this.spacing)/2,this.ratios[1]*(this.maxWidth-this.spacing)/(this.ratios[2]+this.ratios[1]))),s=e-t-this.spacing,i=Math.max(this.minWidth,Math.round(Math.min((this.maxWidth-this.spacing)/2,Math.min(t*this.ratios[2],s*this.ratios[1])))),n=Math.min(Math.round(e*this.ratios[0]),this.maxWidth-this.spacing-i);return[{geometry:{x:0,y:0,width:n,height:e},sides:Ve|Ge|Ke},{geometry:{x:n+this.spacing,y:0,width:i,height:s},sides:Ve|We},{geometry:{x:n+this.spacing,y:s+this.spacing,width:i,height:t},sides:Ke|We}]}layoutThreeTopAndOther(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],.66*(this.maxHeight-this.spacing))),s=(this.maxWidth-this.spacing)/2,i=Math.min(this.maxHeight-t-this.spacing,Math.round(Math.min(s/this.ratios[1],s/this.ratios[2]))),n=e-s-this.spacing;return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:s,height:i},sides:Ke|Ge},{geometry:{x:s+this.spacing,y:t+this.spacing,width:n,height:i},sides:Ke|We}]}layoutFourTopAndOther(){const e=this.maxWidth,t=Math.round(Math.min(e/this.ratios[0],.66*(this.maxHeight-this.spacing))),s=Math.round((this.maxWidth-2*this.spacing)/(this.ratios[1]+this.ratios[2]+this.ratios[3])),i=Math.max(this.minWidth,Math.round(Math.min(.4*(this.maxWidth-2*this.spacing),s*this.ratios[1]))),n=Math.round(Math.max(Math.max(1*this.minWidth,.33*(this.maxWidth-2*this.spacing)),s*this.ratios[3])),a=e-i-n-2*this.spacing,o=Math.min(this.maxHeight-t-this.spacing,s);return[{geometry:{x:0,y:0,width:e,height:t},sides:Ge|Ve|We},{geometry:{x:0,y:t+this.spacing,width:i,height:o},sides:Ke|Ge},{geometry:{x:i+this.spacing,y:t+this.spacing,width:a,height:o},sides:Ke},{geometry:{x:i+this.spacing+a+this.spacing,y:t+this.spacing,width:n,height:o},sides:We|Ke}]}layoutFourLeftAndOther(){const e=this.maxHeight,t=Math.round(Math.min(e*this.ratios[0],.6*(this.maxWidth-this.spacing))),s=Math.round((this.maxHeight-2*this.spacing)/(1/this.ratios[1]+1/this.ratios[2]+1/this.ratios[3])),i=Math.round(s/this.ratios[1]),n=Math.round(s/this.ratios[2]),a=e-i-n-2*this.spacing,o=Math.max(this.minWidth,Math.min(this.maxWidth-t-this.spacing,s));return[{geometry:{x:0,y:0,width:t,height:e},sides:Ve|Ge|Ke},{geometry:{x:t+this.spacing,y:0,width:o,height:i},sides:Ve|We},{geometry:{x:t+this.spacing,y:i+this.spacing,width:o,height:n},sides:We},{geometry:{x:t+this.spacing,y:i+n+2*this.spacing,width:o,height:a},sides:Ke|We}]}static countRatios(e){return e.map(e=>e.w/e.h)}static countProportions(e){return e.map(e=>e>1.2?"w":e<.8?"n":"q").join("")}}class Qe{constructor(e,t,s,i,n,a=4*s/3){this.averageRatio=t,this.maxWidth=s,this.minWidth=i,this.spacing=n,this.maxHeight=a,this.ratios=Qe.cropRatios(e,t),this.count=e.length}static cropRatios(e,t){return e.map(e=>t>1.1?Object(C.a)(e,1,2.75):Object(C.a)(e,.6667,1))}layout(){let e=new Array(this.count),t=[];const s=(e,t)=>{const s=this.ratios.slice(e,e+t),i=Object(y.a)(s,0);return(this.maxWidth-(t-1)*this.spacing)/i},i=e=>{let i=[],n=0;for(let t of e)i.push(s(n,t)),n+=t;t.push({lineCounts:e,heights:i})};for(let e=1;e!==this.count;++e){const t=this.count-e;e>3||t>3||i([e,t])}for(let e=1;e!==this.count-1;++e)for(let t=1;t!==this.count-e;++t){const s=this.count-e-t;e>3||t>(this.averageRatio<.85?4:3)||s>3||i([e,t,s])}for(let e=1;e!==this.count-1;++e)for(let t=1;t!==this.count-e;++t)for(let s=1;s!==this.count-e-t;++s){const n=this.count-e-t-s;e>3||t>3||s>3||n>3||i([e,t,s,n])}let n=null,a=0;for(const e of t){const{heights:t,lineCounts:s}=e,i=s.length,o=Object(y.a)(t,0)+this.spacing*(i-1),r=Math.min(...t),l=(Math.max(...t),r{for(let e=1;e!==i;++e)if(s[e-1]>s[e])return 1.5;return 1})(),d=Math.abs(o-this.maxHeight)*l*c;(!n||d{if(this.uploadAvatar)return!0;let e=0,t=0,s=0;return this.inputFields.forEach(i=>{i.isValid()&&(++e,i.required&&++s),i.required&&++t}),t===s&&e>0},this.handleChange=()=>{this.nextBtn.classList.toggle("is-visible",this.isChanged())},Object(L.g)(this,e),this.nextBtn?this.nextBtn.classList.contains("btn-corner")||(this.handleChange=()=>{this.nextBtn.toggleAttribute("disabled",!this.isChanged()||this.disabled)}):this.nextBtn=$({icon:"check"}),e.withoutAvatar||(this.avatarElem=document.createElement("avatar-element"),this.avatarElem.classList.add("avatar-placeholder","avatar-"+this.avatarSize),this.avatarElem.setAttribute("peer",""+this.peerId),e.doNotEditAvatar||(this.avatarEdit=new Q(e=>{this.uploadAvatar=e,this.handleChange(),this.avatarElem.remove()}),this.avatarEdit.container.append(this.avatarElem))),this.inputFields.forEach(e=>{this.listenerSetter.add(e.input)("input",this.handleChange)}),this.handleChange()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this.inputFields.forEach(t=>t.input.toggleAttribute("disabled",e)),this.handleChange()}lockWithPromise(e,t=!1){this.disabled=!0,e.then(()=>{t&&(this.disabled=!1)},()=>{this.disabled=!1})}}class Je{constructor(e={}){this.freezed=!1,this.container=document.createElement(e.radioField||e.checkboxField?"label":"div"),this.container.classList.add("row"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("row-subtitle"),this.subtitle.setAttribute("dir","auto"),e.subtitle?"string"==typeof e.subtitle?b(this.subtitle,e.subtitle):this.subtitle.append(e.subtitle):e.subtitleLangKey&&this.subtitle.append(Object(A.i18n)(e.subtitleLangKey,e.subtitleLangArgs)),this.container.append(this.subtitle);let t=!!e.havePadding;if(e.radioField||e.checkboxField){if(t=!0,e.radioField&&(this.radioField=e.radioField,this.container.append(this.radioField.label)),e.checkboxField){this.checkboxField=e.checkboxField;const t=e.checkboxField.label.classList.contains("checkbox-field-toggle");t?(this.container.classList.add("row-with-toggle"),e.titleRight=this.checkboxField.label):this.container.append(this.checkboxField.label),e.noCheckboxSubtitle||t||this.checkboxField.input.addEventListener("change",()=>{Object(x.a)(this.subtitle,Object(A.i18n)(this.checkboxField.input.checked?"Checkbox.Enabled":"Checkbox.Disabled"))})}(e.radioField||e.checkboxField).label.classList.add("disable-hover")}if(e.title||e.titleLangKey){let t;if(e.titleRight?(t=document.createElement("div"),t.classList.add("row-title-row"),this.container.append(t)):t=this.container,this.title=document.createElement("div"),this.title.classList.add("row-title"),this.title.setAttribute("dir","auto"),e.title?this.title.innerHTML=e.title:this.title.append(Object(A.i18n)(e.titleLangKey)),t.append(this.title),e.titleRight){const s=document.createElement("div");s.classList.add("row-title","row-title-right"),"string"==typeof e.titleRight?s.innerHTML=e.titleRight:s.append(e.titleRight),t.append(s)}}e.icon&&(t=!0,this.title.classList.add("tgico","tgico-"+e.icon),this.container.classList.add("row-with-icon")),t&&this.container.classList.add("row-with-padding"),e.navigationTab&&(e.clickable=()=>e.navigationTab.open()),(e.clickable||e.radioField||e.checkboxField)&&("function"==typeof e.clickable&&this.container.addEventListener("click",t=>{this.freezed||e.clickable(t)}),this.container.classList.add("row-clickable","hover-effect"),e.noRipple||Object(ie.ripple)(this.container,void 0,void 0,!0))}}const Ze=(e,t)=>function(e,t){const s=document.createElement("form");return e.forEach(e=>{const{container:i,input:n}=e;s.append(i),n.addEventListener("change",()=>{n.checked&&t(n.value)})}),s}(e.map(e=>({container:e.container,input:e.radioField.input})),t);function et(e){navigator.clipboard?navigator.clipboard.writeText(e):function(e){var t=document.createElement("textarea");t.value=e,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch(e){}document.body.removeChild(t)}(e)}var tt=s(62);class st{constructor(e){const t=this.label=document.createElement("label");t.classList.add("radio-field");const s=this.input=document.createElement("input");s.type="radio",s.name="input-radio-"+e.name,e.value&&(s.value=e.value,e.stateKey&&(k.default.getState().then(t=>{s.checked=Object(L.d)(t,e.stateKey)===e.value}),s.addEventListener("change",()=>{k.default.setByKey(e.stateKey,e.value)})));const i=this.main=document.createElement("div");i.classList.add("radio-field-main"),e.text?i.innerHTML=e.text:e.langKey&&Object(A._i18n)(i,e.langKey),t.append(s,i)}get checked(){return this.input.checked}set checked(e){this.setValueSilently(e);const t=new Event("change",{bubbles:!0,cancelable:!0});this.input.dispatchEvent(t)}setValueSilently(e){this.input.checked=e}}const it=document.createElement("div");function nt(e){Object(x.a)(it,e),document.body.append(it),it.dataset.timeout&&clearTimeout(+it.dataset.timeout),it.dataset.timeout=""+setTimeout(()=>{it.remove(),delete it.dataset.timeout},3e3)}function at(e){nt(Object(A.i18n)(e.langPackKey))}function ot(e,t,s=!0,i=!0){let n,a,o,r,l=!1;return(...c)=>(a||(a=new Promise((e,t)=>(o=e,r=t))),n?(clearTimeout(n),l=!0,r(),a=new Promise((e,t)=>(o=e,r=t))):s&&(o(e(...c)),l=!1),n=setTimeout(()=>{!i||s&&!l||o(e(...c)),n=a=o=r=void 0,l=!1},t),a.catch(()=>{}),a)}it.classList.add("toast");var rt=s(30);class lt extends F.b{constructor(e){super(e),this.checkUsernameDebounced=ot(this.checkUsername.bind(this),150,!1,!0),e.listenerSetter.add(this.input)("input",()=>{const e=this.getValue();if(e===this.originalValue||!e.length)return this.setState(F.a.Neutral,this.options.label),void(this.options.onChange&&this.options.onChange());Z.b.isUsernameValid(e)?this.setState(F.a.Neutral):this.setError(this.options.invalidText),this.input.classList.contains("error")?this.options.onChange&&this.options.onChange():this.checkUsernameDebounced(e)})}getValue(){let e=this.value;return this.options.head&&(e=e.slice(this.options.head.length),this.setValueSilently(this.options.head+e)),e}checkUsername(e){this.checkUsernamePromise||(this.options.peerId?this.checkUsernamePromise=rt.a.invokeApi("channels.checkUsername",{channel:G.a.getChannelInput(-this.options.peerId),username:e}):this.checkUsernamePromise=rt.a.invokeApi("account.checkUsername",{username:e}),this.checkUsernamePromise.then(t=>{this.getValue()===e&&(t?this.setState(F.a.Valid,this.options.availableText):this.setError(this.options.takenText))},t=>{if(this.getValue()===e)switch(t.type){case"USERNAME_INVALID":this.setError(this.options.invalidText)}}).then(()=>{this.checkUsernamePromise=void 0,this.options.onChange&&this.options.onChange();const t=this.getValue();t!==e&&this.isValid()&&Z.b.isUsernameValid(t)&&this.checkUsername(t)}))}}var ct=s(66),dt=s(50);class ht extends ct.b{constructor(e,t={}){if(super("popup-peer"+(e?" "+e:""),t.buttons&&Object(ct.a)(t.buttons),Object.assign({overlayClosable:!0},t)),this.className=e,t.peerId){let e=new ko;e.setAttribute("dialog","1"),e.setAttribute("peer",""+t.peerId),e.classList.add("avatar-32"),this.header.prepend(e)}t.noTitle||(t.titleLangKey||!t.title?this.title.append(Object(A.i18n)(t.titleLangKey||"AppName",t.titleLangArgs)):this.title.innerText=t.title||"");const s=document.createDocumentFragment();if(t.descriptionLangKey||t.description){const e=document.createElement("p");e.classList.add("popup-description"),t.descriptionLangKey?e.append(Object(A.i18n)(t.descriptionLangKey,t.descriptionLangArgs)):t.description&&(e.innerHTML=t.description),s.append(e)}t.checkboxes&&(this.container.classList.add("have-checkbox"),t.checkboxes.forEach(e=>{e.withRipple=!1;const t=new dt.a(e);e.checkboxField=t,s.append(t.label)}),t.buttons.forEach(e=>{if(e.callback){const s=e.callback;e.callback=()=>{const e=new Set;t.checkboxes.forEach(t=>{t.checkboxField.checked&&e.add(t.text)}),s(e)}}})),this.container.insertBefore(s,this.header.nextElementSibling)}}var ut=s(54);class pt extends W{init(){this.container.classList.add("edit-peer-container","group-type-container");const e=G.a.isBroadcast(this.chatId);this.setTitle(e?"ChannelType":"GroupType");const t=new nn({name:e?"ChannelType":"GroupType"}),s=Object(tt.b)(),i=new Je({radioField:new st({langKey:e?"ChannelPrivate":"MegaPrivate",name:s,value:"private"}),subtitleLangKey:e?"ChannelPrivateInfo":"MegaPrivateInfo"}),a=new Je({radioField:new st({langKey:e?"ChannelPublic":"MegaPublic",name:s,value:"public"}),subtitleLangKey:e?"ChannelPublicInfo":"MegaPublicInfo"}),o=Ze([i,a],e=>{const t=[c,u];"public"===e&&t.reverse(),t[0].container.classList.remove("hide"),t[1].container.classList.add("hide"),m()}),r=G.a.getChat(this.chatId);t.content.append(o);const c=new nn({}),d=new Je({title:this.chatFull.exported_invite.link,subtitleLangKey:e?"ChannelPrivateLinkHelp":"MegaPrivateLinkHelp",clickable:()=>{et(this.chatFull.exported_invite.link),nt(A.default.format("LinkCopied",!0))}}),h=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"RevokeLink"});Object(l.b)(h,()=>{new ht("revoke-link",{buttons:[{langKey:"RevokeButton",callback:()=>{const e=Object(ut.a)([h],!0);n.default.getChatInviteLink(this.chatId,!0).then(t=>{e(),d.title.innerHTML=t})}}],titleLangKey:"RevokeLink",descriptionLangKey:"RevokeAlert"}).show()},{listenerSetter:this.listenerSetter}),c.content.append(d.container,h);const u=new nn({caption:e?"Channel.UsernameAboutChannel":"Channel.UsernameAboutGroup",noDelimiter:!0}),p=document.createElement("div");p.classList.add("input-wrapper");const m=()=>{const e=i.radioField.checked&&"t.me/"!==b||g.isValid()&&g.input.classList.contains("valid");v.classList.toggle("is-visible",e)},g=new lt({label:"SetUrlPlaceholder",name:"group-public-link",plainText:!0,listenerSetter:this.listenerSetter,availableText:"Link.Available",invalidText:"Link.Invalid",takenText:"Link.Taken",onChange:m,peerId:-this.chatId,head:"t.me/"}),b="t.me/"+(r.username||"");p.append(g.container),u.content.append(p);const v=$({icon:"check",className:"is-visible"});this.content.append(v),Object(l.b)(v,()=>{Object(se.g)(v);const e=a.radioField.checked?g.getValue():"";G.a.migrateChat(this.chatId).then(t=>G.a.updateUsername(t,e)).then(()=>{this.close()})},{listenerSetter:this.listenerSetter}),("t.me/"!==b?a:i).radioField.checked=!0,g.setOriginalValue(b),this.scrollable.append(t.container,c.container,u.container)}}var mt=s(59);class gt{constructor(e){this.loading=!1,this.loaded=!1,Object(L.g)(this,e),e.scrollable.onScrolledBottom=()=>{this.load()}}load(){return this.loaded?Promise.resolve():this.loading?this.promise:(this.loading=!0,void(this.promise=this.getPromise().then(e=>{this.loading=!1,this.promise=void 0,e?(this.loaded=!0,this.scrollable.onScrolledBottom=null):this.scrollable.checkForTriggers()},()=>{this.promise=void 0,this.loading=!1})))}}var bt=s(80),vt=s(81),ft=s(48),yt=s(92),wt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};let Lt,St=!1;class Et{constructor(e){this.container=document.createElement("div"),this.list=Do.createChatList(),this.chatsContainer=document.createElement("div"),this.selected=new Set,this.freezed=!1,this.folderId=0,this.offsetIndex=0,this.query="",this.loadedWhat={},this.renderedPeerIds=new Set,this.peerType=["dialogs"],this.multiSelect=!0,this.rippleEnabled=!0,this.avatarSize=48,this.tempIds={},this.peerId=0,this.selfPresence="Presence.YourChat",this.needSwitchList=!1,this.onInput=()=>{const e=this.input.value;if(this.query!==e){this.peerType.includes("contacts")&&(this.cachedContacts=null),this.peerType.includes("dialogs")&&(this.folderId=0,this.offsetIndex=0);for(let e in this.tempIds)++this.tempIds[e];this.list=Do.createChatList(),this.promise=null,this.loadedWhat={},this.query=e,this.renderedPeerIds.clear(),this.needSwitchList=!0,this.getMoreResults()}},this.checkForTriggers=()=>{this.scrollable.checkForTriggers()},Object(L.g)(this,e),this.container.classList.add("selector");const t=(this.renderResultsFunc||this.renderResults).bind(this);if(this.renderResultsFunc=e=>(this.needSwitchList&&(this.scrollable.splitUp.replaceWith(this.list),this.scrollable.setVirtualContainer(this.list),this.needSwitchList=!1),e=e.filter(e=>{const t=!this.renderedPeerIds.has(e);return t&&this.renderedPeerIds.add(e),t}),t(e)),this.input=document.createElement("input"),this.input.classList.add("selector-search-input"),this.placeholder?Object(A._i18n)(this.input,this.placeholder,void 0,"placeholder"):Object(A._i18n)(this.input,"SendMessageTo",void 0,"placeholder"),this.input.type="text",this.multiSelect){let e=document.createElement("div");e.classList.add("selector-search-container"),this.selectedContainer=document.createElement("div"),this.selectedContainer.classList.add("selector-search"),this.selectedContainer.append(this.input),e.append(this.selectedContainer),this.selectedScrollable=new P.b(e);let t=document.createElement("hr");this.selectedContainer.addEventListener("click",e=>{if(this.freezed)return;let t=e.target;if(t=Object(Ce.a)(t,"selector-user"),!t)return;const s=t.dataset.key,i=this.chatsContainer.querySelector('[data-peer-id="'+s+'"]');i?i.click():this.remove(+s||s)}),this.container.append(e,t)}this.chatsContainer.classList.add("chatlist-container"),this.chatsContainer.append(this.list),this.scrollable=new P.b(this.chatsContainer),this.scrollable.setVirtualContainer(this.list),this.chatsContainer.addEventListener("click",e=>{const t=Object(vt.a)(e.target,"data-peer-id");if(Object(c.a)(e),!t)return;if(this.freezed)return;let s=t.dataset.peerId;if(s=+s||s,!this.multiSelect)return void this.add(s);this.selected.has(s)?this.remove(s):this.add(s);const i=t.querySelector("input");i.checked=!i.checked});const s=ot(this.onInput,200,!1,!0);this.input.addEventListener("input",s),this.scrollable.onScrolledBottom=()=>{this.getMoreResults()},this.container.append(this.chatsContainer),this.appendTo.append(this.container),setTimeout(()=>{let t=this.getMoreResults();e.onFirstRender&&t.then(()=>{e.onFirstRender()})},0)}renderSaved(){this.offsetIndex||0!==this.folderId||!this.peerType.includes("dialogs")||this.query&&!T.a.testSelfSearch(this.query)||this.renderResultsFunc([a.default.myId])}getTempId(e){return void 0===this.tempIds[e]&&(this.tempIds[e]=0),++this.tempIds[e]}getMoreDialogs(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(this.loadedWhat.dialogs&&this.loadedWhat.archived)return;const e=yt.a.windowH/72*1.25|0,t=this.getTempId("dialogs"),s=i.a.getConversations(this.query,this.offsetIndex,e,this.folderId,!0).promise;this.promise=s;const n=yield s;if(this.tempIds.dialogs!==t)return;this.promise=null;let o=n.dialogs;if(o.length){const e=o[o.length-1].index||0;o=o.slice(),o.findAndSplice(e=>e.peerId===a.default.myId),this.chatRightsAction&&(o=o.filter(e=>this.filterByRights(e.peerId))),this.renderSaved(),this.offsetIndex=e,this.renderResultsFunc(o.map(e=>e.peerId))}if(n.isEnd){if(!this.loadedWhat.dialogs)return this.renderSaved(),this.loadedWhat.dialogs=!0,this.offsetIndex=0,this.folderId=1,this.getMoreDialogs();if(this.loadedWhat.archived=!0,!this.loadedWhat.contacts&&this.peerType.includes("contacts"))return this.getMoreContacts()}}))}filterByRights(e){return e>0&&("send_messages"!==this.chatRightsAction||T.a.canSendToUser(e))||G.a.hasRights(-e,this.chatRightsAction)}getMoreContacts(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(!this.loadedWhat.contacts){if(!this.cachedContacts){const e=this.getTempId("contacts"),t=Promise.all([T.a.getContacts(this.query),this.query?T.a.searchContacts(this.query):void 0]);this.promise=t;const[s,i]=yield t;if(this.tempIds.contacts!==e)return;if(i){let e=i.my_results.concat(i.results);this.chatRightsAction&&(e=e.filter(e=>this.filterByRights(e))),this.peerType.includes("dialogs")||(e=e.filter(e=>e>0)),this.cachedContacts=Object(y.b)(s.concat(e))}else this.cachedContacts=s.slice();this.cachedContacts.findAndSplice(e=>e===a.default.myId),this.promise=null}if(this.cachedContacts.length){const e=yt.a.windowH/72*1.25|0,t=this.cachedContacts.splice(0,e);this.renderResultsFunc(t)}this.cachedContacts.length||(this.loadedWhat.contacts=!0)}}))}getMoreChannelParticipants(){return wt(this,void 0,void 0,(function*(){if(this.promise)return this.promise;if(this.loadedWhat.channelParticipants)return;const e=this.getTempId("channelParticipants"),t=n.default.getChannelParticipants(-this.peerId,{_:"channelParticipantsSearch",q:this.query},50,this.list.childElementCount),s=yield t;if(this.tempIds.channelParticipants!==e)return;const i=s.participants.map(e=>G.a.getParticipantPeerId(e));i.findAndSplice(e=>e===a.default.myId),this.renderResultsFunc(i),(this.list.childElementCount>=s.count||s.participants.length<50)&&(this.loadedWhat.channelParticipants=!0)}))}getMoreResults(){const e=(()=>{const e=[];return!St&&this.peerType.includes("dialogs")&&(Lt||(Lt=i.a.getConversationsAll().then(()=>{St=!0}).finally(()=>{Lt=null})),e.push(Lt)),!this.peerType.includes("dialogs")||this.loadedWhat.archived||(e.push(this.getMoreDialogs()),this.loadedWhat.archived)?(this.peerType.includes("contacts")&&!this.loadedWhat.contacts&&e.push(this.getMoreContacts()),this.peerType.includes("channelParticipants")&&!this.loadedWhat.channelParticipants&&e.push(this.getMoreChannelParticipants()),e):e})(),t=Promise.all(e);return e.length&&t.then(this.checkForTriggers),t}renderResults(e){!this.peerType.includes("dialogs")&&this.loadedWhat.contacts&&(e=e.filter(e=>T.a.isNonContactUser(e))),e.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e,container:this.scrollable,drawStatus:!1,rippleEnabled:this.rippleEnabled,avatarSize:this.avatarSize});if(this.multiSelect){const s=this.selected.has(e),i=new dt.a;s&&(i.input.checked=!0),t.containerEl.prepend(i.label)}let s;s=e<0?n.default.getChatMembersString(-e):e===a.default.myId?Object(A.i18n)(this.selfPresence):T.a.getUserStatusString(e),t.lastMessageSpan.append(s)})}add(e,t,s=!0){if(this.selected.add(e),!this.multiSelect)return void this.onChange(this.selected.size);this.query.trim()&&(this.input.value="",this.onInput());const i=document.createElement("div");i.classList.add("selector-user","scale-in");const n=document.createElement("avatar-element");return n.classList.add("selector-user-avatar","tgico"),n.setAttribute("dialog","1"),n.classList.add("avatar-32"),i.dataset.key=""+e,"number"==typeof e&&(void 0===t&&(t=new ft.a({peerId:e,dialog:!0}).element),n.setAttribute("peer",""+e)),t&&("string"==typeof t?i.innerHTML=t:(Object(x.a)(i,t),i.append(t))),i.insertAdjacentElement("afterbegin",n),this.selectedContainer.insertBefore(i,this.input),this.onChange&&this.onChange(this.selected.size),s&&this.selectedScrollable.scrollIntoViewNew(this.input,"center"),i}remove(e){if(!this.multiSelect)return;const t=this.selectedContainer.querySelector(`[data-key="${e}"]`);t.classList.remove("scale-in"),t.offsetWidth,t.classList.add("scale-out");const s=()=>{this.selected.delete(e),t.remove(),this.onChange&&this.onChange(this.selected.size)};a.default.settings.animationsEnabled?t.addEventListener("animationend",s,{once:!0}):s()}getSelected(){return[...this.selected]}addInitial(e){e.forEach(e=>{this.add(e,void 0,!1)}),window.requestAnimationFrame(()=>{this.selectedScrollable.scrollIntoViewNew(this.input,"center",void 0,void 0,bt.a.Static)})}}var Mt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class It extends ct.b{constructor(e){super("popup-forward",null,{closable:!0,overlayClosable:!0,body:!0}),e.onClose&&(this.onClose=e.onClose),this.selector=new Et({appendTo:this.body,onChange:()=>Mt(this,void 0,void 0,(function*(){const t=this.selector.getSelected(),s=t[t.length-1];if(e.onSelect){const t=e.onSelect(s);if(t instanceof Promise)try{yield t}catch(e){return}}this.selector=null,this.hide()})),peerType:e.peerTypes,onFirstRender:()=>{this.show(),this.selector.checkForTriggers(),pe.IS_TOUCH_SUPPORTED||this.selector.input.focus()},chatRightsAction:e.chatRightsAction,multiSelect:!1,rippleEnabled:!1,avatarSize:46,peerId:e.peerId,placeholder:e.placeholder,selfPresence:e.selfPresence}),this.title.append(this.selector.input)}}class Ct extends W{init(){let e;this.container.classList.add("edit-peer-container","user-permissions-container"),this.setTitle("UserRestrictions");{const t=new nn({name:"UserRestrictionsCanDo"}),s=document.createElement("div");s.classList.add("chatlist-container"),t.content.insertBefore(s,t.title);const i=Do.createChatList({new:!0});s.append(i);const{dom:n}=Do.addDialogNew({dialog:this.userId,container:i,drawStatus:!1,rippleEnabled:!0,avatarSize:48});n.lastMessageSpan.append(T.a.getUserStatusString(this.userId));const a=new Tt({chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:t.content,participant:"channelParticipantBanned"===this.participant._?this.participant:void 0});e=()=>{const e=a.takeOut();"channelParticipantBanned"===this.participant._&&Object(L.b)(this.participant.banned_rights.pFlags,e.pFlags)||G.a.editBanned(this.chatId,this.participant,e)},this.eventListener.addEventListener("destroy",e,{once:!0}),this.scrollable.append(t.container)}{const t=new nn({});if("channelParticipantBanned"===this.participant._){const s=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"GroupPermission.Delete"});Object(l.b)(s,()=>{const t=Object(ut.a)([s],!0);G.a.clearChannelParticipantBannedRights(this.chatId,this.participant).then(()=>{this.eventListener.removeEventListener("destroy",e),this.close()},()=>{t()})},{listenerSetter:this.listenerSetter}),t.content.append(s)}const s=Object(U.a)("btn-primary btn-transparent danger",{icon:"deleteuser",text:"UserRestrictionsBlock"});Object(l.b)(s,()=>{Object(ut.a)([s],!0);G.a.kickFromChannel(this.chatId,this.participant).then(()=>{this.eventListener.removeEventListener("destroy",e),this.close()})},{listenerSetter:this.listenerSetter}),t.content.append(s),this.scrollable.append(t.container)}}}var kt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Tt{constructor(e){this.v=[{flags:["send_messages"],text:"UserRestrictionsSend",exceptionText:"UserRestrictionsNoSend"},{flags:["send_media"],text:"UserRestrictionsSendMedia",exceptionText:"UserRestrictionsNoSendMedia"},{flags:["send_stickers","send_gifs"],text:"UserRestrictionsSendStickers",exceptionText:"UserRestrictionsNoSendStickers"},{flags:["send_polls"],text:"UserRestrictionsSendPolls",exceptionText:"UserRestrictionsNoSendPolls"},{flags:["embed_links"],text:"UserRestrictionsEmbedLinks",exceptionText:"UserRestrictionsNoEmbedLinks"},{flags:["invite_users"],text:"UserRestrictionsInviteUsers",exceptionText:"UserRestrictionsNoInviteUsers"},{flags:["pin_messages"],text:"UserRestrictionsPinMessages",exceptionText:"UserRestrictionsNoPinMessages"},{flags:["change_info"],text:"UserRestrictionsChangeInfo",exceptionText:"UserRestrictionsNoChangeInfo"}],this.toggleWith={send_messages:["send_media","send_stickers","send_polls","embed_links"]};const t=G.a.getChat(e.chatId).default_banned_rights,s=e.participant?G.a.combineParticipantBannedRights(e.chatId,e.participant.banned_rights):t;for(const i of this.v){const n=i.flags[0];i.checkboxField=new dt.a({text:i.text,checked:G.a.hasRights(e.chatId,n,s),restriction:!0,withRipple:!0}),e.participant&&t.pFlags[n]&&(i.checkboxField.input.disabled=!0,Object(l.b)(i.checkboxField.label,e=>{nt(A.default.format("UserRestrictionsDisabled",!0))},{listenerSetter:e.listenerSetter})),this.toggleWith[n]&&e.listenerSetter.add(i.checkboxField.input)("change",()=>{if(!i.checkboxField.checked){this.v.filter(e=>this.toggleWith[n].includes(e.flags[0])).forEach(e=>{e.checkboxField.checked=!1})}}),e.appendTo.append(i.checkboxField.label)}}takeOut(){const e={_:"chatBannedRights",until_date:2147483647,pFlags:{}};for(const t of this.v){!t.checkboxField.checked&&t.flags.forEach(t=>{e.pFlags[t]=!0})}return e}}class Pt extends W{init(){return kt(this,void 0,void 0,(function*(){let e;this.container.classList.add("edit-peer-container","group-permissions-container"),this.setTitle("ChannelPermissions");{const t=new nn({name:"ChannelPermissionsHeader"});e=new Tt({chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:t.content}),this.eventListener.addEventListener("destroy",()=>{G.a.editChatDefaultBannedRights(this.chatId,e.takeOut())},{once:!0}),this.scrollable.append(t.container)}{const t=new nn({name:"PrivacyExceptions"}),s=new Je({titleLangKey:"ChannelAddException",subtitleLangKey:"Loading",icon:"adduser",clickable:()=>{new It({peerTypes:["channelParticipants"],onSelect:e=>{setTimeout(()=>{i(e)},0)},placeholder:"ExceptionModal.Search.Placeholder",peerId:-this.chatId})}}),i=e=>kt(this,void 0,void 0,(function*(){let t;try{t=yield n.default.getChannelParticipant(this.chatId,e)}catch(e){return void nt("User is no longer participant")}const s=new Ct(this.slider);s.participant=t,s.chatId=this.chatId,s.userId=e,s.open()}));t.content.append(s.container);const r=t.generateContentElement();r.classList.add("chatlist-container");const c=Do.createChatList({new:!0});r.append(c),Object(l.b)(c,e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=+t.dataset.peerId;i(s)},{listenerSetter:this.listenerSetter});const d=(t,s)=>{const i=s.banned_rights,n=G.a.getChat(this.chatId).default_banned_rights,a=[];e.v.forEach(e=>{const t=e.flags[0];i.pFlags[t]&&!n.pFlags[t]&&a.push(e.exceptionText)});const o=t.querySelector(".user-last-message");a.length&&(o.innerHTML="",o.append(...Object(A.join)(a.map(e=>Object(A.i18n)(e)),!1))),o.classList.toggle("hide",!a.length)},h=(e,t)=>{const{dom:s}=Do.addDialogNew({dialog:o.a.getPeerId(e.peer),container:c,drawStatus:!1,rippleEnabled:!0,avatarSize:48,append:t});d(s.listEl,e)};this.listenerSetter.add(a.default)("updateChannelParticipant",e=>{var t,s,i;const n="channelParticipantBanned"===(null===(t=e.new_participant)||void 0===t?void 0:t._)&&!e.new_participant.banned_rights.pFlags.view_messages,a=c.querySelector(`[data-peer-id="${e.user_id}"]`);n?(a?d(a,e.new_participant):h(e.new_participant,!1),"channelParticipantBanned"!==(null===(s=e.prev_participant)||void 0===s?void 0:s._)&&++m):(a&&a.remove(),"channelParticipantBanned"===(null===(i=e.prev_participant)||void 0===i?void 0:i._)&&--m),u()});const u=()=>{Object(x.a)(s.subtitle,Object(A.i18n)(m?"Permissions.ExceptionsCount":"Permissions.NoExceptions",[m]))};let p,m=0;const g=()=>(p=new gt({scrollable:this.scrollable,getPromise:()=>n.default.getChannelParticipants(this.chatId,{_:"channelParticipantsBanned",q:""},50,c.childElementCount).then(e=>{for(const t of e.participants)h(t,!0);return m=e.count,u(),e.participants.length<50||e.count===c.childElementCount})}),p.load());this.scrollable.append(t.container),G.a.isChannel(this.chatId)?yield g():(u(),this.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{this.chatId===e&&(this.chatId=t,g())}))}}))}onOpenAfterTimeout(){this.scrollable.onScroll()}}class xt{constructor(e,t=o.a.getDialogType(e),s){const n=new ft.a({peerId:e}).element,a=(t,n=u&&!!t.size)=>{let a=G.a.leave(-e);n&&(a=a.finally(()=>i.a.flushHistory(e))),s&&s(a)},r=t=>{let n;if(e>0)n=i.a.flushHistory(e,!1,u?!!t.size:void 0);else{if(!t.size)return a(t);n=G.a.delete(-e)}s&&s(n)};let l,c,d,h,u;switch(t){case"channel":G.a.hasRights(-e,"delete_chat")?(G.a.deleteChannel,l="ChannelDeleteMenu",c="AreYouSureDeleteAndExitChannel",h=[{langKey:"ChannelDeleteMenu",isDanger:!0,callback:r}],u=[{text:"DeleteChannelForAll"}]):(l="LeaveChannelMenu",c="ChannelLeaveAlertWithName",d=[n],h=[{langKey:"LeaveChannel",isDanger:!0,callback:a}]);break;case"chat":l="DeleteChatUser",c="AreYouSureDeleteThisChatWithUser",d=[n],h=[{langKey:"DeleteChatUser",isDanger:!0,callback:r}],u=[{text:"DeleteMessagesOptionAlso",textArgs:[new ft.a({peerId:e}).element]}];break;case"saved":l="DeleteChatUser",c="AreYouSureDeleteThisChatSavedMessages",h=[{langKey:"DeleteChatUser",isDanger:!0,callback:r}];break;case"megagroup":case"group":G.a.hasRights(-e,"delete_chat")?(l="DeleteMegaMenu",c="AreYouSureDeleteAndExit",h=[{langKey:"DeleteMegaMenu",isDanger:!0,callback:r}],u=[{text:"DeleteChat.DeleteGroupForAll"}]):(l="LeaveMegaMenu",c="AreYouSureDeleteAndExitName",d=[n],h=[{langKey:"DeleteChatUser",isDanger:!0,callback:e=>a(e,!0)}])}new ht("popup-delete-chat",{peerId:e,titleLangKey:l,descriptionLangKey:c,descriptionLangArgs:d,buttons:h,checkboxes:u}).show()}}var At=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ot extends V{_init(){return At(this,void 0,void 0,(function*(){this.listenerSetter.removeAll(),this.scrollable.container.innerHTML="",this.container.classList.add("edit-peer-container","edit-group-container"),this.setTitle("Edit");const e=yield n.default.getChatFull(this.chatId,!0),t=G.a.getChat(this.chatId),s=G.a.isBroadcast(this.chatId),i=G.a.isChannel(this.chatId),o=[],r=e=>{o.push(e)};this.listenerSetter.add(a.default)("chat_update",e=>{this.chatId===e&&o.forEach(e=>e())});{const i=new nn({noDelimiter:!0}),n=[],o=document.createElement("div");if(o.classList.add("input-wrapper"),this.chatNameInputField=new F.b({label:s?"EnterChannelName":"CreateGroup.NameHolder",name:"chat-name",maxLength:255,required:!0}),this.descriptionInputField=new F.b({label:"DescriptionPlaceholder",name:"chat-description",maxLength:255}),this.chatNameInputField.setOriginalValue(t.title),this.descriptionInputField.setOriginalValue(e.about),o.append(this.chatNameInputField.container,this.descriptionInputField.container),n.push(this.chatNameInputField,this.descriptionInputField),this.editPeer=new Xe({peerId:-this.chatId,inputFields:n,listenerSetter:this.listenerSetter}),this.content.append(this.editPeer.nextBtn),i.content.append(this.editPeer.avatarEdit.container,o),G.a.hasRights(this.chatId,"change_type")){const n=new Je({titleLangKey:s?"ChannelType":"GroupType",clickable:()=>{const t=new pt(this.slider);t.chatId=this.chatId,t.chatFull=e,t.open(),this.listenerSetter.add(t.eventListener)("destroy",a)},icon:"lock"}),a=()=>{let e;n.subtitle.textContent="",e=s?t.username?"TypePublic":"TypePrivate":t.username?"TypePublicGroup":"TypePrivateGroup",n.subtitle.append(Object(A.i18n)(e))};a(),i.content.append(n.container)}if(G.a.hasRights(this.chatId,"change_permissions")&&!s){const e=["send_messages","send_media","send_stickers","send_polls","embed_links","invite_users","pin_messages","change_info"],s=new Je({titleLangKey:"ChannelPermissions",clickable:()=>{const e=new Pt(this.slider);e.chatId=this.chatId,e.open()},icon:"permissions"}),n=()=>{s.subtitle.innerHTML=e.reduce((e,s)=>e+ +G.a.hasRights(this.chatId,s,t.default_banned_rights),0)+"/"+e.length};n(),i.content.append(s.container),this.listenerSetter.add(a.default)("chat_update",e=>{this.chatId===e&&n()})}if(this.scrollable.append(i.container),Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0;let e=[];const t=this.chatId;this.chatNameInputField.isValid()&&e.push(G.a.editTitle(t,this.chatNameInputField.value)),this.descriptionInputField.isValid()&&e.push(G.a.editAbout(t,this.descriptionInputField.value)),this.editPeer.uploadAvatar&&e.push(this.editPeer.uploadAvatar().then(e=>G.a.editPhoto(t,e))),Promise.race(e).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled"),this.close()})},{listenerSetter:this.listenerSetter}),s&&G.a.hasRights(this.chatId,"change_info")){const e=new dt.a({text:"PeerInfo.SignMessages",checked:!!t.pFlags.signatures,withRipple:!0});this.listenerSetter.add(e.input)("change",()=>{const t=e.toggleDisability(!0);G.a.toggleSignatures(this.chatId,e.checked).then(()=>{t()})}),r(()=>{e.setValueSilently(!!t.pFlags.signatures)}),i.content.append(e.label)}}if(!s){const t=new nn({});if(!s&&G.a.hasRights(this.chatId,"change_permissions")){const s=new dt.a({text:"ChatHistory",withRipple:!0});this.listenerSetter.add(s.input)("change",()=>{const e=s.toggleDisability(!0);G.a.togglePreHistoryHidden(this.chatId,!s.checked).then(()=>{e()})});const n=()=>{s.setValueSilently(i&&!e.pFlags.hidden_prehistory)};n(),r(n),t.content.append(s.label)}this.scrollable.append(t.container)}if(G.a.hasRights(this.chatId,"delete_chat")){const e=new nn({}),t=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:s?"PeerInfo.DeleteChannel":"DeleteAndExitButton"});Object(l.b)(t,()=>{new xt(-this.chatId,void 0,e=>{const s=Object(ut.a)([t],!0);e.then(()=>{this.close()},()=>{s()})})},{listenerSetter:this.listenerSetter}),e.content.append(t),this.scrollable.append(e.container)}i||this.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{-this.chatId===e&&(this.chatId=-t,this._init())})}))}init(){return this._init()}}var _t=s(91);class Ft extends V{init(){this.container.classList.add("edit-peer-container","edit-contact-container");const e=!T.a.isContact(this.peerId);this.setTitle(e?"AddContactTitle":"Edit");{const t=new nn({noDelimiter:!0}),s=[],n=document.createElement("div");if(n.classList.add("input-wrapper"),this.nameInputField=new F.b({label:"FirstName",name:"contact-name",maxLength:70,required:!0}),this.lastNameInputField=new F.b({label:"LastName",name:"contact-lastname",maxLength:70}),this.peerId){const t=T.a.getUser(this.peerId);e?(this.nameInputField.setDraftValue(t.first_name),this.lastNameInputField.setDraftValue(t.last_name)):(this.nameInputField.setOriginalValue(t.first_name),this.lastNameInputField.setOriginalValue(t.last_name))}if(n.append(this.nameInputField.container,this.lastNameInputField.container),s.push(this.nameInputField,this.lastNameInputField),this.editPeer=new Xe({peerId:this.peerId,inputFields:s,listenerSetter:this.listenerSetter,doNotEditAvatar:!0}),this.content.append(this.editPeer.nextBtn),this.peerId){const s=document.createElement("div");s.classList.add("avatar-edit"),s.append(this.editPeer.avatarElem);const r=new dt.a({text:"Notifications"});r.input.addEventListener("change",e=>{e.isTrusted&&i.a.mutePeer(this.peerId)}),this.listenerSetter.add(a.default)("notify_settings",e=>{if("notifyPeer"!==e.peer._)return;const t=o.a.getPeerId(e.peer.peer);if(this.peerId===t){const t=!_t.a.isMuted(e.notify_settings);t!==r.checked&&(r.checked=t)}});const l=document.createElement("div");l.classList.add("profile-name"),l.append(new ft.a({peerId:this.peerId}).element);const c=document.createElement("div");if(c.classList.add("profile-subtitle"),c.append(Object(A.i18n)("EditContact.OriginalName")),t.content.append(s,l,c,n),e){const e=T.a.getUser(this.peerId),s=new Je({icon:"phone",titleLangKey:e.phone?void 0:"MobileHidden",title:e.phone?T.a.formatUserPhone(e.phone):void 0,subtitleLangKey:e.phone?"Phone":"MobileHiddenExceptionInfo",subtitleLangArgs:e.phone?void 0:[new ft.a({peerId:this.peerId}).element]});t.content.append(s.container)}else{const e=new Je({checkboxField:r}),s=!_t.a.isPeerLocalMuted(this.peerId,!1);r.checked=s,t.content.append(e.container)}}else t.content.append(n);this.scrollable.append(t.container),Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0,T.a.addContact(this.peerId,this.nameInputField.value,this.lastNameInputField.value,T.a.getUser(this.peerId).phone).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled"),this.close()})},{listenerSetter:this.listenerSetter})}if(!e){const e=new nn({}),t=Object(U.a)("btn-primary btn-transparent danger",{icon:"delete",text:"PeerInfo.DeleteContact"});Object(l.b)(t,()=>{new ht("popup-delete-contact",{peerId:this.peerId,titleLangKey:"DeleteContact",descriptionLangKey:"AreYouSureDeleteContact",buttons:Object(ct.a)([{langKey:"Delete",callback:()=>{const e=Object(ut.a)([t],!0);T.a.deleteContacts([this.peerId]).then(()=>{this.close()},()=>{e()})},isDanger:!0}])}).show()},{listenerSetter:this.listenerSetter}),e.content.append(t),this.scrollable.append(e.container)}}}class jt extends V{init(){this.nextBtn=$({icon:"arrow_next"}),this.content.append(this.nextBtn),this.scrollable.container.remove(),this.nextBtn.addEventListener("click",()=>{const e=this.selector.getSelected();if(this.skippable)this.takeOut(e),this.close();else{const t=this.takeOut(e);t instanceof Promise?this.attachToPromise(t):void 0===t&&this.close()}})}attachToPromise(e){const t=Object(se.g)(this.nextBtn,"arrow_next");e.then(()=>{this.close()},()=>{t()})}open(e){const t=super.open();return this.setTitle(e.title),this.peerType=e.type,this.takeOut=e.takeOut,this.skippable=e.skippable,this.selector=new Et({appendTo:this.content,onChange:this.skippable?null:e=>{this.nextBtn.classList.toggle("is-visible",!!e)},peerType:["contacts"],placeholder:e.placeholder}),e.selectedPeerIds&&this.selector.addInitial(e.selectedPeerIds),this.nextBtn.classList.add("tgico-arrow_next"),this.nextBtn.innerHTML="",this.nextBtn.disabled=!1,this.nextBtn.classList.toggle("is-visible",this.skippable),t}}var Dt=!h.IS_FIREFOX&&!1;function Bt(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttributeNS(null,"viewBox","0 0 24 24"),e.setAttributeNS(null,"width","24"),e.setAttributeNS(null,"height","24"),e.classList.add("verified-icon");const t=document.createElementNS("http://www.w3.org/2000/svg","use");t.setAttributeNS(null,"href","#verified-background"),t.classList.add("verified-background");const s=document.createElementNS("http://www.w3.org/2000/svg","use");return s.setAttributeNS(null,"href","#verified-check"),s.classList.add("verified-check"),e.append(t,s),e}var Rt=s(86);const Ht=e=>e.touches?e.touches[0]:e,Ut=window;let Nt=!1;a.default.addEventListener("context_menu_toggle",e=>{Nt=e});class zt{constructor(e){this.cursor="grabbing",this.cancelEvent=!0,this.hadMove=!1,this.xDown=null,this.yDown=null,this.reset=e=>{pe.IS_TOUCH_SUPPORTED?Ut.removeEventListener("touchmove",this.handleMove,{capture:!0}):(Ut.removeEventListener("mousemove",this.handleMove),this.element.style.cursor=""),this.onReset&&this.hadMove&&this.onReset(),this.xDown=this.yDown=null,this.hadMove=!1},this.handleStart=e=>{const t=Ht(e);if(this.verifyTouchTarget&&!this.verifyTouchTarget(e))return this.reset();this.xDown=t.clientX,this.yDown=t.clientY,pe.IS_TOUCH_SUPPORTED?Ut.addEventListener("touchmove",this.handleMove,{passive:!1,capture:!0}):Ut.addEventListener("mousemove",this.handleMove,!1)},this.handleMove=e=>{if(null===this.xDown||null===this.yDown||Nt)return void this.reset();this.cancelEvent&&Object(c.a)(e);const t=Ht(e),s=t.clientX,i=t.clientY,n=this.xDown-s,a=this.yDown-i;if(!this.hadMove){if(!n&&!a)return;this.hadMove=!0,pe.IS_TOUCH_SUPPORTED||this.element.style.setProperty("cursor",this.cursor,"important"),this.onFirstSwipe&&this.onFirstSwipe()}const o=this.onSwipe(n,a,e);void 0!==o&&o&&this.reset()},Object(L.g)(this,e),this.setListeners()}setListeners(){pe.IS_TOUCH_SUPPORTED?(this.element.addEventListener("touchstart",this.handleStart,!1),Ut.addEventListener("touchend",this.reset)):(this.element.addEventListener("mousedown",this.handleStart,!1),Ut.addEventListener("mouseup",this.reset))}removeListeners(){pe.IS_TOUCH_SUPPORTED?(this.element.removeEventListener("touchstart",this.handleStart,!1),Ut.removeEventListener("touchend",this.reset)):(this.element.removeEventListener("mousedown",this.handleStart,!1),Ut.removeEventListener("mouseup",this.reset))}}var Vt=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Wt{constructor(e){this.scrollable=e,this.processItem=e=>{const t=document.createElement("div");let s;t.classList.add(Wt.BASE_CLASS+"-avatar"),e&&(s="string"==typeof e?r.a.getPhoto(e):e.action.photo);const i=new Image;if(i.classList.add(Wt.BASE_CLASS+"-avatar-image"),i.draggable=!1,s){const e=r.a.choosePhotoSize(s,420,420,!1);r.a.preloadPhoto(s,e).then(()=>{const n=he.a.getCacheContext(s,e.type);Object(Rt.a)(i,n.url,()=>{t.append(i)})})}else{const e=o.a.getPeerPhoto(this.peerId);d.a.putAvatar(t,this.peerId,e,"photo_big",i)}return this.avatars.append(t),this.addTab(),e},this.container=document.createElement("div"),this.container.classList.add(Wt.BASE_CLASS+"-container"),this.avatars=document.createElement("div"),this.avatars.classList.add(Wt.BASE_CLASS+"-avatars"),this.gradient=document.createElement("div"),this.gradient.classList.add(Wt.BASE_CLASS+"-gradient"),this.info=document.createElement("div"),this.info.classList.add(Wt.BASE_CLASS+"-info"),this.tabs=document.createElement("div"),this.tabs.classList.add(Wt.BASE_CLASS+"-tabs"),this.arrowPrevious=document.createElement("div"),this.arrowPrevious.classList.add(Wt.BASE_CLASS+"-arrow"),this.arrowNext=document.createElement("div"),this.arrowNext.classList.add(Wt.BASE_CLASS+"-arrow",Wt.BASE_CLASS+"-arrow-next"),this.container.append(this.avatars,this.gradient,this.info,this.tabs,this.arrowPrevious,this.arrowNext);const t=()=>0===this.scrollable.scrollTop||(this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild,"start"),!1);let s=!1,i=!1;Object(l.b)(this.container,e=>Vt(this,void 0,void 0,(function*(){if(i)return void Object(c.a)(e);if(s)return void(s=!1);if(!t())return;const n=this.container.getBoundingClientRect(),a=e.pageX,o=a-n.left;if(!this.listLoader.previous.length&&!this.listLoader.next.length||o>n.width*(1/3)&&o{t.push({element:this.avatars.children[s],item:e})});const s=t.slice(0,this.listLoader.previous.length),n=t.slice(this.listLoader.previous.length+1),a=this.avatars.children[this.listLoader.previous.length];i=!0,Mo(a,e,()=>e===this.peerId,this.listLoader.current,s,n),i=!1}else{const e=a>n.right-n.width/2;let t;this.avatars.classList.add("no-transition"),this.avatars.offsetLeft,t=0!==this.listLoader.index||e?this.listLoader.index===this.listLoader.count-1&&e?-(this.listLoader.count-1):e?1:-1:this.listLoader.count-1,this.listLoader.go(t),Object(_e.b)(()=>{this.avatars.classList.remove("no-transition")})}})));const n=()=>{s=!0,document.body.addEventListener(pe.IS_TOUCH_SUPPORTED?"touchend":"click",e=>{s=!1},{once:!0})};let a=0,h=0,u=0,p=0;new zt({element:this.avatars,onSwipe:(e,t)=>{u=e;let s=h+e*-Wt.SCALE;return s>0?s=0:st()?!this.container.classList.contains("is-single")&&!i:(n(),Object(c.a)(e),!1),onFirstSwipe:()=>{const e=this.avatars.getBoundingClientRect();a=e.width,p=-a*(this.tabs.childElementCount-1),h=e.left-this.container.getBoundingClientRect().left,this.avatars.style.transform=Wt.TRANSLATE_TEMPLATE.replace("{x}",h+"px"),this.container.classList.add("is-swiping"),this.avatars.classList.add("no-transition"),this.avatars.offsetLeft},onReset:()=>{const e=Math.ceil(Math.abs(u)/(a/Wt.SCALE))*(u>=0?1:-1);n(),this.avatars.classList.remove("no-transition"),Object(_e.b)(()=>{this.listLoader.go(e),this.container.classList.remove("is-swiping")})}})}setPeer(e){this.peerId=e;const t=o.a.getPeerPhoto(e);if(!t)return;const s=this.listLoader=new S({loadCount:50,loadMore:(t,a,o)=>{if(!a)return Promise.resolve({count:void 0,items:[]});if(e>0){const i=t||s.current;return r.a.getUserPhotos(e,i,o).then(e=>({count:e.count,items:e.photos}))}{const t=[];return s.current||t.push(n.default.getChatFull(-e)),t.push(i.a.getSearch({peerId:e,maxId:Number.MAX_SAFE_INTEGER,inputFilter:{_:"inputMessagesFilterChatPhotos"},limit:o,backLimit:0})),Promise.all(t).then(e=>{const t=e.pop();if(w(t),!s.current){const n=e[0],a=t.history.findAndSplice(e=>e.action.photo.id===n.chat_photo.id);s.current=a||i.a.generateFakeAvatarMessage(this.peerId,n.chat_photo)}return{count:t.count,items:t.history}})}},processItem:this.processItem,onJump:(e,t)=>{const s=this.listLoader.index,i=100*Wt.SCALE*s;this.avatars.style.transform=Wt.TRANSLATE_TEMPLATE.replace("{x}",`-${i}%`);const n=this.tabs.querySelector(".active");n&&n.classList.remove("active");this.tabs.children[s].classList.add("active")}});"userProfilePhoto"===t._&&(s.current=t.photo_id),this.processItem(s.current),s.load(!0)}addTab(){const e=document.createElement("div");e.classList.add(Wt.BASE_CLASS+"-tab"),this.tabs.append(e),1===this.tabs.childElementCount&&e.classList.add("active"),this.container.classList.toggle("is-single",this.tabs.childElementCount<=1)}}Wt.BASE_CLASS="profile-avatars",Wt.SCALE=Dt?2:1,Wt.TRANSLATE_TEMPLATE=Dt?`translate3d({x}, 0, -1px) scale(${Wt.SCALE})`:"translate({x}, 0)";let Kt=(e,t)=>{t.title.innerHTML=e,t.container.style.display=""};class Gt{constructor(e){this.scrollable=e,this.peerId=0,this.setPeerStatus=(e=!1)=>{if(!this.peerId)return;const t=this.peerId;mo.setPeerStatus(this.peerId,this.subtitle,e,!0,()=>t===this.peerId)},Dt||this.scrollable.container.classList.add("no-parallax")}init(){this.init=null,this.element=document.createElement("div"),this.element.classList.add("profile-content"),this.section=new nn({noDelimiter:!0}),this.avatar=new ko,this.avatar.classList.add("profile-avatar","avatar-120"),this.avatar.setAttribute("dialog","1"),this.avatar.setAttribute("clickable",""),this.name=document.createElement("div"),this.name.classList.add("profile-name"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("profile-subtitle"),this.bio=new Je({title:" ",subtitleLangKey:"UserBio",icon:"info",clickable:e=>{"A"!==e.target.tagName&&n.default.getProfileByPeerId(this.peerId).then(e=>{et(e.about),nt(A.default.format("BioCopied",!0))})}}),this.bio.title.classList.add("pre-wrap"),this.username=new Je({title:" ",subtitleLangKey:"Username",icon:"username",clickable:()=>{et("@"+o.a.getPeer(this.peerId).username),nt(A.default.format("UsernameCopied",!0))}}),this.phone=new Je({title:" ",subtitleLangKey:"Phone",icon:"phone",clickable:()=>{et("+"+T.a.getUser(this.peerId).phone),nt(A.default.format("PhoneCopied",!0))}}),this.notifications=new Je({checkboxField:new dt.a({toggle:!0}),titleLangKey:"Notifications",icon:"unmute"}),this.section.content.append(this.phone.container,this.username.container,this.bio.container,this.notifications.container),this.element.append(this.section.container,on()),this.notifications.checkboxField.input.addEventListener("change",e=>{e.isTrusted&&i.a.mutePeer(this.peerId)}),a.default.addEventListener("dialog_notify_settings",e=>{if(this.peerId===e.peerId){const e=_t.a.isPeerLocalMuted(this.peerId,!1);this.notifications.checkboxField.checked=!e}}),a.default.addEventListener("peer_typings",({peerId:e})=>{this.peerId===e&&this.setPeerStatus()}),a.default.addEventListener("peer_bio_edit",e=>{e===this.peerId&&this.setBio(!0)}),a.default.addEventListener("user_update",e=>{this.peerId===e&&this.setPeerStatus()}),a.default.addEventListener("contacts_update",e=>{if(this.peerId===e){const t=T.a.getUser(e);t.pFlags.self||(t.phone?Kt(T.a.formatUserPhone(t.phone),this.phone):this.phone.container.style.display="none")}}),this.setPeerStatusInterval=window.setInterval(this.setPeerStatus,6e4)}cleanupHTML(){this.bio.container.style.display="none",this.phone.container.style.display="none",this.username.container.style.display="none",this.notifications.container.style.display="",this.notifications.checkboxField.checked=!0,this.setBioTimeout&&(window.clearTimeout(this.setBioTimeout),this.setBioTimeout=0)}setAvatar(){if(this.peerId!==a.default.myId){if(o.a.getPeerPhoto(this.peerId)){const e=this.avatars;return this.avatars=new Wt(this.scrollable),this.avatars.setPeer(this.peerId),this.avatars.info.append(this.name,this.subtitle),this.avatar.remove(),e?e.container.replaceWith(this.avatars.container):this.element.prepend(this.avatars.container),void(Dt&&this.scrollable.container.classList.add("parallax"))}}Dt&&this.scrollable.container.classList.remove("parallax"),this.avatars&&(this.avatars.container.remove(),this.avatars=void 0),this.avatar.setAttribute("peer",""+this.peerId),this.section.content.prepend(this.avatar,this.name,this.subtitle)}fillProfileElements(){var e;if(!this.cleaned)return;this.cleaned=!1;const t=this.peerId;if(this.cleanupHTML(),this.setAvatar(),t!==a.default.myId){o.a.getPeerUsername(t)&&Kt(o.a.getPeerUsername(t),this.username);const e=_t.a.isPeerLocalMuted(t,!1);this.notifications.checkboxField.checked=!e}else Object(_e.b)(()=>{this.notifications.container.style.display="none"});if(t>0){let e=T.a.getUser(t);e.phone&&t!==a.default.myId&&Kt(T.a.formatUserPhone(e.phone),this.phone)}this.setBio(),Object(x.a)(this.name,new ft.a({peerId:t,dialog:!0}).element);const s=o.a.getPeer(t);(null===(e=null==s?void 0:s.pFlags)||void 0===e?void 0:e.verified)&&this.name.append(Bt()),this.setPeerStatus(!0)}setBio(e){this.setBioTimeout&&(window.clearTimeout(this.setBioTimeout),this.setBioTimeout=0);const t=this.peerId,s=this.threadId;if(!t)return;let i;i=t>0?n.default.getProfile(t,e).then(e=>this.peerId===t&&this.threadId===s&&(e.rAbout&&t!==a.default.myId&&Kt(e.rAbout,this.bio),!0)):n.default.getChatFull(-t,e).then(e=>this.peerId===t&&this.threadId===s&&(e.about&&Kt(Z.b.wrapRichText(e.about),this.bio),!0)),i.then(e=>{e&&(this.setBioTimeout=window.setTimeout(()=>this.setBio(!0),6e4))})}setPeer(e,t=0){this.peerId===e&&this.threadId===e||(this.init&&this.init(),this.peerId=e,this.threadId=t,this.cleaned=!0)}}class qt extends V{constructor(e){super(e,!1),this.peerId=0,this.threadId=0,this.historiesStorage={}}init(){this.container.classList.add("shared-media-container","profile-container");const e=Object(U.a)("btn-icon sidebar-close-button",{noRipple:!0});this.closeBtn.replaceWith(e),this.closeBtn=e;const t=document.createElement("div");t.classList.add("animated-close-icon"),e.append(t);const s=document.createElement("div");s.className="transition slide-fade";const i=document.createElement("div");i.classList.add("transition-item"),this.title.append(Object(A.i18n)("Profile")),this.editBtn=N("edit"),i.append(this.title,this.editBtn);const n=document.createElement("div");n.classList.add("transition-item");const o=this.title.cloneNode();o.append(Object(A.i18n)("PeerInfo.SharedMedia")),n.append(o),s.append(i,n),this.header.append(s),this.profile=new Gt(this.scrollable),this.profile.init(),this.scrollable.append(this.profile.element);this.scrollable.onAdditionalScroll=()=>{const e=this.searchSuper.nav.getBoundingClientRect();if(!e.width)return;const s=e.top-1<=56;t.classList.toggle("state-back",s),this.searchSuper.container.classList.toggle("is-full-viewport",s),r(+s),s||this.searchSuper.cleanScrollPositions()};const r=Object(D.a)(s,"slide-fade",400,null,!1);r(0),Object(l.b)(this.closeBtn,e=>{this.closeBtn.firstElementChild.classList.contains("state-back")?(this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild,"start"),r(0),t.classList.remove("state-back")):this.scrollable.isHeavyAnimationInProgress||this.slider.onCloseBtnClick()}),Object(l.b)(this.editBtn,e=>{let t;t=this.peerId<0?new Ot(this.slider):new Ft(this.slider),t&&(t instanceof Ot?t.chatId=-this.peerId:t.peerId=this.peerId,t.open())}),a.default.addEventListener("contacts_update",e=>{this.peerId===e&&this.toggleEditBtn()}),a.default.addEventListener("chat_update",e=>{this.peerId===-e&&this.toggleEditBtn()}),a.default.addEventListener("history_multiappend",e=>{for(const t in e)this.renderNewMessages(+t,Array.from(e[t]))}),a.default.addEventListener("history_delete",({peerId:e,msgs:t})=>{this.deleteDeletedMessages(e,Array.from(t))}),a.default.addEventListener("message_sent",({message:e})=>{this.renderNewMessages(e.peerId,[e.mid])}),this.searchSuper=new $s({mediaTabs:[{inputFilter:"inputMessagesFilterEmpty",name:"PeerMedia.Members",type:"members"},{inputFilter:"inputMessagesFilterPhotoVideo",name:"SharedMediaTab2",type:"media"},{inputFilter:"inputMessagesFilterDocument",name:"SharedFilesTab2",type:"files"},{inputFilter:"inputMessagesFilterUrl",name:"SharedLinksTab2",type:"links"},{inputFilter:"inputMessagesFilterMusic",name:"SharedMusicTab2",type:"music"},{inputFilter:"inputMessagesFilterRoundVoice",name:"SharedVoiceTab2",type:"voice"}],scrollable:this.scrollable,onChangeTab:e=>{let t="members"===e.type&&a.default.settings.animationsEnabled?250:0;setTimeout(()=>{c.classList.toggle("is-hidden","members"!==e.type)},t)}}),this.profile.element.append(this.searchSuper.container);const c=$({icon:"addmember_filled"});this.content.append(c),c.addEventListener("click",()=>{const e=-this.peerId,t=G.a.isChannel(e),s=(s,i)=>{let n,a,o,r,l;if(s.length>1)n="AddMembersAlertTitle",a=[Object(A.i18n)("Members",[s.length])],o="AddMembersAlertCountText",r=s.map(e=>{const t=document.createElement("b");return t.append(new ft.a({peerId:e}).element),t}),t||(l=[{text:"AddMembersForwardMessages",checked:!0}]);else{n="AddOneMemberAlertTitle",o="AddMembersAlertNamesText";const e=document.createElement("b");e.append(new ft.a({peerId:s[0]}).element),r=[e],t||(l=[{text:"AddOneMemberForwardMessages",textArgs:[new ft.a({peerId:s[0]}).element],checked:!0}])}r.push(new ft.a({peerId:-e}).element),new ht("popup-add-members",{peerId:-e,titleLangKey:n,descriptionLangKey:o,descriptionLangArgs:r,buttons:[{langKey:"Add",callback:i}],checkboxes:l}).show()},i=e=>{"USER_PRIVACY_RESTRICTED"===e.type&&at({langPackKey:"InviteToGroupError"})};if(t){const t=new jt(this.slider);t.open({peerId:this.peerId,type:"channel",skippable:!1,takeOut:n=>(s(n,()=>{const s=G.a.inviteToChannel(e,n);s.catch(i),t.attachToPromise(s)}),!1),title:"GroupAddMembers",placeholder:"SendMessageTo"})}else new It({peerTypes:["contacts"],placeholder:"Search",onSelect:t=>{setTimeout(()=>{s([t],s=>{G.a.addChatUser(e,t,s.size?void 0:0).catch(i)})},0)}})})}renderNewMessages(e,t){if(!this.init&&this.historiesStorage[e]){t=t.slice().reverse();for(const s of this.searchSuper.mediaTabs){const n=s.inputFilter,a=this.searchSuper.filterMessagesByType(t.map(t=>i.a.getMessageByPeer(e,t)),n);if(a.length){const t=this.historiesStorage[e][n];t&&t.unshift(...a.map(e=>({mid:e.mid,peerId:e.peerId}))),this.peerId===e&&-1!==this.searchSuper.usedFromHistory[n]&&(this.searchSuper.usedFromHistory[n]+=a.length,this.searchSuper.performSearchResult(a,s,!1))}}}}deleteDeletedMessages(e,t){if(!this.init&&this.historiesStorage[e]){for(const s of t)for(const t of this.searchSuper.mediaTabs){const i=t.inputFilter,n=this.historiesStorage[e][i];if(!n)continue;const a=n.findIndex(e=>e.mid===s);if(-1!==a){if(n.splice(a,1),this.peerId===e){const t=this.searchSuper.tabs[i].querySelector(`div[data-mid="${s}"][data-peer-id="${e}"]`);t&&(this.searchSuper.selection.isSelecting&&this.searchSuper.selection.toggleByElement(t),t.remove()),this.searchSuper.usedFromHistory[i]>=a+1&&this.searchSuper.usedFromHistory[i]--}break}}this.scrollable.onScroll()}}cleanupHTML(){this.profile.cleanupHTML(),this.editBtn.classList.add("hide"),this.searchSuper.cleanupHTML(!0),this.container.classList.toggle("can-add-members",this.searchSuper.canViewMembers()&&G.a.hasRights(-this.peerId,"invite_users"))}setLoadMutex(e){this.searchSuper.loadMutex=e}setPeer(e,t=0){var s;return(this.peerId!==e||this.threadId!==t)&&(this.peerId=e,this.threadId=t,this.peerChanged=!0,this.init&&(this.init(),this.init=null),this.searchSuper.setQuery({peerId:e,historyStorage:null!==(s=this.historiesStorage[e])&&void 0!==s?s:this.historiesStorage[e]={}}),this.profile.setPeer(e,t),!0)}fillProfileElements(){this.peerChanged&&(this.peerChanged=!1,this.cleanupHTML(),this.profile.fillProfileElements(),this.toggleEditBtn())}toggleEditBtn(){let e;e=this.peerId>0?this.peerId!==a.default.myId&&T.a.isContact(this.peerId):G.a.hasRights(-this.peerId,"change_info"),this.editBtn.classList.toggle("hide",!e)}loadSidebarMedia(e,t=!1){this.searchSuper.load(e,t)}onOpenAfterTimeout(){this.scrollable.onScroll()}}const Qt=new class extends K{constructor(){super({sidebarEl:document.getElementById("column-right"),canHideFirst:!0,navigationType:"right"}),this.isColumnProportionSet=!1,v.b.addEventListener("changeScreen",(e,t)=>{t===v.a.medium&&e!==v.a.mobile&&this.toggleSidebar(!1)}),v.b.addEventListener("resize",()=>{this.setColumnProportion()}),this.sharedMediaTab=new qt(this)}onCloseTab(e,t,s){this.historyTabIds.length||this.toggleSidebar(!1,t),super.onCloseTab(e,t,s)}setColumnProportion(){const e=this.sidebarEl.scrollWidth/this.sidebarEl.previousElementSibling.scrollWidth;document.documentElement.style.setProperty("--right-column-proportion",""+e)}toggleSidebar(e,t){const s=document.body.classList.contains("is-right-column-shown");let i;if(void 0!==e?e?s||(i=!0):s&&(i=!0):i=!0,!i)return Promise.resolve();s||this.historyTabIds.length||this.sharedMediaTab.open(),this.isColumnProportionSet||(this.setColumnProportion(),this.isColumnProportionSet=!0);const n=mo.selectTab(s?1:2,t);return document.body.classList.toggle("is-right-column-shown",e),n}};de.a.appSidebarRight=Qt;var $t=Qt;class Yt extends V{init(){this.container.id="poll-results-container",this.container.classList.add("chatlist-container"),this.resultsDiv=document.createElement("div"),this.resultsDiv.classList.add("poll-results"),this.scrollable.append(this.resultsDiv)}open(e){const t=super.open(),s=$e.a.getPoll(e.media.poll.id);this.setTitle(s.poll.pFlags.quiz?"PollResults.Title.Quiz":"PollResults.Title.Poll");const i=document.createElement("h3");i.innerHTML=s.poll.rQuestion;const n=s.results.results.map(e=>e.voters/s.results.total_voters*100);Zt(n);const a=document.createDocumentFragment();return s.results.results.forEach((t,i)=>{if(!t.voters)return;const o=document.createElement("hr"),r=s.poll.answers[i],l=document.createElement("div");l.classList.add("poll-results-answer");const c=document.createElement("div");c.innerHTML=Z.a.wrapEmojiText(r.text);const d=document.createElement("div");d.innerText=Math.round(n[i])+"%",l.append(c,d);const h=Do.createChatList();h.classList.add("poll-results-voters"),Do.setListClickListener(h,()=>{$t.onCloseBtnClick()},void 0,!0),h.style.minHeight=50*Math.min(t.voters,4)+"px",a.append(o,l,h);let u,p=4,m=!1,g=t.voters-4;const b=()=>{m||(m=!0,$e.a.getVotes(e,r.option,u,p).then(e=>{e.votes.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e.user_id,container:h,drawStatus:!1,rippleEnabled:!1,meAsSaved:!1,avatarSize:32});t.lastMessageSpan.parentElement.remove()}),u&&(g-=e.votes.length,v.lastElementChild.replaceWith(Object(A.i18n)("PollResults.LoadMore",[Math.min(20,g)]))),u=e.next_offset,p=20,g&&e.votes.length||v.remove()}).finally(()=>{m=!1}))};if(b(),g<=0)return;const v=document.createElement("div");v.classList.add("poll-results-more","show-more","rp-overflow"),v.addEventListener("click",b),Object(ie.ripple)(v);const f=document.createElement("div");f.classList.add("tgico-down"),v.append(f,Object(A.i18n)("PollResults.LoadMore",[Math.min(20,g)])),a.append(v)}),this.resultsDiv.append(i,a),$t.toggleSidebar(!0).then(()=>{}),t}}var Xt=s(85);let Jt=0;const Zt=e=>{const t=e.reduce((e,t)=>e+Math.round(t),0);if(t>100){const s=t-100,i=e.length;for(let t=0;t=.5&&is&&(s=i,t=n)}if(-1===t)return;e[t]+=1-s}}};a.default.addEventListener("poll_update",e=>{const{poll:t,results:s}=e;Array.from(document.querySelectorAll(`poll-element[poll-id="${t.id}"]`)).forEach(e=>{e.isClosed=!!t.pFlags.closed,e.performResults(s,t.chosenIndexes)})}),a.default.addEventListener("peer_changed",()=>{ts&&es(ts,ss,is)}),v.b.addEventListener("resize",()=>{ns.setMaxLength(),ns.resizePolls()}),v.b.addEventListener("changeScreen",()=>{ns.setMaxLength()});const es=(e,t,s)=>{e.classList.remove("active"),clearTimeout(s),setTimeout(()=>{t(),e.remove(),ts===e&&ss===t&&is===s&&(ts=ss=null,is=0)},200)};let ts,ss,is;class ns extends HTMLElement{constructor(){super(),this.isClosed=!1,this.isQuiz=!1,this.isRetracted=!1,this.isPublic=!1,this.isMultiple=!1,this.chosenIndexes=[],this.chosingIndexes=[],this.sentVote=!1}static setMaxLength(){const e=yt.a.windowW<=360?yt.a.windowW-120:v.b.active.poll.width;this.MAX_LENGTH=e+9+this.MAX_OFFSET+-13.7}static resizePolls(){if(!this.MAX_LENGTH)return;Array.from(document.querySelectorAll("poll-element.is-voted")).forEach(e=>{e.svgLines.forEach((t,s)=>{e.setLineProgress(s,1)})})}render(){Jt||(Jt=document.getElementById("poll-line").getTotalLength(),ns.setMaxLength());const e=this.message.media.poll.id,{poll:t,results:s}=$e.a.getPoll(e);let i;this.message.pFlags.is_scheduled&&this.classList.add("disable-hover"),t.pFlags&&(this.isPublic=!!t.pFlags.public_voters,this.isQuiz=!!t.pFlags.quiz,this.isClosed=!!t.pFlags.closed,this.isMultiple=!!t.pFlags.multiple_choice,this.isClosed?(i="Chat.Poll.Type.Closed",this.classList.add("is-closed")):i=this.isQuiz?this.isPublic?"Chat.Poll.Type.Quiz":"Chat.Poll.Type.AnonymousQuiz":this.isPublic?"Chat.Poll.Type.Public":"Chat.Poll.Type.Anonymous"),this.classList.toggle("is-multiple",this.isMultiple);const n=this.isMultiple?'':"",a=t.answers.map((e,t)=>`\n
\n
\n
\n \n \n \n ${n}\n
\n
\n
${Z.a.wrapEmojiText(e.text)}
\n \n \n
\n `).join("");if(this.innerHTML=`\n
${t.rQuestion}
\n
\n
\n
\n
\n ${a}`,this.descDiv=this.firstElementChild.nextElementSibling,this.typeDiv=this.descDiv.firstElementChild,this.avatarsDiv=this.descDiv.lastElementChild,i&&this.typeDiv.append(Object(A.i18n)(i)),this.isQuiz&&(this.classList.add("is-quiz"),t.close_period&&t.close_date)){const e=document.createElement("div");e.classList.add("poll-time"),this.descDiv.append(e);const s=document.createElementNS("http://www.w3.org/2000/svg","svg");s.classList.add("poll-quiz-timer"),this.quizTimer=s;const i=2,n=7,a=2*Math.PI*n,o=document.createElementNS("http://www.w3.org/2000/svg","circle");o.classList.add("poll-quiz-timer-circle"),o.setAttributeNS(null,"cx","16"),o.setAttributeNS(null,"cy","16"),o.setAttributeNS(null,"r",""+n),o.setAttributeNS(null,"stroke-width",""+i),s.append(o),this.descDiv.append(s);const r=1e3*t.close_period,l=1e3*(t.close_date-Ye.a.serverTimeOffset);this.quizInterval=window.setInterval(()=>{const t=Date.now(),s=(l-t)/r,i=(l-t)/1e3+1|0;e.innerHTML=String(i).toHHMMSS(),i<=5&&(e.style.color="#ee545c",o.style.stroke="#ee545c"),o.style.strokeDashoffset=a+s*a,o.style.strokeDasharray=`${a} ${a}`,t>=l&&(clearInterval(this.quizInterval),e.innerHTML="",o.style.strokeDashoffset=a,this.quizInterval=0,setTimeout(()=>{$e.a.getResults(this.message)},3e3))},1e3)}this.answerDivs=Array.from(this.querySelectorAll(".poll-answer")),this.svgLines=Array.from(this.querySelectorAll(".poll-line")),this.numberDivs=Array.from(this.querySelectorAll(".poll-answer-percents"));const o=document.createElement("div");o.classList.add("poll-footer"),this.viewResults=document.createElement("div"),this.viewResults.className="poll-footer-button poll-view-results hide",this.viewResults.append(Object(A.i18n)("Chat.Poll.ViewResults")),this.votersCountDiv=document.createElement("div"),this.votersCountDiv.className="poll-votes-count",o.append(this.viewResults,this.votersCountDiv),this.append(o),this.viewResults.addEventListener("click",e=>{Object(c.a)(e),$t.isTabExists(Yt)||new Yt($t).open(this.message)}),Object(ie.ripple)(this.viewResults),this.isMultiple&&(this.sendVoteBtn=document.createElement("div"),this.sendVoteBtn.classList.add("poll-footer-button","poll-send-vote"),this.sendVoteBtn.append(Object(A.i18n)("Chat.Poll.SubmitVote")),Object(ie.ripple)(this.sendVoteBtn),t.chosenIndexes.length||this.votersCountDiv.classList.add("hide"),Object(l.b)(this.sendVoteBtn,e=>{Object(c.a)(e),this.chosingIndexes.length&&this.sendVotes(this.chosingIndexes).then(()=>{this.chosingIndexes.length=0,this.answerDivs.forEach(e=>{e.classList.remove("is-chosing")})})}),o.append(this.sendVoteBtn));const r=!(t.chosenIndexes.length||this.isClosed);r&&!this.isPublic||this.performResults(s,t.chosenIndexes,!1),r&&(this.setVotersCount(s),Object(l.b)(this,this.clickHandler))}initQuizHint(e){if(e.solution&&e.solution_entities){const t=document.createElement("div");if(t.classList.add("tgico-tip","poll-hint"),this.descDiv.append(t),Object(l.b)(t,s=>{Object(c.a)(s),t.classList.add("active"),((e,t,s)=>{ts&&es(ts,ss,is);const i=document.createElement("div");i.classList.add("quiz-hint");const n=document.createElement("div");n.classList.add("container","tgico");const a=document.createElement("div");a.classList.add("text"),n.append(a),i.append(n),a.innerHTML=Z.a.wrapRichText(e,{entities:t}),mo.chat.bubbles.bubblesContainer.append(i),i.offsetLeft,i.classList.add("active"),ts=i,ss=s,is=window.setTimeout(()=>{es(i,s,is)},pe.IS_TOUCH_SUPPORTED?5e3:7e3)})(e.solution,e.solution_entities,()=>{t.classList.remove("active")})}),this.sentVote){const s=e.results.find(e=>e.pFlags.correct);s&&!s.pFlags.chosen&&t.click()}}}clickHandler(e){const t=Object(Ce.a)(e.target,"poll-answer");if(!t)return;Object(c.a)(e);const s=+t.dataset.index;if(this.isMultiple){t.classList.toggle("is-chosing");const e=this.chosingIndexes.indexOf(s);-1!==e?this.chosingIndexes.splice(e,1):this.chosingIndexes.push(s)}else this.sendVotes([s])}sendVotes(e){if(this.sendVotePromise)return this.sendVotePromise;const t=this.answerDivs.filter((t,s)=>e.includes(s));return t.forEach(e=>{e.classList.add("is-voting")}),this.classList.add("disable-hover"),this.sentVote=!0,this.sendVotePromise=$e.a.sendVote(this.message,e).then(()=>{t.forEach(e=>{e.classList.remove("is-voting")}),this.classList.remove("disable-hover")}).catch(()=>{this.sentVote=!1}).finally(()=>{this.sendVotePromise=null})}performResults(e,t,s=!0){var i,n;if(a.default.settings.animationsEnabled||(s=!1),this.isQuiz&&((null===(i=e.results)||void 0===i?void 0:i.length)||this.isClosed)){this.answerDivs.forEach((t,s)=>{t.classList.toggle("is-correct",!!e.results[s].pFlags.correct)}),this.initQuizHint&&(this.initQuizHint(e),this.initQuizHint=null),this.quizInterval&&(clearInterval(this.quizInterval),this.quizInterval=0),(null===(n=this.quizTimer)||void 0===n?void 0:n.parentElement)&&this.quizTimer.remove();const t=this.descDiv.querySelector(".poll-time");t&&t.remove()}if(this.isClosed&&(this.classList.add("is-closed"),Object(x.a)(this.typeDiv,Object(A.i18n)("Chat.Poll.Type.Closed"))),(this.chosenIndexes.length!==t.length||this.isClosed)&&(this.isRetracted=this.chosenIndexes.length&&!t.length,this.chosenIndexes=t.slice(),this.isRetracted?Object(l.b)(this,this.clickHandler):Object(l.c)(this,this.clickHandler)),this.chosenIndexes.length||this.isRetracted||this.isClosed){const t=e.results.map(t=>e.total_voters?t.voters/e.total_voters*100:0);this.classList.toggle("no-transition",!s),s&&Object(Xt.a)(this,"",!this.isRetracted,340),Object(_e.b)(()=>{this.setResults(this.isRetracted?this.percents:t,this.chosenIndexes,s),this.percents=t,this.isRetracted=!1})}if(this.setVotersCount(e),this.isPublic){this.isMultiple||(this.viewResults.classList.toggle("hide",!e.total_voters||!this.chosenIndexes.length),this.votersCountDiv.classList.toggle("hide",!!this.chosenIndexes.length));let t="";e.recent_voters.forEach((e,s)=>{t+=``}),this.avatarsDiv.innerHTML=t}if(this.isMultiple){const t=!!this.chosenIndexes.length,s=this.isClosed||t,i=!this.isPublic||!e.total_voters||!t&&!this.isClosed;this.sendVoteBtn.classList.toggle("hide",s),this.viewResults.classList.toggle("hide",i),this.votersCountDiv.classList.toggle("hide",!s||!i)}}setResults(e,t,s){this.svgLines.forEach(e=>e.style.display=""),this.answerDivs.forEach((e,s)=>{e.classList.toggle("is-chosen",t.includes(s))});const i=Math.max(...e);if(this.maxPercents=e.map(e=>e/i),this.isRetracted)this.svgLines.forEach((e,t)=>{this.setLineProgress(t,-1)});else{const e=()=>{this.svgLines.forEach((e,t)=>{this.setLineProgress(t,1)})};s?Object(_e.b)(e):e()}let n;e=e.slice(),Zt(e);const a=t=>{e.forEach((e,s)=>{const i=n(e,t);this.numberDivs[s].innerText=i+"%"})};if(this.isRetracted)if(n=(e,t)=>Math.round(e/10*t),s)for(let e=9,t=0;e>=0;--e,++t)setTimeout(()=>{a(e)},34*t);else a(0);else if(n=(e,t)=>Math.round(e/10*(t+1)),s)for(let e=0;e<10;++e)setTimeout(()=>{a(e)},34*e);else a(9);if(this.isRetracted){s&&this.classList.add("is-retracting"),this.classList.remove("is-voted");const e=()=>{this.svgLines.forEach(e=>e.style.display="none")};s?setTimeout(()=>{this.classList.remove("is-retracting"),e()},340):e()}else this.classList.add("is-voted")}setVotersCount(e){const t=e.total_voters||0;let s,i=[t];s=this.isClosed?this.isQuiz?t?"Chat.Quiz.TotalVotes":"Chat.Quiz.TotalVotesResultEmpty":t?"Chat.Poll.TotalVotes1":"Chat.Poll.TotalVotesResultEmpty":this.isQuiz?t?"Chat.Quiz.TotalVotes":"Chat.Quiz.TotalVotesEmpty":t?"Chat.Poll.TotalVotes1":"Chat.Poll.TotalVotesEmpty",Object(x.a)(this.votersCountDiv,Object(A.i18n)(s,i))}setLineProgress(e,t){const s=this.svgLines[e];-1===t?(s.style.strokeDasharray="",s.style.strokeDashoffset=""):(s.style.strokeDasharray=t*this.maxPercents[e]*ns.MAX_LENGTH+", 485.9",s.style.strokeDashoffset=""+t*ns.MAX_OFFSET)}}ns.MAX_OFFSET=-46.5,ns.MAX_LENGTH=0,customElements.define("poll-element",ns);var as=s(127),os=s(53),rs=s(93),ls=s(112),cs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ds=new class{constructor(){this.storage=new rs.a(ls.a,"stickerSets"),this.getStickerSetPromises={},this.getStickersByEmoticonsPromises={},this.getAnimatedEmojiStickerSet(),a.default.addMultipleEventsListeners({updateNewStickerSet:e=>{this.saveStickerSet(e.stickerset,e.stickerset.set.id),a.default.dispatchEvent("stickers_installed",e.stickerset.set)}}),this.getGreetingStickersTimeout=window.setTimeout(()=>{this.getGreetingStickersTimeout=void 0,this.getGreetingSticker(!0)},5e3)}getGreetingSticker(e=!1){return this.getGreetingStickersTimeout&&(clearTimeout(this.getGreetingStickersTimeout),this.getGreetingStickersTimeout=void 0),this.getGreetingStickersPromise||(this.getGreetingStickersPromise=this.getStickersByEmoticon("👋⭐️",!1).then(e=>{if(!e.length)throw"NO_STICKERS";this.greetingStickers=e.slice(),this.greetingStickers.sort((e,t)=>Math.random()-Math.random())})),this.getGreetingStickersPromise.then(()=>{let t;return e||(t=this.greetingStickers.shift(),this.greetingStickers.push(t)),M.a.downloadDoc(this.greetingStickers[0]),t})}saveStickers(e){Object(y.d)(e,(t,s)=>{(t=M.a.saveDoc(t))?e[s]=t:e.splice(s,1)})}getStickerSet(e,t={}){return cs(this,void 0,void 0,(function*(){const s=e.id;return this.getStickerSetPromises[s]?this.getStickerSetPromises[s]:this.getStickerSetPromises[s]=new Promise(i=>cs(this,void 0,void 0,(function*(){var n;if(!t.overwrite){const e=yield this.storage.get(s);if(e&&(null===(n=e.documents)||void 0===n?void 0:n.length)&&(Date.now()-e.refreshTime<36e5||t.useCache))return this.saveStickers(e.documents),i(e),void delete this.getStickerSetPromises[s]}try{const n=yield rt.a.invokeApi("messages.getStickerSet",{stickerset:this.getStickerSetInput(e)}),a=t.saveById?s:n.set.id;this.saveStickerSet(n,a),i(n)}catch(e){i(null)}delete this.getStickerSetPromises[s]})))}))}getAnimatedEmojiStickerSet(){return this.getStickerSet({id:"emoji"},{saveById:!0})}getRecentStickers(){return cs(this,void 0,void 0,(function*(){const e=yield rt.a.invokeApiHashable("messages.getRecentStickers");return this.saveStickers(e.stickers),e}))}getAnimatedEmojiSticker(e){const t=this.storage.getFromCache("emoji");if(!t||!t.documents)return;e=e.replace(/\ufe0f/g,"").replace(/🏻|🏼|🏽|🏾|🏿/g,"");const s=t.packs.find(t=>t.emoticon===e);return s?M.a.getDoc(s.documents[0]):void 0}preloadAnimatedEmojiSticker(e){return this.getAnimatedEmojiStickerSet().then(()=>{const t=this.getAnimatedEmojiSticker(e);if(t)return M.a.downloadDoc(t)})}saveStickerSet(e,t){const s={_:"messages.stickerSet",set:e.set,packs:e.packs,documents:e.documents};let i=this.storage.getFromCache(t);i?Object.assign(i,s):i=this.storage.setToCache(t,s),this.saveStickers(e.documents);const n=i.set.installed_date||"emoji"===t;i.refreshTime=Date.now(),this.storage.set({[t]:i},!n)}getStickerSetThumbDownloadOptions(e){var t;const s=e.thumbs.find(e=>"photoSize"===e._),i=e.thumb_dc_id,n=null===(t=e.pFlags)||void 0===t?void 0:t.animated;return{dcId:i,location:{_:"inputStickerSetThumb",stickerset:this.getStickerSetInput(e),thumb_version:e.thumb_version},size:s.size,mimeType:n?"application/x-tgsticker":"image/webp"}}getStickerSetInput(e){return"emoji"===e.id?{_:"inputStickerSetAnimatedEmoji"}:e.access_hash?{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash}:{_:"inputStickerSetShortName",short_name:e.id}}getFeaturedStickers(){return cs(this,void 0,void 0,(function*(){const e=yield rt.a.invokeApiHashable("messages.getFeaturedStickers");return e.sets.forEach(e=>{this.saveStickerSet({set:e.set,documents:[],packs:[]},e.set.id)}),e.sets}))}toggleStickerSet(e){return cs(this,void 0,void 0,(function*(){if(e.installed_date){if(yield rt.a.invokeApi("messages.uninstallStickerSet",{stickerset:this.getStickerSetInput(e)}))return delete e.installed_date,a.default.dispatchEvent("stickers_deleted",e),this.storage.delete(e.id,!0),!0}else{if(yield rt.a.invokeApi("messages.installStickerSet",{stickerset:this.getStickerSetInput(e),archived:!1}))return e.installed_date=Date.now()/1e3|0,a.default.dispatchEvent("stickers_installed",e),!0}return!1}))}searchStickerSets(e,t=!0){return cs(this,void 0,void 0,(function*(){const s=t?1:0,i=yield rt.a.invokeApiHashable("messages.searchStickerSets",{flags:s,exclude_featured:t||void 0,q:e});i.sets.forEach(e=>{this.saveStickerSet({set:e.set,documents:[],packs:[]},e.set.id)});const n=[],a=this.storage.getCache();for(let t in a){const{set:s}=a[t];s.title.toLowerCase().includes(e.toLowerCase())&&!i.sets.find(e=>e.set.id===s.id)&&n.push({_:"stickerSetCovered",set:s,cover:null})}return i.sets.concat(n)}))}getAllStickers(){return rt.a.invokeApiHashable("messages.getAllStickers")}preloadStickerSets(){return this.getAllStickers().then(e=>Promise.all(e.sets.map(e=>this.getStickerSet(e,{useCache:!0}))))}getStickersByEmoticon(e,t=!0){return this.getStickersByEmoticonsPromises[e]?this.getStickersByEmoticonsPromises[e]:this.getStickersByEmoticonsPromises[e]=Promise.all([rt.a.invokeApiHashable("messages.getStickers",{emoticon:e}),t?this.preloadStickerSets():[],t?this.getRecentStickers().then(e=>e.packs):[]]).then(([t,s,i])=>{const n=t.stickers.map(e=>M.a.saveDoc(e)),a=[],o=[],r=t=>{for(const s of t)if(s.emoticon.includes(e))for(const e of s.documents){const t=M.a.getDoc(e);(t.animated?a:o).push(t)}};r(i);for(const e of s)r(e.packs);return[...new Set(a.concat(o,n))]})}};de.a.appStickersManager=ds;var hs=ds,us=s(55),ps=s(118),ms=s(123),gs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};let bs=0;function vs({doc:e,container:t,message:s,boxWidth:i,boxHeight:n,withTail:o,isOut:r,middleware:d,lazyLoadQueue:u,noInfo:p,group:m,onlyPreview:g,withoutPreloader:b,loadPromises:f,noPlayButton:y,noAutoDownload:w,size:L,searchContext:S}){var E,C;const k=!(i&&n),T=("video"!==e.type||e.size<=52428800&&!k)&&("gif"===e.type?a.default.settings.autoPlay.gifs:a.default.settings.autoPlay.videos);let P,x;if(!p){P=document.createElement("span"),P.classList.add("video-time"),t.append(P);let s=!1;"gif"!==e.type?(P.innerText=(e.duration+"").toHHMMSS(!1),y||"round"===e.type||(T&&!w?P.classList.add("tgico","can-autoplay"):s=!0)):(P.innerText="GIF",T||y||(s=!0,w=void 0)),s&&(x=document.createElement("span"),x.classList.add("video-play","tgico-largeplay","btn-circle","position-center"),t.append(x))}let A={};if("image/gif"===e.mime_type){const a=ys({photo:e,message:s,container:t,boxWidth:i,boxHeight:n,withTail:o,isOut:r,lazyLoadQueue:u,middleware:d,withoutPreloader:b,loadPromises:f,noAutoDownload:w,size:L});return A.thumb=a,A.loadPromise=a.loadPromises.full,A}const O=document.createElement("video");if(O.classList.add("media-video"),O.setAttribute("playsinline","true"),O.muted=!0,"round"===e.type){const i=document.createElement("div");i.classList.add("media-round","z-depth-1"),i.dataset.mid=""+s.mid,i.dataset.peerId=""+s.peerId,i.message=s;const n=v.b.active.round,a=n.width/2,o=3.5,r=a-2*o;i.innerHTML=`\n \n `;const d=i.firstElementChild.firstElementChild;bs||(bs=2*Math.PI*r),d.style.strokeDasharray=bs+" "+bs,d.style.strokeDashoffset=""+bs,P.classList.add("tgico");s.pFlags.media_unread&&i.classList.add("is-unread");const h=document.createElement("canvas");h.width=h.height=e.w,i.prepend(h,P),i.append(O),t.append(i);const u=h.getContext("2d"),p=()=>{const e=i.message,t=fe.addMedia(e,!w),s=()=>{(mo.chat.setPeerPromise||Promise.resolve()).finally(()=>{Object(us.a)(t)||(t.removeEventListener("play",r),t.removeEventListener("timeupdate",o),t.removeEventListener("pause",p),t.removeEventListener("ended",m))})},n=()=>{u.drawImage(t,0,0);const e=bs-t.currentTime/t.duration*bs;return d.style.strokeDashoffset=""+e,!t.paused},a=()=>{t.duration&&(Object(us.a)(t)?(t.paused&&n(),P.innerText=(t.duration-t.currentTime+"").toHHMMSS(!1)):s())},o=Fe(a),r=()=>{O.classList.add("hide"),i.classList.remove("is-paused"),Object(as.a)(n,h),D&&D.preloader&&D.preloader.classList.contains("manual")&&D.onClick()},p=()=>{Object(us.a)(t)?i.classList.add("is-paused"):s()},m=()=>{O.classList.remove("hide"),i.classList.add("is-paused"),O.currentTime=0,P.innerText=(""+t.duration).toHHMMSS(!1),t.currentTime&&(t.currentTime=0)};t.addEventListener("play",r),t.addEventListener("timeupdate",o),t.addEventListener("pause",p),t.addEventListener("ended",m),Object(l.b)(h,s=>{if(Object(c.a)(s),D&&!D.detached&&D.onClick(),t.paused){if(fe.setSearchContext(S)){const[t,s]=Be(i,S.useSearch);fe.setTargets({peerId:e.peerId,mid:e.mid},t,s)}t.play()}else t.pause()}),t.paused?t.duration&&t.currentTime!==t.duration&&t.currentTime>0?(n(),a(),O.classList.add("hide")):p():r()};s.pFlags.is_outgoing?(i.onLoad=p,i.dataset.isOutgoing="1"):p()}else O.autoplay=!0;let _;if(s){if(_=ys({photo:e,message:s,container:t,boxWidth:i,boxHeight:n,withTail:o,isOut:r,lazyLoadQueue:u,middleware:d,withoutPreloader:!0,loadPromises:f,noAutoDownload:w,size:L}),A.thumb=_,!T&&"gif"!==e.type||g)return A.loadPromise=_.loadPromises.full,A;if(o){const e=(_.images.thumb||_.images.full).parentElement;O.width=+e.getAttributeNS(null,"width"),O.height=+e.getAttributeNS(null,"height"),e.append(O)}}else{const t=M.a.getThumb(e,!1);t&&t.promise.then(()=>{O.poster=t.cacheContext.url})}!O.parentElement&&t&&((null==_?void 0:_.aspecter)||t).append(O);const F=he.a.getCacheContext(e),j=!!(null===(E=null==s?void 0:s.media)||void 0===E?void 0:E.preloader);let D;j?(D=s.media.preloader,D.attach(t,!1),w=void 0):F.downloaded||e.supportsStreaming?e.supportsStreaming&&(D=new ye.a({cancelable:!1,attachMethod:"prepend"})):D=new ye.a({attachMethod:"prepend"});const B=Object(oe.a)();O.addEventListener("error",e=>{4!==O.error.code&&console.error("Error "+O.error.code+"; details: "+O.error.message),D&&!j&&D.detach(),B.isFulfilled||B.resolve()},{once:!0}),Object(me.d)(O).then(()=>{m&&I.a.addAnimation(O,m),D&&!j&&D.detach(),B.resolve()}),"video"===e.type&&O.addEventListener("timeupdate",()=>{P.innerText=(O.duration-O.currentTime+"").toHHMMSS(!1)}),O.muted=!0,O.loop=!0,O.autoplay=!0;let R=w&&(null===(C=null==_?void 0:_.preloader)||void 0===C?void 0:C.loadFunc);const H=()=>{D&&w&&!b&&(D.construct(),D.setManual());let i=Promise.resolve();if(D&&!j)if(F.downloaded||e.supportsStreaming)e.supportsStreaming&&(w?i=Promise.reject():F.downloaded||(D.attach(t,!1,null),O.addEventListener(h.IS_SAFARI?"timeupdate":"canplay",()=>{D.detach()},{once:!0})));else{const s=i=M.a.downloadDoc(e,null==u?void 0:u.queueId,w);D.attach(t,!1,s)}return!w&&R&&(R(),R=null),w=void 0,i.then(()=>{!d||d()?("round"===e.type&&fe.resolveWaitingForLoadMedia(s.peerId,s.mid,s.pFlags.is_scheduled),Object(Rt.a)(O,F.url)):B.resolve()},()=>{}),{download:i,render:B}};return D&&!j&&D.setDownloadFunction(H),"gif"!==e.type||T?A.loadPromise=u?(u.push({div:t,load:()=>H().render}),Promise.resolve()):H().render:Object(l.b)(t,e=>{Object(c.a)(e),x.remove(),H()},{capture:!0,once:!0}),A}function fs({message:e,withTime:t,fontWeight:s,voiceAsMusic:n,showSender:o,searchContext:r,loadPromises:c,noAutoDownload:d,lazyLoadQueue:h}){var u,p;s||(s=500);const m=e.media.document||e.media.webpage.document,b=e.pFlags.is_outgoing&&(null===(u=e.media)||void 0===u?void 0:u.preloader);if("audio"===m.type||"voice"===m.type||"round"===m.type){const i=new Re;return i.withTime=t,i.message=e,i.noAutoDownload=d,i.lazyLoadQueue=h,i.loadPromises=c,n&&(i.voiceAsMusic=n),r&&(i.searchContext=r),o&&(i.showSender=o),b&&(i.preloader=e.media.preloader),i.dataset.fontWeight=""+s,i.render(),i}let v=m.file_name?m.file_name.split("."):"",f="";f=v.length>1&&Array.isArray(v)?Object(ps.a)(v.pop().split(" ",1)[0].toLowerCase()):"file";let y=document.createElement("div");y.classList.add("document","ext-"+f),y.dataset.docId=m.id;const w=document.createElement("div");w.classList.add("document-ico");const L=he.a.getCacheContext(m);if(((null===(p=m.thumbs)||void 0===p?void 0:p.length)||e.pFlags.is_outgoing&&L.url&&"photo"===m.type)&&"image/gif"!==m.mime_type){y.classList.add("document-with-thumb");let t=[];if(e.pFlags.is_outgoing)w.innerHTML=``,t.push(w.firstElementChild);else{const e=ys({photo:m,message:null,container:w,boxWidth:54,boxHeight:54,loadPromises:c,withoutPreloader:!0,lazyLoadQueue:h});w.style.width=w.style.height="",e.images.thumb&&t.push(e.images.thumb),e.images.full&&t.push(e.images.full)}t.forEach(e=>e.classList.add("document-thumb"))}else w.innerText=f;let S=m.fileName||"Unknown.file";document.createElement("div").classList.add("document-description");const E=[Object(C.b)(m.size)];t&&E.push(Object(re.c)(e.date)),o&&E.push(i.a.wrapSenderToPeer(e)),y.innerHTML=`\n ${L.downloaded&&!b?"":'
'}\n
\n
\n `;const I=y.querySelector(".document-name"),k=new xe.a;k.dataset.fontWeight=""+s,k.innerHTML=S,I.append(k),o&&I.append(i.a.wrapSentTime(e));if(y.querySelector(".document-size").append(...Object(A.joinElementsWith)(E," · ")),y.prepend(w),!b&&e.pFlags.is_outgoing)return y;let T,P=null;const x=()=>{if(T){T.classList.add("downloaded");const e=T;setTimeout(()=>{e.remove()},200),T=null}P&&(P=null)},O=e=>{var t;const s=!e||e.isTrusted,i=M.a.getDoc(y.dataset.docId);let n;const o=mo.chat.bubbles?mo.chat.bubbles.lazyLoadQueue.queueId:void 0;return s?"pdf"===i.type?(n=M.a.downloadDoc(i,o),n.then(()=>{setTimeout(()=>{const e=he.a.getCacheContext(i).url;window.open(e)},a.default.settings.animationsEnabled?250:0)})):n=g.has(i.mime_type)&&(null===(t=i.thumbs)||void 0===t?void 0:t.length)?M.a.downloadDoc(i,o):M.a.saveDocFile(i,o):n=M.a.downloadDoc(i,o),T&&(n.then(x),P.attach(T,!0,n)),{download:n}};return M.a.downloading.has(m.id)?(T=y.querySelector(".document-download"),P=new ye.a,P.attach(T,!1,M.a.downloading.get(m.id))):L.downloaded&&!b||(T=y.querySelector(".document-download"),P=e.media.preloader,P?(P.attach(T),e.media.promise.then(x)):(P=new ye.a,P.construct(),P.setManual(),P.attach(T),P.setDownloadFunction(O))),Object(l.b)(y,e=>{P?P.onClick(e):O(e)}),y}function ys({photo:e,message:t,container:s,boxWidth:i,boxHeight:n,withTail:o,isOut:l,lazyLoadQueue:c,middleware:d,size:h,withoutPreloader:u,loadPromises:p,noAutoDownload:m,noBlur:g,noThumb:b,noFadeIn:f,blurAfter:y}){var w;if(!e.sizes&&!e.thumbs)return i&&n&&!h&&"document"===e._&&r.a.setAttachmentSize(e,s,i,n,void 0,t),{loadPromises:{thumb:Promise.resolve(),full:Promise.resolve()},images:{thumb:null,full:null},preloader:null,aspecter:null};h||(void 0===i&&(i=v.b.active.regular.width),void 0===n&&(n=v.b.active.regular.height)),s.classList.add("media-container");let L,S,E,I=s,C=!0,k=Promise.resolve();if(S=new Image,i&&n&&!h){const a=r.a.setAttachmentSize(e,s,i,n,void 0,t);if(h=a.photoSize,C=a.isFit,E=he.a.getCacheContext(e,h.type),!C){I=document.createElement("div"),I.classList.add("media-container-aspecter"),I.style.width=a.size.width+"px",I.style.height=a.size.height+"px";const i=r.a.getStrippedThumbIfNeeded(e,E,!g,!0);if(i){k=i.loadPromise;const e=i.image;e.classList.add("media-photo"),s.append(e)}else{ys({container:s,message:t,photo:e,boxWidth:0,boxHeight:0,size:h,lazyLoadQueue:c,isOut:l,loadPromises:p,middleware:d,withoutPreloader:u,withTail:o,noAutoDownload:m,noBlur:g,noThumb:!0,blurAfter:!0}).images.full.classList.add("media-photo","thumbnail")}s.classList.add("media-container-fitted"),s.append(I)}}else h||(h=r.a.choosePhotoSize(e,i,n,!0)),E=he.a.getCacheContext(e,null==h?void 0:h.type);if(!b){const t=r.a.getStrippedThumbIfNeeded(e,E,!g);t&&(k=Promise.all([k,t.loadPromise]),L=t.image,L.classList.add("media-photo"),I.append(L))}S.classList.add("media-photo");const T=(L||!E.downloaded)&&a.default.settings.animationsEnabled&&!f;let P;(null===(w=null==t?void 0:t.media)||void 0===w?void 0:w.preloader)&&!u?(P=t.media.preloader,P.attach(s),m=void 0):E.downloaded||(P=new ye.a({attachMethod:"prepend"}));const x=e=>ws(s,S,e,T,I,L),A=()=>d&&!d()?Promise.resolve():y?Object(ms.a)(E.url,12).then(e=>x(e)):x(E.url);let O;const _=h.w>=150&&h.h>=150||m,F=()=>{m&&!u&&P&&(P.construct(),P.setManual());const t="document"===e._&&"image/gif"===e.mime_type?M.a.downloadDoc(e,null==c?void 0:c.queueId):r.a.preloadPhoto(e,h,null==c?void 0:c.queueId,m);P&&!E.downloaded&&!u&&_&&P.attach(s,!1,t),m=void 0;const i=t.then(A);return i.catch(()=>{}),{download:t,render:i}};return P&&P.setDownloadFunction(F),E.downloaded?k=O=F().render:c?c.push({div:s,load:()=>F().download}):O=F().render,p&&k&&p.push(k),{loadPromises:{thumb:k,full:O||Promise.resolve()},images:{thumb:L,full:S},preloader:P,aspecter:I}}function ws(e,t,s,i,n=e,a){return i&&t.classList.add("fade-in"),new Promise(o=>{Object(Rt.a)(t,s,()=>{os.a.mutateElement(e,()=>{n.append(t),Object(_e.b)(()=>{o()}),i&&t.addEventListener("animationend",()=>{os.a.mutate(()=>{t.classList.remove("fade-in"),a&&a.remove()})},{once:!0})})})})}function Ls({doc:e,div:t,middleware:s,lazyLoadQueue:i,group:n,play:o,onlyThumb:d,emoji:h,width:u,height:m,withThumb:g,loop:b,loadPromises:v,needFadeIn:f}){var y;const w=e.sticker;if(u||(u=h?void 0:200),m||(m=h?void 0:200),2!==w||le.b.loaded||le.b.loadLottieWorkers(),!w)throw console.error("wrong doc for wrapSticker!",e),new Error("wrong doc for wrapSticker!");t.dataset.docId=e.id,t.classList.add("media-sticker-wrapper");const L=he.a.getCacheContext(e),S=h?Object(ne.d)(h):-1,E=L.downloaded&&!f;let I=Object(oe.a)(),C=!1;if(((null===(y=e.thumbs)||void 0===y?void 0:y.length)||e.stickerCachedThumbs)&&!t.firstElementChild&&(!E||2===w||d)){let n,a=e.stickerCachedThumbs&&e.stickerCachedThumbs[S]||e.thumbs[0];const o=()=>{t.childElementCount||(n.classList.add("media-sticker","thumbnail"),os.a.mutateElement(t,()=>{t.append(n),I.resolve()}))};if("url"in a)n=new Image,Object(Rt.a)(n,a.url,o),C=!0;else if("bytes"in a){if("photoPathSize"===a._)if(a.bytes.length){const s=r.a.getPathFromPhotoPathSize(a);t.innerHTML=`\n \n `}else a=e.thumbs.find(e=>{var t;return null===(t=e.bytes)||void 0===t?void 0:t.length})||a;a&&"photoPathSize"!==a._&&S<=0&&(n=new Image,p.a||e.pFlags.stickerThumbConverted||L.url?(Object(Rt.a)(n,r.a.getPreviewURLFromThumb(e,a,!0),o),C=!0):ce.a.convert(e.id,a.bytes).then(i=>{a.bytes=i,e.pFlags.stickerThumbConverted=!0,s&&!s()||t.childElementCount||Object(Rt.a)(n,r.a.getPreviewURLFromThumb(e,a,!0),o)}).catch(()=>{}))}else if(2===w&&(g||d)&&S<=0){n=new Image;const r=()=>{if(t.childElementCount||s&&!s())return;const i=()=>{t.childElementCount||s&&!s()||Object(Rt.a)(n,L.url,o)};return L.url?(i(),Promise.resolve()):M.a.getThumbURL(e,a).promise.then(i)};if(i&&d)return i.push({div:t,load:r}),Promise.resolve();r(),a.url&&(C=!0)}}if(v&&C&&v.push(I),d)return Promise.resolve();const k=()=>gs(this,void 0,void 0,(function*(){if(!s||s())if(2===w)yield M.a.downloadDoc(e,null==i?void 0:i.queueId).then(ae.c).then(i=>gs(this,void 0,void 0,(function*(){if(s&&!s())return;let r=yield le.b.loadAnimationWorker({container:t,loop:b&&!h,autoplay:o,animationData:i,width:u,height:m},n,S);r.addEventListener("firstFrame",()=>{const s=t.firstElementChild;f=(f||!s||"svg"===s.tagName)&&a.default.settings.animationsEnabled;const i=()=>{s&&s!==r.canvas&&s.remove()};f?os.a.mutate(()=>{r.canvas.classList.add("fade-in"),s&&s.classList.add("fade-out"),r.canvas.addEventListener("animationend",()=>{os.a.mutate(()=>{r.canvas.classList.remove("fade-in"),i()})},{once:!0})}):s&&os.a.mutate(i),M.a.saveLottiePreview(e,r.canvas,S)},{once:!0}),h&&Object(l.b)(t,e=>{Object(c.a)(e);let s=le.b.getAnimation(t);s.paused&&(s.autoplay=!0,s.restart())})})));else if(1===w){const n=new Image,o=t.firstElementChild!==n&&t.firstElementChild;return f=(f||!E||o)&&a.default.settings.animationsEnabled,n.classList.add("media-sticker"),f&&n.classList.add("fade-in"),new Promise((a,r)=>{const l=()=>{if(s&&!s())return a();Object(Rt.a)(n,L.url,()=>{os.a.mutateElement(t,()=>{t.append(n),o&&o.classList.add("fade-out"),a(),f&&n.addEventListener("animationend",()=>{n.classList.remove("fade-in"),o&&o.remove()},{once:!0})})})};L.url?l():M.a.downloadDoc(e,null==i?void 0:i.queueId).then(l,a)})}})),T=!i||E&&2!==w?k():(i.push({div:t,load:k}),Promise.resolve());return E&&1===w&&(I=T,v&&v.push(I)),T}function Ss({set:e,lazyLoadQueue:t,container:s,group:i,autoplay:n,width:a,height:o}){var r;return gs(this,void 0,void 0,(function*(){if(null===(r=e.thumbs)||void 0===r?void 0:r.length)return s.classList.add("media-sticker-wrapper"),void t.push({div:s,load:()=>{const t=hs.getStickerSetThumbDownloadOptions(e),r=he.a.download(t);if(e.pFlags.animated)return r.then(ae.c).then(e=>{le.b.loadAnimationWorker({container:s,loop:!0,autoplay:n,animationData:e,width:a,height:o,needUpscale:!0},i)});{const e=new Image;return e.classList.add("media-sticker"),r.then(t=>{Object(Rt.a)(e,URL.createObjectURL(t),()=>{s.append(e)})})}}});const l=hs.getStickerSet(e),c=yield l;"documentEmpty"!==c.documents[0]._&&Ls({doc:c.documents[0],div:s,group:i,lazyLoadQueue:t})}))}function Es(e,t,s){const i=new Ne("reply");return i.fill(e,t,s),i.container}function Ms(e){const t=new qe(e.items,e.maxWidth,e.minWidth,e.spacing,e.maxHeight).layout(),s=t.find(e=>e.sides&We),i=s.geometry.width+s.geometry.x,n=t.find(e=>e.sides&Ke),a=n.geometry.height+n.geometry.y,o=e.container;o.style.width=i+"px",o.style.height=a+"px";const r=o.children;t.forEach(({geometry:t,sides:s},n)=>{let l;if(l=r[n],l||(l=document.createElement("div"),o.append(l)),l.classList.add("album-item","grouped-item"),l.style.width=t.width/i*100+"%",l.style.height=t.height/a*100+"%",l.style.top=t.y/a*100+"%",l.style.left=t.x/i*100+"%",s&Ge&&s&Ve&&(l.style.borderTopLeftRadius="inherit"),s&Ge&&s&Ke&&(l.style.borderBottomLeftRadius="inherit"),s&We&&s&Ve&&(l.style.borderTopRightRadius="inherit"),s&We&&s&Ke&&(l.style.borderBottomRightRadius="inherit"),e.forMedia){const e=document.createElement("div");e.classList.add("album-item-media"),l.append(e)}})}function Is({groupId:e,attachmentDiv:t,middleware:s,uploading:n,lazyLoadQueue:a,isOut:o,chat:l,loadPromises:c,noAutoDownload:d}){const h=[],u=i.a.getMidsByAlbum(e);for(const e of u){const t=l.getMessage(e),s=t.media.photo||t.media.document,i="photo"===s._?r.a.choosePhotoSize(s,480,480):{w:s.w,h:s.h};h.push({size:i,media:s,message:t})}Ms({container:t,items:h.map(e=>({w:e.size.w,h:e.size.h})),maxWidth:v.b.active.album.width,minWidth:100,spacing:2,forMedia:!0}),h.forEach((e,i)=>{const{size:n,media:r,message:l}=e,h=t.children[i];h.dataset.mid=""+l.mid;const u=h.firstElementChild;"photo"===r._?ys({photo:r,message:l,container:u,boxWidth:0,boxHeight:0,isOut:o,lazyLoadQueue:a,middleware:s,size:n,loadPromises:c,noAutoDownload:d}):vs({doc:l.media.document,container:u,message:l,boxWidth:0,boxHeight:0,withTail:!1,isOut:o,lazyLoadQueue:a,middleware:s,loadPromises:c,noAutoDownload:d})})}v.b.addEventListener("changeScreen",(e,t)=>{if(t===v.a.mobile||e===v.a.mobile){const e=Array.from(document.querySelectorAll(".media-round .progress-ring")),t=v.b.active.round.width,s=t/2,i=s-7;bs=2*Math.PI*i,e.forEach(e=>{e.setAttributeNS(null,"width",""+t),e.setAttributeNS(null,"height",""+t);const n=e.firstElementChild;n.setAttributeNS(null,"cx",""+s),n.setAttributeNS(null,"cy",""+s),n.setAttributeNS(null,"r",""+i),n.style.strokeDasharray=bs+" "+bs,n.style.strokeDashoffset=""+bs})}}),a.default.addEventListener("download_start",e=>{Array.from(document.querySelectorAll(`.document[data-doc-id="${e}"]`)).forEach(e=>{e.querySelector(".preloader-container.manual")&&Object(l.d)(e)})});var Cs=s(77),ks=s(102),Ts=s(78);function Ps(e,t,s,i){return void 0===i&&(i=e.parentElement===t?Object(Ts.a)(e):-1),i!==s&&(-1!==i&&is?t.insertBefore(e,t.children[s]):t.append(e):t.prepend(e),!0)}class xs{constructor(e){this.updateElementWith=e=>e(),this.updateListWith=e=>e(!0),this.middleware=Object(ks.a)(),Object(L.g)(this,e),this.elements=new Map,this.sorted=[]}clear(){this.middleware.clean(),this.elements.clear(),this.sorted.length=0}_updateList(){this.elements.forEach(e=>{this.update(e.id,!0)}),this.onSort&&this.sorted.forEach((e,t)=>{this.onSort(e,t)})}updateList(e){const t=this.middleware.get();this.updateListWith(s=>{if(!t()||void 0!==s&&!s)return e(!1);this._updateList(),e(!0)})}has(e){return this.elements.has(e)}get(e){return this.elements.get(e)}getAll(){return this.elements}add(e,t=!1,s,i=t){let n=this.get(e);if(n)return n;const a={id:e,index:0};return n=this.onElementCreate(a,t),this.elements.set(e,n),this.update(e,i,n,s),n}delete(e,t){const s=this.elements.get(e);if(!s)return!1;this.elements.delete(e);const i=this.sorted.indexOf(s);if(-1!==i&&this.sorted.splice(i,1),this.onDelete)if(t)this.onDelete(s);else{const e=this.middleware.get();this.updateElementWith(()=>{e()&&this.onDelete(s)})}return!0}update(e,t=!1,s=this.get(e),i){if(!s)return;s.index=this.getIndex(e),this.onUpdate&&this.onUpdate(s);const n=Object(y.e)(this.sorted,s,"index");if(!t&&this.onSort){const e=this.middleware.get();(i||this.updateElementWith)(()=>{e()&&this.onSort(s,n)})}}}var As=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Os extends xs{constructor(e={}){let t;super({getIndex:e=>T.a.getUserStatusForSort(e),onDelete:e=>e.dom.listEl.remove(),onUpdate:e=>{const t=T.a.getUserStatusString(e.id);Object(x.a)(e.dom.lastMessageSpan,t)},onSort:(e,t)=>Ps(e.dom.listEl,this.list,t),onElementCreate:e=>{const{dom:t}=Do.addDialogNew({dialog:e.id,container:!1,drawStatus:!1,avatarSize:this.avatarSize,autonomous:!0,meAsSaved:!1,rippleEnabled:this.rippleEnabled,lazyLoadQueue:this.lazyLoadQueue});return e.dom=t,e},updateElementWith:_e.b,updateListWith:e=>As(this,void 0,void 0,(function*(){return Object(us.a)(this.list)?(yield Object(Cs.c)(),Object(us.a)(this.list)?void e(!0):e(!1)):e(!1)}))}),this.avatarSize=48,this.rippleEnabled=!0,Object(L.g)(this,e),this.list=Do.createChatList({new:e.new});const s=()=>{t=window.setTimeout(()=>{this.updateList(e=>{e&&s()})},Os.SORT_INTERVAL)};s()}}function _s(e,t){return new zt({element:e,onSwipe:(e,s,i)=>{if(Math.abs(s)>20)return!0;if(Math.abs(e)>Math.abs(s))Object(c.a)(i);else if(Math.abs(s)>Math.abs(e))return!0;return Math.abs(e)>50?(t(e>0),Object(se.b)(),!0):void 0},cancelEvent:!1})}Os.SORT_INTERVAL=3e4;var Fs=s(89),js=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ds extends It{constructor(e,t,s,i=!1){super({peerTypes:["dialogs","contacts"],onSelect:i?t:s=>js(this,void 0,void 0,(function*(){if(t){const e=t(s);e instanceof Promise&&(yield e)}mo.setInnerPeer(s),mo.chat.input.initMessagesForward(e)})),onClose:s,placeholder:"ShareModal.Search.ForwardPlaceholder",chatRightsAction:"send_messages",selfPresence:"ChatYourSelf"})}}class Bs{constructor(e,t,s,n){const r=new ft.a({peerId:e}).element;t=t.slice();const l=(a,o)=>{n&&n(),"scheduled"===s?i.a.deleteScheduledMessages(e,t):i.a.deleteMessages(e,t,!!a.size||o)};let c,d,h,u,p,m=[];if(1===t.length?c="DeleteSingleMessagesTitle":(c="DeleteMessagesTitle",d=[Object(A.i18n)("messages",[t.length])]),h=o.a.isMegagroup(e)?1===t.length?"AreYouSureDeleteSingleMessageMega":"AreYouSureDeleteFewMessagesMega":1===t.length?"AreYouSureDeleteSingleMessage":"AreYouSureDeleteFewMessages",p=[{langKey:"Delete",isDanger:!0,callback:l}],e===a.default.myId||"scheduled"===s);else if(e>0)m.push({text:"DeleteMessagesOptionAlso",textArgs:[r]});else{const s=G.a.getChat(-e),n=G.a.hasRights(-e,"delete_messages");if("chat"===s._){const s=n?t.slice():t.filter(t=>i.a.getMessageByPeer(e,t).fromId===a.default.myId);s.length&&(s.length===t.length?m.push({text:"DeleteForAll"}):(m.push({text:"DeleteMessagesOption"}),h="DeleteMessagesTextGroup",u=[Object(A.i18n)("messages",[s.length])]))}else p[0].callback=e=>l(e,!0)}Object(ct.a)(p);new ht("popup-delete-chat",{peerId:e,titleLangKey:c,titleLangArgs:d,descriptionLangKey:h,descriptionLangArgs:u,buttons:p,checkboxes:m}).show()}}var Rs=s(130);class Hs{constructor(e,t,s){let n,a,o=[];n=`Send Message${t.length>1?"s":""} Now`,a=t.length>1?"Send "+t.length+" messages now?":"Send message now?";o.push({langKey:"Send",callback:()=>{s&&s(),i.a.sendScheduledMessages(e,t)}});new ht("popup-delete-chat",{peerId:e,title:n,description:a,buttons:o}).show()}}var Us=s(6);function Ns(){window.getSelection?window.getSelection().empty?window.getSelection().empty():window.getSelection().removeAllRanges&&window.getSelection().removeAllRanges():document.selection&&document.selection.empty()}var zs=s(103);const Vs=e=>[...e.values()].reduce((e,t)=>e+t.size,0);class Ws{constructor(e){if(this.selectedMids=new Map,this.isSelecting=!1,this.cancelSelection=()=>{this.onCancelSelection&&this.onCancelSelection(),this.selectedMids.clear(),this.toggleSelection(),Ns()},Object(L.g)(this,e),this.navigationType="multiselect-"+Object(tt.b)(),pe.IS_TOUCH_SUPPORTED)return this.listenerSetter.add(this.listenElement)("touchend",()=>{this.isSelecting&&(this.selectedText=window.getSelection?window.getSelection().toString():document.selection?document.selection.createRange().text:"")}),void Object(se.a)(this.listenElement,e=>{if(this.isSelecting||this.verifyTouchLongPress&&!this.verifyTouchLongPress())return;document.body.classList.add("no-select"),this.listenElement.addEventListener("touchend",e=>{Object(c.a)(e),document.body.classList.remove("no-select")},{once:!0,capture:!0}),Ns();const t=this.getElementFromTarget(e.target);t&&this.toggleByElement(t)},this.listenerSetter);const t=(e,t)=>{if(e===t)return[];const s=e.getBoundingClientRect(),i=t.getBoundingClientRect(),n=(s.top-i.top||s.left-i.left)<0,a=Object(Ce.a)(e,this.lookupBetweenParentClassName);if(!a)return[];const o=Array.from(a.querySelectorAll(this.lookupBetweenElementsQuery));let r=o.indexOf(e),l=o.indexOf(t);n||([l,r]=[r,l]);return o.slice(r+1,l)};this.listenerSetter.add(this.listenElement)("mousedown",e=>{const s=Object(Ce.a)(e.target,this.targetLookupClassName);if(0!==e.button)return;if(this.verifyTarget&&!this.verifyTarget(e,s))return;const i=new Map;let n,a=s;const o=(e,s=!0)=>{const r=+e.dataset.mid,l=+e.dataset.peerId;if(!r||!l)return;Object(us.a)(a)||(a=e);let c=i.get(l);if(c||i.set(l,c=new Set),!c.has(r)){const d=this.isMidSelected(l,r);if(void 0===n&&(n=!d),c.add(r),n&&!d||!n&&d){const n=Vs(i);if(this.toggleByElement&&s){n<2&&Object(zs.a)(e,a)&&(a=e);const s=t(a,e);s.length&&s.forEach(e=>{o(e,!1)})}if(this.selectedMids.size)this.toggleByElement&&this.toggleByElement(e);else if(2===n&&this.toggleByMid)for(const[e,t]of i)for(const s of t)this.toggleByMid(e,s)}}};let r=!1;const d=e=>{r||(Ns(),r=!0);const t=this.getElementFromTarget(e.target);if(t)return this.verifyMouseMoveTarget&&!this.verifyMouseMoveTarget(e,t,n)?(this.listenerSetter.removeManual(this.listenElement,"mousemove",d),void this.listenerSetter.removeManual(document,"mouseup",h,u)):void o(t)},h=e=>{i.size&&Object(l.b)(window,c.a,{capture:!0,once:!0,passive:!1}),this.listenerSetter.removeManual(this.listenElement,"mousemove",d),Ns()},u={once:!0};this.listenerSetter.add(this.listenElement)("mousemove",d),this.listenerSetter.add(document)("mouseup",h,u)})}isElementShouldBeSelected(e){return this.isMidSelected(+e.dataset.peerId,+e.dataset.mid)}appendCheckbox(e,t){e.prepend(t.label)}toggleElementCheckbox(e,t){const s=!!this.getCheckboxInputFromElement(e);if(t){if(s)return!1;const t=new dt.a({name:e.dataset.mid,round:!0});this.isSelecting&&this.isElementShouldBeSelected(e)&&(t.input.checked=!0,e.classList.add("is-selected")),this.appendCheckbox(e,t)}else s&&this.getCheckboxInputFromElement(e).parentElement.remove();return!0}getCheckboxInputFromElement(e){var t;return"LABEL"===(null===(t=e.firstElementChild)||void 0===t?void 0:t.tagName)&&e.firstElementChild.firstElementChild}updateContainer(e=!1){const t=this.selectedMids.size;if(!t&&!e)return;let s=!t,i=!t,n=!t;for(const[e,t]of this.selectedMids){const n=this.isScheduled?this.appMessagesManager.getScheduledMessagesStorage(e):this.appMessagesManager.getMessagesStorage(e);for(const e of t){const t=this.appMessagesManager.getMessageFromStorage(n,e);if(s||t.action&&(s=!0),!i){this.appMessagesManager.canDeleteMessage(t)||(i=!0)}if(s&&i)break}if(s&&i)break}this.onUpdateContainer&&this.onUpdateContainer(s,i,n)}toggleSelection(e=!0,t=!1){const s=this.isSelecting,i=this.selectedMids.size;if(this.isSelecting=!!i||t,s===this.isSelecting)return!1;pe.IS_TOUCH_SUPPORTED||(this.listenElement.classList.toggle("no-select",this.isSelecting),s&&Ns()),Object(Us.a)();const n=!!i||t;return this.onToggleSelection&&this.onToggleSelection(n),h.IS_MOBILE_SAFARI||(n?B.a.pushItem({type:this.navigationType,onPop:()=>{this.cancelSelection()}}):B.a.removeByType(this.navigationType)),t&&this.updateContainer(t),!0}cleanup(){this.selectedMids.clear(),this.toggleSelection(!1)}updateElementSelection(e,t){this.toggleElementCheckbox(e,!0);this.getCheckboxInputFromElement(e).checked=t,this.toggleSelection(),this.updateContainer(),Object(Xt.a)(e,"is-selected",t,200)}isMidSelected(e,t){const s=this.selectedMids.get(e);return null==s?void 0:s.has(t)}length(){return Vs(this.selectedMids)}toggleMid(e,t,s){let i=this.selectedMids.get(e);if(s||void 0===s&&(null==i?void 0:i.has(t)))i&&(i.delete(t),i.size||this.selectedMids.delete(e));else{if(a.default.config.forwarded_count_max-this.length()-1<0)return nt(A.default.format("Chat.Selection.LimitToast",!0)),!1;i||(i=new Set,this.selectedMids.set(e,i)),i.add(t)}return!0}deleteSelectedMids(e,t){const s=this.selectedMids.get(e);s&&(t.forEach(e=>{s.delete(e)}),s.size||this.selectedMids.delete(e),this.updateContainer(),this.toggleSelection())}}class Ks extends Ws{constructor(e,t){super({appMessagesManager:t,listenElement:e.container,listenerSetter:new H.a,verifyTarget:(e,t)=>!!t&&this.isSelecting,getElementFromTarget:e=>Object(Ce.a)(e,"search-super-item"),targetLookupClassName:"search-super-item",lookupBetweenParentClassName:"tabs-tab",lookupBetweenElementsQuery:".search-super-item"}),this.searchSuper=e,this.toggleByElement=e=>{const t=+e.dataset.mid,s=+e.dataset.peerId;this.toggleMid(s,t)&&this.updateElementSelection(e,this.isMidSelected(s,t))},this.toggleByMid=(e,t)=>{const s=this.searchSuper.mediaTab.contentTab.querySelector(`.search-super-item[data-peer-id="${e}"][data-mid="${t}"]`);this.toggleByElement(s)},this.onUpdateContainer=(e,t,s)=>{const i=this.length();Object(x.a)(this.selectionCountEl,Object(A.i18n)("messages",[i])),this.selectionGotoBtn.classList.toggle("hide",1!==i),this.selectionForwardBtn.classList.toggle("hide",e),this.selectionDeleteBtn&&this.selectionDeleteBtn.classList.toggle("hide",t)},this.onToggleSelection=e=>{if(Object(Xt.a)(this.searchSuper.navScrollableContainer,"is-selecting",e,200,()=>{this.isSelecting||(this.selectionContainer.remove(),this.selectionContainer=this.selectionForwardBtn=this.selectionDeleteBtn=null,this.selectedText=void 0)}),Object(Xt.a)(this.searchSuper.container,"is-selecting",e,200),this.isSelecting&&!this.selectionContainer){const e="search-super-selection";this.selectionContainer=document.createElement("div"),this.selectionContainer.classList.add(e+"-container");const t=N(`close ${e}-cancel`,{noRipple:!0});this.listenerSetter.add(t)("click",this.cancelSelection,{once:!0}),this.selectionCountEl=document.createElement("div"),this.selectionCountEl.classList.add(e+"-count"),this.selectionGotoBtn=N(`message ${e}-goto`);const s={listenerSetter:this.listenerSetter};Object(l.b)(this.selectionGotoBtn,()=>{const e=[...this.selectedMids.keys()][0],t=[...this.selectedMids.get(e)][0];this.cancelSelection(),a.default.dispatchEvent("history_focus",{peerId:e,mid:t})},s),this.selectionForwardBtn=N(`forward ${e}-forward`),Object(l.b)(this.selectionForwardBtn,()=>{const e={};for(const[t,s]of this.selectedMids)e[t]=Array.from(s);new Ds(e,()=>{this.cancelSelection()})},s),this.isPrivate&&(this.selectionDeleteBtn=N(`delete danger ${e}-delete`),Object(l.b)(this.selectionDeleteBtn,()=>{const e=[...this.selectedMids.keys()][0];new Bs(e,[...this.selectedMids.get(e)],"chat",()=>{this.cancelSelection()})},s)),this.selectionContainer.append(...[t,this.selectionCountEl,this.selectionGotoBtn,this.selectionForwardBtn,this.selectionDeleteBtn].filter(Boolean));const i=this.selectionContainer;i.style.opacity="0",this.searchSuper.navScrollableContainer.append(i),i.offsetLeft,i.style.opacity=""}},this.isPrivate=!e.showSender}toggleSelection(e=!0,t=!1){const s=super.toggleSelection(e,t);if(s&&e){Array.from(this.searchSuper.tabsContainer.querySelectorAll(".search-super-item")).forEach(e=>{this.toggleElementCheckbox(e,this.isSelecting)})}return s}}class Gs extends Ws{constructor(e,t,s,i){super({appMessagesManager:i,listenElement:t.bubblesContainer,listenerSetter:t.listenerSetter,getElementFromTarget:e=>Object(Ce.a)(e,"grouped-item")||Object(Ce.a)(e,"bubble"),verifyTarget:(e,t)=>!(!this.selectedMids.size&&!e.target.classList.contains("bubble")&&!e.target.classList.contains("document-selection")&&t),verifyMouseMoveTarget:(e,t,s)=>!(e.target!==t&&!e.target.classList.contains("document-selection")&&void 0===s&&!this.selectedMids.size),verifyTouchLongPress:()=>!this.chat.input.recording,targetLookupClassName:"bubble",lookupBetweenParentClassName:"bubbles-inner",lookupBetweenElementsQuery:".bubble:not(.is-multiple-documents), .grouped-item",isScheduled:"scheduled"===e.type}),this.chat=e,this.bubbles=t,this.input=s,this.toggleByElement=e=>{if(!this.canSelectBubble(e))return;const t=+e.dataset.mid;if(e.classList.contains("is-grouped")){if(!this.isGroupedBubbleSelected(e)){const e=this.selectedMids.get(this.bubbles.peerId);if(e){this.chat.getMidsByMid(t).forEach(t=>e.delete(t))}}return void this.bubbles.getBubbleGroupedItems(e).forEach(this.toggleByElement)}if(!this.toggleMid(this.bubbles.peerId,t))return;if(e.classList.contains("grouped-item")){const s=Object(Ce.a)(e,"bubble"),i=this.isGroupedBubbleSelected(s),n=this.isGroupedMidsSelected(t);(n||i)&&this.updateElementSelection(s,n)}this.updateElementSelection(e,this.isMidSelected(this.bubbles.peerId,t))},this.toggleByMid=(e,t)=>{const s=this.bubbles.getMountedBubble(t);s&&this.toggleByElement(s.bubble)},this.onToggleSelection=e=>{let t="",s="";if(e){const e=this.input.rowsWrapper.parentElement,i=e.querySelector(".fake-selection-wrapper"),n=e.querySelector(".fake-rows-wrapper"),a=i.getBoundingClientRect(),o=n.getBoundingClientRect(),r=o.width,l=a.width;if(r!==l){const e=l/r,i=(r-l)/2;if(t=`translateX(${a.left-o.left-i}px) scaleX(${e})`,e<1){const t=12;s=t+t*(1-e)+"px"}}}if(Object(Xt.a)(this.input.rowsWrapper,"is-centering",e,200),this.input.rowsWrapper.style.transform=t,this.input.rowsWrapper.style.borderRadius=s,Object(Xt.a)(this.listenElement,"is-selecting",e,200,()=>{this.isSelecting||(this.selectionInputWrapper.remove(),this.selectionInputWrapper=this.selectionContainer=this.selectionSendNowBtn=this.selectionForwardBtn=this.selectionDeleteBtn=null,this.selectedText=void 0),Object(_e.b)(()=>{this.bubbles.onScroll()})}),this.isSelecting&&!this.selectionContainer){this.selectionInputWrapper=document.createElement("div"),this.selectionInputWrapper.classList.add("chat-input-wrapper","selection-wrapper"),this.selectionContainer=document.createElement("div"),this.selectionContainer.classList.add("selection-container");const e={listenerSetter:this.listenerSetter},t=N("close",{noRipple:!0});Object(l.b)(t,this.cancelSelection,{once:!0,listenerSetter:this.listenerSetter}),this.selectionCountEl=document.createElement("div"),this.selectionCountEl.classList.add("selection-container-count"),"scheduled"===this.chat.type?(this.selectionSendNowBtn=Object(U.a)("btn-primary btn-transparent btn-short text-bold selection-container-send",{icon:"send2"}),this.selectionSendNowBtn.append(Object(A.i18n)("MessageScheduleSend")),Object(l.b)(this.selectionSendNowBtn,()=>{new Hs(this.bubbles.peerId,[...this.selectedMids.get(this.bubbles.peerId)],()=>{this.cancelSelection()})},e)):(this.selectionForwardBtn=Object(U.a)("btn-primary btn-transparent text-bold selection-container-forward",{icon:"forward"}),this.selectionForwardBtn.append(Object(A.i18n)("Forward")),Object(l.b)(this.selectionForwardBtn,()=>{const e={};for(const[t,s]of this.selectedMids)e[t]=Array.from(s);new Ds(e,()=>{this.cancelSelection()})},e)),this.selectionDeleteBtn=Object(U.a)("btn-primary btn-transparent danger text-bold selection-container-delete",{icon:"delete"}),this.selectionDeleteBtn.append(Object(A.i18n)("Delete")),Object(l.b)(this.selectionDeleteBtn,()=>{new Bs(this.bubbles.peerId,[...this.selectedMids.get(this.bubbles.peerId)],this.chat.type,()=>{this.cancelSelection()})},e),this.selectionContainer.append(...[t,this.selectionCountEl,this.selectionSendNowBtn,this.selectionForwardBtn,this.selectionDeleteBtn].filter(Boolean)),this.selectionInputWrapper.style.opacity="0",this.selectionInputWrapper.append(this.selectionContainer),this.input.rowsWrapper.parentElement.append(this.selectionInputWrapper),this.selectionInputWrapper.offsetLeft,this.selectionInputWrapper.style.opacity=""}},this.onUpdateContainer=(e,t,s)=>{Object(x.a)(this.selectionCountEl,Object(A.i18n)("messages",[this.length()])),this.selectionSendNowBtn&&this.selectionSendNowBtn.toggleAttribute("disabled",s),this.selectionForwardBtn&&this.selectionForwardBtn.toggleAttribute("disabled",e),this.selectionDeleteBtn.toggleAttribute("disabled",t)},this.onCancelSelection=()=>{for(const[e,t]of this.selectedMids)for(const e of t){const t=this.bubbles.getMountedBubble(e);t&&this.toggleByElement(t.bubble)}}}appendCheckbox(e,t){t.label.classList.add("bubble-select-checkbox"),e.classList.contains("document-container")?e.querySelector(".document, audio-element").append(t.label):super.appendCheckbox(e,t)}toggleSelection(e=!0,t=!1){const s=super.toggleSelection(e,t);if(s&&e)for(const e in this.bubbles.bubbles){const t=this.bubbles.bubbles[e];this.toggleElementCheckbox(t,this.isSelecting)}return s}toggleElementCheckbox(e,t){if(!this.canSelectBubble(e))return;const s=super.toggleElementCheckbox(e,t);if(s){e.classList.contains("is-grouped")&&this.bubbles.getBubbleGroupedItems(e).forEach(e=>this.toggleElementCheckbox(e,t))}return s}isElementShouldBeSelected(e){const t=e.classList.contains("is-grouped");return super.isElementShouldBeSelected(e)&&(!t||this.isGroupedMidsSelected(+e.dataset.mid))}isGroupedBubbleSelected(e){const t=this.getCheckboxInputFromElement(e);return null==t?void 0:t.checked}isGroupedMidsSelected(e){const t=this.chat.getMidsByMid(e),s=t.filter(e=>this.isMidSelected(this.bubbles.peerId,e));return t.length===s.length}getCheckboxInputFromElement(e){return e.classList.contains("document-container")?e.querySelector("label input"):super.getCheckboxInputFromElement(e)}canSelectBubble(e){return!e.classList.contains("service")&&!e.classList.contains("is-sending")&&!e.classList.contains("bubble-first")}}var qs=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Qs{constructor(e,t){this.attachTo=e,this.searchSuper=t,this.onGotoClick=()=>{a.default.dispatchEvent("history_focus",{peerId:this.peerId,mid:this.mid,threadId:this.searchSuper.searchContext.threadId})},this.onForwardClick=()=>{this.searchSuper.selection.isSelecting?Object(l.d)(this.searchSuper.selection.selectionForwardBtn):new Ds({[this.peerId]:[this.mid]})},this.onSelectClick=()=>{this.searchSuper.selection.toggleByElement(this.target)},this.onClearSelectionClick=()=>{this.searchSuper.selection.cancelSelection()},this.onDeleteClick=()=>{this.searchSuper.selection.isSelecting?Object(l.d)(this.searchSuper.selection.selectionDeleteBtn):new Bs(this.peerId,[this.mid],"chat")};const s=e=>{let s;this.init&&(this.init(),this.init=null);try{s=Object(Ce.a)(e.target,"search-super-item")}catch(e){}if(s){if(e instanceof MouseEvent&&e.preventDefault(),this.element.classList.contains("active"))return!1;e instanceof MouseEvent&&(e.cancelBubble=!0),this.target=s,this.peerId=+s.dataset.peerId,this.mid=+s.dataset.mid,this.isSelected=t.selection.isMidSelected(this.peerId,this.mid),this.buttons.forEach(e=>{let t;t=!(this.isSelected&&!e.withSelection)&&(!e.verify||e.verify()),e.element.classList.toggle("hide",!t)}),s.classList.add("menu-open"),Object(se.e)(e,this.element),Object(se.d)(this.element,()=>{s.classList.remove("menu-open")})}};pe.IS_TOUCH_SUPPORTED||Object(se.a)(e,s)}init(){this.buttons=[{icon:"forward",text:"Forward",onClick:this.onForwardClick},{icon:"forward",text:"Message.Context.Selection.Forward",onClick:this.onForwardClick,verify:()=>this.isSelected&&!this.searchSuper.selection.selectionForwardBtn.classList.contains("hide"),withSelection:!0},{icon:"message",text:"Message.Context.Goto",onClick:this.onGotoClick,withSelection:!0},{icon:"select",text:"Message.Context.Select",onClick:this.onSelectClick},{icon:"select",text:"Message.Context.Selection.Clear",onClick:this.onClearSelectionClick,verify:()=>this.isSelected,withSelection:!0},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>i.a.canDeleteMessage(i.a.getMessageByPeer(this.peerId,this.mid))},{icon:"delete danger",text:"Message.Context.Selection.Delete",onClick:this.onDeleteClick,verify:()=>this.isSelected&&!this.searchSuper.selection.selectionDeleteBtn.classList.contains("hide"),withSelection:!0}],this.element=Ee(this.buttons),this.element.classList.add("search-contextmenu","contextmenu"),document.getElementById("page-chats").append(this.element)}}class $s{constructor(e){this.tabs={},this.prevTabId=-1,this.lazyLoadQueue=new te.d,this.middleware=Object(ks.a)(),this.historyStorage={},this.usedFromHistory={},this.urlsToRevoke=[],this.loadMutex=Promise.resolve(),this.nextRates={},this.loadPromises={},this.loaded={},this.loadedChats=!1,this.firstLoad=!0,this.log=Object(J.b)("SEARCH-SUPER"),this.monthContainers={},this.mediaTabsMap=new Map,this.asChatList=!1,this.groupByMonth=!0,this.hideEmptyTabs=!0,this.showSender=!1,this.onTransitionStart=()=>{this.container.classList.add("sliding")},this.onTransitionEnd=()=>{this.container.classList.remove("sliding")},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("search-super"),this.searchContextMenu=new Qs(this.container,this),this.selection=new Ks(this,i.a);const t=this.navScrollableContainer=document.createElement("div");t.classList.add("search-super-tabs-scrollable","menu-horizontal-scrollable","sticky");const s=this.navScrollable=new P.a(t);s.container.classList.add("search-super-nav-scrollable");const n=this.nav=document.createElement("nav");n.classList.add("search-super-tabs","menu-horizontal-div"),this.tabsMenu=n,s.container.append(n);for(const e of this.mediaTabs){const t=document.createElement("div");t.classList.add("menu-horizontal-div-item");const s=document.createElement("span"),i=document.createElement("i");s.append(Object(A.i18n)(e.name)),s.append(i),t.append(s),Object(ie.ripple)(t),this.tabsMenu.append(t),this.mediaTabsMap.set(e.type,e),e.menuTab=t}this.tabsContainer=document.createElement("div"),this.tabsContainer.classList.add("search-super-tabs-container","tabs-container"),pe.IS_TOUCH_SUPPORTED&&_s(this.tabsContainer,e=>{const t=this.selectTab.prevId();this.selectTab(e?t+1:t-1)});for(const e of this.mediaTabs){const t=document.createElement("div");t.classList.add("search-super-container-"+e.type,"tabs-tab");const s=document.createElement("div");s.classList.add("search-super-content-"+e.type),t.append(s),this.tabsContainer.append(t),this.tabs[e.inputFilter]=s,e.contentTab=s}this.container.append(t,this.tabsContainer),this.searchGroupMedia=new O(!1,"messages",!0),this.scrollable.onScrolledBottom=()=>{this.mediaTab.contentTab&&this.mediaTab.contentTab.childElementCount&&this.load(!0)},this.selectTab=Object(ee.a)(this.tabsMenu,this.tabsContainer,(e,t,s)=>{if(this.prevTabId===e&&!this.skipScroll)return void this.scrollable.scrollIntoViewNew(this.container,"start");const i=this.mediaTabs[e];this.onChangeTab&&this.onChangeTab(i);const n=this.mediaTab;if(this.mediaTab=i,-1!==this.prevTabId&&s&&this.onTransitionStart(),this.skipScroll)this.skipScroll=!1;else{const e=this.container.offsetTop;let t=this.scrollable.scrollTop;if(tn&&(i.scroll={scrollTop:n,scrollHeight:0})}if(i.scroll){const e=n.scroll.scrollTop-i.scroll.scrollTop;e&&(i.contentTab.style.transform=`translateY(${e}px)`)}}-1===this.prevTabId||i.contentTab.childElementCount||this.load(!0),this.prevTabId=e},()=>{this.scrollable.onScroll(),void 0!==this.mediaTab.scroll&&(this.mediaTab.contentTab.style.transform="",this.scrollable.scrollTop=this.mediaTab.scroll.scrollTop),this.onTransitionEnd()},void 0,s),Object(l.b)(this.tabsContainer,e=>{this.selection.isSelecting&&(Object(c.a)(e),this.selection.toggleByElement(Object(Ce.a)(e.target,"search-super-item")))},{capture:!0,passive:!1});const a=(e,t,s,n)=>{const a=Object(Ce.a)(n.target,e);if(!a)return;const o=+a.dataset.mid;if(!o)return void this.log.warn("no messageId by click on target:",a);const r=+a.dataset.peerId,l=Array.from(this.tabs[s].querySelectorAll("."+t)).map(t=>{const s=Object(Ce.a)(t,e);return{element:t,mid:+s.dataset.mid,peerId:+s.dataset.peerId}}),c=l.findIndex(e=>e.mid===o&&e.peerId===r),d=i.a.getMessageByPeer(r,o);(new fo).setSearchContext(this.copySearchContext(s)).openMedia(d,l[c].element,0,!1,l.slice(0,c),l.slice(c+1))};Object(l.b)(this.tabs.inputMessagesFilterPhotoVideo,a.bind(null,"grid-item","grid-item","inputMessagesFilterPhotoVideo")),Object(l.b)(this.tabs.inputMessagesFilterDocument,a.bind(null,"document-with-thumb","media-container","inputMessagesFilterDocument")),this.mediaTab=this.mediaTabs[0],Object(Cs.a)(()=>{this.lazyLoadQueue.lock()},()=>{this.lazyLoadQueue.unlockAndRefresh()})}filterMessagesByType(e,t){if("inputMessagesFilterEmpty"===t)return e;"inputMessagesFilterUrl"!==t&&(e=e.filter(e=>!!e.media));let s=[];switch(t){case"inputMessagesFilterPhotoVideo":for(let t of e){let e=t.media.photo||t.media.document||t.media.webpage&&t.media.webpage.document;e&&("document"===e._&&"video"!==e.type||s.push(t))}break;case"inputMessagesFilterDocument":for(let t of e)t.media.document&&!["voice","audio","gif","sticker","round"].includes(t.media.document.type)&&s.push(t);break;case"inputMessagesFilterUrl":for(let t of e)s.push(t);break;case"inputMessagesFilterMusic":for(let t of e)t.media.document&&"audio"===t.media.document.type&&s.push(t);break;case"inputMessagesFilterVoice":for(let t of e)t.media.document&&"voice"===t.media.document.type&&s.push(t);break;case"inputMessagesFilterRoundVoice":for(let t of e)t.media.document&&["voice","round"].includes(t.media.document.type)&&s.push(t)}return s}performSearchResult(e,t,s=!0){var n;return qs(this,void 0,void 0,(function*(){const a=[],o=t.contentTab,l=[],c=this.middleware.get();let d,h=t.inputFilter;switch(yield Object(Cs.c)(),"inputMessagesFilterPhotoVideo"===h&&this.searchContext.query.trim()?(h="inputMessagesFilterEmpty",d=this.searchGroupMedia,o.append(d.container)):"inputMessagesFilterEmpty"===h&&(d=this.searchGroups.messages),h){case"inputMessagesFilterEmpty":for(const t of e){const{dialog:e,dom:s}=Do.addDialogNew({dialog:t.peerId,container:d.list,drawStatus:!1,avatarSize:54});Do.setLastMessage(e,t,s,this.searchContext.query)}d.list.childElementCount&&d.setActive();break;case"inputMessagesFilterPhotoVideo":for(const t of e){const e=t.media.photo||t.media.document||t.media.webpage&&t.media.webpage.document,s=document.createElement("div");let i;s.classList.add("grid-item");const n=r.a.choosePhotoSize(e,200,200);i="photo"!==e._?vs({doc:e,message:t,container:s,boxWidth:0,boxHeight:0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,onlyPreview:!0,withoutPreloader:!0,noPlayButton:!0,size:n}).thumb:ys({photo:e,message:t,container:s,boxWidth:0,boxHeight:0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,withoutPreloader:!0,noBlur:!0,size:n}),[i.images.thumb,i.images.full].filter(Boolean).forEach(e=>{e.classList.add("grid-item-media")}),l.push(i.loadPromises.thumb),a.push({element:s,message:t})}break;case"inputMessagesFilterVoice":case"inputMessagesFilterRoundVoice":case"inputMessagesFilterMusic":case"inputMessagesFilterDocument":for(const t of e){const e=this.showSender||["voice","round"].includes(t.media.document.type),s=fs({message:t,withTime:!e,fontWeight:400,voiceAsMusic:!0,showSender:e,searchContext:this.copySearchContext(h),lazyLoadQueue:this.lazyLoadQueue,noAutoDownload:!0});["audio","voice","round"].includes(t.media.document.type)&&s.classList.add("audio-48"),a.push({element:s,message:t})}break;case"inputMessagesFilterUrl":for(let t of e){let e;if((null===(n=t.media)||void 0===n?void 0:n.webpage)&&"webPageEmpty"!==t.media.webpage._)e=t.media.webpage;else{const s=t.totalEntities?t.totalEntities.find(e=>"messageEntityUrl"===e._||"messageEntityTextUrl"===e._):null;let i,n,a;if(s)a=t.message.slice(s.offset,s.offset+s.length);else{const e=Z.b.matchUrl(t.message);if(!e)continue;i=e[0]}i="messageEntityTextUrl"===(null==s?void 0:s._)?s.url:i||a,n=i;const o=t.message===i;i.match(/^(ftp|http|https):\/\//)||(n="https://"+i,i=i.includes("@")?i:"https://"+i),n=new URL(n).hostname,e={url:i,display_url:n},o||(e.description=t.message,e.rDescription=Z.b.wrapRichText(Object(X.f)(t.message,150,180)))}document.createElement("div");let s=document.createElement("div");if(s.classList.add("preview","row-media"),e.photo){ys({container:s,message:null,photo:e.photo,boxWidth:0,boxHeight:0,withoutPreloader:!0,lazyLoadQueue:this.lazyLoadQueue,middleware:c,size:r.a.choosePhotoSize(e.photo,60,60,!1),loadPromises:l,noBlur:!0})}else s.classList.add("empty"),s.innerHTML=Z.b.getAbbreviation(e.title||e.display_url||e.description||e.url,!0);let o=e.rTitle||"",d=e.rDescription||"";const h=Object(Rs.a)(d),u=Object(Rs.a)(Z.b.wrapRichText(e.url||"")).firstElementChild;u instanceof HTMLAnchorElement&&(u.innerText=decodeURIComponent(u.href)),h.firstChild&&h.append("\n"),h.append(u),this.showSender&&h.append("\n",i.a.wrapSenderToPeer(t)),o||(o=Z.b.wrapPlainText(e.display_url.split("/",1)[0]));const p=new Je({title:o,titleRight:i.a.wrapSentTime(t),subtitle:h,havePadding:!0,clickable:!0,noRipple:!0});p.container.append(s),p.container.innerText.trim().length&&a.push({element:p.container,message:t})}}if(this.loadMutex&&l.push(this.loadMutex),!l.length||(yield Promise.all(l),c())){if(a.length){const e=s?"append":"prepend";a.forEach(t=>{const{element:s,message:i}=t,n=this.getMonthContainerByTimestamp(this.groupByMonth?i.date:0,h);s.classList.add("search-super-item"),s.dataset.mid=""+i.mid,s.dataset.peerId=""+i.peerId,n.items[e](s),this.selection.isSelecting&&this.selection.toggleElementCheckbox(s,!0)})}this.afterPerforming("inputMessagesFilterEmpty"===h?1:e.length,o)}}))}afterPerforming(e,t){if(t){const s=t.parentElement;if(Array.from(s.children).slice(1).forEach(e=>{e.remove()}),!e&&!t.childElementCount){const e=document.createElement("div");e.innerText="Nothing interesting here yet...",e.classList.add("position-center","text-center","content-empty","no-select"),s.append(e)}}}loadChats(){const e=new Set,t=this.middleware.get();for(let e in this.searchGroups){const t=this.searchGroups[e];this.tabs.inputMessagesFilterEmpty.append(t.container),t.clear()}const s=this.searchContext.query;if(s){const r=(t,i,r=!1)=>{t.forEach(t=>{if(e.has(t))return;e.add(t);const l=o.a.getPeer(t),{dom:c}=Do.addDialogNew({dialog:t,container:i.list,drawStatus:!1,avatarSize:48,autonomous:i.autonomous});if(r&&(l.participants_count||l.participants)){const e=new RegExp(`(${Object(X.e)(s)}|${Object(X.e)(Object(ps.b)(s))})`,"gi");c.titleSpan.innerHTML=c.titleSpan.innerHTML.replace(e,"$1"),c.lastMessageSpan.append(n.default.getChatMembersString(-t))}else if(t===a.default.myId)c.lastMessageSpan.append(Object(A.i18n)("Presence.YourChat"));else{let e=o.a.getPeerUsername(t);if(e)e="@"+e;else{const s=T.a.getUser(t);s&&s.phone&&(e="+"+Object(Fs.a)(s.phone).formatted)}c.lastMessageSpan.innerHTML=""+e+""}}),i.toggle()},l=e=>{if(t())return e};return Promise.all([T.a.getContacts(s,!0).then(l).then(e=>{e&&r(e,this.searchGroups.contacts,!0)}),T.a.searchContacts(s,20).then(l).then(e=>{if(e&&(r(e.my_results,this.searchGroups.contacts,!0),r(e.results,this.searchGroups.globalContacts),this.searchGroups.globalContacts.nameEl.lastElementChild&&this.searchGroups.globalContacts.nameEl.lastElementChild.remove(),this.searchGroups.globalContacts.container.classList.add("is-short"),this.searchGroups.globalContacts.list.childElementCount>3)){const e=document.createElement("div");e.classList.add("search-group__show-more"),e.innerText="Show more",this.searchGroups.globalContacts.nameEl.append(e),e.addEventListener("click",()=>{const t=this.searchGroups.globalContacts.container.classList.toggle("is-short");e.innerText=t?"Show more":"Show less"})}}),i.a.getConversations(s,0,20,0).promise.then(l).then(e=>{e&&r(e.dialogs.map(e=>e.peerId),this.searchGroups.contacts,!0)})])}if(this.searchContext.peerId||this.searchContext.minDate)return Promise.resolve();{const e=(e=!0)=>k.default.getState().then(s=>{t()&&(this.searchGroups.recent.list.innerHTML="",s.recentSearch.slice(0,20).forEach(e=>{let{dialog:t,dom:s}=Do.addDialogNew({dialog:e,container:this.searchGroups.recent.list,drawStatus:!1,meAsSaved:!0,avatarSize:48,autonomous:!0});s.lastMessageSpan.append(e>0?T.a.getUserStatusString(e):n.default.getChatMembersString(-e))}),s.recentSearch.length?e&&this.searchGroups.recent.setActive():this.searchGroups.recent.clear())});return Promise.all([T.a.getTopPeers("correspondents").then(e=>{if(!t())return;const s=e.findIndex(e=>e.id===a.default.myId);-1!==s&&(e=e.slice()).splice(s,1),e.length&&e.forEach(e=>{Do.addDialogNew({dialog:e.id,container:this.searchGroups.people.list,drawStatus:!1,onlyFirstName:!0,avatarSize:54,autonomous:!1})}),this.searchGroups.people.setActive()}),e()])}}loadMembers(e){const t=-this.searchContext.peerId,s=this.middleware.get();let i;const a=t=>qs(this,void 0,void 0,(function*(){this.loadMutex&&(yield this.loadMutex,!s())||(this.membersList||(this.membersList=new Os({lazyLoadQueue:this.lazyLoadQueue,rippleEnabled:!1}),this.membersList.list.addEventListener("click",e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=+t.dataset.peerId;let i=Promise.resolve();v.b.isMobile&&(i=$t.toggleSidebar(!1)),i.then(()=>{mo.setInnerPeer(s)})}),e.contentTab.append(this.membersList.list),this.afterPerforming(1,e.contentTab)),t.forEach(e=>{const t=G.a.getParticipantPeerId(e);if(t<0)return;T.a.getUser(t).pFlags.deleted||this.membersList.add(t)}))}));if(G.a.isChannel(t)){const o=this.membersList?200:50;i=n.default.getChannelParticipants(t,void 0,o,this.nextRates[e.inputFilter]).then(t=>{if(!s())return;let i=e.contentTab.firstElementChild;return this.nextRates[e.inputFilter]=(i?i.childElementCount:0)+t.participants.length,t.participants.length{if(!s())return;this.loaded[e.inputFilter]=!0;const i=t.participants;return"chatParticipantsForbidden"!==i._?a(i.participants):void 0});return this.loadPromises[e.inputFilter]=i.finally(()=>{s()&&(this.loadPromises[e.inputFilter]=null)})}loadType(e,t,s,n){var a,o;const r=e.inputFilter;if(this.loadPromises[r])return this.loadPromises[r];if("members"===e.type)return this.loadMembers(e);const l=null!==(a=this.historyStorage[r])&&void 0!==a?a:this.historyStorage[r]=[];if(!("inputMessagesFilterEmpty"!==r||l.length||(this.loadedChats||(this.loadChats(),this.loadedChats=!0),this.searchContext.query.trim()||this.searchContext.peerId||this.searchContext.minDate)))return this.loaded[r]=!0,Promise.resolve();const c="load ["+r+"]: ";if(l.length&&this.usedFromHistory[r]i.a.getMessageByPeer(e.peerId,e.mid)),r))}while(a{setTimeout(()=>{this.scrollable.checkForTriggers()},0)})}let d=l.length?l[l.length-1].mid:0;return this.loadPromises[r]=i.a.getSearch(Object.assign(Object.assign({},this.searchContext),{inputFilter:{_:r},maxId:d,limit:s,nextRate:null!==(o=this.nextRates[r])&&void 0!==o?o:this.nextRates[r]=0})).then(i=>{if(l.push(...i.history.map(e=>({mid:e.mid,peerId:e.peerId}))),this.log(c+"search house of glass",r,i),n())return(i.history.length{setTimeout(()=>{if(n()&&this.mediaTab===e){const e=this.load(!0,!0);e&&e.then(()=>{n()&&setTimeout(()=>{this.scrollable.checkForTriggers()},0)})}},0)}),this.performSearchResult(this.filterMessagesByType(i.history,r),e))}).catch(e=>{this.log.error("load error:",e)}).finally(()=>{this.loadPromises[r]=null})}load(e=!1,t=!1){return qs(this,void 0,void 0,(function*(){const s=this.searchContext.peerId;this.log("load",e,s,this.loadPromises);const n=this.middleware.get();if(this.firstLoad){if(this.hideEmptyTabs){const e=this.mediaTabs.filter(e=>"inputMessagesFilterEmpty"!==e.inputFilter),t=e.map(e=>({_:e.inputFilter})),a=yield i.a.getSearchCounters(s,t);if(!n())return;if(this.loadMutex&&(yield this.loadMutex,!n()))return;let o,r=0;e.forEach(e=>{const t=a.find(t=>t.filter._===e.inputFilter);e.menuTab.classList.toggle("hide",!t.count),e.menuTab.classList.remove("active"),t.count&&void 0===o&&(o=e),t.count&&++r});const l=this.mediaTabsMap.get("members"),c=this.canViewMembers();l.menuTab.classList.toggle("hide",!c),c&&(o=l),this.container.classList.toggle("hide",!o),this.container.parentElement.classList.toggle("search-empty",!o),o&&(this.skipScroll=!0,this.selectTab(this.mediaTabs.indexOf(o),!1),o.menuTab.classList.add("active"),this.navScrollableContainer.classList.toggle("hide",r<=1))}this.firstLoad=!1}let a=e?[this.mediaTab]:this.mediaTabs.filter(e=>e!==this.mediaTab);if(a=a.filter(e=>{const t=e.inputFilter;return!this.loaded[t]||this.historyStorage[t]&&this.usedFromHistory[t]0&&a.findAndSplice(e=>"members"===e.type),!a.length)return;const o=t?50:Math.round(3*(yt.a.windowH/130|0)*1.25),r=a.map(e=>this.loadType(e,t,o,n));return Promise.all(r).catch(e=>{this.log.error("Load error all promises:",e)})}))}getMonthContainerByTimestamp(e,t){var s;const i=new Date(1e3*e);i.setHours(0,0,0),i.setDate(1);const n=i.getTime(),a=null!==(s=this.monthContainers[t])&&void 0!==s?s:this.monthContainers[t]={};if(!(n in a)){const e=document.createElement("div");e.className="search-super-month";const s=document.createElement("div");s.classList.add("search-super-month-name");const o={month:"long"};i.getFullYear()!==(new Date).getFullYear()&&(o.year="numeric");const r=new A.default.IntlDateElement({date:i,options:o}).element;s.append(r),e.append(s);const l=document.createElement("div");l.classList.add("search-super-month-items"),e.append(s,l);const c=Object(L.e)(a,"desc");let d=0;for(;dc[d])break}a[n]={container:e,items:l},Ps(e,this.tabs[t],d)}return a[n]}canViewMembers(){return this.searchContext.peerId<0&&!G.a.isBroadcast(-this.searchContext.peerId)&&G.a.hasRights(-this.searchContext.peerId,"view_participants")}cleanup(){this.loadPromises={},this.loaded={},this.loadedChats=!1,this.nextRates={},this.firstLoad=!0,this.lazyLoadQueue.clear(),this.mediaTabs.forEach(e=>{this.usedFromHistory[e.inputFilter]=-1}),this.selection.isSelecting&&this.selection.cancelSelection(),this.middleware.clean(),this.cleanScrollPositions(),this.membersList=void 0}cleanScrollPositions(){this.mediaTabs.forEach(e=>{e.scroll=void 0})}cleanupHTML(e=!1){this.urlsToRevoke.length&&(this.urlsToRevoke.forEach(e=>{URL.revokeObjectURL(e)}),this.urlsToRevoke.length=0),this.mediaTabs.forEach(e=>{if(e.contentTab.innerHTML="",this.hideEmptyTabs&&(this.container.classList.add("hide"),this.container.parentElement.classList.add("search-empty")),"chats"!==e.type&&!this.historyStorage[e.inputFilter]){const t=e.contentTab.parentElement;t.querySelector(".preloader")||Object(se.f)(t,!0);const s=t.querySelector(".content-empty");s&&s.remove()}}),this.monthContainers={},this.searchGroupMedia.clear(),this.scrollable.scrollTop=0}copySearchContext(e){const t=Object(L.a)(this.searchContext);return t.inputFilter={_:e},t.nextRate=this.nextRates[e],t}setQuery({peerId:e,query:t,threadId:s,historyStorage:i,folderId:n,minDate:a,maxDate:o}){this.searchContext={peerId:e||0,query:t||"",inputFilter:{_:this.mediaTab.inputFilter},threadId:s,folderId:n,minDate:a,maxDate:o},this.historyStorage=null!=i?i:{},this.cleanup()}}var Ys,Xs=s(69);!function(e){e[e.Everybody=2]="Everybody",e[e.Contacts=1]="Contacts",e[e.Nobody=0]="Nobody"}(Ys||(Ys={}));const Js=new class{constructor(){this.privacy={},a.default.addMultipleEventsListeners({updatePrivacy:e=>{const t=e.key._;this.privacy[t]=e.rules,a.default.dispatchEvent("privacy_update",e)}})}setPrivacy(e,t){return rt.a.invokeApi("account.setPrivacy",{key:{_:e},rules:t}).then(s=>(T.a.saveApiUsers(s.users),G.a.saveApiChats(s.chats),Xs.a.processLocalUpdate({_:"updatePrivacy",key:{_:Object(X.b)(e)},rules:t.map(e=>{const t={};return Object.assign(t,e),t._=Object(X.b)(t._),t})}),s.rules))}getPrivacy(e){const t=Object(X.b)(e),s=this.privacy[t];return s?Promise.resolve(s):this.privacy[t]=rt.a.invokeApi("account.getPrivacy",{key:{_:e}}).then(e=>(T.a.saveApiUsers(e.users),G.a.saveApiChats(e.chats),this.privacy[t]=e.rules))}getPrivacyRulesDetails(e){const t=[];let s={users:[],chats:[]},i={users:[],chats:[]};return e.forEach(e=>{switch(e._){case"privacyValueAllowAll":t.push(2);break;case"privacyValueDisallowAll":t.push(0);break;case"privacyValueAllowContacts":t.push(1);break;case"privacyValueAllowChatParticipants":s.chats.push(...e.chats);break;case"privacyValueAllowUsers":s.users.push(...e.users);break;case"privacyValueDisallowChatParticipants":i.chats.push(...e.chats);break;case"privacyValueDisallowUsers":i.users.push(...e.users)}}),{type:t[0],disallowPeers:i,allowPeers:s}}};de.a.appPrivacyManager=Js;var Zs=Js;class ei{constructor(e){this.options=e,this.onRadioChange=e=>{e=+e,this.type=e;const t=this.options.captions[this.type],s=this.radioSection.caption;t?Object(A._i18n)(s,t):s.innerHTML="",s.classList.toggle("hide",!t),this.exceptions&&(this.exceptions.get("allow").row.container.classList.toggle("hide",this.type===Ys.Everybody),this.exceptions.get("disallow").row.container.classList.toggle("hide",this.type===Ys.Nobody)),this.options.onRadioChange&&this.options.onRadioChange(e)},e.captions&&e.captions.reverse(),this.radioSection=new nn({name:e.title,caption:!0}),this.radioRows=new Map;let t=[{type:Ys.Everybody,langKey:"PrivacySettingsController.Everbody"},{type:Ys.Contacts,langKey:"PrivacySettingsController.MyContacts"},{type:Ys.Nobody,langKey:"PrivacySettingsController.Nobody"}];e.skipTypes&&(t=t.filter(t=>!e.skipTypes.includes(t.type)));const s=Object(tt.b)();t.forEach(({type:e,langKey:t})=>{const i=new Je({radioField:new st({langKey:t,name:s,value:""+e})});this.radioRows.set(e,i)});const i=Ze([...this.radioRows.values()],this.onRadioChange);if(this.radioSection.content.append(i),e.appendTo&&e.appendTo.append(this.radioSection.container),!e.noExceptions){const t=an(e.appendTo,"PrivacyExceptions","PrivacySettingsController.PeerInfo");this.exceptions=new Map([["disallow",{titleLangKey:e.exceptionTexts[0],key:"disallow",row:null,icon:"deleteuser",subtitleLangKey:"PrivacySettingsController.AddUsers",clickable:!0}],["allow",{titleLangKey:e.exceptionTexts[1],key:"allow",row:null,icon:"adduser",subtitleLangKey:"PrivacySettingsController.AddUsers",clickable:!0}]]),this.exceptions.forEach(s=>{s.row=new Je(s),s.row.container.addEventListener("click",()=>{n.then(()=>{const t=this.peerIds[s.key];new jt(e.tab.slider).open({type:"privacy",skippable:!0,title:s.titleLangKey,placeholder:"PrivacyModal.Search.Placeholder",takeOut:e=>{t.length=0,t.push(...e),s.row.subtitle.innerHTML="",s.row.subtitle.append(...this.generateStr(this.splitPeersByType(e)))},selectedPeerIds:t})})}),t.append(s.row.container)})}const n=Zs.getPrivacy(e.inputKey).then(t=>{const s=Zs.getPrivacyRulesDetails(t);this.setRadio(s.type),this.exceptions&&(this.peerIds={},["allow","disallow"].forEach(e=>{const t=[],i="allow"===e?s.allowPeers:s.disallowPeers;t.push(...i.users),t.push(...i.chats.map(e=>-e)),this.peerIds[e]=t;const n=this.exceptions.get(e).row.subtitle;n.innerHTML="",n.append(...this.generateStr(i))})),e.tab.eventListener.addEventListener("destroy",()=>{const t=[];switch(this.type){case Ys.Everybody:t.push({_:"inputPrivacyValueAllowAll"});break;case Ys.Contacts:t.push({_:"inputPrivacyValueAllowContacts"});break;case Ys.Nobody:t.push({_:"inputPrivacyValueDisallowAll"})}this.exceptions&&[["allow","inputPrivacyValueAllowChatParticipants","inputPrivacyValueAllowUsers"],["disallow","inputPrivacyValueDisallowChatParticipants","inputPrivacyValueDisallowUsers"]].forEach(([e,s,i],n)=>{if(this.exceptions.get(e).row.container.classList.contains("hide"))return;const a=this.peerIds[e];if(a){const e=this.splitPeersByType(a);e.chats.length&&t.push({_:s,chats:e.chats.map(e=>-e)}),e.users.length&&t.push({_:i,users:e.users.map(e=>T.a.getUserInput(e))})}}),Zs.setPrivacy(e.inputKey,t)},{once:!0})})}setRadio(e){const t=this.radioRows.get(e);this.onRadioChange(e),t.radioField.input.checked=!0}splitPeersByType(e){const t={users:[],chats:[]};return e.forEach(e=>{t[e<0?"chats":"users"].push(e<0?-e:e)}),t}generateStr(e){return e.users.length||e.chats.length?Object(A.join)([e.users.length?Object(A.i18n)("Users",[e.users.length]):null,e.chats.length?Object(A.i18n)("Chats",[e.chats.length]):null].filter(Boolean),!1):[Object(A.i18n)("PrivacySettingsController.AddUsers")]}}class ti extends W{init(){this.container.classList.add("privacy-tab","privacy-phone-number"),this.setTitle("PrivacyPhone");const e=new ei({tab:this,title:"PrivacyPhoneTitle",inputKey:"inputPrivacyKeyPhoneNumber",captions:["PrivacyPhoneInfo","PrivacyPhoneInfo",""],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable,onRadioChange:e=>{t.setRadio(Ys.Everybody),t.radioSection.container.classList.toggle("hide",e!==Ys.Nobody)}}),t=new ei({tab:this,title:"PrivacyPhoneTitle2",inputKey:"inputPrivacyKeyAddedByPhone",captions:["PrivacyPhoneInfo3","PrivacyPhoneInfo3",""],noExceptions:!0,skipTypes:[Ys.Nobody]});this.scrollable.container.insertBefore(t.radioSection.container,e.radioSection.container.nextSibling)}}var si=s(74);class ii extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-set"),this.setTitle("TwoStepVerificationPasswordSet");const e=new nn({caption:"TwoStepVerificationPasswordSetInfo",noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("🥳"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!0,play:!0,width:160,height:160}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=Object(U.a)("btn-primary btn-color-primary",{text:"TwoStepVerificationPasswordReturnSettings"});Object(l.b)(a,e=>{this.close()}),this.slider.sliceTabsUntilTab($i,this),n.append(a),i.append(n),this.scrollable.container.append(e.container)}}var ni=s(105);function ai(e){return!h.IS_MOBILE_SAFARI||!e}class oi extends V{constructor(){super(...arguments),this.isFirst=!1}init(){this.container.classList.add("two-step-verification","two-step-verification-email-confirmation"),this.setTitle("TwoStepAuth.RecoveryTitle");const e=new nn({caption:!0,noDelimiter:!0});Object(A._i18n)(e.caption,"TwoStepAuth.ConfirmEmailCodeDesc",[this.email]);const t=hs.getAnimatedEmojiSticker("📬"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"📬"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=this.codeInputField=new ni.a({name:"recovery-email-code",label:"TwoStepAuth.RecoveryCode",length:this.length,onFill:e=>{d(!0),si.a.confirmPasswordEmail(""+e).then(e=>{c()}).catch(e=>{switch(e.type){case"CODE_INVALID":a.input.classList.add("error"),Object(x.a)(a.label,Object(A.i18n)("TwoStepAuth.RecoveryCodeInvalid"));break;case"EMAIL_HASH_EXPIRED":a.input.classList.add("error"),Object(x.a)(a.label,Object(A.i18n)("TwoStepAuth.RecoveryCodeExpired"));break;default:console.error("confirm error",e)}d(!1)})}}),o=Object(U.a)("btn-primary btn-primary-transparent primary",{text:"TwoStepAuth.EmailCodeChangeEmail"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"ResendCode"}),c=()=>{new ii(this.slider).open()},d=e=>{Object(ut.a)([a.input,o,r],e)};Object(l.b)(o,e=>{d(!0),si.a.cancelPasswordEmail().then(e=>{this.slider.sliceTabsUntilTab(ri,this),this.close()},()=>{d(!1)})}),Object(l.b)(r,e=>{d(!0);const t=Object(se.f)(r);si.a.resendPasswordEmail().then(e=>{t.remove(),d(!1)})}),n.append(a.container,o,r),i.append(n),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){ai(this.isFirst)&&this.codeInputField.input.focus()}}class ri extends V{constructor(){super(...arguments),this.isFirst=!1}init(){this.container.classList.add("two-step-verification","two-step-verification-email"),this.setTitle("RecoveryEmailTitle");const e=new nn({caption:!0,noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("💌"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"💌"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement(),n=document.createElement("div");n.classList.add("input-wrapper");const a=this.inputField=new F.b({name:"recovery-email",label:"RecoveryEmail",plainText:!0});a.input.addEventListener("keypress",e=>{if("Enter"===e.key)return Object(c.a)(e),h()}),a.input.addEventListener("input",e=>{a.input.classList.remove("error")});const o=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"YourEmailSkip"}),d=()=>{new ii(this.slider).open()},h=()=>{const e=a.value.trim(),t=Z.b.matchEmail(e);if(!t||t[0].length!==e.length)return void a.input.classList.add("error");u(!0);const s=Object(se.f)(o);si.a.updateSettings({hint:this.hint,currentPassword:this.plainPassword,newPassword:this.newPassword,email:e}).then(e=>{d()},t=>{if(t.type.includes("EMAIL_UNCONFIRMED")){const s=+t.type.match(/^EMAIL_UNCONFIRMED_(\d+)/)[1],i=new oi(this.slider);i.state=this.state,i.email=e,i.length=s,i.open()}else console.log("password set error",t);u(!1),s.remove()})};Object(l.b)(o,h);const u=e=>{e?(o.setAttribute("disabled","true"),r.setAttribute("disabled","true")):(o.removeAttribute("disabled"),r.removeAttribute("disabled"))};Object(l.b)(r,e=>{new ht("popup-skip-email",{buttons:[{langKey:"Cancel",isCancel:!0},{langKey:"YourEmailSkip",callback:()=>{u(!0),Object(se.f)(r),si.a.updateSettings({hint:this.hint,currentPassword:this.plainPassword,newPassword:this.newPassword,email:""}).then(()=>{d()},e=>{u(!1)})},isDanger:!0}],titleLangKey:"YourEmailSkipWarning",descriptionLangKey:"YourEmailSkipWarningText"}).show()}),n.append(a.container,o,r),i.append(n),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){ai(this.isFirst)&&this.inputField.input.focus()}}var li=s(96),ci=s(90),di=s(104);class hi extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-hint"),this.setTitle("TwoStepAuth.SetupHintTitle");const e=new nn({noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("💡"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:160,height:160,emoji:"💡"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=document.createElement("div");i.classList.add("input-wrapper");const n=this.inputField=new F.b({name:"hint",label:"TwoStepAuth.SetupHintPlaceholder"});n.input.addEventListener("keypress",e=>{if("Enter"===e.key)return Object(c.a)(e),n.value?d():h()});const a=(e,t)=>{e&&Object(c.a)(e);const s=t?n.value:void 0;if(s&&this.newPassword===s)return void nt(A.default.format("PasswordAsHintError",!0));const i=new ri(this.slider);i.state=this.state,i.plainPassword=this.plainPassword,i.newPassword=this.newPassword,i.hint=s,i.open()},o=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"}),r=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"YourEmailSkip"}),d=e=>a(e,!0),h=e=>a(e,!1);Object(l.b)(o,d),Object(l.b)(r,h),i.append(n.container,o,r),e.content.append(i),this.scrollable.container.append(e.container)}onOpenAfterTimeout(){this.inputField.input.focus()}}class ui extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-enter-password","two-step-verification-re-enter-password"),this.setTitle("PleaseReEnterPassword");const e=new nn({noDelimiter:!0}),t=document.createElement("div");t.classList.add("input-wrapper");const s=this.passwordInputField=new ci.a({name:"re-enter-password",label:"PleaseReEnterPassword"}),i=new di.a(s,157),n=Object(U.a)("btn-primary btn-color-primary",{text:"Continue"});t.append(s.container,n),e.content.append(i.container,t),this.scrollable.container.append(e.container),s.input.addEventListener("keypress",e=>{if(s.input.classList.contains("error")&&s.setState(F.a.Neutral),"Enter"===e.key)return o()});const a=()=>this.newPassword===s.value||(s.setError(),!1),o=e=>{if(e&&Object(c.a)(e),!a())return;const t=new hi(this.slider);t.state=this.state,t.plainPassword=this.plainPassword,t.newPassword=this.newPassword,t.open()};return Object(l.b)(n,o),i.load()}onOpenAfterTimeout(){this.passwordInputField.input.focus()}}class pi extends V{constructor(){super(...arguments),this.isFirst=!0}init(){const e=!this.state.pFlags.has_password||this.plainPassword;this.container.classList.add("two-step-verification","two-step-verification-enter-password"),this.setTitle(e?"PleaseEnterFirstPassword":"PleaseEnterCurrentPassword");const t=new nn({noDelimiter:!0}),s=document.createElement("div");s.classList.add("input-wrapper");const i=this.passwordInputField=new ci.a({name:"enter-password",label:e?"PleaseEnterFirstPassword":this.state.hint?void 0:"LoginPassword",labelText:!e&&this.state.hint?Z.b.wrapEmojiText(this.state.hint):void 0}),n=new li.a(i,157),a=Object(U.a)("btn-primary btn-color-primary"),o=new A.default.IntlElement({key:"Continue"});a.append(o.element),s.append(i.container,a),t.content.append(n.container,s),this.scrollable.container.append(t.container),i.input.addEventListener("keypress",e=>{if(i.input.classList.contains("error")&&(i.input.classList.remove("error"),o.key="Continue",o.update()),"Enter"===e.key)return d()});const r=()=>!!i.value.length||(i.input.classList.add("error"),!1);let d;if(e)d=e=>{if(e&&Object(c.a)(e),!r())return;const t=new ui(this.slider);t.state=this.state,t.newPassword=i.value,t.plainPassword=this.plainPassword,t.open()};else{let e,t=()=>(e||(e=window.setInterval(t,1e4)),si.a.getState().then(e=>{this.state=e,this.state.hint?i.label.innerHTML=Z.b.wrapEmojiText(this.state.hint):Object(x.a)(i.label,Object(A.i18n)("LoginPassword"))}));d=s=>{if(!r())return void Object(c.a)(s);a.setAttribute("disabled","true"),o.key="PleaseWait",o.update();const l=Object(se.f)(a),d=i.value;si.a.check(i.value,this.state).then(t=>{if(console.log(t),"auth.authorization"===t._){clearInterval(e),n&&n.remove();const t=new mi(this.slider);t.state=this.state,t.plainPassword=d,t.open(),this.slider.removeTabFromHistory(this)}},e=>{a.removeAttribute("disabled"),i.input.classList.add("error"),e.type,o.key="TwoStepAuth.InvalidPassword",o.update(),l.remove(),i.select(),t()})},t()}return Object(l.b)(a,d),n.load()}onOpenAfterTimeout(){ai(this.isFirst)&&this.passwordInputField.input.focus()}}class mi extends V{init(){this.container.classList.add("two-step-verification","two-step-verification-main"),this.setTitle("TwoStepVerificationTitle");const e=new nn({caption:!0,noDelimiter:!0}),t=hs.getAnimatedEmojiSticker("🔐"),s=document.createElement("div");t?Ls({doc:t,div:s,loop:!1,play:!0,width:168,height:168,emoji:"🔐"}).then(()=>{}):s.classList.add("media-sticker-wrapper"),e.content.append(s);const i=e.generateContentElement();if(this.state.pFlags.has_password){Object(A._i18n)(e.caption,"TwoStepAuth.GenericHelp");const t=Object(U.a)("btn-primary btn-transparent",{icon:"edit",text:"TwoStepAuth.ChangePassword"}),s=Object(U.a)("btn-primary btn-transparent",{icon:"passwordoff",text:"TwoStepAuth.RemovePassword"}),n=Object(U.a)("btn-primary btn-transparent",{icon:"email",text:this.state.pFlags.has_recovery?"TwoStepAuth.ChangeEmail":"TwoStepAuth.SetupEmail"});Object(l.b)(t,()=>{const e=new pi(this.slider);e.state=this.state,e.plainPassword=this.plainPassword,e.open()}),Object(l.b)(s,()=>{new ht("popup-disable-password",{buttons:[{langKey:"Disable",callback:()=>{si.a.updateSettings({currentPassword:this.plainPassword}).then(()=>{this.slider.sliceTabsUntilTab($i,this),this.close()})},isDanger:!0}],titleLangKey:"TurnPasswordOffQuestionTitle",descriptionLangKey:"TurnPasswordOffQuestion"}).show()}),Object(l.b)(n,()=>{const e=new ri(this.slider);e.state=this.state,e.hint=this.state.hint,e.plainPassword=this.plainPassword,e.newPassword=this.plainPassword,e.isFirst=!0,e.open()}),i.append(t,s,n)}else{Object(A._i18n)(e.caption,"TwoStepAuth.SetPasswordHelp");const t=document.createElement("div");t.classList.add("input-wrapper");const s=Object(U.a)("btn-primary btn-color-primary",{text:"TwoStepVerificationSetPassword"});t.append(s),i.append(t),Object(l.b)(s,e=>{const t=new pi(this.slider);t.state=this.state,t.open()})}this.scrollable.container.append(e.container)}}class gi extends W{init(){this.container.classList.add("privacy-tab","privacy-last-seen"),this.setTitle("PrivacyLastSeen");const e="PrivacySettingsController.LastSeenDescription";new ei({tab:this,title:"LastSeenTitle",inputKey:"inputPrivacyKeyStatusTimestamp",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable})}}class bi extends W{init(){this.container.classList.add("privacy-tab","privacy-profile-photo"),this.setTitle("PrivacyProfilePhoto");const e="PrivacySettingsController.ProfilePhoto.CustomHelp";new ei({tab:this,title:"PrivacyProfilePhotoTitle",inputKey:"inputPrivacyKeyProfilePhoto",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverShare","PrivacySettingsController.AlwaysShare"],appendTo:this.scrollable,skipTypes:[Ys.Nobody]})}}class vi extends W{init(){this.container.classList.add("privacy-tab","privacy-forward-messages"),this.setTitle("PrivacySettings.Forwards");const e="PrivacySettingsController.Forwards.CustomHelp";new ei({tab:this,title:"PrivacyForwardsTitle",inputKey:"inputPrivacyKeyForwards",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable})}}class fi extends W{init(){this.container.classList.add("privacy-tab","privacy-add-to-groups"),this.setTitle("PrivacySettings.Groups");const e="PrivacySettingsController.GroupDescription";new ei({tab:this,title:"WhoCanAddMe",inputKey:"inputPrivacyKeyChatInvite",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable,skipTypes:[Ys.Nobody]})}}class yi extends W{init(){this.container.classList.add("privacy-tab","privacy-calls"),this.setTitle("PrivacySettings.VoiceCalls");const e="PrivacySettingsController.PhoneCallDescription";new ei({tab:this,title:"WhoCanCallMe",inputKey:"inputPrivacyKeyPhoneCall",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable});{const e="PrivacySettingsController.P2p.Desc";new ei({tab:this,title:"PrivacyP2PHeader",inputKey:"inputPrivacyKeyPhoneP2P",captions:[e,e,e],exceptionTexts:["PrivacySettingsController.NeverAllow","PrivacySettingsController.AlwaysAllow"],appendTo:this.scrollable})}}}class wi extends V{init(){this.container.classList.add("active-sessions-container"),this.setTitle("SessionsTitle");const e=e=>{const t=new Je({title:[e.app_name,e.app_version].join(" "),subtitle:[e.ip,e.country].join(" - "),clickable:!0,titleRight:e.pFlags.current?void 0:Object(re.b)(new Date(1e3*Math.max(e.date_active,e.date_created)))});t.container.dataset.hash=e.hash;const s=document.createElement("div");return s.classList.add("row-midtitle"),s.innerHTML=[e.device_model,e.system_version||e.platform].filter(Boolean).join(", "),t.subtitle.parentElement.insertBefore(s,t.subtitle),t},t=this.authorizations.slice();{const n=new nn({name:"CurrentSession"}),a=t.findAndSplice(e=>e.pFlags.current),o=e(a);if(n.content.append(o.container),t.length){const e=Object(U.a)("btn-primary btn-transparent danger",{icon:"stop",text:"TerminateAllSessions"});Object(l.b)(e,t=>{new ht("revoke-session",{buttons:[{langKey:"Terminate",isDanger:!0,callback:()=>{const t=Object(ut.a)([e],!0);rt.a.invokeApi("auth.resetAuthorizations").then(t=>{e.remove(),s.container.remove(),this.privacyTab.updateActiveSessions()},i).finally(()=>{t()})}}],titleLangKey:"AreYouSureSessionsTitle",descriptionLangKey:"AreYouSureSessions"}).show()}),n.content.append(e)}this.scrollable.append(n.container)}if(!t.length)return;const s=new nn({name:"OtherSessions"});t.forEach(t=>{s.content.append(e(t).container)}),this.scrollable.append(s.container);const i=e=>{"FRESH_RESET_AUTHORISATION_FORBIDDEN"===e.type&&nt(A.default.format("RecentSessions.Error.FreshReset",!0))};let n;const a=()=>{const e=n.dataset.hash;new ht("revoke-session",{buttons:[{langKey:"Terminate",isDanger:!0,callback:()=>{rt.a.invokeApi("account.resetAuthorization",{hash:e}).then(e=>{e&&(n.remove(),this.privacyTab.updateActiveSessions())},i)}}],titleLangKey:"AreYouSureSessionTitle",descriptionLangKey:"TerminateSessionText"}).show()},o=this.menuElement=Ee([{icon:"stop",text:"Terminate",onClick:a}]);o.id="active-sessions-contextmenu",o.classList.add("contextmenu"),document.getElementById("page-chats").append(o),Object(se.a)(this.scrollable.container,e=>{n=Object(Ce.a)(e.target,"row"),n&&"0"!==n.dataset.hash&&(e instanceof MouseEvent&&e.preventDefault(),e instanceof MouseEvent&&(e.cancelBubble=!0),Object(se.e)(e,o),Object(se.d)(o))}),Object(l.b)(this.scrollable.container,e=>{n=Object(Ce.a)(e.target,"row"),n&&"0"!==n.dataset.hash&&a()})}onCloseAfterTimeout(){return this.menuElement&&this.menuElement.remove(),super.onCloseAfterTimeout()}}class Li extends V{init(){this.container.classList.add("blocked-users-container"),this.setTitle("BlockedUsers");{const e=new nn({caption:"BlockedUsersInfo"});this.scrollable.append(e.container)}const e=$({icon:"add",className:"is-visible"});this.content.append(e),Object(l.b)(e,e=>{new It({peerTypes:["contacts"],placeholder:"BlockModal.Search.Placeholder",onSelect:e=>{T.a.toggleBlock(e,!0)}})},{listenerSetter:this.listenerSetter});const t=Do.createChatList();this.scrollable.container.classList.add("chatlist-container"),this.scrollable.append(t);const s=(e,s)=>{const{dom:i}=Do.addDialogNew({dialog:e,container:t,drawStatus:!1,rippleEnabled:!0,avatarSize:48,append:s}),n=T.a.getUser(e);n.pFlags.bot?i.lastMessageSpan.append("@"+n.username):n.phone?i.lastMessageSpan.innerHTML=T.a.formatUserPhone(n.phone):i.lastMessageSpan.append(n.username?"@"+n.username:T.a.getUserStatusString(e))};for(const e of this.peerIds)s(e,!0);let i;const n=this.menuElement=Ee([{icon:"lockoff",text:"Unblock",onClick:()=>{const e=+i.dataset.peerId;T.a.toggleBlock(e,!1)},options:{listenerSetter:this.listenerSetter}}]);n.id="blocked-users-contextmenu",n.classList.add("contextmenu"),document.getElementById("page-chats").append(n),Object(se.a)(this.scrollable.container,e=>{i=Object(mt.a)(e.target,"LI"),i&&(e instanceof MouseEvent&&e.preventDefault(),e instanceof MouseEvent&&(e.cancelBubble=!0),Object(se.e)(e,n),Object(se.d)(n))},this.listenerSetter),this.listenerSetter.add(a.default)("peer_block",e=>{const{peerId:i,blocked:n}=e,a=t.querySelector(`[data-peer-id="${i}"]`);n?a||s(i,!1):a&&a.remove()});let o=!1;this.scrollable.onScrolledBottom=()=>{o||(o=!0,T.a.getBlocked(t.childElementCount,50).then(e=>{for(const t of e.peerIds)s(t,!0);(e.peerIds.length<50||t.childElementCount===e.count)&&(this.scrollable.onScrolledBottom=null),this.scrollable.checkForTriggers()}).finally(()=>{o=!1}))}}onOpenAfterTimeout(){this.scrollable.onScroll()}onCloseAfterTimeout(){return this.menuElement&&this.menuElement.remove(),super.onCloseAfterTimeout()}}var Si=s(109);class Ei extends W{init(){this.container.classList.add("dont-u-dare-block-me"),this.setTitle("PrivacySettings");{const e=new nn({noDelimiter:!0});let t;const s=new Je({icon:"deleteuser",titleLangKey:"BlockedUsers",subtitleLangKey:"Loading",clickable:()=>{const e=new Li(this.slider);e.peerIds=t,e.open()}});let i;s.freezed=!0;const n=new Je({icon:"lock",titleLangKey:"TwoStepVerification",subtitleLangKey:"Loading",clickable:e=>{let t;i.pFlags.has_password?t=new pi(this.slider):i.email_unconfirmed_pattern?(t=new oi(this.slider),t.email=i.email_unconfirmed_pattern,t.length=6,t.isFirst=!0,si.a.resendPasswordEmail()):t=new mi(this.slider),t.state=i,t.open()}});n.freezed=!0;const o=this.activeSessionsRow=new Je({icon:"activesessions",titleLangKey:"SessionsTitle",subtitleLangKey:"Loading",clickable:()=>{const e=new wi(this.slider);e.privacyTab=this,e.authorizations=this.authorizations,e.open()}});o.freezed=!0,e.content.append(s.container,n.container,o.container),this.scrollable.append(e.container);const r=e=>{e?Object(x.a)(s.subtitle,Object(A.i18n)("PrivacySettingsController.UserCount",[e])):Object(x.a)(s.subtitle,Object(A.i18n)("BlockedEmpty",[e]))};this.listenerSetter.add(a.default)("peer_block",()=>{l()});const l=()=>{T.a.getBlocked().then(e=>{s.freezed=!1,r(e.count),t=e.peerIds})};l(),si.a.getState().then(e=>{i=e,Object(x.a)(n.subtitle,Object(A.i18n)(e.pFlags.has_password?"PrivacyAndSecurity.Item.On":"PrivacyAndSecurity.Item.Off")),n.freezed=!1}),this.updateActiveSessions()}{const e=new nn({name:"PrivacyTitle"});e.content.classList.add("privacy-navigation-container");const t={},s=t.inputPrivacyKeyPhoneNumber=new Je({titleLangKey:"PrivacyPhoneTitle",subtitleLangKey:"Loading",clickable:()=>{new ti(this.slider).open()}}),i=t.inputPrivacyKeyStatusTimestamp=new Je({titleLangKey:"LastSeenTitle",subtitleLangKey:"Loading",clickable:()=>{new gi(this.slider).open()}}),n=t.inputPrivacyKeyProfilePhoto=new Je({titleLangKey:"PrivacyProfilePhotoTitle",subtitleLangKey:"Loading",clickable:()=>{new bi(this.slider).open()}}),o=t.inputPrivacyKeyPhoneCall=new Je({titleLangKey:"WhoCanCallMe",subtitleLangKey:"Loading",clickable:()=>{new yi(this.slider).open()}}),r=t.inputPrivacyKeyForwards=new Je({titleLangKey:"PrivacyForwardsTitle",subtitleLangKey:"Loading",clickable:()=>{new vi(this.slider).open()}}),l=t.inputPrivacyKeyChatInvite=new Je({titleLangKey:"WhoCanAddMe",subtitleLangKey:"Loading",clickable:()=>{new fi(this.slider).open()}}),c=e=>{const s=t[e];s&&Zs.getPrivacy(e).then(e=>{const t=Zs.getPrivacyRulesDetails(e),i=t.type===Ys.Everybody?"PrivacySettingsController.Everbody":t.type===Ys.Contacts?"PrivacySettingsController.MyContacts":"PrivacySettingsController.Nobody",n=t.disallowPeers.users.length+t.disallowPeers.chats.length,a=t.allowPeers.users.length+t.allowPeers.chats.length;s.subtitle.innerHTML="";const o=Object(A.i18n)(i);s.subtitle.append(o),(n||a)&&s.subtitle.append(` (${[-n,a?"+"+a:0].filter(Boolean).join(", ")})`)})};e.content.append(s.container,i.container,n.container,o.container,r.container,l.container),this.scrollable.append(e.container);for(const e in t)c(e);a.default.addEventListener("privacy_update",e=>{c(Object(X.c)(e.key._))})}const e=[];{const t=new nn({name:"Privacy.SensitiveContent"});t.container.classList.add("hide"),e.push(rt.a.invokeApi("account.getContentSettings").then(e=>{if(!e.pFlags.sensitive_can_change)return;const s=e.pFlags.sensitive_enabled,i=new Je({checkboxField:new dt.a({text:"PrivacyAndSecurity.SensitiveText",checked:s}),subtitleLangKey:"PrivacyAndSecurity.SensitiveDesc",noCheckboxSubtitle:!0});t.content.append(i.container),t.container.classList.remove("hide"),this.eventListener.addEventListener("destroy",()=>{const e=i.checkboxField.checked;e!==s&&rt.a.invokeApi("account.setContentSettings",{sensitive_enabled:e})},{once:!0})})),this.scrollable.append(t.container)}{const e=new nn({name:"FilterChats"}),t=()=>{new ht("popup-delete-drafts",{buttons:[{langKey:"Delete",callback:()=>{const e=Object(ut.a)([s],!0);Si.a.clearAllDrafts().then(()=>{e()})},isDanger:!0}],titleLangKey:"AreYouSureClearDraftsTitle",descriptionLangKey:"AreYouSureClearDrafts"}).show()},s=Object(U.a)("btn-primary btn-transparent",{icon:"delete",text:"PrivacyDeleteCloudDrafts"});this.listenerSetter.add(s)("click",t),e.content.append(s),this.scrollable.append(e.container)}return Promise.all(e)}updateActiveSessions(){rt.a.invokeApi("account.getAuthorizations").then(e=>{this.activeSessionsRow.freezed=!1,this.authorizations=e.authorizations,Object(A._i18n)(this.activeSessionsRow.subtitle,"Privacy.Devices",[this.authorizations.length])})}}function Mi(e,t,s,i=1){e/=255,t/=255,s/=255;const n=Math.max(e,t,s),a=Math.min(e,t,s);let o,r,l=(n+a)/2;if(n===a)o=r=0;else{let i=n-a;switch(r=l>.5?i/(2-n-a):i/(n+a),n){case e:o=(t-s)/i+(t1&&(s-=1),s<1/6?e+6*(t-e)*s:s<.5?t:s<2/3?e+(t-e)*(2/3-s)*6:e},r=s<.5?s*(1+t):s+t-s*t,l=2*s-r;n=i(l,r,e+1/3),a=i(l,r,e),o=i(l,r,e-1/3)}return[Math.round(255*n),Math.round(255*a),Math.round(255*o),Math.round(255*i)]}function Ci(e){const t=[];if(4===e.length)for(let s=1;s("0"+e.toString(16)).slice(-2)).join("")}function Ti(e){return ki(function(e){const t=e.slice(5,-1).split(", "),s=+t.pop(),i=t.map(e=>e.endsWith("%")?+e.slice(0,-1):+e);return Ii(i[0],i[1],i[2],s)}(e))}function Pi(e){let{h:t,s:s,l:i}=Mi(e[0],e[1],e[2]);s>0&&(s=Math.min(100,s+5+.1*(100-s))),i=Math.max(0,.65*i);return`hsla(${t}, ${s}%, ${i}%, .4)`}var xi=s(124);class Ai{constructor(){this.hue=0,this.saturation=100,this.lightness=50,this.alpha=1,this.elements={},this.onGrabStart=()=>{document.documentElement.style.cursor=this.elements.boxDragger.style.cursor="grabbing"},this.onGrabEnd=()=>{document.documentElement.style.cursor=this.elements.boxDragger.style.cursor=""},this.container=document.createElement("div"),this.container.classList.add(Ai.BASE_CLASS);const e=`\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `;this.container.innerHTML=e,this.elements.box=this.container.firstElementChild,this.elements.boxDragger=this.elements.box.lastElementChild,this.elements.saturation=this.elements.box.firstElementChild.firstElementChild,this.elements.sliders=this.elements.box.nextElementSibling,this.elements.hue=this.elements.sliders.firstElementChild,this.elements.hueDragger=this.elements.hue.lastElementChild,this.hexInputField=new F.b({plainText:!0,label:"Appearance.Color.Hex"}),this.rgbInputField=new F.b({plainText:!0,label:"Appearance.Color.RGB"});const t=document.createElement("div");t.className=Ai.BASE_CLASS+"-inputs",t.append(this.hexInputField.container,this.rgbInputField.container),this.container.append(t),this.hexInputField.input.addEventListener("input",()=>{let e=this.hexInputField.value.replace(/#/g,"").slice(0,6);const t=e.match(/([a-fA-F\d]+)/),s=t&&t[0].length===e.length&&[6].includes(e.length);this.hexInputField.setState(s?F.a.Neutral:F.a.Error),e="#"+e,this.hexInputField.setValueSilently(e),s&&this.setColor(e,!1,!0)});const s=/^(?:rgb)?\(?([01]?\d\d?|2[0-4]\d|25[0-5])(?:\W+)([01]?\d\d?|2[0-4]\d|25[0-5])\W+(?:([01]?\d\d?|2[0-4]\d|25[0-5])\)?)$/;this.rgbInputField.input.addEventListener("input",()=>{const e=this.rgbInputField.value.match(s);this.rgbInputField.setState(e?F.a.Neutral:F.a.Error),e&&this.setColor(Mi(+e[1],+e[2],+e[3]),!0,!1)}),this.attachBoxListeners(),this.attachHueListeners()}attachBoxListeners(){we(this.elements.box,()=>{this.onGrabStart(),this.boxRect=this.elements.box.getBoundingClientRect()},e=>{this.saturationHandler(e.x,e.y)},()=>{this.onGrabEnd()})}attachHueListeners(){we(this.elements.hue,()=>{this.onGrabStart(),this.hueRect=this.elements.hue.getBoundingClientRect()},e=>{this.hueHandler(e.x)},()=>{this.onGrabEnd()})}setColor(e,t=!0,s=!0){if(void 0===e)e={h:0,s:100,l:50,a:1};else if("string"==typeof e)if("#"===e[0])e=function(e){const t=Ci(e);return Mi(t[0],t[1],t[2],t[3])}(e);else{const t=e.match(/[.?\d]+/g);e=Mi(+t[0],+t[1],+t[2],void 0===t[3]?1:+t[3])}this.boxRect=this.elements.box.getBoundingClientRect();const i=this.boxRect.width/100*e.s,n=100-e.l/(100-e.s/2)*100,a=this.boxRect.height/100*n;this.saturationHandler(this.boxRect.left+i,this.boxRect.top+a,!1),this.hueRect=this.elements.hue.getBoundingClientRect();const o=e.h/360,r=this.hueRect.left+this.hueRect.width*o;this.hueHandler(r,!1),this.hue=e.h,this.saturation=e.s,this.lightness=e.l,this.alpha=e.a,this.updatePicker(t,s)}getCurrentColor(){const e=Ii(this.hue,this.saturation,this.lightness,this.alpha),t=ki(e),s=t.slice(0,-2);return{hsl:`hsl(${this.hue}, ${this.saturation}%, ${this.lightness}%)`,rgb:`rgb(${e[0]}, ${e[1]}, ${e[2]})`,hex:s,hsla:`hsla(${this.hue}, ${this.saturation}%, ${this.lightness}%, ${this.alpha})`,rgba:`rgba(${e[0]}, ${e[1]}, ${e[2]}, ${e[3]})`,hexa:t,rgbaArray:e}}updatePicker(e=!0,t=!0){const s=this.getCurrentColor();this.elements.boxDragger.setAttributeNS(null,"fill",s.hex),e&&(this.hexInputField.setValueSilently(s.hex),this.hexInputField.setState(F.a.Neutral)),t&&(this.rgbInputField.setValueSilently(s.rgbaArray.slice(0,-1).join(", ")),this.rgbInputField.setState(F.a.Neutral)),this.onChange&&this.onChange(s)}hueHandler(e,t=!0){const s=Object(C.a)(e-this.hueRect.left,0,this.hueRect.width)/this.hueRect.width;this.hue=Math.round(360*s);const i=`hsla(${this.hue}, 100%, 50%, ${this.alpha})`;this.elements.hueDragger.setAttributeNS(null,"x",100*s+"%"),this.elements.hueDragger.setAttributeNS(null,"fill",i),this.elements.saturation.lastElementChild.setAttributeNS(null,"stop-color",i),t&&this.updatePicker()}saturationHandler(e,t,s=!0){const i=this.boxRect.width,n=this.boxRect.height,a=Object(C.a)(e-this.boxRect.left,0,i)/i*100,o=Object(C.a)(t-this.boxRect.top,0,n)/n*100,r=this.elements.boxDragger;r.setAttributeNS(null,"x",a+"%"),r.setAttributeNS(null,"y",o+"%");const l=Object(C.a)(a,0,100),c=100-l/2,d=100-Object(C.a)(o,0,100),h=Object(C.a)(d/100*c,0,100);this.saturation=l,this.lightness=h,s&&this.updatePicker()}}Ai.BASE_CLASS="color-picker";class Oi extends V{constructor(){super(...arguments),this._applyColor=(e,t=!0)=>{if(t)this.colorPicker.setColor(e);else{const t=Ci(e),s=this.theme.background,i=Pi(t);s.color=e.toLowerCase(),s.type="color",s.highlightningColor=i,k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme(void 0,void 0,!0),this.setActive()}},this.onColorChange=e=>{this.applyColor(e.hex,!1)}}init(){this.container.classList.add("background-container","background-color-container"),this.setTitle("SetColor"),this.theme=a.default.getTheme();const e=new nn({});this.colorPicker=new Ai,e.content.append(this.colorPicker.container),this.scrollable.append(e.container);const t=this.grid=document.createElement("div");t.classList.add("grid");["#E6EBEE","#B2CEE1","#008DD0","#C6E7CB","#C4E1A6","#60B16E","#CCD0AF","#A6A997","#7A7072","#FDD7AF","#FDB76E","#DD8851"].forEach(e=>{const s=document.createElement("div");s.classList.add("grid-item"),s.dataset.color=e.toLowerCase();const i=document.createElement("div");i.classList.add("grid-item-media"),i.style.backgroundColor=e,s.append(i),t.append(s)}),Object(l.b)(t,e=>{const t=Object(Ce.a)(e.target,"grid-item");if(!t||t.classList.contains("active"))return;const s=t.dataset.color;s&&this.applyColor(s)},{listenerSetter:this.listenerSetter}),this.scrollable.append(t),this.applyColor=Object(xi.a)(this._applyColor,16,!0)}setActive(){const e=this.grid.querySelector(".active"),t=this.theme.background,s="color"===t.type?this.grid.querySelector(`.grid-item[data-color="${t.color}"]`):null;e!==s&&(e&&e.classList.remove("active"),s&&s.classList.add("active"))}onOpen(){setTimeout(()=>{const e=this.theme.background;"color"===e.type&&(this.colorPicker.onChange=this.onColorChange),this.colorPicker.setColor(e.color||"#cccccc"),"color"!==e.type&&(this.colorPicker.onChange=this.onColorChange)},0)}onCloseAfterTimeout(){return this.colorPicker.onChange=void 0,this.colorPicker=void 0,super.onCloseAfterTimeout()}}let _i=0;class Fi extends V{constructor(){super(...arguments),this.tempId=0,this.clicked=new Set,this.onUploadClick=()=>{Object(me.e)("image/x-png,image/png,image/jpeg").then(e=>{const t="wallpaper-upload-"+ ++_i,s={_:"photoSize",h:0,w:0,location:{},size:e.size,type:"full"};let i={_:"document",access_hash:"",attributes:[],dc_id:0,file_reference:[],id:t,mime_type:e.type,size:e.size,date:Date.now()/1e3,pFlags:{},thumbs:[s],file_name:e.name};i=M.a.saveDoc(i);const n=he.a.getCacheContext(i);n.downloaded=e.size,n.url=URL.createObjectURL(e);let a={_:"wallPaper",access_hash:"",document:i,id:t,slug:t,pFlags:{}};const o=he.a.upload(e,e.name),r=Object(oe.a)();r.addNotifyListener=o.addNotifyListener,r.cancel=o.cancel,o.then(t=>{rt.a.invokeApi("account.uploadWallPaper",{file:t,mime_type:e.type,settings:{_:"wallPaperSettings"}}).then(e=>{const t=e.document,s=he.a.getCacheContext(t);Object.assign(s,n),a=e,a.document=M.a.saveDoc(a.document),c.dataset.docId=a.document.id,c.dataset.slug=a.slug,this.setBackgroundDocument(a.slug,a.document).then(r.resolve,r.reject)},r.reject)},r.reject),r.then(()=>{this.clicked.delete(a.document.id)},e=>{c.remove()});const l=new ye.a({isUpload:!0,cancelable:!0,tryAgainOnFail:!1}),c=this.addWallPaper(a,!1);this.clicked.add(a.document.id),l.attach(c,!1,r)})},this.onResetClick=()=>{const e=k.STATE_INIT.settings.themes.find(e=>e.name===this.theme.name);e&&(++this.tempId,this.theme.background=Object(L.a)(e.background),k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme(void 0,void 0,!0),this.blurCheckboxField.setValueSilently(this.theme.background.blur))},this.onGridClick=e=>{const t=Object(Ce.a)(e.target,"grid-item");if(!t)return;const{docId:s,slug:i}=t.dataset;if(this.clicked.has(s))return;this.clicked.add(s);const n=new ye.a({cancelable:!0,tryAgainOnFail:!1}),a=M.a.getDoc(s),o=()=>{const e=this.setBackgroundDocument(i,a);he.a.getCacheContext(a).url&&!this.theme.background.blur||n.attach(t,!0,e)};n.construct(),Object(l.b)(t,e=>{n.preloader.parentElement?(n.onClick(e),n.detach()):o()},{listenerSetter:this.listenerSetter}),o()},this.saveToCache=(e,t)=>{fetch(t).then(t=>{he.a.cacheStorage.save("backgrounds/"+e,t)})},this.setBackgroundDocument=(e,t)=>{let s=++this.tempId;const i=()=>s===this.tempId,n=M.a.downloadDoc(t,mo.chat.bubbles?mo.chat.bubbles.lazyLoadQueue.queueId:0),o=Object(oe.a)();return o.addNotifyListener=n.addNotifyListener,o.cancel=n.cancel,n.then(()=>{if(!i())return void o.resolve();const s=this.theme.background,n=t=>{(e=>{const t=document.createElement("img");return new Promise(s=>{Object(Rt.a)(t,e,()=>{const e=document.createElement("canvas"),i=t.naturalWidth/t.naturalHeight;1===i?(e.width=50,e.height=e.width/i):i>1?(e.height=50,e.width=e.height/i):e.width=e.height=50;const n=e.getContext("2d");n.drawImage(t,0,0,t.naturalWidth,t.naturalHeight,0,0,e.width,e.height);const a=new Array(4).fill(0),o=n.getImageData(0,0,e.width,e.height).data;for(let e=0;e{if(!i())return void o.resolve();const r=Pi(Array.from(n));s.slug=e,s.type="image",s.highlightningColor=r,k.default.pushToState("settings",a.default.settings),this.saveToCache(e,t),mo.applyCurrentTheme(e,t).then(o.resolve)})},r=he.a.getCacheContext(t);s.blur?setTimeout(()=>{Object(ms.a)(r.url,12,4).then(e=>{i()?n(e):o.resolve()})},200):n(r.url)}),o},this.setActive=()=>{const e=this.grid.querySelector(".active"),t=this.theme.background,s="image"===t.type?this.grid.querySelector(`.grid-item[data-slug="${t.slug}"]`):null;e!==s&&(e&&e.classList.remove("active"),s&&s.classList.add("active"))}}init(){this.container.classList.add("background-container","background-image-container"),this.setTitle("ChatBackground"),this.theme=a.default.getTheme();{const t=an(this.scrollable),s=Object(U.a)("btn-primary btn-transparent",{icon:"cameraadd",text:"ChatBackground.UploadWallpaper"}),i=Object(U.a)("btn-primary btn-transparent",{icon:"colorize",text:"SetColor"}),n=Object(U.a)("btn-primary btn-transparent",{icon:"favourites",text:"Appearance.Reset"});Object(l.b)(s,this.onUploadClick,{listenerSetter:this.listenerSetter}),Object(l.b)(i,()=>{new Oi(this.slider).open()},{listenerSetter:this.listenerSetter}),Object(l.b)(n,this.onResetClick,{listenerSetter:this.listenerSetter});const o=this.blurCheckboxField=new dt.a({text:"ChatBackground.Blur",name:"blur",checked:this.theme.background.blur,withRipple:!0});this.listenerSetter.add(o.input)("change",()=>{this.theme.background.blur=o.input.checked,k.default.pushToState("settings",a.default.settings);const t=e.querySelector(".active");t&&setTimeout(()=>{this.setBackgroundDocument(t.dataset.slug,M.a.getDoc(t.dataset.docId))},100)}),t.append(s,i,n,o.label)}a.default.addEventListener("background_change",this.setActive),rt.a.invokeApiHashable("account.getWallPapers").then(e=>{e.wallpapers.forEach(e=>{this.addWallPaper(e)})});const e=this.grid=document.createElement("div");e.classList.add("grid"),Object(l.b)(e,this.onGridClick,{listenerSetter:this.listenerSetter}),this.scrollable.append(e)}addWallPaper(e,t=!0){if(e.pFlags.pattern||!e.document||0===e.document.mime_type.indexOf("application/"))return;e.document=M.a.saveDoc(e.document);const s=document.createElement("div");s.classList.add("grid-item");const i=document.createElement("div");i.classList.add("grid-item-media");const n=ys({photo:e.document,message:null,container:i,withoutPreloader:!0,size:r.a.choosePhotoSize(e.document,200,200)});return s.dataset.docId=e.document.id,s.dataset.slug=e.slug,"image"===this.theme.background.type&&this.theme.background.slug===e.slug&&s.classList.add("active"),(n.loadPromises.thumb||n.loadPromises.full).then(()=>{os.a.mutate(()=>{s.append(i)})}),this.grid[t?"append":"prepend"](s),s}}var ji=s(101);class Di extends ct.b{constructor(e){super("popup-stickers",null,{closable:!0,overlayClosable:!0,body:!0}),this.stickerSetInput=e,this.onStickersClick=e=>{const t=Object(Ce.a)(e.target,"sticker-set-sticker");if(!t)return;const s=t.dataset.docId;mo.chat.input.sendMessageWithDocument(s)?this.hide():console.warn("got no doc by id:",s)},this.h6=document.createElement("h6"),this.h6.append(Object(A.i18n)("Loading")),this.header.append(this.h6),this.onClose=()=>{I.a.setOnlyOnePlayableGroup("")};const t=document.createElement("div");t.classList.add("sticker-set"),this.stickersDiv=document.createElement("div"),this.stickersDiv.classList.add("sticker-set-stickers","is-loading"),Object(l.b)(this.stickersDiv,this.onStickersClick,{listenerSetter:this.listenerSetter}),Object(se.f)(this.stickersDiv,!0),this.stickersFooter=document.createElement("div"),this.stickersFooter.classList.add("sticker-set-footer"),t.append(this.stickersDiv);const s=Object(U.a)("btn-primary btn-primary-transparent disable-hover",{noRipple:!0,text:"Loading"});this.stickersFooter.append(s),this.body.append(t);new P.b(this.body);this.body.append(this.stickersFooter),this.loadStickerSet()}loadStickerSet(){return hs.getStickerSet(this.stickerSetInput).then(e=>{let t;this.set=e.set,I.a.setOnlyOnePlayableGroup("STICKERS-POPUP"),this.h6.innerHTML=Z.a.wrapEmojiText(e.set.title),this.stickersFooter.classList.toggle("add",!e.set.installed_date),e.set.installed_date?(t=Object(U.a)("btn-primary btn-primary-transparent danger",{noRipple:!0}),t.append(Object(A.i18n)("RemoveStickersCount",[Object(A.i18n)("Stickers",[e.set.count])]))):(t=Object(U.a)("btn-primary btn-color-primary",{noRipple:!0}),t.append(Object(A.i18n)("AddStickersCount",[Object(A.i18n)("Stickers",[e.set.count])]))),this.stickersFooter.textContent="",this.stickersFooter.append(t),Object(l.b)(t,()=>{const e=Object(ut.a)([t],!0);hs.toggleStickerSet(this.set).then(()=>{this.hide()}).catch(()=>{e()})});const s=new te.d;this.stickersDiv.classList.remove("is-loading"),this.stickersDiv.innerHTML="";for(let t of e.documents){if("documentEmpty"===t._)continue;const e=document.createElement("div");e.classList.add("sticker-set-sticker");const i=v.b.active.esgSticker.width;Ls({doc:t,div:e,lazyLoadQueue:s,group:"STICKERS-POPUP",play:!0,loop:!0,width:i,height:i}),this.stickersDiv.append(e)}})}}class Bi{constructor(e,t,s,i,n){const a="range-setting-selector";this.container=document.createElement("div"),this.container.classList.add(a);const o=document.createElement("div");o.classList.add(a+"-details");const r=document.createElement("div");r.classList.add(a+"-name"),Object(A._i18n)(r,e);const l=document.createElement("div");l.classList.add(a+"-value"),l.innerHTML=""+s,o.append(r,l),this.range=new Le({step:t,min:i,max:n},s),this.range.setListeners(),this.range.setHandlers({onScrub:e=>{this.onChange&&this.onChange(e),l.innerText=""+e}}),this.container.append(o,this.range.container)}}class Ri extends V{init(){this.container.classList.add("general-settings-container"),this.setTitle("General");const e=an.bind(null,this.scrollable);{const t=e("Settings"),s=new Bi("TextSize",1,a.default.settings.messagesTextSize,12,20);s.onChange=e=>{k.default.setByKey("settings.messagesTextSize",e)};const i=Object(U.a)("btn-primary btn-transparent",{icon:"image",text:"ChatBackground"});Object(l.b)(i,()=>{new Fi(this.slider).open()});const n=new dt.a({text:"EnableAnimations",name:"animations",stateKey:"settings.animationsEnabled",withRipple:!0});t.append(s.container,i,n.label)}{const t=e("General.Keyboard"),s=document.createElement("form"),i=new Je({radioField:new st({langKey:"General.SendShortcut.Enter",name:"send-shortcut",value:"enter",stateKey:"settings.sendShortcut"}),subtitleLangKey:"General.SendShortcut.NewLine.ShiftEnter"}),n=new Je({radioField:new st({name:"send-shortcut",value:"ctrlEnter",stateKey:"settings.sendShortcut"}),subtitleLangKey:"General.SendShortcut.NewLine.Enter"});Object(A._i18n)(n.radioField.main,"General.SendShortcut.CtrlEnter",[h.IS_APPLE?"⌘":"Ctrl"]),s.append(i.container,n.container),t.append(s)}{const t=e("AutoDownloadMedia"),s=new dt.a({text:"AutodownloadContacts",name:"contacts",stateKey:"settings.autoDownload.contacts",withRipple:!0}),i=new dt.a({text:"AutodownloadPrivateChats",name:"private",stateKey:"settings.autoDownload.private",withRipple:!0}),n=new dt.a({text:"AutodownloadGroupChats",name:"groups",stateKey:"settings.autoDownload.groups",withRipple:!0}),a=new dt.a({text:"AutodownloadChannels",name:"channels",stateKey:"settings.autoDownload.channels",withRipple:!0});t.append(s.label,i.label,n.label,a.label)}{const t=e("General.AutoplayMedia"),s=new dt.a({text:"AutoplayGIF",name:"gifs",stateKey:"settings.autoPlay.gifs",withRipple:!0}),i=new dt.a({text:"AutoplayVideo",name:"videos",stateKey:"settings.autoPlay.videos",withRipple:!0});t.append(s.label,i.label)}{const t=e("Emoji"),s=new dt.a({text:"GeneralSettings.EmojiPrediction",name:"suggest-emoji",stateKey:"settings.emoji.suggest",withRipple:!0}),i=new dt.a({text:"GeneralSettings.BigEmoji",name:"emoji-big",stateKey:"settings.emoji.big",withRipple:!0});t.append(s.label,i.label)}{const t=e("Telegram.InstalledStickerPacksController"),s=new dt.a({text:"Stickers.SuggestStickers",name:"suggest",stateKey:"settings.stickers.suggest",withRipple:!0}),i=new dt.a({text:"InstalledStickers.LoopAnimated",name:"loop",stateKey:"settings.stickers.loop",withRipple:!0}),n={},o=new te.d,r=(e,s="append")=>{const i=new Je({title:Z.b.wrapEmojiText(e.title),subtitleLangKey:"Stickers",subtitleLangArgs:[e.count],havePadding:!0,clickable:()=>{new Di({id:e.id,access_hash:e.access_hash}).show()}});n[e.id]=i;const a=document.createElement("div");a.classList.add("row-media"),Ss({set:e,container:a,group:"GENERAL-SETTINGS",lazyLoadQueue:o,width:48,height:48,autoplay:!0}),i.container.append(a),t[s](i.container)};hs.getAllStickers().then(e=>{Object(ji.a)(e);for(const t of e.sets)r(t)}),this.listenerSetter.add(a.default)("stickers_installed",e=>{const t=e;n[t.id]||r(t,"prepend")}),this.listenerSetter.add(a.default)("stickers_deleted",e=>{const t=e;n[t.id]&&(n[t.id].container.remove(),delete n[t.id])}),t.append(s.label,i.label)}}onOpen(){this.init&&(this.init(),this.init=null)}}var Hi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ui extends V{init(){return Hi(this,void 0,void 0,(function*(){this.container.classList.add("edit-profile-container"),this.setTitle("EditAccount.Title");const e=[];{const t=document.createElement("div");t.classList.add("input-wrapper"),this.firstNameInputField=new F.b({label:"EditProfile.FirstNameLabel",name:"first-name",maxLength:70}),this.lastNameInputField=new F.b({label:"Login.Register.LastName.Placeholder",name:"last-name",maxLength:64}),this.bioInputField=new F.b({label:"EditProfile.BioLabel",name:"bio",maxLength:70}),t.append(this.firstNameInputField.container,this.lastNameInputField.container,this.bioInputField.container);const s=document.createElement("div");s.classList.add("caption"),Object(A.i18n_)({element:s,key:"Bio.Description"}),e.push(this.firstNameInputField,this.lastNameInputField,this.bioInputField),this.scrollable.append(t,s)}this.scrollable.append(document.createElement("hr")),this.editPeer=new Xe({peerId:T.a.getSelf().id,inputFields:e,listenerSetter:this.listenerSetter}),this.content.append(this.editPeer.nextBtn),this.scrollable.prepend(this.editPeer.avatarEdit.container);{const t=document.createElement("div");t.classList.add("sidebar-left-h2"),Object(A.i18n_)({element:t,key:"EditAccount.Username"});const s=document.createElement("div");s.classList.add("input-wrapper"),this.usernameInputField=new lt({peerId:0,label:"EditProfile.Username.Label",name:"username",plainText:!0,listenerSetter:this.listenerSetter,onChange:()=>{this.editPeer.handleChange(),this.setProfileUrl()},availableText:"EditProfile.Username.Available",takenText:"EditProfile.Username.Taken",invalidText:"EditProfile.Username.Invalid"}),s.append(this.usernameInputField.container);const i=document.createElement("div");i.classList.add("caption"),i.append(Object(A.i18n)("UsernameSettings.ChangeDescription")),i.append(document.createElement("br"),document.createElement("br"));const n=this.profileUrlContainer=document.createElement("div");n.classList.add("profile-url-container");const a=this.profileUrlAnchor=document.createElement("a");a.classList.add("profile-url"),a.href="#",a.target="_blank",n.append(Object(A.i18n)("UsernameHelpLink",[a])),i.append(n),e.push(this.usernameInputField),this.scrollable.append(t,s,i)}Object(l.b)(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0;let e=[];e.push(n.default.updateProfile(this.firstNameInputField.value,this.lastNameInputField.value,this.bioInputField.value).then(()=>{this.close()},e=>{console.error("updateProfile error:",e)})),this.editPeer.uploadAvatar&&e.push(this.editPeer.uploadAvatar().then(e=>n.default.uploadProfilePhoto(e))),this.usernameInputField.isValid()&&!this.usernameInputField.input.classList.contains("error")&&e.push(T.a.updateUsername(this.usernameInputField.value)),Promise.race(e).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled")})},{listenerSetter:this.listenerSetter});const t=T.a.getSelf(),s=yield n.default.getProfile(t.id,!0);this.firstNameInputField.setOriginalValue(t.first_name,!0),this.lastNameInputField.setOriginalValue(t.last_name,!0),this.bioInputField.setOriginalValue(s.about,!0),this.usernameInputField.setOriginalValue(t.username,!0),this.setProfileUrl(),this.editPeer.handleChange()}))}setProfileUrl(){if(this.usernameInputField.input.classList.contains("error")||!this.usernameInputField.value.length)this.profileUrlContainer.style.display="none";else{this.profileUrlContainer.style.display="";let e="https://t.me/"+this.usernameInputField.value;this.profileUrlAnchor.innerText=e,this.profileUrlAnchor.href=e}}}var Ni=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class zi extends V{constructor(){super(...arguments),this.renderResults=e=>Ni(this,void 0,void 0,(function*(){yield T.a.getContacts(),e.forEach(e=>{const{dom:t}=Do.addDialogNew({dialog:e,container:this.selector.scrollable,drawStatus:!1,rippleEnabled:!0,avatarSize:46}),s=this.selector.selected.has(e);t.containerEl.append(this.checkbox(s));const i=[];this.dialogsByFilters.forEach((t,s)=>{if(t.has(e)){const e=document.createElement("span");e.innerHTML=Z.b.wrapEmojiText(s.title),i.push(e)}});Object(A.join)(i,!1).forEach(e=>{t.lastMessageSpan.append(e)})})})),this.onSelectChange=e=>{"included"===this.type&&(this.confirmBtn.style.display=e?"":"none")}}init(){return this.content.remove(),this.container.classList.add("included-chatlist-container"),this.confirmBtn=N("check btn-confirm blue",{noRipple:!0}),this.confirmBtn.style.display="none",this.header.append(this.confirmBtn),this.confirmBtn.addEventListener("click",()=>{const e=this.selector.getSelected();if("included"===this.type)for(const e in this.filter.pFlags)0!==e.indexOf("exclude_")&&delete this.filter.pFlags[e];else for(const e in this.filter.pFlags)0===e.indexOf("exclude_")&&delete this.filter.pFlags[e];const t=[];for(const s of e)"number"==typeof s?t.push(s):this.filter.pFlags[s]=!0;"included"===this.type?this.filter.pinned_peers=this.filter.pinned_peers.filter(e=>t.includes(e)):this.filter.pinned_peers=this.filter.pinned_peers.filter(e=>!t.includes(e));const s="included"===this.type?"exclude_peers":"include_peers";this.filter[s]=this.filter[s].filter(e=>!t.includes(e)),this.filter["included"===this.type?"include_peers":"exclude_peers"]=t,this.editFolderTab.setFilter(this.filter,!1),this.close()}),this.dialogsByFilters=new Map,i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.dialogsByFilters.set(t,new Set(i.a.dialogsStorage.getFolder(t.id).map(e=>e.peerId)))})}checkbox(e){const t=new dt.a({round:!0});return e&&(t.input.checked=e),t.label}onOpen(){this.init&&(this.init(),this.init=null),this.confirmBtn.style.display="excluded"===this.type?"":"none",this.setTitle("included"===this.type?"FilterAlwaysShow":"FilterNeverShow");const e=this.filter,t=document.createDocumentFragment(),s=new nn({noDelimiter:!0,name:"FilterChatTypes"});let i;s.container.classList.add("folder-categories"),i="excluded"===this.type?{exclude_muted:{ico:"mute",text:"ChatList.Filter.MutedChats"},exclude_archived:{ico:"archive",text:"ChatList.Filter.Archive"},exclude_read:{ico:"readchats",text:"ChatList.Filter.ReadChats"}}:{contacts:{ico:"newprivate",text:"ChatList.Filter.Contacts"},non_contacts:{ico:"noncontacts",text:"ChatList.Filter.NonContacts"},groups:{ico:"group",text:"ChatList.Filter.Groups"},broadcasts:{ico:"newchannel",text:"ChatList.Filter.Channels"},bots:{ico:"bots",text:"ChatList.Filter.Bots"}};const n=document.createDocumentFragment();for(const e in i){const t=Object(U.a)("btn-primary btn-transparent folder-category-button",{icon:i[e].ico,text:i[e].text});t.dataset.peerId=e,t.append(this.checkbox()),n.append(t)}s.content.append(n);const a=new nn({name:"FilterChats"});t.append(s.container,a.container);const o=("included"===this.type?e.include_peers:e.exclude_peers).slice();this.selector=new Et({appendTo:this.container,onChange:this.onSelectChange,peerType:["dialogs"],renderResultsFunc:this.renderResults,placeholder:"Search"}),this.selector.selected=new Set(o);let r=!1;const l=this.selector.add.bind(this.selector);this.selector.add=(e,t,s)=>{if(this.selector.selected.size>=100&&r&&!i[e]){const t=this.selector.list.querySelector(`[data-peer-id="${e}"] [type="checkbox"]`);t&&setTimeout(()=>{t.checked=!1},0);return void nt(A.default.format("excluded"===this.type?"ChatList.Filter.Exclude.LimitReached":"ChatList.Filter.Include.LimitReached",!0))}const n=l(e,i[e]?Object(A.i18n)(i[e].text):void 0,s);return i[e]&&n.querySelector("avatar-element").classList.add("tgico-"+i[e].ico),n};const c=this.selector.list.parentElement;a.content.append(this.selector.list),c.append(t),this.selector.addInitial(o),r=!0;for(const t in e.pFlags)i.hasOwnProperty(t)&&e.pFlags[t]&&s.content.querySelector(`[data-peer-id="${t}"]`).click()}onCloseAfterTimeout(){return this.selector&&(this.selector.container.remove(),this.selector=null),super.onCloseAfterTimeout()}open(e,t,s){return this.originalFilter=e,this.filter=Object(L.a)(this.originalFilter),this.type=t,this.editFolderTab=s,super.open()}}class Vi extends V{constructor(){super(...arguments),this.flags={}}init(){this.container.classList.add("edit-folder-container"),this.caption=document.createElement("div"),this.caption.classList.add("caption"),this.caption.append(Object(A.i18n)("FilterIncludeExcludeInfo")),this.stickerContainer=document.createElement("div"),this.stickerContainer.classList.add("sticker-container"),this.confirmBtn=N("check btn-confirm hide blue");const e={icon:"delete danger",text:"FilterMenuDelete",onClick:()=>{e.element.setAttribute("disabled","true"),i.a.filtersStorage.updateDialogFilter(this.filter,!0).then(e=>{e&&this.close()}).finally(()=>{e.element.removeAttribute("disabled")})}};this.menuBtn=Ie({},"bottom-left",[e]),this.menuBtn.classList.add("hide"),this.header.append(this.confirmBtn,this.menuBtn);const t=document.createElement("div");t.classList.add("input-wrapper"),this.nameInputField=new F.b({label:"FilterNameInputLabel",maxLength:12}),t.append(this.nameInputField.container);const s=(e,t,s,i)=>{const n=new nn({name:t,noDelimiter:!0});n.container.classList.add("folder-list",e);const a=n.generateContentElement();return a.classList.add("folder-categories"),s.forEach(e=>{const t=Object(U.a)("folder-category-button btn btn-primary btn-transparent",{icon:e.icon,text:e.text,noRipple:!e.withRipple||void 0});e.name&&(i[e.name]=t),a.append(t)}),n};this.include_peers=s("folder-list-included","FilterInclude",[{icon:"add primary",text:"ChatList.Filter.Include.AddChat",withRipple:!0},{text:"ChatList.Filter.Contacts",icon:"newprivate",name:"contacts"},{text:"ChatList.Filter.NonContacts",icon:"noncontacts",name:"non_contacts"},{text:"ChatList.Filter.Groups",icon:"group",name:"groups"},{text:"ChatList.Filter.Channels",icon:"channel",name:"broadcasts"},{text:"ChatList.Filter.Bots",icon:"bots",name:"bots"}],this.flags),this.exclude_peers=s("folder-list-excluded","FilterExclude",[{icon:"minus primary",text:"ChatList.Filter.Exclude.AddChat",withRipple:!0},{text:"ChatList.Filter.MutedChats",icon:"mute",name:"exclude_muted"},{text:"ChatList.Filter.Archive",icon:"archive",name:"exclude_archived"},{text:"ChatList.Filter.ReadChats",icon:"readchats",name:"exclude_read"}],this.flags),this.scrollable.append(this.stickerContainer,this.caption,t,this.include_peers.container,this.exclude_peers.container);const n=this.include_peers.container.querySelector(".folder-categories"),a=this.exclude_peers.container.querySelector(".folder-categories");return n.querySelector(".btn").addEventListener("click",()=>{new zi(this.slider).open(this.filter,"included",this)}),a.querySelector(".btn").addEventListener("click",()=>{new zi(this.slider).open(this.filter,"excluded",this)}),this.confirmBtn.addEventListener("click",()=>{if(this.nameInputField.input.classList.contains("error"))return;if(!this.nameInputField.value.trim())return void this.nameInputField.input.classList.add("error");let e,t=Array.from(n.children).slice(1).reduce((e,t)=>e+ +!t.style.display,0);t+=this.filter.include_peers.length,t?(this.confirmBtn.setAttribute("disabled","true"),e=this.filter.id?i.a.filtersStorage.updateDialogFilter(this.filter):i.a.filtersStorage.createDialogFilter(this.filter),e.then(e=>{e&&this.close()}).catch(e=>{"DIALOG_FILTERS_TOO_MUCH"===e.type?nt("Sorry, you can't create more folders."):console.error("updateDialogFilter error:",e)}).finally(()=>{this.confirmBtn.removeAttribute("disabled")})):nt("Please choose at least one chat for this folder.")}),this.nameInputField.input.addEventListener("input",()=>{this.filter.title=this.nameInputField.value,this.editCheckForChange()}),this.loadAnimationPromise=le.b.loadAnimationFromURL({container:this.stickerContainer,loop:!1,autoplay:!1,width:86,height:86},"assets/img/Folders_2.tgs").then(e=>(this.animation=e,le.b.waitForFirstFrame(e)))}onOpenAfterTimeout(){this.loadAnimationPromise.then(()=>{this.animation.autoplay=!0,this.animation.play()})}onCreateOpen(){this.caption.style.display="",this.setTitle("FilterNew"),this.menuBtn.classList.add("hide"),this.confirmBtn.classList.remove("hide"),this.nameInputField.value="";for(const e in this.flags)this.flags[e].style.display="none"}onEditOpen(){this.caption.style.display="none",this.setTitle("create"===this.type?"FilterNew":"FilterHeaderEdit"),"edit"===this.type&&(this.menuBtn.classList.remove("hide"),this.confirmBtn.classList.add("hide"));const e=this.filter;this.nameInputField.value=Z.b.wrapDraftText(e.title);for(const t in this.flags)this.flags[t].style.display=e.pFlags[t]?"":"none";["include_peers","exclude_peers"].forEach(t=>{const s=this[t],i=Do.createChatList(),n=e[t].slice(),a=e=>{for(let t=0,s=Math.min(n.length,e);ta(20)),o.append(Object(A.i18n)("FilterShowMoreChats",[n.length])),e.append(o)}a(4)})}editCheckForChange(){if("edit"===this.type){const e=!Object(L.b)(this.originalFilter,this.filter);this.confirmBtn.classList.toggle("hide",!e),this.menuBtn.classList.toggle("hide",e)}}setFilter(e,t){Array.from(this.container.querySelectorAll("ul, .load-more")).forEach(e=>e.remove()),t?(this.originalFilter=e,this.filter=Object(L.a)(e)):(this.filter=e,this.onEditOpen(),this.editCheckForChange())}open(e){const t=super.open();return void 0===e?(this.setFilter({_:"dialogFilter",id:0,title:"",pFlags:{},pinned_peers:[],include_peers:[],exclude_peers:[]},!0),this.type="create",this.onCreateOpen()):(this.setFilter(e,!0),this.type="edit",this.onEditOpen()),t}}var Wi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ki extends V{constructor(){super(...arguments),this.filtersRendered={}}renderFolder(e,t,s){let n,a,r="",c=[];if("dialogFilterSuggested"===e._)n=e.filter,r=e.description;else{if(n=e,1===Object.keys(n.pFlags).length){const e=n.pFlags;let t;e.contacts?t="FilterAllContacts":e.non_contacts?t="FilterAllNonContacts":e.groups?t="FilterAllGroups":e.broadcasts?t="FilterAllChannels":e.bots&&(t="FilterAllBots"),t&&c.push(Object(A.i18n)(t))}if(!c.length){const e=i.a.dialogsStorage.getFolder(n.id);let t=0,s=0,a=0;for(const i of e)o.a.isAnyGroup(i.peerId)?a++:o.a.isBroadcast(i.peerId)?s++:t++;t&&c.push(Object(A.i18n)("Chats",[t])),s&&c.push(Object(A.i18n)("Channels",[s])),a&&c.push(Object(A.i18n)("Groups",[a]))}}if(s)s.subtitle.textContent="",Object(A.join)(c).forEach(e=>{s.subtitle.append(e)});else if(s=new Je({title:Z.a.wrapEmojiText(n.title),subtitle:r,clickable:!0}),c.length&&Object(A.join)(c).forEach(e=>{s.subtitle.append(e)}),"dialogFilter"===e._){const e=n.id;this.filtersRendered.hasOwnProperty(n.id)||Object(l.b)(s.container,()=>{new Vi(this.slider).open(i.a.filtersStorage.getFilter(e))},{listenerSetter:this.listenerSetter}),this.filtersRendered[n.id]=s}return a=s.container,n.hasOwnProperty("orderIndex")?Ps(a,a.parentElement||t,n.orderIndex):t&&t.append(a),a}init(){return Wi(this,void 0,void 0,(function*(){this.container.classList.add("chat-folders-container"),this.setTitle("ChatList.Filter.List.Title"),this.scrollable.container.classList.add("chat-folders"),this.stickerContainer=document.createElement("div"),this.stickerContainer.classList.add("sticker-container");const e=document.createElement("div");e.classList.add("caption"),Object(A.i18n_)({element:e,key:"ChatList.Filter.Header"}),this.createFolderBtn=Object(U.a)("btn-primary btn-color-primary btn-control tgico",{text:"ChatList.Filter.NewTitle",icon:"add"}),this.foldersSection=new nn({name:"Filters"}),this.foldersSection.container.style.display="none",this.suggestedSection=new nn({name:"FilterRecommended"}),this.suggestedSection.container.style.display="none",this.scrollable.append(this.stickerContainer,e,this.createFolderBtn,this.foldersSection.container,this.suggestedSection.container),Object(l.b)(this.createFolderBtn,()=>{Object.keys(this.filtersRendered).length>=10?nt("Sorry, you can't create more folders."):new Vi(this.slider).open()},{listenerSetter:this.listenerSetter});const t=()=>{this.foldersSection.container.style.display=Object.keys(this.filtersRendered).length?"":"none"};return i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.renderFolder(t,this.foldersSection.content);t()}),this.listenerSetter.add(a.default)("filter_update",e=>{const s=e;this.filtersRendered.hasOwnProperty(s.id)?this.renderFolder(s,null,this.filtersRendered[s.id]):this.renderFolder(s,this.foldersSection.content),t(),this.getSuggestedFilters()}),this.listenerSetter.add(a.default)("filter_delete",e=>{const s=e;this.filtersRendered.hasOwnProperty(s.id)&&(this.getSuggestedFilters(),this.filtersRendered[s.id].container.remove(),delete this.filtersRendered[s.id]),t()}),this.listenerSetter.add(a.default)("filter_order",e=>{e.forEach((e,t)=>{const s=this.filtersRendered[e].container;Ps(s,s.parentElement,t+1)})}),this.loadAnimationPromise=le.b.loadAnimationFromURL({container:this.stickerContainer,loop:!1,autoplay:!1,width:86,height:86},"assets/img/Folders_1.tgs").then(e=>(this.animation=e,le.b.waitForFirstFrame(e))),this.getSuggestedFilters(),this.loadAnimationPromise}))}onOpenAfterTimeout(){this.loadAnimationPromise.then(()=>{this.animation.autoplay=!0,this.animation.play()})}getSuggestedFilters(){return rt.a.invokeApi("messages.getSuggestedDialogFilters").then(e=>{this.suggestedSection.container.style.display=e.length?"":"none",Array.from(this.suggestedSection.content.children).slice(1).forEach(e=>e.remove()),e.forEach(e=>{const t=this.renderFolder(e),s=Object(U.a)("btn-primary btn-color-primary",{text:"Add"});t.append(s),this.suggestedSection.content.append(t),Object(l.b)(s,n=>{Object(c.a)(n),Object.keys(this.filtersRendered).length>=10?nt("Sorry, you can't create more folders."):(s.setAttribute("disabled","true"),i.a.filtersStorage.createDialogFilter(e.filter).then(e=>{e&&t.remove()}).finally(()=>{s.removeAttribute("disabled")}))},{listenerSetter:this.listenerSetter})})})}}class Gi extends W{init(){this.container.classList.add("notifications-container"),this.setTitle("Telegram.NotificationSettingsViewController");const e=e=>{const t=new nn({name:e.name}),s=new Je({checkboxField:new dt.a({text:e.typeText,checked:!0}),subtitleLangKey:"Loading"}),i=new Je({checkboxField:new dt.a({text:"Notifications.MessagePreview",checked:!0}),subtitleLangKey:"Loading"});t.content.append(s.container,i.container),this.scrollable.append(t.container);const n={_:e.inputKey},o=_t.a.getNotifySettings(n);(o instanceof Promise?o:Promise.resolve(o)).then(t=>{const o=()=>{const e=_t.a.isMuted(t);return s.checkboxField.checked=!e,i.checkboxField.checked=t.show_previews,e};o(),this.eventListener.addEventListener("destroy",()=>{const e=!s.checkboxField.checked,a=i.checkboxField.checked;if(e===_t.a.isMuted(t)&&a===t.show_previews)return;const o=Object(L.a)(t);o._="inputPeerNotifySettings",o.mute_until=e?2147483647:0,o.show_previews=a,_t.a.updateNotifySettings(n,o)},{once:!0}),this.listenerSetter.add(a.default)("notify_settings",s=>{const i=Object(X.c)(s.peer._);e.inputKey===i&&(t=s.notify_settings,o())})})};e({name:"NotificationsPrivateChats",typeText:"NotificationsForPrivateChats",inputKey:"inputNotifyUsers"}),e({name:"NotificationsGroups",typeText:"NotificationsForGroups",inputKey:"inputNotifyChats"}),e({name:"NotificationsChannels",typeText:"NotificationsForChannels",inputKey:"inputNotifyBroadcasts"});{const e=new nn({name:"NotificationsOther"}),t=new Je({checkboxField:new dt.a({text:"ContactJoined",checked:!0}),subtitleLangKey:"Loading"}),s=new Je({checkboxField:new dt.a({text:"Notifications.Sound",checked:!0,stateKey:"settings.notifications.sound"}),subtitleLangKey:"Loading"});k.default.getState().then(e=>{s.checkboxField.checked=e.settings.notifications.sound}),e.content.append(t.container,s.container),this.scrollable.append(e.container),_t.a.getContactSignUpNotification().then(e=>{t.checkboxField.checked=e,this.eventListener.addEventListener("destroy",()=>{const s=t.checkboxField.checked;e!==s&&_t.a.setContactSignUpNotification(!s)},{once:!0})})}}}var qi=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Qi extends V{init(){return qi(this,void 0,void 0,(function*(){this.container.classList.add("language-container"),this.setTitle("Telegram.LanguageViewController");const e=new nn({}),t=new Map,s=rt.a.invokeApiCacheable("langpack.getLanguages",{lang_pack:"macos"}).then(s=>{const i=Object(tt.b)();s.forEach(e=>{const s=new Je({radioField:new st({text:e.name,name:i,value:e.lang_code}),subtitle:e.native_name});t.set(e.lang_code,s)});const n=Ze([...t.values()],e=>{A.default.getLangPack(e)});A.default.getCacheLangPack().then(e=>{const s=t.get(e.lang_code);s?s.radioField.setValueSilently(!0):console.error("no row",s,e)}),e.content.append(n)});return this.scrollable.append(e.container),s}))}}class $i extends V{constructor(){super(...arguments),this.buttons={}}init(){this.container.classList.add("settings-container"),this.setTitle("Settings");const e=Ie({},"bottom-left",[{icon:"logout",text:"EditAccount.Logout",onClick:()=>{rt.a.logOut()}}]);this.header.append(e),this.avatarElem=new ko,this.avatarElem.setAttribute("clickable",""),this.avatarElem.classList.add("profile-avatar","avatar-120"),this.nameDiv=document.createElement("div"),this.nameDiv.classList.add("profile-name"),this.phoneDiv=document.createElement("div"),this.phoneDiv.classList.add("profile-subtitle");const t=document.createElement("div");t.classList.add("profile-buttons");const s="profile-button btn-primary btn-transparent";t.append(this.buttons.edit=Object(U.a)(s,{icon:"edit",text:"EditAccount.Title"})),t.append(this.buttons.folders=Object(U.a)(s,{icon:"folder",text:"AccountSettings.Filters"})),t.append(this.buttons.general=Object(U.a)(s,{icon:"settings",text:"Telegram.GeneralSettingsViewController"})),t.append(this.buttons.notifications=Object(U.a)(s,{icon:"unmute",text:"AccountSettings.Notifications"})),t.append(this.buttons.privacy=Object(U.a)(s,{icon:"lock",text:"AccountSettings.PrivacyAndSecurity"})),t.append(this.buttons.language=Object(U.a)(s,{icon:"language",text:"AccountSettings.Language"})),this.scrollable.append(this.avatarElem,this.nameDiv,this.phoneDiv,t),this.scrollable.container.classList.add("profile-content-wrapper"),this.buttons.edit.addEventListener("click",()=>{new Ui(this.slider).open()}),this.buttons.folders.addEventListener("click",()=>{new Ki(this.slider).open()}),this.buttons.general.addEventListener("click",()=>{new Ri(this.slider).open()}),this.buttons.notifications.addEventListener("click",()=>{new Gi(this.slider).open()}),this.buttons.privacy.addEventListener("click",()=>{new Ei(this.slider).open()}),this.buttons.language.addEventListener("click",()=>{new Qi(this.slider).open()}),le.b.loadLottieWorkers(),this.fillElements()}fillElements(){let e=T.a.getSelf();this.avatarElem.setAttribute("peer",""+e.id),this.nameDiv.append(new ft.a({peerId:e.id}).element),this.phoneDiv.innerHTML=e.phone?T.a.formatUserPhone(e.phone):""}}class Yi extends V{constructor(){super(...arguments),this.uploadAvatar=null}init(){this.container.classList.add("new-channel-container"),this.setTitle("NewChannel"),this.avatarEdit=new Q(e=>{this.uploadAvatar=e});const e=document.createElement("div");e.classList.add("input-wrapper"),this.channelNameInputField=new F.b({label:"EnterChannelName",maxLength:128}),this.channelDescriptionInputField=new F.b({label:"DescriptionOptionalPlaceholder",maxLength:255}),e.append(this.channelNameInputField.container,this.channelDescriptionInputField.container);const t=()=>{this.nextBtn.classList.toggle("is-visible",!!this.channelNameInputField.value.length&&!this.channelNameInputField.input.classList.contains("error")&&!this.channelDescriptionInputField.input.classList.contains("error"))};this.channelNameInputField.input.addEventListener("input",t),this.channelDescriptionInputField.input.addEventListener("input",t);const s=document.createElement("div");s.classList.add("caption"),Object(A._i18n)(s,"Channel.DescriptionHolderDescrpiton"),this.nextBtn=$({icon:"arrow_next"}),this.nextBtn.addEventListener("click",()=>{const e=this.channelNameInputField.value,t=this.channelDescriptionInputField.value;this.nextBtn.disabled=!0,G.a.createChannel(e,t).then(e=>{this.uploadAvatar&&this.uploadAvatar().then(t=>{G.a.editPhoto(e,t)}),ln.removeTabFromHistory(this),new jt(this.slider).open({peerId:e,type:"channel",skippable:!0,title:"GroupAddMembers",placeholder:"SendMessageTo",takeOut:t=>G.a.inviteToChannel(Math.abs(e),t)})})}),this.content.append(this.nextBtn),this.scrollable.append(this.avatarEdit.container,e,s)}onCloseAfterTimeout(){return this.avatarEdit.clear(),this.uploadAvatar=null,this.channelNameInputField.value="",this.channelDescriptionInputField.value="",this.nextBtn.disabled=!1,super.onCloseAfterTimeout()}}var Xi=s(117);class Ji extends ct.b{constructor(){super("popup-create-contact popup-send-photo popup-new-media",null,{closable:!0,withConfirm:"Add"}),Object(A._i18n)(this.title,"AddContactTitle"),Object(l.b)(this.btnConfirm,()=>{const e=T.a.importContact(s.value,i.value,n.value);e.then(()=>{this.hide()},e=>{"NO_USER"===e.type&&(at({langPackKey:"Contacts.PhoneNumber.NotRegistred"}),c.disabled=!1)}),c.lockWithPromise(e)},{listenerSetter:this.listenerSetter});const e=[],t=document.createElement("div");t.classList.add("name-fields");const s=new F.b({label:"FirstName",name:"create-contact-name",maxLength:70,required:!0}),i=new F.b({label:"LastName",name:"create-contact-lastname",maxLength:70}),n=new Xi.a({required:!0});e.push(s,i,n);const a=()=>{const e=s.value+" "+i.value;c.avatarElem.setAttribute("peer-title",e),c.avatarElem.update()};this.listenerSetter.add(s.input)("input",a),this.listenerSetter.add(i.input)("input",a);const o=T.a.getSelf(),r=Object(Fs.a)(o.phone);r&&(n.validate=()=>!!n.value.match(/\d/),n.value="+"+r.code.country_code);const c=new Xe({inputFields:e,listenerSetter:this.listenerSetter,doNotEditAvatar:!0,nextBtn:this.btnConfirm,avatarSize:100});t.append(s.container,i.container,c.avatarElem),this.container.append(t,n.container),this.show()}}class Zi extends V{init(){this.container.id="contacts-container";const e=$({icon:"add",className:"is-visible"});this.content.append(e),Object(l.b)(e,()=>{new Ji},{listenerSetter:this.listenerSetter}),this.inputSearch=new j("Search",e=>{this.openContacts(e)}),this.listenerSetter.add(a.default)("contacts_update",e=>{T.a.isContact(e)?this.sortedUserList.add(e):this.sortedUserList.delete(e)}),this.title.replaceWith(this.inputSearch.container),this.middleware=Object(ks.a)()}createList(){const e=new Os,t=e.list;return t.id="contacts",t.classList.add("contacts-container"),Do.setListClickListener(t,()=>{this.close()},void 0,!0),e}onClose(){this.middleware.clean()}onOpenAfterTimeout(){!h.IS_MOBILE&&ai(!0)&&this.inputSearch.input.focus()}openContacts(e){this.init&&(this.init(),this.init=null),this.middleware.clean();const t=this.middleware.get();this.scrollable.onScrolledBottom=null,this.scrollable.container.textContent="",T.a.getContacts(e,void 0,"online").then(e=>{if(!t())return;const s=this.sortedUserList=this.createList();let i=()=>{const t=yt.a.windowH/72*1.25|0;e.splice(0,t).forEach(e=>{s.add(e)}),e.length||(i=void 0,this.scrollable.onScrolledBottom=null)};i(),this.scrollable.onScrolledBottom=()=>{i?i():this.scrollable.onScrolledBottom=null},Object(x.a)(this.scrollable.container,s.list)})}open(){return this.openContacts(),super.open()}}class en extends V{init(){if(this.container.id="chats-archived-container",this.setTitle("ArchivedChats"),!Do.sortedLists[en.filterId]){const e=Do.createChatList();Do.generateScrollable(e,en.filterId).container.append(e),Do.setListClickListener(e,null,!0)}const e=Do.scrollables[en.filterId];this.scrollable.container.replaceWith(e.container),this.scrollable=e}onOpen(){this.init&&(this.init(),this.init=null),this.wasFilterId=Do.filterId,Do.setFilterId(en.filterId),Do.onTabChange()}onOpenAfterTimeout(){Do.sortedLists[this.wasFilterId].clear()}onClose(){Do.setFilterId(this.wasFilterId),Do.onTabChange()}onCloseAfterTimeout(){return Do.sortedLists[en.filterId].clear(),super.onCloseAfterTimeout()}}en.filterId=1;var tn=s(7),sn=s(57);class nn{constructor(e){if(this.container=document.createElement("div"),this.container.classList.add("sidebar-left-section"),e.fakeGradientDelimiter)this.container.append(on()),this.container.classList.add("with-fake-delimiter");else if(e.noDelimiter)this.container.classList.add("no-delimiter");else{const e=document.createElement("hr");this.container.append(e)}this.content=this.generateContentElement(),e.name&&(this.title=document.createElement("div"),this.title.classList.add("sidebar-left-h2","sidebar-left-section-name"),Object(A.i18n_)({element:this.title,key:e.name}),this.content.append(this.title)),e.caption&&(this.caption=this.generateContentElement(),this.caption.classList.add("sidebar-left-section-caption"),!0!==e.caption&&Object(A.i18n_)({element:this.caption,key:e.caption}))}generateContentElement(){const e=document.createElement("div");return e.classList.add("sidebar-left-section-content"),this.container.append(e),e}}const an=(e,t,s)=>{const i=new nn({name:t,caption:s});return e.append(i.container),i.content},on=()=>{const e=document.createElement("div");return e.classList.add("gradient-delimiter"),e},rn=new class extends K{constructor(){super({sidebarEl:document.getElementById("column-left"),navigationType:"left"}),this.searchGroups={},this.inputSearch=new j("Search");const e=this.sidebarEl.querySelector(".item-main .sidebar-header");e.append(this.inputSearch.container);const t=()=>{new Zi(this).open()};this.backBtn=this.sidebarEl.querySelector(".sidebar-back-button");const s={icon:"archive",text:"ArchivedChats",onClick:()=>{new en(this).open()},verify:()=>!!i.a.dialogsStorage.getFolder(1).length},n=new dt.a({toggle:!0,checked:"night"===a.default.getTheme().name});n.input.addEventListener("change",()=>{a.default.settings.theme=n.input.checked?"night":"day",k.default.pushToState("settings",a.default.settings),mo.applyCurrentTheme()}),a.default.addEventListener("theme_change",()=>{n.setValueSilently("night"===a.default.getTheme().name)});const o=[{icon:"saved",text:"SavedMessages",onClick:()=>{setTimeout(()=>{mo.setPeer(mo.myId)},0)}},s,{icon:"user",text:"Contacts",onClick:t},{icon:"settings",text:"Settings",onClick:()=>{new $i(this).open()}},{icon:"darkmode",text:"DarkMode",onClick:()=>{},checkboxField:n},{icon:"animations",text:"Animations",onClick:()=>{},checkboxField:new dt.a({toggle:!0,checked:!0,stateKey:"settings.animationsEnabled"})},{icon:"help",text:"TelegramFeatures",onClick:()=>{mo.openUsername("TelegramTips")}},{icon:"bug",text:"ReportBug",onClick:()=>{const e=document.createElement("a");e.target="_blank",e.href="https://bugs.telegram.org/?tag_ids=40&sort=time",document.body.append(e),e.click(),setTimeout(()=>{e.remove()},0)}},{icon:"char z",text:"ChatList.Menu.SwitchTo.Z",onClick:()=>{sn.a.set({kz_version:"Z"}).then(()=>{location.href="https://web.telegram.org/z/"})},verify:()=>tn.a.isMainDomain},{icon:"char w",text:"ChatList.Menu.SwitchTo.Webogram",onClick:()=>{location.href="https://web.telegram.org/?legacy=1"},verify:()=>tn.a.isMainDomain}];this.toolsBtn=Ie({},"bottom-right",o,e=>{o.forEach(e=>{e.verify&&e.element.classList.toggle("hide",!e.verify())})}),this.toolsBtn.classList.remove("tgico-more"),this.toolsBtn.classList.add("sidebar-tools-button","is-visible"),this.backBtn.parentElement.insertBefore(this.toolsBtn,this.backBtn);const r=this.toolsBtn.querySelector(".btn-menu"),c=document.createElement("a");c.href="https://github.com/morethanwords/tweb/blob/master/CHANGELOG.md",c.target="_blank",c.rel="noopener noreferrer",c.classList.add("btn-menu-footer"),c.addEventListener(l.a,e=>{e.stopPropagation(),Object(se.c)()});const d=document.createElement("span");d.classList.add("btn-menu-footer-text"),d.innerHTML="Telegram Web"+tn.a.suffix+" alpha "+tn.a.versionFull,c.append(d),r.classList.add("has-footer"),r.append(c),this.newBtnMenu=Ie({},"top-left",[{icon:"newchannel",text:"NewChannel",onClick:()=>{new Yi(this).open()}},{icon:"newgroup",text:"NewGroup",onClick:()=>{new jt(this).open({peerId:0,type:"chat",skippable:!1,takeOut:e=>{new Y(this).open(e)},title:"GroupAddMembers",placeholder:"SendMessageTo"})}},{icon:"newprivate",text:"NewPrivateChat",onClick:t}]),this.newBtnMenu.className="btn-circle rp btn-corner z-depth-1 btn-menu-toggle animated-button-icon",this.newBtnMenu.insertAdjacentHTML("afterbegin",'\n \n \n '),this.newBtnMenu.id="new-menu",e.nextElementSibling.append(this.newBtnMenu),this.inputSearch.input.addEventListener("focus",()=>this.initSearch(),{once:!0}),this.archivedCount=document.createElement("span"),this.archivedCount.className="archived-count badge badge-24 badge-gray",s.element.append(this.archivedCount),a.default.addEventListener("dialogs_archived_unread",e=>{this.archivedCount.innerText=""+Object(C.c)(e.count,1),this.archivedCount.classList.toggle("hide",!e.count)}),T.a.getTopPeers("correspondents"),k.default.getState().then(e=>{const t=e.recentSearch||[];for(let e=0,s=t.length;e{this.backBtn.click()};this.searchGroups={contacts:new O("Search.Chats","contacts",void 0,void 0,void 0,void 0,s),globalContacts:new O("Search.Global","contacts",void 0,void 0,void 0,void 0,s),messages:new O("Search.Messages","messages"),people:new O(!1,"contacts",!0,"search-group-people",!0,!1,s),recent:new O("Recent","contacts",!0,"search-group-recent",!0,!0,s)};const n=this.searchSuper=new $s({mediaTabs:[{inputFilter:"inputMessagesFilterEmpty",name:"FilterChats",type:"chats"},{inputFilter:"inputMessagesFilterPhotoVideo",name:"SharedMediaTab2",type:"media"},{inputFilter:"inputMessagesFilterUrl",name:"SharedLinksTab2",type:"links"},{inputFilter:"inputMessagesFilterDocument",name:"SharedFilesTab2",type:"files"},{inputFilter:"inputMessagesFilterMusic",name:"SharedMusicTab2",type:"music"},{inputFilter:"inputMessagesFilterRoundVoice",name:"SharedVoiceTab2",type:"voice"}],scrollable:t,searchGroups:this.searchGroups,asChatList:!0,hideEmptyTabs:!1,showSender:!0});e.prepend(n.nav.parentElement.parentElement),t.container.append(n.container);n.setQuery({peerId:0,folderId:0}),n.selectTab(0),n.load(!0);let a=[],o=0,r=0,l=0;const c=()=>{this.inputSearch.container.classList.toggle("is-picked-twice",2===a.length),this.inputSearch.container.classList.toggle("is-picked",!!a.length),a.length?this.inputSearch.input.style.setProperty("--paddingLeft",a[a.length-1].getBoundingClientRect().right-this.inputSearch.input.getBoundingClientRect().left+"px"):this.inputSearch.input.style.removeProperty("--paddingLeft")},d=document.createElement("div");d.classList.add("search-helper"),d.addEventListener("click",e=>{const t=Object(Ce.a)(e.target,"selector-user");if(!t)return;const s=t.dataset.key;if(0===s.indexOf("date_")){const[e,t,i]=s.split("_");r=+t,l=+i}else o=+s;t.addEventListener("click",()=>{p(t)}),this.inputSearch.container.append(t),this.inputSearch.onChange(this.inputSearch.value=""),a.push(t),c()}),n.nav.parentElement.append(d);const u=(e,t)=>{const s=document.createElement("div");s.classList.add("selector-user");const i=document.createElement("avatar-element");return i.classList.add("selector-user-avatar","tgico"),i.setAttribute("dialog","1"),i.classList.add("avatar-30"),s.dataset.key=""+e,"number"==typeof e?(void 0===t&&(t=new ft.a({peerId:e}).element),i.setAttribute("peer",""+e)):i.classList.add("tgico-calendarfilter"),t&&("string"==typeof t?s.innerHTML=t:(Object(x.a)(s,t),s.append(t))),s.insertAdjacentElement("afterbegin",i),s},p=e=>{0===e.dataset.key.indexOf("date_")?r=l=0:o=0,e.remove(),a.findAndSplice(t=>t===e),setTimeout(()=>{c(),this.inputSearch.onChange(this.inputSearch.value)},0)};this.inputSearch.onClear=()=>{a.forEach(e=>{p(e)})},this.inputSearch.onChange=e=>{if(n.cleanupHTML(),n.setQuery({peerId:o,folderId:o?void 0:0,query:e,minDate:r,maxDate:l}),n.load(!0),d.innerHTML="",n.nav.classList.remove("hide"),!o&&e.trim()){const t=n.middleware.get();Promise.all([i.a.getConversationsAll(e).then(e=>e.map(e=>e.peerId)),T.a.getContacts(e,!0)]).then(e=>{if(!t())return;new Set(e[0].concat(e[1])).forEach(e=>{d.append(u(e))}),n.nav.classList.toggle("hide",!!d.innerHTML)})}if(!r&&e.trim()){const t=[];Object(re.a)(e,t),t.forEach(e=>{d.append(u("date_"+e.minDate+"_"+e.maxDate,e.title))}),n.nav.classList.toggle("hide",!!d.innerHTML)}},n.tabs.inputMessagesFilterEmpty.addEventListener("mousedown",e=>{const t=Object(mt.a)(e.target,"LI");if(!t)return;const s=Object(Ce.a)(t,"search-group");if(!s||s.classList.contains("search-group-recent")||s.classList.contains("search-group-people"))return;const i=+t.getAttribute("data-peer-id");k.default.getState().then(e=>{const t=e.recentSearch||[];if(t[0]!==i){t.findAndSplice(e=>e===i),t.unshift(i),t.length>20&&(t.length=20),k.default.pushToState("recentSearch",t);for(const e of t)k.default.requestPeer(e,"recentSearch")}})},{capture:!0});let m=document.createElement("div");m.classList.add("search-group-scrollable"),m.append(this.searchGroups.people.list),this.searchGroups.people.container.append(m);new P.a(m);let g,b=!0;const v=Object(D.a)(e.parentElement,"zoom-fade",150,e=>{g&&clearTimeout(g),0!==e||b||(n.selectTab(0,!1),this.inputSearch.onClearClick(),g=window.setTimeout(()=>{g=0,this.newBtnMenu.classList.remove("is-hidden")},150)),b=!1});v(0);const f=()=>{this.toolsBtn.classList.remove("is-visible"),this.backBtn.classList.add("is-visible"),this.newBtnMenu.classList.add("is-hidden"),this.toolsBtn.parentElement.firstElementChild.classList.toggle("state-back",!0),h.IS_MOBILE_SAFARI||B.a.findItemByType("global-search")||B.a.pushItem({onPop:()=>{s()},type:"global-search"}),v(1)};this.inputSearch.input.addEventListener("focus",f),f(),this.backBtn.addEventListener("click",e=>{this.toolsBtn.classList.add("is-visible"),this.backBtn.classList.remove("is-visible"),this.toolsBtn.parentElement.firstElementChild.classList.toggle("state-back",!1),B.a.removeByType("global-search"),v(0)});const y=document.createElement("button");y.classList.add("btn-icon","tgico-close"),this.searchGroups.recent.nameEl.append(y),y.addEventListener("click",()=>{this.searchGroups.recent.clear(),k.default.pushToState("recentSearch",[])})}};de.a.appSidebarLeft=rn;var ln=rn;class cn{constructor(e){this.chat=e,this.bubbles=[],this.detailsMap=new Map,this.groups=[],this.newGroupDiff=121}removeBubble(e){const t=this.detailsMap.get(e);t&&(t.group.length&&(t.group.findAndSplice(t=>t.bubble===e),t.group.length?this.updateGroup(t.group):this.groups.findAndSplice(e=>e===t.group)),this.detailsMap.delete(e))}addBubble(e,t,s){const i=t.date,n=t.mid;let o,r=t.viaBotId||t.fromId;r===a.default.myId&&t.peerId===a.default.myId&&t.fwdFromId===r&&(r=-r),this.removeBubble(e);const l={bubble:e,mid:n,timestamp:i};if(this.bubbles.length){let e,t=-1;for(let e=0;es.mid)break}if(-1!==t&&(e=this.bubbles[t]),e){o=e.group;let t=0,s=0;for(;tt.mid===e);t&&this.updateGroup(t.group)}cleanup(){this.bubbles=[],this.groups=[],this.detailsMap.clear()}}class dn extends ct.b{constructor(e,t,s={}){if(super("popup-date-picker",s.noButtons?[]:[{langKey:"JumpToDate",callback:()=>{this.onPick&&this.onPick(this.selectedDate.getTime()/1e3|0)}},{langKey:"Cancel",isCancel:!0}],Object.assign({body:!0,overlayClosable:!0},s)),this.onPick=t,this.options=s,this.onPrevClick=e=>{this.selectedMonth.setMonth(this.selectedMonth.getMonth()-1),this.setMonth(),this.selectedMonth.getTime()===this.minMonth.getTime()&&this.prevBtn.setAttribute("disabled","true"),this.nextBtn.removeAttribute("disabled")},this.onNextClick=e=>{this.selectedMonth.setMonth(this.selectedMonth.getMonth()+1),this.setMonth(),this.selectedMonth.getTime()===this.maxMonth.getTime()&&this.nextBtn.setAttribute("disabled","true"),this.prevBtn.removeAttribute("disabled")},this.onDateClick=e=>{const t=e.target;if(!t.dataset.timestamp)return;if(this.selectedEl){if(this.selectedEl===t)return;this.selectedEl.classList.remove("active")}this.selectedEl=t,t.classList.add("active");const s=+t.dataset.timestamp;this.selectedDate=new Date(s),this.setTitle(),this.setTimeTitle()},this.minDate=s.minDate||new Date("2013-08-01T00:00:00"),e{const n=""+e;this.listenerSetter.add(t.input)("input",a=>{let o=t.value.replace(/\D/g,"");o.length>2?o=o.slice(0,2):(1===o.length&&+o[0]>+n[0]||2===o.length&&+o>e)&&(2===o.length&&i&&i(+o[1]),o="0"+o[0]),t.setValueSilently(o),s(o.length)})};this.hoursInputField=new F.b({plainText:!0}),this.minutesInputField=new F.b({plainText:!0}),s(23,this.hoursInputField,e=>{2===e&&this.minutesInputField.input.focus(),this.setTimeTitle()},e=>{this.minutesInputField.value=(e+this.minutesInputField.value).slice(0,2)}),s(59,this.minutesInputField,e=>{e||this.hoursInputField.input.focus(),this.setTimeTitle()}),this.selectedDate=e,e.setMinutes(e.getMinutes()+10),this.hoursInputField.setValueSilently(("0"+e.getHours()).slice(-2)),this.minutesInputField.setValueSilently(("0"+e.getMinutes()).slice(-2)),e.setHours(0,0,0,0),this.timeDiv.append(this.hoursInputField.container,t,this.minutesInputField.container),Object(l.b)(this.btnConfirm,()=>{this.onPick&&(this.selectedDate.setHours(+this.hoursInputField.value||0,+this.minutesInputField.value||0,0,0),this.onPick(this.selectedDate.getTime()/1e3|0)),this.hide()},{listenerSetter:this.listenerSetter}),this.body.append(this.timeDiv),this.prevBtn.classList.add("primary"),this.nextBtn.classList.add("primary")}const i=document.createElement("div");i.classList.add("popup-centerer"),i.append(this.container),this.element.append(i),e.setHours(0,0,0,0),this.selectedDate=e,this.maxDate=s.maxDate||new Date,this.maxDate.setHours(0,0,0,0),this.selectedMonth=new Date(this.selectedDate),this.selectedMonth.setDate(1),this.maxMonth=new Date(this.maxDate),this.maxMonth.setDate(1),this.minMonth=new Date(this.minDate),this.minMonth.setHours(0,0,0,0),this.minMonth.setDate(1),this.selectedMonth.getTime()===this.minMonth.getTime()&&this.prevBtn.setAttribute("disabled","true"),this.selectedMonth.getTime()===this.maxMonth.getTime()&&this.nextBtn.setAttribute("disabled","true"),s.noTitle&&(this.setTitle=()=>{}),this.setTimeTitle(),this.setTitle(),this.setMonth()}setTimeTitle(){if(this.btnConfirm&&this.selectedDate){let e,t=[];const s=new Date;s.setHours(0,0,0,0);const i={minute:"2-digit",hour:"2-digit"},n=new Date(this.selectedDate.getTime());if(n.setHours(+this.hoursInputField.value,+this.minutesInputField.value),this.selectedDate.getTime()===s.getTime())e="Schedule.SendToday";else{e="Schedule.SendDate";const i={month:"short",day:"numeric"};n.getFullYear()!==s.getFullYear()&&(i.year="numeric"),t.push(new A.default.IntlDateElement({date:n,options:i}).element)}t.push(new A.default.IntlDateElement({date:n,options:i}).element),this.btnConfirm.firstChild.replaceWith(Object(A.i18n)(e,t))}}setTitle(){this.title.textContent="",this.title.append(new A.default.IntlDateElement({date:this.selectedDate,options:{day:"numeric",month:"long",weekday:"short"}}).element)}renderElement(e,t=""){const s=document.createElement("button");return s.classList.add("btn-icon","date-picker-month-date"),e&&s.setAttribute("disabled","true"),t&&s.append(t),s}setMonth(){const e=new Date(this.selectedMonth),t={year:"numeric",month:this.timeDiv&&v.b.isMobile?"short":"long"};this.monthTitle.textContent="",this.monthTitle.append(new A.default.IntlDateElement({date:e,options:t}).element),this.month&&this.month.remove(),this.month=document.createElement("div"),this.month.classList.add("date-picker-month");const s=new Date,i=s.getDay();1!==i&&s.setHours(-24*(i-1));for(let e=0;e<7;++e){const e=this.renderElement(!0,new A.default.IntlDateElement({date:s,options:{weekday:"narrow"}}).element);e.classList.remove("date-picker-month-date"),e.classList.add("date-picker-month-day"),this.month.append(e),s.setDate(s.getDate()+1)}let n=e.getDay()-1;-1===n&&(n=6);const a=new Date(e.getTime());a.setDate(a.getDate()-n-1);for(let e=0;ethis.maxDate||e{for(const t of e){const e=t.boundingClientRect,s=t.target.parentElement,i=t.rootBounds;e.bottom=i.top&&e.bottom{let t=e.filter(e=>e.boundingClientRect.top<0).sort((e,t)=>e.boundingClientRect.top-t.boundingClientRect.top)[0];if(!t)return;let s=t.isIntersecting?t.target:t.target.nextElementSibling;this.handler(!0,s)},{root:this.container})}addSentinel(e,t){const s=document.createElement("div");return s.classList.add("sticky_sentinel",t),e.appendChild(s)}observeStickyHeaderChanges(e){const t=this.addSentinel(e,"sticky_sentinel--top");this.headersObserver.observe(t),this.elementsObserver.observe(e)}disconnect(){this.headersObserver.disconnect(),this.elementsObserver.disconnect()}unobserve(e,t){this.elementsObserver.unobserve(e),this.headersObserver.unobserve(t)}}a.default.addEventListener("replies_updated",e=>{const t=e;Array.from(document.querySelectorAll(`replies-element[data-post-key="${t.peerId}_${t.mid}"]`)).forEach(e=>{e.message=t,e.render()})});class un extends HTMLElement{constructor(){super(),this.updated=!1}init(){this.render(),this.dataset.postKey=this.message.peerId+"_"+this.message.mid,this.classList.add("replies","replies-"+this.type)}render(){const e=this.message.replies;if("footer"===this.type){let t,s;if(this.firstElementChild&&(t=this.firstElementChild),(null==e?void 0:e.recent_repliers)?(t&&!t.classList.contains("replies-footer-avatars")&&(this.innerHTML="",t=null),t||(t=document.createElement("div"),t.classList.add("replies-footer-avatars")),e.recent_repliers.slice().reverse().forEach((e,s)=>{let i=t.children[s];i||(i=new ko,i.setAttribute("dialog","0"),i.classList.add("avatar-30"),i.lazyLoadQueue=this.lazyLoadQueue,this.loadPromises&&(i.loadPromises=this.loadPromises)),i.setAttribute("peer",""+o.a.getPeerId(e)),i.parentNode||t.append(i)}),Array.from(t.children).slice(e.recent_repliers.length).forEach(e=>e.remove())):(t&&!t.classList.contains("tgico-comments")&&(t.remove(),t=null),t||(t=document.createElement("span"),t.classList.add("tgico-comments"))),t.parentElement||this.append(t),s=e?e.replies?Object(A.i18n)("Comments",[e.replies]):Object(A.i18n)("LeaveAComment"):Object(A.i18n)("ViewInChat"),e){const t=i.a.getHistoryStorage(-e.channel_id);let s=!1;e.replies&&(s=void 0!==e.read_max_id&&void 0!==e.max_id?e.read_max_id${(null==e?void 0:e.replies)?Object(C.c)(e.replies,0):""}`;!e||this.updated||this.message.pFlags.is_outgoing||(i.a.subscribeRepliesThread(this.message.peerId,this.message.mid),i.a.updateMessage(this.message.peerId,this.message.mid,"replies_updated"),this.updated=!0),this.loadPromises&&(this.loadPromises=void 0)}}var pn,mn;customElements.define("replies-element",un),(mn=pn||(pn={})).setTime=(e,t,s,i,n)=>{var a,o;const r=new Date(1e3*t.date);let l=("0"+r.getHours()).slice(-2)+":"+("0"+r.getMinutes()).slice(-2);if(t.views){const n=t.post_author||(null===(a=t.fwd_from)||void 0===a?void 0:a.post_author);if(s.classList.add("channel-post"),l=''+Object(C.c)(t.views,1)+' '+(n?Z.b.wrapEmojiText(n)+", ":"")+l,!(null===(o=t.fwd_from)||void 0===o?void 0:o.saved_from_msg_id)&&"pinned"!==e.type){const e=document.createElement("div");e.classList.add("bubble-beside-button","forward"),e.innerHTML='\n \n \n \n \n \n ',i.append(e),s.classList.add("with-beside-button")}}t.edit_date&&"scheduled"!==e.type&&!t.pFlags.edit_hide&&(s.classList.add("is-edited"),l='edited '+l),"pinned"!==e.type&&t.pFlags.pinned&&(s.classList.add("is-pinned"),l=''+l);const c=Object(re.e)(r)+(t.edit_date?"\nEdited: "+Object(re.e)(new Date(1e3*t.edit_date)):"")+(t.fwd_from?"\nOriginal: "+Object(re.e)(new Date(1e3*t.fwd_from.date)):""),d=document.createElement("span");return d.classList.add("time","tgico"),d.title=c,d.innerHTML=`${l}
${l}
`,n.append(d),d},mn.renderReplies=({bubble:e,bubbleContainer:t,message:s,messageDiv:i,loadPromises:n,lazyLoadQueue:a})=>{const o=!e.classList.contains("sticker")&&!e.classList.contains("emoji-big")&&!e.classList.contains("round"),r=new un;return r.message=s,r.type=o?"footer":"beside",r.loadPromises=n,r.lazyLoadQueue=a,r.init(),t.prepend(r),o},mn.setReply=({chat:e,bubble:t,bubbleContainer:s,message:i})=>{const n=!s;n&&(s=t.querySelector(".bubble-content"));const a=n?s.querySelector(".reply"):null;if(!i.reply_to_mid)return a&&a.remove(),void t.classList.remove("is-reply");const o=i.reply_to.reply_to_peer_id?e.appPeersManager.getPeerId(i.reply_to.reply_to_peer_id):e.peerId;let r,l=e.appMessagesManager.getMessageByPeer(o,i.reply_to_mid);"messageEmpty"===l._?(e.appMessagesManager.wrapSingleMessage(o,i.reply_to_mid),e.bubbles.needUpdate.push({replyToPeerId:o,replyMid:i.reply_to_mid,mid:i.mid}),r=Object(A.i18n)("Loading")):r=new ft.a({peerId:l.fromId||l.fwdFromId,dialog:!1,onlyFirstName:!1,plainText:!1}).element;const c=Es(r,void 0,l);a?a.replaceWith(c):s.append(c),t.classList.add("is-reply")};var gn=s(119),bn=s(121);function vn(e,t,s){const i=e.getBoundingClientRect(),n="center"===s?Math.ceil(i.left+(i.right-i.left)/2+1):Math.ceil(i.left+1),a="bottom"===t?Math.floor(i.top+i.height-1):Math.ceil(i.top+1);return document.elementFromPoint(n,a)}function fn(e){e.style.display="none",e.offsetLeft,e.style.display=""}de.a.getElementByPoint=vn;var yn=s(76),wn=s(140),Ln=s(106),Sn=s(75);const En={keywords:{},version:0,langCode:tn.a.langPackCode};class Mn{constructor(){this.keywordLangPacks={},this.indexedLangPacks={},this.getKeywordsPromises={}}getEmojiKeywords(e=tn.a.langPackCode){const t=this.getKeywordsPromises[e];if(t)return t;const s="emojiKeywords_"+e;return this.getKeywordsPromises[e]=Sn.a.get(s).then(t=>(Object(wn.a)(t)||(t={}),Object(L.k)(En,t),t.langCode=e,this.keywordLangPacks[e]=t,rt.a.invokeApi("messages.getEmojiKeywordsDifference",{lang_code:t.langCode,from_version:t.version}).then(e=>{t.version=e.version;const i=t.keywords,n=e.keywords;for(let e=0,t=n.length;et)))}getBothEmojiKeywords(){const e=[this.getEmojiKeywords()];return A.default.lastRequestedLangCode!==tn.a.langPackCode&&e.push(this.getEmojiKeywords(A.default.lastRequestedLangCode)),this.recent||e.push(this.getRecentEmojis()),Promise.all(e)}indexEmojis(){this.index||(this.index=new Ln.a(void 0,2));for(const e in this.keywordLangPacks){if(this.indexedLangPacks[e])continue;const t=this.keywordLangPacks[e].keywords;for(const e in t){const s=t[e];this.index.indexObject(s,e)}this.indexedLangPacks[e]=!0}}searchEmojis(e){let t;if(this.indexEmojis(),(e=e.toLowerCase().replace(/_/g," ")).trim()){const s=this.index.search(e);t=Array.from(s).reduce((e,t)=>e.concat(t),[])}else t=this.recent.concat(Mn.POPULAR_EMOJI).slice(0,36);return t=Array.from(new Set(t)),t}getRecentEmojis(){return this.getRecentEmojisPromise?this.getRecentEmojisPromise:this.getRecentEmojisPromise=k.default.getState().then(e=>this.recent=Array.isArray(e.recentEmoji)?e.recentEmoji:[])}pushRecentEmoji(e){e=Z.b.fixEmoji(e),this.getRecentEmojis().then(t=>{t.findAndSplice(t=>t===e),t.unshift(e),t.length>36&&(t.length=36),k.default.pushToState("recentEmoji",t),a.default.dispatchEvent("emoji_recent",e)})}}Mn.POPULAR_EMOJI=["😂","😘","❤️","😍","😊","😁","👍","☺️","😔","😄","😭","💋","😒","😳","😜","🙈","😉","😃","😢","😝","😱","😡","😏","😞","😅","😚","🙊","😌","😀","😋","😆","👌","😐","😕"];const In=new Mn;de.a&&(de.a.appEmojiManager=In);var Cn=In,kn=s(126),Tn=s(9);const Pn=new Set;function xn(e,t,s=!1,i=!1){const n=document.createElement("span");let o;if(n.classList.add("super-emoji"),i&&!Tn.a?o=Z.a.wrapSingleEmoji(e):(e=Z.a.fixEmoji(e),o=Z.a.wrapEmojiText(e)),n.innerHTML=o,n.children.length>1){const e=n.firstElementChild;n.innerHTML="",n.append(e)}if(n.firstElementChild&&!Tn.a){const e=n.firstElementChild,t=e.src;if(!Pn.has(t)){e.setAttribute("loading","lazy");const s=document.createElement("span");s.classList.add("emoji-placeholder"),a.default.settings.animationsEnabled&&(e.style.opacity="0",s.style.opacity="1"),e.addEventListener("load",()=>{Object(_e.b)(()=>{a.default.settings.animationsEnabled&&(e.style.opacity="",s.style.opacity=""),n.classList.remove("empty"),Pn.add(t)})},{once:!0}),n.append(s)}}s?t.prepend(n):t.appendChild(n)}function An(e){return Object(Ce.a)(e,"super-emoji")?3===e.nodeType?e.nodeValue:("SPAN"===e.tagName&&!e.classList.contains("emoji")&&e.firstElementChild&&(e=e.firstElementChild),e.getAttribute("alt")||e.innerText):""}class On{constructor(){this.closeScrollTop=0,this.onContentClick=e=>{Object(c.a)(e);const t=An(e.target);if(!t)return;const s=mo.chat.input.messageInput;let i=s.innerHTML;const n=Z.a.wrapEmojiText(t,!0);let a=!1;if(window.getSelection){const e=pe.IS_TOUCH_SUPPORTED?void 0:Jn.getSavedRange();let t=window.getSelection();if(e&&(t.removeAllRanges(),t.addRange(e)),t.getRangeAt&&t.rangeCount){var o=document.createElement("div");o.innerHTML=n;var r=o.firstChild,l=t.getRangeAt(0);l.deleteContents(),l.insertNode(r),l.setStart(r,0),a=!0,setTimeout(()=>{(l=document.createRange()).setStartAfter(r),l.collapse(!0),t.removeAllRanges(),t.addRange(l)},0)}}a&&s.innerHTML!==i||s.insertAdjacentHTML("beforeend",n);const d=new Event("input",{bubbles:!0,cancelable:!0});s.dispatchEvent(d)}}init(){this.content=document.getElementById("content-emoji");const e=["Emoji.SmilesAndPeople","Emoji.AnimalsAndNature","Emoji.FoodAndDrink","Emoji.TravelAndPlaces","Emoji.ActivityAndSport","Emoji.Objects","Emoji.Flags","Skin Tones"],t={},s=new Map([["Emoji.Recent",[]]]);for(const t in kn.a.Emoji){const i=""+kn.a.Emoji[t],n=e[+i[0]-1];if(!n)continue;let a=s.get(n);a||(a=[],s.set(n,a)),a[+i.slice(1)||0]=t}s.delete(e.pop()),s.forEach((e,s)=>{const i=document.createElement("div");i.classList.add("emoji-category");const n=document.createElement("div");n.classList.add("category-title"),n.append(Object(A.i18n)(s));const a=document.createElement("div");a.classList.add("super-emojis"),i.append(n,a),e.forEach(e=>{xn(Object(ne.a)(e),a,!1)}),t[s]=i});const i=this.menu=this.content.previousElementSibling,n=this.scroll=new P.b(this.content,"EMOJI"),o=Object(se.f)(this.content,!0);Promise.all([Object(yn.a)(200),Cn.getRecentEmojis().then(e=>{const t=!!e.length,s=t?0:1;this.menu.children[0].classList.toggle("hide",!t),this.menu.children[s].classList.add("active");const a=Yn.menuOnClick(i,n,void 0,s);return this.stickyIntersector=a.stickyIntersector,this.setMenuActive=a.setActive,e})]).then(([s,i])=>{o.remove(),this.recentItemsDiv=t["Emoji.Recent"].querySelector(".super-emojis");for(const e of i)xn(e,this.recentItemsDiv);this.recentItemsDiv.parentElement.classList.toggle("hide",!this.recentItemsDiv.childElementCount),e.unshift("Emoji.Recent"),e.map(e=>{const s=t[e];return s||console.error("no div by category:",e),n.container.append(s),this.stickyIntersector.observeStickyHeaderChanges(s),s})}),this.content.addEventListener("click",this.onContentClick),this.init=null,a.default.addEventListener("emoji_recent",e=>{const t=Array.from(this.recentItemsDiv.children);for(let s=0,i=t.length;s{this.closeScrollTop=this.scroll.scrollTop})}onClose(){}}var _n=s(114),Fn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class jn{constructor(e,t,s,i=!0){this.element=e,this.group=t,this.scrollable=s,this.scrollPromise=Promise.resolve(),this.timeout=0,this.onScroll=()=>{this.timeout?clearTimeout(this.timeout):this.scrollPromise=Object(oe.a)(),this.timeout=window.setTimeout(()=>{this.timeout=0,this.scrollPromise.resolve()},150)},this.processInvisibleDiv=e=>this.scrollPromise.then(()=>Fn(this,void 0,void 0,(function*(){if(this.lazyLoadQueue.intersector.isVisible(e))return;const t=e.querySelector("video"),s=e.querySelector("img");if(s&&(s&&s.classList.remove("hide"),yield Object(_e.a)()),!this.lazyLoadQueue.intersector.isVisible(e)&&t){t.remove(),t.src="",t.load();I.a.getAnimations(t).forEach(e=>{I.a.checkAnimation(e,!0,!0)})}}))),this.lazyLoadQueue=new te.c(void 0,(e,t)=>{t?this.processVisibleDiv(e):this.processInvisibleDiv(e)}),i&&this.attach()}attach(){this.scrollable.container.addEventListener("scroll",this.onScroll)}detach(){this.clear(),this.scrollable.container.removeEventListener("scroll",this.onScroll)}clear(){this.lazyLoadQueue.clear()}processVisibleDiv(e){if(e.querySelector("video"))return;this.lazyLoadQueue.push({div:e,load:()=>{const t=e.dataset.docId,s=M.a.getDoc(t);return this.scrollPromise.then(()=>{const t=vs({doc:s,container:e,lazyLoadQueue:null,group:this.group,noInfo:!0}).loadPromise;return t.finally(()=>{const t=e.querySelector("video");e.style.opacity="";const s=e.querySelector("img");s&&s.classList.add("hide"),t&&!t.parentElement&&setTimeout(()=>{t.src="",t.load();I.a.getAnimations(t).forEach(e=>{I.a.checkAnimation(e,!0,!0)})},0),this.lazyLoadQueue.intersector.isVisible(e)||this.processInvisibleDiv(e)}),t})}})}add(e,t=this.element){var s;let i=e.w,n=e.h;n<100&&(i*=100/n,n=100);const a=Math.min(300,400,i),o=Object(_n.a)(i,n,a,100),r=document.createElement("div");r.classList.add("gif","fade-in-transition"),r.style.width=o.width+"px",r.style.opacity="0",r.dataset.docId=e.id,t.append(r),this.lazyLoadQueue.observe(r);const l=M.a.getThumb(e,!1);let c;!!l&&(c=new Image,c.classList.add("media-poster"),l.cacheContext.url||l.promise.then(()=>{c.src=l.cacheContext.url}));const d=()=>{c&&(r.append(c),r.style.opacity="")};(null===(s=null==l?void 0:l.cacheContext)||void 0===s?void 0:s.url)?Object(Rt.a)(c,l.cacheContext.url,d):d()}}class Dn{init(){this.content=document.getElementById("content-gifs");const e=this.content.firstElementChild;e.addEventListener("click",Yn.onMediaClick);const t=new P.b(this.content,"GIFS"),s=new jn(e,$n,t),i=Object(se.f)(this.content,!0);rt.a.invokeApi("messages.getSavedGifs",{hash:0}).then(e=>{"messages.savedGifs"===e._&&e.gifs.forEach((t,i)=>{e.gifs[i]=t=M.a.saveDoc(t),s.add(t)}),i.remove()}),Jn.addLazyLoadQueueRepeat(s.lazyLoadQueue,s.processInvisibleDiv),this.init=null}onClose(){}}var Bn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Rn{constructor(e,t){this.regularLazyLoadQueue=e,this.group=t,this.animatedDivs=new Set,this.checkAnimationContainer=(e,t)=>{I.a.getAnimations(e).forEach(e=>{t?I.a.checkAnimation(e,!1):I.a.checkAnimation(e,!0,!0)})},this.processVisibleDiv=e=>{const t=e.dataset.docId,s=M.a.getDoc(t),i=v.b.active.esgSticker.width,n=Ls({doc:s,div:e,width:i,height:i,lazyLoadQueue:null,group:this.group,onlyThumb:!1,play:!0,loop:!0});return n.then(()=>{this.checkAnimationContainer(e,this.lazyLoadQueue.intersector.isVisible(e))}),n},this.processInvisibleDiv=e=>{const t=e.dataset.docId,s=M.a.getDoc(t);this.checkAnimationContainer(e,!1),e.innerHTML="",this.renderSticker(s,e)},this.lazyLoadQueue=new te.b(void 0,(e,t)=>{t||this.processInvisibleDiv(e)})}clear(){this.lazyLoadQueue.clear()}renderSticker(e,t,s){return t||((t=document.createElement("div")).classList.add("grid-item","super-sticker"),2===e.sticker&&this.observeAnimatedDiv(t)),Ls({doc:e,div:t,lazyLoadQueue:this.regularLazyLoadQueue,group:this.group,onlyThumb:2===e.sticker,loadPromises:s}),t}observeAnimatedDiv(e){this.animatedDivs.add(e),this.lazyLoadQueue.observe({div:e,load:this.processVisibleDiv})}}class Hn{constructor(){this.stickerSets={},this.recentStickers=[],this.mounted=!1,this.queueCategoryPush=[]}categoryPush(e,t="",s,i){const n=document.createElement("div");n.classList.add("category-items","super-stickers");const a=document.createElement("div");return a.classList.add("category-title"),t&&(a.innerHTML=t),e.append(a,n),this.stickyIntersector.observeStickyHeaderChanges(e),this.queueCategoryPush.push({element:e,prepend:i}),s.then(e=>{e.forEach(e=>{n.append(this.superStickerRenderer.renderSticker(e))}),this.queueCategoryPush.length&&(this.queueCategoryPush.forEach(({element:e,prepend:t})=>{t?this.recentDiv.parentElement?(this.stickersDiv.prepend(e),this.stickersDiv.prepend(this.recentDiv)):this.stickersDiv.prepend(e):this.stickersDiv.append(e)}),this.queueCategoryPush.length=0)}),{titleDiv:a}}renderStickerSet(e,t=!1){return Bn(this,void 0,void 0,(function*(){const s=document.createElement("div");s.classList.add("sticker-category"),s.dataset.id=e.id,s.dataset.access_hash=e.access_hash;const i=document.createElement("button");i.classList.add("btn-icon","menu-horizontal-div-item"),this.stickerSets[e.id]={stickers:s,tab:i},t?this.menu.insertBefore(i,this.menu.firstElementChild.nextSibling):this.menu.append(i);const n=hs.getStickerSet(e);this.categoryPush(s,Z.a.wrapEmojiText(e.title),n.then(e=>e.documents),t);yield n;Ss({set:e,container:i,group:$n,lazyLoadQueue:Yn.lazyLoadQueue,width:32,height:32,autoplay:!1})}))}init(){this.content=document.getElementById("content-stickers"),this.recentDiv=document.createElement("div"),this.recentDiv.classList.add("sticker-category","stickers-recent");let e=this.content.previousElementSibling;this.menu=e.firstElementChild;let t=new P.a(e);this.stickersDiv=document.createElement("div"),this.stickersDiv.classList.add("stickers-categories"),this.content.append(this.stickersDiv),a.default.addEventListener("stickers_installed",e=>{const t=e;!this.stickerSets[t.id]&&this.mounted&&this.renderStickerSet(t,!0)}),a.default.addEventListener("stickers_deleted",e=>{const t=e;if(this.stickerSets[t.id]&&this.mounted){const e=this.stickerSets[t.id];e.stickers.remove(),e.tab.remove(),delete this.stickerSets[t.id]}}),this.stickersDiv.addEventListener("click",e=>{const t=e.target;if(Object(Ce.a)(t,"category-title")){const e=Object(vt.a)(t,"data-id");new Di({id:e.dataset.id,access_hash:e.dataset.access_hash}).show()}else Yn.onMediaClick(e)}),this.scroll=new P.b(this.content,"STICKERS"),this.scroll.setVirtualContainer(this.stickersDiv),this.stickyIntersector=Yn.menuOnClick(this.menu,this.scroll,t).stickyIntersector;const s=Object(se.f)(this.content,!0);Promise.all([hs.getRecentStickers().then(e=>{this.recentStickers=e.stickers.slice(0,20),this.stickerSets.recent={stickers:this.recentDiv,tab:this.menu.firstElementChild},s.remove();const{titleDiv:t}=this.categoryPush(this.recentDiv,"",Promise.resolve(this.recentStickers),!0);t.append(Object(A.i18n)("Stickers.Recent"))}),hs.getAllStickers().then(e=>{s.remove();for(let t of e.sets)this.renderStickerSet(t)})]).finally(()=>{this.mounted=!0}),this.superStickerRenderer=new Rn(Yn.lazyLoadQueue,$n),Jn.addLazyLoadQueueRepeat(this.superStickerRenderer.lazyLoadQueue,this.superStickerRenderer.processInvisibleDiv),this.init=null}pushRecentSticker(e){var t;if(!(null===(t=this.recentDiv)||void 0===t?void 0:t.parentElement))return;let s=this.recentDiv.querySelector(`[data-doc-id="${e.id}"]`);s||(s=this.superStickerRenderer.renderSticker(e));const i=this.recentDiv.querySelector(".category-items");i.prepend(s),i.childElementCount>20&&Array.from(i.children).slice(20).forEach(e=>e.remove())}onClose(){}}var Un=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const Nn=new class{constructor(){this.inlineResults={},this.setHash={}}getGeoInput(e){return"geoPoint"===e._?{_:"inputGeoPoint",lat:e.lat,long:e.long,accuracy_radius:e.accuracy_radius}:{_:"inputGeoPointEmpty"}}getInlineResults(e,t,s="",i="",n){return rt.a.invokeApi("messages.getInlineBotResults",{bot:T.a.getUserInput(t),peer:o.a.getInputPeerById(e),query:s,geo_point:n?this.getGeoInput(n):void 0,offset:i},{stopTime:-1,noErrorBox:!0}).then(e=>{const t=e.query_id;return e.results.forEach(e=>{"botInlineMediaResult"===e._&&(e.document&&(e.document=M.a.saveDoc(e.document)),e.photo&&(e.photo=r.a.savePhoto(e.photo))),this.inlineResults[this.generateQId(t,e.id)]=e}),e})}generateQId(e,t){return e+"_"+t}pushPopularBot(e){T.a.getTopPeers("bots_inline").then(t=>{const s=t.findIndex(e=>e.id);let i;i=-1!==s?t[s]:{id:e,rating:0},++i.rating,Object(y.e)(t,i,"rating"),k.default.setKeyValueToStorage("topPeersCache")})}switchToPM(e,t,s){return this.setHash[t]={peerId:e,time:Date.now()},a.default.dispatchEvent("history_focus",{peerId:t}),i.a.startBot(t,0,s)}checkSwitchReturn(e){return Un(this,void 0,void 0,(function*(){const t=T.a.getUser(e);if(!t||!t.pFlags.bot||!t.bot_inline_placeholder)return;const s=this.setHash[e];return s&&(delete this.setHash[e],Date.now()-s.time<36e5)?s.peerId:void 0}))}switchInlineQuery(e,t,s,i){a.default.dispatchEvent("history_focus",{peerId:e,threadId:t}),Si.a.setDraft(e,t,"@"+T.a.getUser(s).username+" "+i)}callbackButtonClick(e,t,s){return rt.a.invokeApi("messages.getBotCallbackAnswer",{peer:o.a.getInputPeerById(e),msg_id:f.a.getServerMessageId(t),data:s.data},{stopTime:-1,noErrorBox:!0}).then(e=>{"string"==typeof e.message&&e.message.length&&nt(Z.a.wrapRichText(e.message,{noLinks:!0,noLinebreaks:!0}))})}sendInlineResult(e,t,s,n={}){var a;const o=this.inlineResults[s];if(!o)return;this.pushPopularBot(t);const l=s.split("_"),c=l.shift(),d=l.join("_");if(n.viaBotId=t,n.queryId=c,n.resultId=d,o.send_message.reply_markup&&(n.replyMarkup=o.send_message.reply_markup),"botInlineMessageText"===o.send_message._)n.entities=o.send_message.entities,i.a.sendText(e,o.send_message.message,n);else{let t,s="";const l=o.send_message;switch(l._){case"botInlineMessageMediaAuto":if(s=l.message,"botInlineMediaResult"===o._){const{document:e,photo:s}=o;t=e?M.a.getMediaInput(e):r.a.getMediaInput(s)}break;case"botInlineMessageMediaGeo":t={_:"inputMediaGeoPoint",geo_point:this.getGeoInput(l.geo)},n.geoPoint=l.geo;break;case"botInlineMessageMediaVenue":t={_:"inputMediaVenue",geo_point:this.getGeoInput(l.geo),title:l.title,address:l.address,provider:l.provider,venue_id:l.venue_id,venue_type:l.venue_type},n.geoPoint=l.geo;break;case"botInlineMessageMediaContact":t={_:"inputMediaContact",phone_number:l.phone_number,first_name:l.first_name,last_name:l.last_name,vcard:l.vcard}}t||(t={_:"messageMediaPending",type:o.type,file_name:o.title||(null===(a=o.content)||void 0===a?void 0:a.url)||o.url,size:0,progress:{percent:30,total:0}}),i.a.sendOther(e,t,n)}}};de.a&&(de.a.appInlineBotsManager=Nn);var zn=Nn,Vn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Wn extends V{constructor(){super(...arguments),this.nextOffset="",this.loadedAll=!1,this.onGifsClick=e=>{const t=Object(Ce.a)(e.target,"gif");if(!t)return;const s=t.dataset.docId;mo.chat.input.sendMessageWithDocument(s)?v.b.isMobile&&$t.onCloseBtnClick():console.warn("got no doc by id:",s)}}init(){this.container.id="search-gifs-container",this.inputSearch=new j("SearchGifsTitle",e=>{this.reset(),this.search(e)}),this.title.replaceWith(this.inputSearch.container),this.gifsDiv=document.createElement("div"),this.gifsDiv.classList.add("gifs-masonry"),Object(l.b)(this.gifsDiv,this.onGifsClick,{listenerSetter:this.listenerSetter}),this.scrollable.append(this.gifsDiv),this.masonry=new jn(this.gifsDiv,"GIFS-SEARCH",this.scrollable)}onClose(){this.scrollable.onScrolledBottom=()=>{}}onCloseAfterTimeout(){return this.reset(),this.gifsDiv.innerHTML="",I.a.checkAnimations(void 0,"GIFS-SEARCH"),this.inputSearch.remove(),super.onCloseAfterTimeout()}reset(){this.searchPromise=null,this.nextOffset="",this.loadedAll=!1,this.masonry.clear()}open(){const e=super.open();return $t.toggleSidebar(!0).then(()=>{this.search("",!0),this.scrollable.onScrolledBottom=()=>{this.search(this.inputSearch.value,!1)}}),e}search(e,t=!0){return Vn(this,void 0,void 0,(function*(){if(!this.searchPromise&&!this.loadedAll){this.gifBotPeerId||(this.gifBotPeerId=(yield T.a.resolveUsername("gif")).id);try{this.searchPromise=zn.getInlineResults(0,this.gifBotPeerId,e,this.nextOffset);const{results:s,next_offset:i}=yield this.searchPromise;if(this.inputSearch.value!==e)return;this.searchPromise=null,this.nextOffset=i,t&&(this.gifsDiv.innerHTML=""),s.length?s.forEach(e=>{"botInlineMediaResult"===e._&&e.document&&this.masonry.add(e.document)}):this.loadedAll=!0,this.scrollable.onScroll()}catch(e){throw this.searchPromise=null,console.error("gifs loading error:",e),e}}}))}}class Kn extends V{init(){this.container.id="stickers-container",this.container.classList.add("chatlist-container"),this.lazyLoadQueue=new te.d,this.inputSearch=new j("StickersTab.SearchPlaceholder",e=>{this.search(e)}),this.title.replaceWith(this.inputSearch.container),this.setsDiv=document.createElement("div"),this.setsDiv.classList.add("sticker-sets"),this.scrollable.append(this.setsDiv),Object(l.b)(this.setsDiv,e=>{const t=Object(Ce.a)(e.target,"sticker-set-sticker");if(t){const e=t.dataset.docId;return void mo.chat.input.sendMessageWithDocument(e)}const s=Object(Ce.a)(e.target,"sticker-set");if(!s)return;const i=s.dataset.stickerSet,n=s.dataset.access_hash,a=Object(Ce.a)(e.target,"sticker-set-button");a?(e.preventDefault(),e.cancelBubble=!0,a.setAttribute("disabled","true"),hs.getStickerSet({id:i,access_hash:n}).then(e=>{hs.toggleStickerSet(e.set).then(t=>{t&&(a.textContent="",a.append(Object(A.i18n)(e.set.installed_date?"Stickers.SearchAdded":"Stickers.SearchAdd")),a.classList.toggle("gray",!!e.set.installed_date))}).finally(()=>{a.removeAttribute("disabled")})})):hs.getStickerSet({id:i,access_hash:n}).then(e=>{new Di(e.set).show()})},{listenerSetter:this.listenerSetter})}onCloseAfterTimeout(){return this.setsDiv.innerHTML="",I.a.checkAnimations(void 0,"STICKERS-SEARCH"),super.onCloseAfterTimeout()}renderSet(e){const t=document.createElement("div");t.classList.add("sticker-set");const s=document.createElement("div");s.classList.add("sticker-set-header");const i=document.createElement("div");i.classList.add("sticker-set-details"),i.innerHTML=`\n
${Z.a.wrapEmojiText(e.title)}
\n `;const n=document.createElement("div");n.classList.add("sticker-set-count"),n.append(Object(A.i18n)("Stickers",[e.count])),i.append(n);const a=document.createElement("button");a.classList.add("btn-primary","btn-color-primary","sticker-set-button"),a.append(Object(A.i18n)(e.installed_date?"Stickers.SearchAdded":"Stickers.SearchAdd")),e.installed_date&&a.classList.add("gray"),s.append(i,a);const o=document.createElement("div");o.classList.add("sticker-set-stickers");const r=Math.min(5,e.count);for(let e=0;e{for(let t=0;t{this.renderFeatured()}),e}renderFeatured(){return hs.getFeaturedStickers().then(e=>{this.inputSearch.value||(e=this.filterRendered("",e)).forEach(e=>{this.renderSet(e.set)})})}filterRendered(e,t){t=t.slice();const s=Array.from(this.setsDiv.children);return Object(y.d)(s,s=>{const i=s.dataset.stickerSet,n=t.findIndex(e=>e.set.id===i);-1!==n?t.splice(n,1):e&&s.dataset.title.toLowerCase().includes(e.toLowerCase())||s.remove()}),I.a.checkAnimations(void 0,"STICKERS-SEARCH"),t}search(e){return e?hs.searchStickerSets(e,!1).then(t=>{this.inputSearch.value===e&&(t=this.filterRendered(e,t)).forEach(e=>{this.renderSet(e.set)})}):this.renderFeatured()}}var Gn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class qn extends R.a{constructor(e){super(!1),this.forceClose=!1,this.inited=!1,this.onMouseOut=e=>{if(clearTimeout(this.displayTimeout),!this.isActive())return;const t=e.toElement;t&&Object(zs.a)(t,this.element)||(this.displayTimeout=window.setTimeout(()=>{this.toggle(!1)},200))},this.toggle=e=>Gn(this,void 0,void 0,(function*(){const t=!!this.element.style.display&&void 0===e||e;if(this.init){if(!t)return;this.init(),this.init=null}if(t!==this.isActive())if(this.element.style.display&&void 0===e||e){const e=this.dispatchEvent("open");yield Promise.all(e),this.element.style.display="",this.element.offsetLeft,this.element.classList.add("active"),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.forceClose=!1,this.dispatchEvent("opened")},pe.IS_TOUCH_SUPPORTED?0:200)}else this.dispatchEvent("close"),this.element.classList.remove("active"),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.element.style.display="none",this.forceClose=!1,this.dispatchEvent("closed")},pe.IS_TOUCH_SUPPORTED?0:200)})),Object(L.g)(this,e)}attachButtonListener(e,t){let s=!0;pe.IS_TOUCH_SUPPORTED?Object(l.b)(e,()=>{s?(s=!1,this.toggle(!0)):this.toggle()},{listenerSetter:t}):t.add(e)("mouseover",i=>{s&&(t.add(e)("mouseout",this.onMouseOut),s=!1),clearTimeout(this.displayTimeout),this.displayTimeout=window.setTimeout(()=>{this.toggle(!0)},200)})}init(){pe.IS_TOUCH_SUPPORTED||(this.element.onmouseout=this.onMouseOut,this.element.onmouseover=e=>{this.forceClose||clearTimeout(this.displayTimeout)})}isActive(){return this.element.classList.contains("active")}}var Qn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const $n="emoticons-dropdown";class Yn extends qn{constructor(){super({element:document.getElementById("emoji-dropdown")}),this.tabId=-1,this.onSelectTabClick=e=>{this.tabId!==e&&(I.a.checkAnimations(!0,$n),this.tabId=e,this.searchButton.classList.toggle("hide",0===this.tabId),this.deleteBtn.classList.toggle("hide",0!==this.tabId))},this.checkRights=()=>{const{peerId:e,threadId:t}=mo.chat,s=this.tabsEl.children,n=Array.from(s),a=i.a.canSendToPeer(e,t,"send_stickers");n[2].toggleAttribute("disabled",!a);const o=i.a.canSendToPeer(e,t,"send_gifs");n[3].toggleAttribute("disabled",!o);const r=this.tabsEl.querySelector(".active");!r||1===Object(Ts.a)(r)||a&&o||this.selectTab(0,!1)},this.addEventListener("open",()=>Qn(this,void 0,void 0,(function*(){pe.IS_TOUCH_SUPPORTED&&Object(Us.a)()&&(yield Object(yn.a)(100)),this.element.parentElement!==mo.chat.input.chatInput&&mo.chat.input.chatInput.append(this.element),this.savedRange=this.getGoodRange(),Yn.lazyLoadQueue.lock(),I.a.lockIntersectionGroup($n)}))),this.addEventListener("opened",()=>{I.a.unlockIntersectionGroup($n),Yn.lazyLoadQueue.unlock(),Yn.lazyLoadQueue.refresh(),this.container.classList.remove("disable-hover")}),this.addEventListener("close",()=>{Yn.lazyLoadQueue.lock(),I.a.lockIntersectionGroup($n),I.a.checkAnimations(!0,$n)}),this.addEventListener("closed",()=>{I.a.unlockIntersectionGroup($n),Yn.lazyLoadQueue.unlock(),Yn.lazyLoadQueue.refresh(),this.container.classList.remove("disable-hover"),this.savedRange=void 0})}init(){return this.emojiTab=new On,this.stickersTab=new Hn,this.gifsTab=new Dn,this.tabs={0:this.emojiTab,1:this.stickersTab,2:this.gifsTab},this.container=this.element.querySelector(".emoji-container .tabs-container"),this.tabsEl=this.element.querySelector(".emoji-tabs"),this.selectTab=Object(ee.a)(this.tabsEl,this.container,this.onSelectTabClick,()=>{const e=this.tabs[this.tabId];e.init&&e.init(),e.onCloseAfterTimeout&&e.onCloseAfterTimeout(),I.a.checkAnimations(!1,$n)}),this.searchButton=this.element.querySelector(".emoji-tabs-search"),this.searchButton.addEventListener("click",()=>{1===this.tabId?$t.isTabExists(Kn)||new Kn($t).open():$t.isTabExists(Wn)||new Wn($t).open()}),this.deleteBtn=this.element.querySelector(".emoji-tabs-delete"),this.deleteBtn.addEventListener("click",e=>{var t;const s=mo.chat.input.messageInput;(null===(t=s.lastChild)||void 0===t?void 0:t.tagName)?s.lastElementChild.remove():s.lastChild&&(s.lastChild.textContent.length?s.lastChild.textContent=s.lastChild.textContent.slice(0,-1):s.lastChild.remove());const i=new Event("input",{bubbles:!0,cancelable:!0});mo.chat.input.messageInput.dispatchEvent(i),Object(c.a)(e)}),this.tabsEl.children[1].click(),this.tabs[0].init&&this.tabs[0].init(),a.default.addEventListener("peer_changed",this.checkRights),this.checkRights(),super.init()}addLazyLoadQueueRepeat(e,t){this.addEventListener("close",()=>{e.lock()}),this.addEventListener("closed",()=>{const s=e.intersector.getVisible();for(const e of s)t(e);e.intersector.clearVisible()}),this.addEventListener("opened",()=>{e.unlockAndRefresh()})}getSavedRange(){return this.getGoodRange()||this.savedRange}getGoodRange(){const e=document.getSelection();if(e.rangeCount&&document.activeElement===mo.chat.input.messageInput)return e.getRangeAt(0)}}Yn.lazyLoadQueue=new te.d,Yn.menuOnClick=(e,t,s,i=0)=>{let n=-1;const a=t=>t!==i&&(e.children[i].classList.remove("active"),e.children[t].classList.add("active"),i=t,!0),o=new hn(t.container,(i,o)=>{if(Math.abs(n-t.container.scrollTop)<=1)return;n=-1;const r=Object(Ts.a)(o);!i&&r||(a(r),s&&(r{let s=e.target;if(s=Object(Ce.a)(s,"menu-horizontal-div-item"),!s)return;const i=Object(Ts.a)(s);if(!a(i))return;const o=(t.splitUp||t.container).children[i].offsetTop+1;t.container.scrollTop=n=o}),{stickyIntersector:o,setActive:a}},Yn.onMediaClick=(e,t=!1)=>{let s=e.target;if(s=Object(mt.a)(s,"DIV"),!s)return!1;const i=s.dataset.docId;return!!i&&(mo.chat.input.sendMessageWithDocument(i,void 0,t)?(Xn.container&&(Xn.forceClose=!0,Xn.container.classList.add("disable-hover"),Xn.toggle(!1)),!0):(console.warn("got no doc by id:",i),!1))};const Xn=new Yn;de.a.emoticonsDropdown=Xn;var Jn=Xn;var Zn=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ea=new Set(["messageActionHistoryClear","messageActionChatCreate"]);let ta=void 0,sa=0;class ia{constructor(e,t,s,i,n,o,r,l,d,u){let p;this.chat=e,this.appMessagesManager=t,this.appStickersManager=s,this.appUsersManager=i,this.appInlineBotsManager=n,this.appPhotosManager=o,this.appPeersManager=r,this.appProfileManager=l,this.appDraftsManager=d,this.appMessagesIdsManager=u,this.peerId=0,this.unreadOut=new Set,this.needUpdate=[],this.bubbles={},this.skippedMids=new Set,this.dateMessages={},this.scrolledDown=!0,this.isScrollingTimeout=0,this.unreaded=new Map,this.unreadedSeen=new Set,this.preloader=null,this.loadedTopTimes=0,this.loadedBottomTimes=0,this.messagesQueuePromise=null,this.messagesQueue=[],this.messagesQueueOnRender=null,this.messagesQueueOnRenderAdditional=null,this.firstUnreadBubble=null,this.middleware=Object(ks.a)(),this.replyFollowHistory=[],this.isHeavyAnimationInProgress=!1,this.isFirstLoad=!0,this.passEntities={},this.viewsMids=new Set,this.onBubblesClick=e=>{var t;let s=e.target,i=null;try{i=Object(Ce.a)(s,"bubble")}catch(e){}if(!i)return;if(i.classList.contains("is-date")&&Object(Ce.a)(s,"bubble-content")){if(i.classList.contains("is-sticky")&&!this.chatInner.classList.contains("is-scrolling"))return;for(const e in this.dateMessages){if(this.dateMessages[e].div===i){new dn(new Date(+e),this.onDatePick).show();break}}return}if(!pe.IS_TOUCH_SUPPORTED&&Object(Ce.a)(s,"time"))return void this.chat.selection.toggleByElement(i);if(this.chat.selection.isSelecting&&e.isTrusted){if(i.classList.contains("service")&&void 0===i.dataset.mid)return;return Object(c.a)(e),pe.IS_TOUCH_SUPPORTED&&this.chat.selection.selectedText?void(this.chat.selection.selectedText=void 0):void this.chat.selection.toggleByElement(Object(Ce.a)(s,"grouped-item")||i)}const n=Object(Ce.a)(s,"contact");if(n)return void this.chat.appImManager.setInnerPeer(+n.dataset.peerId);if(Object(Ce.a)(s,"replies")){const e=+i.dataset.mid;if(this.peerId===gn.b){const t=this.chat.getMessage(e),s=this.appPeersManager.getPeerId(t.reply_to.reply_to_peer_id),i=t.reply_to.reply_to_top_id,n=t.fwd_from.saved_from_msg_id;this.chat.appImManager.openThread(s,n,i)}else{const t=this.appMessagesManager.filterMessages(this.chat.getMessage(e),e=>!!e.replies)[0],s=t.replies;s&&this.appMessagesManager.getDiscussionMessage(this.peerId,t.mid).then(e=>{this.chat.appImManager.setInnerPeer(-s.channel_id,void 0,"discussion",e.mid)})}return}const a=Object(Ce.a)(s,"peer-title")||Object(Ce.a)(s,"name")||Object(mt.a)(s,"AVATAR-ELEMENT");if(a){s=a||s;const t=+(s.dataset.peerId||s.getAttribute("peer")),i=s.dataset.savedFrom;if(a.classList.contains("is-via")){const s="@"+this.appUsersManager.getUser(t).username+" ";this.appDraftsManager.setDraft(this.peerId,this.chat.threadId,s),Object(c.a)(e)}else if(i){const e=i.split("_"),t=+e[0],s=+e[1];this.chat.appImManager.setInnerPeer(t,s)}else t?this.chat.appImManager.setInnerPeer(t):nt(A.default.format("HidAccount",!0));return}const o="SPAN"===s.tagName&&!s.classList.contains("emoji");if(i.classList.contains("sticker")&&s.parentElement.classList.contains("attachment")){const e=+i.dataset.mid,s=null===(t=this.chat.getMessage(e).media)||void 0===t?void 0:t.document;return void((null==s?void 0:s.stickerSetInput)&&new Di(s.stickerSetInput).show())}const r=Object(Ce.a)(s,"document-with-thumb");if("IMG"===s.tagName&&!s.classList.contains("emoji")&&!s.classList.contains("document-thumb")||s.classList.contains("album-item")||o||"VIDEO"===s.tagName&&!i.classList.contains("round")||r&&!r.querySelector(".preloader-container")){const t=+(Object(Ce.a)(s,"album-item")||Object(Ce.a)(s,"document-container")||i).dataset.mid,n=this.chat.getMessage(t);if(!n)return void this.log.warn("no message by messageId:",t);const a=r?e=>fo.isMediaCompatibleForDocumentViewer(e):e=>"photo"===e._||["video","gif"].includes(e.type),o=[],l=Object.keys(this.bubbles).map(e=>+e).filter(e=>{const t=this.chat.getMessage(e),s=this.appMessagesManager.getMediaFromMessage(t);return s&&a(s)}).sort((e,t)=>e-t);l.forEach(e=>{let t;if(r)t=".document-container";else{t=".album-item video, .album-item img, .preview video, .preview img, ",t+=this.bubbles[e].classList.contains("with-media-tail")?".bubble__media-container":".attachment video, .attachment img"}const s=Array.from(this.bubbles[e].querySelectorAll(t)),i=new Set;if(r)s.forEach(e=>{o.push({element:e.querySelector(".document-ico"),mid:+e.dataset.mid,peerId:this.peerId})});else{const t=!!this.bubbles[e].querySelector(".media-container-aspecter");s.forEach(s=>{if(t&&!Object(Ce.a)(s,"media-container-aspecter"))return;let n=Object(Ce.a)(s,"album-item");const a=n||s.parentElement;i.has(a)||(i.add(a),o.push({element:s,mid:n?+n.dataset.mid:e,peerId:this.peerId}))})}}),o.sort((e,t)=>e.mid-t.mid);let d=o.findIndex(e=>e.mid===t);return de.b&&this.log("open mediaViewer single with ids:",l,d,o),o[d]?((new fo).setSearchContext({threadId:this.chat.threadId,peerId:this.peerId,inputFilter:{_:r?"inputMessagesFilterDocument":"inputMessagesFilterPhotoVideo"},useSearch:"scheduled"!==this.chat.type,isScheduled:"scheduled"===this.chat.type}).openMedia(n,o[d].element,0,!0,o.slice(0,d),o.slice(d+1)),void Object(c.a)(e)):void this.log("no target for media viewer!",s)}if(-1===["IMG","DIV","SPAN"].indexOf(s.tagName)&&(s=Object(mt.a)(s,"DIV")),-1!==["DIV","SPAN"].indexOf(s.tagName)){if(s.classList.contains("goto-original")){const e=i.dataset.savedFrom.split("_"),t=+e[0],s=+e[1];return void this.chat.appImManager.setInnerPeer(t,s)}if(s.classList.contains("forward")){const e=+i.dataset.mid,t=this.appMessagesManager.getMessageByPeer(this.peerId,e);return void new Ds({[this.peerId]:this.appMessagesManager.getMidsByMessage(t)})}let t=!1;try{t=!!Object(Ce.a)(e.target,"reply")}catch(e){}if(t&&i.classList.contains("is-reply")){const e=+i.dataset.mid;this.replyFollowHistory.push(e);const t=this.chat.getMessage(e),s=t.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(t.reply_to.reply_to_peer_id):this.peerId,n=t.reply_to.reply_to_msg_id;this.chat.appImManager.setInnerPeer(s,n,this.chat.type,this.chat.threadId)}}},this.onScroll=()=>{this.isHeavyAnimationInProgress&&this.scrolledDown||(pe.IS_TOUCH_SUPPORTED||(this.isScrollingTimeout?clearTimeout(this.isScrollingTimeout):this.chatInner.classList.contains("is-scrolling")||this.chatInner.classList.add("is-scrolling"),this.isScrollingTimeout=window.setTimeout(()=>{this.chatInner.classList.remove("is-scrolling"),this.isScrollingTimeout=0},1350)),this.scrollable.getDistanceToEnd()<300&&this.scrollable.loadedAll.bottom?(this.bubblesContainer.classList.add("scrolled-down"),this.scrolledDown=!0):this.bubblesContainer.classList.contains("scrolled-down")&&(this.bubblesContainer.classList.remove("scrolled-down"),this.scrolledDown=!1),this.chat.topbar.pinnedMessage&&this.chat.topbar.pinnedMessage.setCorrectIndex(this.scrollable.lastScrollDirection))},this.onDatePick=e=>{const t=this.peerId;this.appMessagesManager.requestHistory(t,0,2,-1,e,this.chat.threadId).then(e=>{var s;(null===(s=null==e?void 0:e.messages)||void 0===s?void 0:s.length)?this.peerId===t&&this.chat.setMessageId(e.messages[0].mid):this.log.error("no history!")})},this.listenerSetter=new H.a,this.bubblesContainer=document.createElement("div"),this.bubblesContainer.classList.add("bubbles","scrolled-down"),this.chatInner=document.createElement("div"),this.chatInner.classList.add("bubbles-inner"),this.setScroll(),this.bubblesContainer.append(this.scrollable.container),this.log=this.chat.log,this.bubbleGroups=new cn(this.chat),this.preloader=new ye.a({cancelable:!1}),this.lazyLoadQueue=new te.d,this.lazyLoadQueue.queueId=++sa,this.listenerSetter.add(a.default)("history_update",({storage:e,peerId:t,mid:s})=>{if(this.chat.getMessagesStorage()===e){const e=this.bubbles[s];if(!e)return;const t=this.chat.getMessage(s);if(+e.dataset.timestamp>=t.date+Ye.a.serverTimeOffset-1)return;this.setBubblePosition(e,t,!1),this.scrollingToBubble&&this.scrollToBubbleEnd()}}),this.listenerSetter.add(a.default)("dialog_flush",({peerId:e})=>{this.peerId===e&&this.deleteMessagesByIds(Object.keys(this.bubbles).map(e=>+e))}),this.listenerSetter.add(a.default)("message_sent",e=>{var t,s,i,n;const{storage:o,tempId:r,tempMessage:l,mid:c}=e;if(this.chat.getMessagesStorage()!==o)return;const d=this.getMountedBubble(r,l)||this.getMountedBubble(c);if(d){const e=this.chat.getMessage(c),a=d.bubble;if(e.replies){const t=a.querySelector("replies-element");t&&(t.message=e,t.init())}if((null===(t=e.media)||void 0===t?void 0:t.document)&&!e.media.document.type){const t=a.querySelector(`.document-container[data-mid="${r}"] .document`);t&&t.replaceWith(fs({message:e}))}if(e.grouped_id){const e=a.querySelector(`.grouped-item[data-mid="${r}"]`)||a;e&&(e.dataset.mid=""+c)}if(null===(s=e.media)||void 0===s?void 0:s.poll){const t=a.querySelector("poll-element");if(t){const s=e.media.poll;t.message=e,t.setAttribute("poll-id",s.id),t.setAttribute("message-id",""+c)}}if(null===(i=e.media)||void 0===i?void 0:i.document){const t=a.querySelector(`audio-element[data-mid="${r}"], .document[data-doc-id="${r}"], .media-round[data-mid="${r}"]`);t&&(t instanceof Re||t.classList.contains("media-round")?(t.dataset.mid=""+e.mid,delete t.dataset.isOutgoing,t.message=e,t.onLoad(!0)):t.dataset.docId=e.media.document.id)}(null===(n=e.media)||void 0===n?void 0:n.webpage)&&!a.querySelector(".web")&&Object(Cs.c)().then(()=>{this.safeRenderMessage(e,!0,!1,a,!1),this.scrollToBubbleIfLast(a)})}else this.log.warn("message_sent there is no bubble",e);const h=this.bubbles;if(h[r]){const e=h[r];h[c]=e,delete h[r],Object(_e.b)(()=>{e.classList.contains("is-sending")&&(e.classList.remove("is-sending"),e.classList.add(this.peerId===a.default.myId&&"scheduled"!==this.chat.type?"is-read":"is-sent"))}),e.dataset.mid=""+c}if(this.unreadOut.has(r)&&(this.unreadOut.delete(r),this.unreadOut.add(c)),"scheduled"===this.chat.type){(Date.now()/1e3|0)>=l.date-10&&this.deleteMessagesByIds([c])}}),this.listenerSetter.add(a.default)("message_edit",({storage:e,peerId:t,mid:s})=>{if(e!==this.chat.getMessagesStorage())return;const i=this.chat.getMessage(s),n=i.grouped_id?this.getGroupedBubble(i.grouped_id):this.getMountedBubble(s);if(!n)return;const a="scheduled"===this.chat.type,o=this.scrolledDown;this.safeRenderMessage(n.message,!0,!1,n.bubble,a),o&&this.scrollToBubbleIfLast(n.bubble),a&&(this.messagesQueuePromise||Promise.resolve()).then(()=>{this.deleteEmptyDateGroups()})}),this.listenerSetter.add(a.default)("album_edit",({peerId:e,groupId:t,deletedMids:s})=>{if(e!==this.peerId)return;const i=this.appMessagesManager.getMidsByAlbum(t).concat(s).find(e=>this.bubbles[e]);if(!i)return;const n=Object(L.e)(this.appMessagesManager.groupedMessagesStorage[t],"asc").pop();this.safeRenderMessage(this.chat.getMessage(n),!0,!1,this.bubbles[i],!1)}),this.listenerSetter.add(a.default)("messages_downloaded",({peerId:e,mids:t})=>{const s=this.getMiddleware();Object(Cs.c)().then(()=>{s()&&t.forEach(t=>{Object(y.d)(this.needUpdate,(s,i)=>{if(s.replyMid===t&&s.replyToPeerId===e){const{mid:e,replyMid:t}=this.needUpdate.splice(i,1)[0],n=this.bubbles[e];if(!n)return;const a=this.chat.getMessage(e);this.appMessagesManager.getMessageByPeer(s.replyToPeerId,t).deleted&&delete a.reply_to_mid,pn.setReply({chat:this.chat,bubble:n,message:a})}})})})}),this.listenerSetter.add(this.bubblesContainer)("click",this.onBubblesClick),de.b&&this.listenerSetter.add(this.bubblesContainer)("dblclick",e=>{const t=Object(Ce.a)(e.target,"grouped-item")||Object(Ce.a)(e.target,"bubble");if(t){const e=+t.dataset.mid;this.log("debug message:",this.chat.getMessage(e)),this.highlightBubble(t)}}),h.IS_MOBILE||this.listenerSetter.add(this.bubblesContainer)("dblclick",e=>{if(this.chat.selection.isSelecting||!this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId))return;const t=e.target,s=t.classList.contains("bubble")?t:t.classList.contains("document-selection")?t.parentElement:null;if(s&&!s.classList.contains("bubble-first")){const e=+s.dataset.mid;if(this.chat.getMessage(e).pFlags.is_outgoing)return;this.chat.input.initMessageReply(e)}}),this.stickyIntersector=new hn(this.scrollable.container,(e,t)=>{for(const s in this.dateMessages){const i=this.dateMessages[s];if(i.container===t){i.div.classList.toggle("is-sticky",e);break}}}),Object(Cs.a)(()=>{this.isHeavyAnimationInProgress=!0,this.lazyLoadQueue.lock(),p=this.getMiddleware()},()=>{this.isHeavyAnimationInProgress=!1,p&&p()&&(this.lazyLoadQueue.unlock(),this.lazyLoadQueue.refresh()),p=null},this.listenerSetter)}constructPeerHelpers(){if(this.listenerSetter.add(a.default)("history_append",({storage:e,mid:t})=>{e===this.chat.getMessagesStorage()&&(this.scrollable.loadedAll.bottom?this.renderNewMessagesByIds([t],!0):this.chat.setMessageId())}),this.listenerSetter.add(a.default)("history_multiappend",e=>{if(!(this.peerId in e))return;const t=Array.from(e[this.peerId]).slice().sort((e,t)=>t-e);this.renderNewMessagesByIds(t)}),this.listenerSetter.add(a.default)("history_delete",({peerId:e,msgs:t})=>{e===this.peerId&&this.deleteMessagesByIds(Array.from(t))}),this.listenerSetter.add(a.default)("dialog_unread",({peerId:e})=>{e===this.peerId&&(this.chat.input.setUnreadCount(),this.updateUnreadByDialog())}),this.listenerSetter.add(a.default)("dialogs_multiupdate",e=>{e[this.peerId]&&this.chat.input.setUnreadCount()}),this.listenerSetter.add(a.default)("dialog_notify_settings",e=>{this.peerId===e.peerId&&this.chat.input.setUnreadCount()}),this.listenerSetter.add(a.default)("chat_update",e=>{if(this.peerId===-e){this.chatInner.classList.contains("has-rights")!==this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId)&&(this.finishPeerChange(),this.chat.input.updateMessageInput())}}),this.listenerSetter.add(a.default)("settings_updated",e=>{if("settings.emoji.big"===e.key){const e=this.scrollable.isScrolledDown;e||this.setMessagesQueuePromise();Object(L.e)(this.bubbles,"desc").forEach(e=>{const t=this.bubbles[e];if(t.classList.contains("can-have-big-emoji")){const s=this.chat.getMessage(e);this.safeRenderMessage(s,void 0,!1,t)}}),e?this.scrollable.scrollTop=99999:this.performHistoryResult([],!0,!1,void 0)}}),this.listenerSetter.add(a.default)("message_views",({peerId:e,views:t,mid:s})=>{this.peerId===e&&Object(_e.b)(()=>{const e=this.bubbles[s];if(!e)return;const i=Array.from(e.querySelectorAll(".post-views"));if(i.length){const e=Object(C.c)(t,1);let s=!1;i.forEach(t=>{(s||t.innerHTML!==e)&&(s=!0,t.innerHTML=e)})}})}),this.unreadedObserver=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const t=e.target,s=this.unreaded.get(t);this.onUnreadedInViewport(t,s)}})}),this.viewsObserver=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(this.viewsMids.add(+e.target.dataset.mid),this.viewsObserver.unobserve(e.target),this.sendViewCountersDebounced())})}),this.sendViewCountersDebounced=ot(()=>{const e=[...this.viewsMids];this.viewsMids.clear(),this.appMessagesManager.incrementMessageViews(this.peerId,e)},1e3,!1,!0),"ResizeObserver"in window){let e=this.scrollable.container.offsetHeight,t=!1,s=!1,i=0,n=0,a=0;const o=()=>{const o=this.scrollable.container.offsetHeight,r=this.scrollable.isScrolledDown;o===e||s&&r||(n+=e-o),n&&(this.scrollable.scrollTop+=Math.round(n)),e=o,i=0,a=0,n=0,t=!1,s=!1},r=e=>{a&&window.cancelAnimationFrame(a),a=window.requestAnimationFrame(e?o:()=>{a=window.requestAnimationFrame(o)})};new ResizeObserver(a=>{if(s)return void r(!1);const o=a[0].contentRect.height;if(!e)return void(e=o);const l=e-o;let c=l+n;const d=c%1;if(c-=d,!t&&(t=!0,l<0&&this.scrollable.isScrolledDown))return n=-l,s=!0,void r(!1);if(i+=c,c){const e=this.scrollable.scrollTop+c;this.scrollable.scrollTop=e}r(!1),n=d,e=o}).observe(this.bubblesContainer)}}getRenderedLength(){return Object.keys(this.bubbles).length-this.skippedMids.size}onUnreadedInViewport(e,t){this.unreadedSeen.add(t),this.unreadedObserver.unobserve(e),this.unreaded.delete(e),this.readUnreaded()}readUnreaded(){if(this.readPromise)return;const e=this.getMiddleware();this.readPromise=a.default.idle.focusPromise.then(()=>{if(!e())return;let t=Math.max(...Array.from(this.unreadedSeen));if(this.scrollable.loadedAll.bottom){const e=Math.max(...Object.keys(this.bubbles).map(e=>+e));t>=e&&(t=Math.max(this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId).maxId||0,t))}this.unreaded.forEach((e,s)=>{e<=t&&this.onUnreadedInViewport(s,e)});const s=[];for(const e of this.unreadedSeen){const t=this.chat.getMessage(e);this.appMessagesManager.isMentionUnread(t)&&s.push(e)}return this.appMessagesManager.readMessages(this.peerId,s),this.unreadedSeen.clear(),de.b&&this.log("will readHistory by maxId:",t),this.appMessagesManager.readHistory(this.peerId,t,this.chat.threadId).catch(e=>{this.log.error("readHistory err:",e),this.appMessagesManager.readHistory(this.peerId,t,this.chat.threadId)}).finally(()=>{e()&&(this.readPromise=void 0,this.unreadedSeen.size&&this.readUnreaded())})})}constructPinnedHelpers(){this.listenerSetter.add(a.default)("peer_pinned_messages",e=>{const{peerId:t,mids:s,pinned:i}=e;t===this.peerId&&s&&(i||this.deleteMessagesByIds(s))})}constructScheduledHelpers(){const e=()=>{this.chat.topbar.setTitle(this.appMessagesManager.getScheduledMessagesStorage(this.peerId).size)};this.listenerSetter.add(a.default)("scheduled_new",({peerId:t,mid:s})=>{t===this.peerId&&(this.renderNewMessagesByIds([s]),e())}),this.listenerSetter.add(a.default)("scheduled_delete",({peerId:t,mids:s})=>{t===this.peerId&&(this.deleteMessagesByIds(s),e())})}onGoDownClick(){if(this.replyFollowHistory.length){Object(y.d)(this.replyFollowHistory,(e,t)=>{const s=this.bubbles[e];let i=!0;if(s){const e=s.getBoundingClientRect();i=yt.a.windowH/2>e.top}else{this.chat.getMessage(e).deleted||(i=!1)}i&&this.replyFollowHistory.splice(t,1)}),this.replyFollowHistory.sort((e,t)=>t-e);const e=this.replyFollowHistory.pop();this.chat.setMessageId(e)}else this.chat.setMessageId()}getBubbleByPoint(e){let t=vn(this.scrollable.container,e,"center");return t&&(t=Object(Ce.a)(t,"bubble")),t}getGroupedBubble(e){const t=this.appMessagesManager.groupedMessagesStorage[e];for(const[e]of t)if(this.bubbles[e]){const s=Math.max(...t.keys());return{bubble:this.bubbles[e],mid:+e,message:this.chat.getMessage(s)}}return null}getBubbleGroupedItems(e){return Array.from(e.querySelectorAll(".grouped-item"))}getMountedBubble(e,t=this.chat.getMessage(e)){if(t.grouped_id&&this.appMessagesManager.getMidsByAlbum(t.grouped_id).length>1){const s=this.getGroupedBubble(t.grouped_id);if(s)return s.bubble=s.bubble.querySelector(`.document-container[data-mid="${e}"]`)||s.bubble,s}const s=this.bubbles[e];if(s)return{bubble:s,mid:e,message:t}}findNextMountedBubbleByMsgId(e){return this.bubbles[Object(L.e)(this.bubbles).find(t=>{var s;return!(t+e).sort((e,t)=>e-t);if(s.length)if(e)de.b&&this.log("Will load more (up) history by id:",s[0],"maxId:",s[s.length-1],t),this.getHistory(s[0],!0,void 0,void 0,t);else{const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);if(-1!==s.indexOf(e.maxId))return void this.setLoaded("bottom",!0);de.b&&this.log("Will load more (down) history by id:",s[s.length-1],t),this.getHistory(s[s.length-1],!1,!0,void 0,t)}}setScroll(){this.scrollable=new P.b(null,"IM",300),this.setLoaded("top",!1),this.setLoaded("bottom",!1),this.scrollable.container.append(this.chatInner),this.scrollable.onAdditionalScroll=this.onScroll,this.scrollable.onScrolledTop=()=>this.loadMoreHistory(!0),this.scrollable.onScrolledBottom=()=>this.loadMoreHistory(!1),pe.IS_TOUCH_SUPPORTED&&(this.scrollable.container.addEventListener("touchmove",()=>{this.isScrollingTimeout?clearTimeout(this.isScrollingTimeout):this.chatInner.classList.contains("is-scrolling")||this.chatInner.classList.add("is-scrolling")},{passive:!0}),this.scrollable.container.addEventListener("touchend",()=>{this.chatInner.classList.contains("is-scrolling")&&(this.isScrollingTimeout&&clearTimeout(this.isScrollingTimeout),this.isScrollingTimeout=window.setTimeout(()=>{this.chatInner.classList.remove("is-scrolling"),this.isScrollingTimeout=0},1350))},{passive:!0}))}updateUnreadByDialog(){const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId),t=this.peerId===a.default.myId?e.readMaxId:e.readOutboxMaxId;for(const e of this.unreadOut)if(e>0&&e<=t){const t=this.bubbles[e];t&&(t.classList.remove("is-sent","is-sending"),t.classList.add("is-read")),this.unreadOut.delete(e)}}deleteMessagesByIds(e,t=!0){e.forEach(e=>{if(!(e in this.bubbles))return;const t=this.bubbles[e];delete this.bubbles[e],this.skippedMids.delete(e),this.firstUnreadBubble===t&&(this.firstUnreadBubble=null),this.bubbleGroups.removeBubble(t),this.unreadedObserver&&(this.unreadedObserver.unobserve(t),this.unreaded.delete(t)),this.viewsObserver&&(this.viewsObserver.unobserve(t),this.viewsMids.delete(e)),t.remove(),this.emptyPlaceholderMid===e&&(this.emptyPlaceholderMid=void 0)}),t&&this.chat.selection.isSelecting&&this.chat.selection.deleteSelectedMids(this.peerId,e),I.a.checkAnimations(!1,ho),this.deleteEmptyDateGroups()}renderNewMessagesByIds(e,t=this.scrolledDown){if(!this.scrollable.loadedAll.bottom)return;this.chat.threadId&&(e=e.filter(e=>{const t=this.chat.getMessage(e).reply_to;return t&&(t.reply_to_top_id||t.reply_to_msg_id)===this.chat.threadId})),e=e.filter(e=>!this.bubbles[e]),t||this.scrollingToBubble&&this.scrollingToBubble===this.getLastBubble()&&(t=!0);const s=this.performHistoryResult(e,!1,!0);t&&s.then(()=>{let t;"scheduled"===this.chat.type&&(t=this.bubbles[Math.max(...e)]),this.scrollToBubbleEnd(t)})}getLastBubble(){const e=this.getLastDateGroup();if(e)return e.lastElementChild}scrollToBubble(e,t,s,i){const n=Object(Ce.a)(e,"bubble");if("center"===t&&Object(Ts.a)(n)===(this.stickyIntersector?2:1)){const s=n.parentElement;0===Object(Ts.a)(s)&&(e=s,t="start")}return this.scrollable.scrollIntoViewNew(e,t,4,void 0,s,i)}scrollToBubbleEnd(e=this.getLastBubble()){if(e){this.scrollingToBubble=e;const t=this.getMiddleware();this.scrollToBubble(e,"end").then(()=>{t()&&(this.scrollingToBubble=void 0)})}}getLastDateGroup(){let e,t=0;for(const s in this.dateMessages){const i=this.dateMessages[s];i.firstTimestamp>t&&(e=i.container,t=i.firstTimestamp)}return e}scrollToBubbleIfLast(e){e.parentElement.lastElementChild===e&&this.getLastDateGroup().parentElement.lastElementChild===e.parentElement&&this.scrollToBubbleEnd(e)}highlightBubble(e){const t="highlightTimeout";e.dataset[t]&&(clearTimeout(+e.dataset[t]),e.classList.remove("is-highlighted"),e.offsetWidth),e.classList.add("is-highlighted"),e.dataset[t]=""+setTimeout(()=>{e.classList.remove("is-highlighted"),delete e.dataset[t]},2e3)}getDateContainerByMessage(e,t){const s=new Date(1e3*e.date);s.setHours(0,0,0);const i=s.getTime();if(!this.dateMessages[i]){let t;const n=new Date;n.setHours(0,0,0,0);const a="scheduled"===this.chat.type;if(n.getTime()===s.getTime())t=Object(A.i18n)(a?"Chat.Date.ScheduledForToday":"Date.Today");else if(a&&2147483646===e.date)t=Object(A.i18n)("MessageScheduledUntilOnline");else{const e={day:"numeric",month:"long"};s.getFullYear()!==n.getFullYear()&&(e.year="numeric"),t=new A.default.IntlDateElement({date:s,options:e}).element,a&&(t=Object(A.i18n)("Chat.Date.ScheduledFor",[t]))}const o=document.createElement("div");o.className="bubble service is-date";const r=document.createElement("div");r.classList.add("bubble-content");const l=document.createElement("div");l.classList.add("service-msg"),l.append(t),r.append(l),o.append(r);const c=document.createElement("div");c.className="bubbles-date-group",c.append(o),this.dateMessages[i]={div:o,container:c,firstTimestamp:s.getTime()};const d=Object(L.e)(this.dateMessages,"asc");let h,u=0,p=d.length;for(;u+e)))}else this.isFirstLoad=!0;const h=this.chatInner;let u;this.cleanup(),this.chatInner=document.createElement("div"),i?(this.chatInner.className=h.className,this.chatInner.classList.remove("disable-hover","is-scrolling")):this.chatInner.classList.add("bubbles-inner"),this.lazyLoadQueue.lock(),u=o?{promise:Object(Cs.c)().then(()=>this.performHistoryResult(o.mids,!0,!1,void 0)),cached:!0}:this.getHistory(t,!0,l,c);const{promise:p,cached:m}=u;m||i||(this.scrollable.container.textContent="",this.chat.finishPeerChange(a,l,t),this.preloader.attach(this.bubblesContainer)),I.a.lockGroup(ho);const g=p.then(()=>{if(m?i||this.chat.finishPeerChange(a,l,t):this.preloader.detach(),this.resolveLadderAnimation&&(this.resolveLadderAnimation(),this.resolveLadderAnimation=void 0),this.scrollable.lastScrollDirection=0,this.scrollable.lastScrollTop=0,Object(x.a)(this.scrollable.container,this.chatInner),I.a.unlockGroup(ho),I.a.checkAnimations(!1,ho),this.lazyLoadQueue.unlock(),o)this.scrollable.scrollTop=o.top;else if(n&&l||a){const e=d>0&&(d{this.scrollable.checkForTriggers()}),this.chat.dispatchEvent("setPeer",t,!l);const h=this.appMessagesManager.isFetchIntervalNeeded(e);if(o||h?c.then(()=>{if(s()&&(this.scrollable.checkForTriggers(),h)){const t=()=>{this.fetchNewPromise=new Promise(i=>{s()&&this.appMessagesManager.isFetchIntervalNeeded(e)?this.appMessagesManager.getNewHistory(e,this.chat.threadId).then(e=>{if(!s()||!e)return void i();const n=e.history.slice.isEnd(bn.a.Bottom);this.scrollable.loadedAll.bottom&&this.scrollable.loadedAll.bottom!==n&&(this.setLoaded("bottom",n),this.onScroll()),setTimeout(t,3e4),i()}):i()}).finally(()=>{this.fetchNewPromise=void 0})};i?setTimeout(t,3e4):t()}}):t&&!this.bubbles[n]&&t!==n||this.setLoaded("bottom",!0),this.log("scrolledAllDown:",this.scrollable.loadedAll.bottom),this.scrollable.loadedAll.bottom&&n&&!this.unreaded.size&&this.onScrolledAllDown(),"chat"===this.chat.type){const t=this.appMessagesManager.getDialogOnly(e);(null==t?void 0:t.pFlags.unread_mark)&&this.appMessagesManager.markDialogUnread(e,!0)}}).catch(e=>{throw this.log.error("getHistory promise error:",e),this.preloader.detach(),e});return{cached:m,promise:g}}onScrolledAllDown(){if("chat"===this.chat.type||"discussion"===this.chat.type){const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);this.appMessagesManager.readHistory(this.peerId,e.maxId,this.chat.threadId,!0)}}finishPeerChange(){const e=this.peerId,t=this.appPeersManager.isChannel(e),s=this.appMessagesManager.canSendToPeer(e,this.chat.threadId);this.chatInner.classList.toggle("has-rights",s),this.bubblesContainer.classList.toggle("is-chat-input-hidden",!s),this.chatInner.classList.toggle("is-chat",this.chat.isAnyGroup()),this.chatInner.classList.toggle("is-channel",t)}renderMessagesQueue(e,t,s,i){this.messagesQueue.push({message:e,bubble:t,reverse:s,promises:i}),this.setMessagesQueuePromise()}setMessagesQueuePromise(){!this.messagesQueuePromise&&this.messagesQueue.length&&(this.messagesQueuePromise=new Promise((e,t)=>{setTimeout(()=>{const s=this.messagesQueue.slice();this.messagesQueue.length=0;const i=s.reduce((e,{promises:t})=>e.concat(t),[]);this.log("promises to call",i,s,this.isHeavyAnimationInProgress);const n=this.getMiddleware();Promise.all(i).then(()=>{if(!n())throw"setMessagesQueuePromise: peer changed!";this.messagesQueueOnRender&&this.messagesQueueOnRender(),this.messagesQueueOnRenderAdditional&&this.messagesQueueOnRenderAdditional(),s.forEach(({message:e,bubble:t,reverse:s})=>{this.setBubblePosition(t,e,s)}),e(),this.messagesQueuePromise=null,this.messagesQueue.length&&this.setMessagesQueuePromise(),this.setUnreadDelimiter()}).catch(t)},0)}))}setBubblePosition(e,t,s){if(t.id<0)return void this.chatInner.prepend(e);const i=this.getDateContainerByMessage(t,s);if("scheduled"===this.chat.type||"pinned"===this.chat.type){const s=this.stickyIntersector?2:1;let n=Array.from(i.container.children).slice(s),a=0,o=0;for(;as.includes(e)));i.className=n.join(" "),g=i.lastElementChild,m=g.firstElementChild,m.innerHTML="",m.style.cssText="",g.innerHTML="",g.appendChild(m);const a=g.style.transitionDelay;g.style.cssText="",g.style.transitionDelay=a,i===this.firstUnreadBubble&&i.classList.add("is-first-unread");const o=+i.dataset.mid;+e.mid===o||(delete this.bubbles[o],this.skippedMids.delete(o))}else if(g=document.createElement("div"),g.classList.add("bubble-content-wrapper"),m=document.createElement("div"),m.classList.add("bubble-content"),(i=document.createElement("div")).classList.add("bubble"),g.appendChild(m),i.appendChild(g),!u&&!e.pFlags.out&&this.unreadedObserver){(e.pFlags.unread||this.appMessagesManager.isMentionUnread(e)||void 0!==this.historyStorage.readMaxId&&this.historyStorage.readMaxId"messageEntityEmoji"===e._),t=y.length;if(e.reduce((e,t)=>e+t.length,0)===t&&e.length<=3){if(a.default.settings.emoji.big){let t=this.appStickersManager.getAnimatedEmojiSticker(y);if(1===e.length&&!L&&t)L={_:"messageMediaDocument",document:t};else{let t=document.createElement("div");t.classList.add("attachment"),t.innerHTML=S,i.classList.add("emoji-"+e.length+"x"),m.append(t)}i.classList.add("is-message-empty","emoji-big"),M=!0,E=!1,I=!1}i.classList.add("can-have-big-emoji")}}I&&b(p,S);const C=pn.setTime(this.chat,e,i,m,p);if(m.prepend(p),e.views&&!e.pFlags.is_outgoing&&this.viewsObserver&&this.viewsObserver.observe(i),e.reply_markup&&"replyInlineMarkup"===e.reply_markup._&&e.reply_markup.rows&&e.reply_markup.rows.length){const t=e.reply_markup.rows,s=document.createElement("div");s.classList.add("reply-markup"),t.forEach(t=>{const i=t.buttons;if(!i||!i.length)return;const n=document.createElement("div");n.classList.add("reply-markup-row"),i.forEach(t=>{const s=Z.b.wrapRichText(t.text,{noLinks:!0,noLinebreaks:!0});let i;switch(t._){case"keyboardButtonUrl":{const e=Z.b.wrapRichText(" ",{entities:[{_:"messageEntityTextUrl",length:1,offset:0,url:t.url}]});i=Object(Rs.a)(e).firstElementChild,i.classList.add("is-link","tgico");break}case"keyboardButtonSwitchInline":{i=document.createElement("button"),i.classList.add("is-switch-inline");const s=document.createElement("i");s.classList.add("forward-icon"),s.innerHTML='\n \n \n \n \n ',i.append(s),Object(l.b)(i,s=>{Object(c.a)(s);const i=e.viaBotId||e.fromId;let n;n=t.pFlags.same_peer?Promise.resolve(this.peerId):this.appInlineBotsManager.checkSwitchReturn(i).then(e=>e||new Promise((e,t)=>{new Ds({[this.peerId]:[]},t=>{e(t)},()=>{t()},!0)})),n.then(e=>{const s=this.peerId===e?this.chat.threadId:void 0;this.appInlineBotsManager.switchInlineQuery(e,s,i,t.query)})});break}default:i=document.createElement("button")}i.classList.add("reply-markup-button","rp"),i.insertAdjacentHTML("beforeend",s),Object(ie.ripple)(i),n.append(i)}),s.append(n)}),Object(l.b)(s,s=>{let i=s.target;if(i.classList.contains("reply-markup-button")||(i=Object(Ce.a)(i,"reply-markup-button")),!i||i.classList.contains("is-link")||i.classList.contains("is-switch-inline"))return;Object(c.a)(s);const n=Object(Ts.a)(i),a=t[Object(Ts.a)(i.parentElement)];if(!a.buttons||!a.buttons[n])return void this.log.warn("no such button",a,n,e);const o=a.buttons[n];this.appInlineBotsManager.callbackButtonClick(this.peerId,e.mid,o)}),E=!1,i.classList.add("with-reply-markup"),g.append(s)}const k=e.pFlags.is_outgoing;if(u){(e.pFlags.unread||k)&&this.unreadOut.add(e.mid);let t="";t=k?"is-sending":e.pFlags.unread?"is-sent":"is-read",i.classList.add(t)}const T=this.appMessagesManager.getMessageWithReplies(e),P=!!T&&e.mid>0;P&&i.classList.add("with-replies");const x=u&&(!e.fwd_from||this.peerId!==a.default.myId);let O=m;if(L){let t=document.createElement("div");t.classList.add("attachment"),y||i.classList.add("is-message-empty");let s=!1;switch(L._){case"messageMediaPhoto":{const s=L.photo;y||(E=!1),e.viaBotId||i.classList.add("hide-name"),i.classList.add("photo");const n=this.appMessagesManager.groupedMessagesStorage[e.grouped_id];if(e.grouped_id&&1!==n.size&&r){i.classList.add("is-album","is-grouped"),Is({groupId:e.grouped_id,attachmentDiv:t,middleware:this.getMiddleware(),isOut:u,lazyLoadQueue:this.lazyLoadQueue,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});break}const a=!h.IS_ANDROID&&E&&!P&&!1;a&&i.classList.add("with-media-tail"),ys({photo:s,message:e,container:t,withTail:a,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});break}case"messageMediaWebPage":{s=!0;let t=L.webpage;if("webPage"!==t._)break;i.classList.add("webpage");let n=document.createElement("div");n.classList.add("web");let a,o,r=document.createElement("div");r.classList.add("quote");const l=t.photo;(l||t.document)&&(a=document.createElement("div"),a.classList.add("preview-resizer"),o=document.createElement("div"),o.classList.add("preview"),a.append(o));const c=t.document;if(c)if("gif"===c.type||"video"===c.type)i.classList.add("video"),vs({doc:c,container:o,message:e,boxWidth:v.b.active.webpage.width,boxHeight:v.b.active.webpage.height,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),isOut:x,group:ho,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});else{const t=fs({message:e,noAutoDownload:this.chat.noAutoDownloadMedia,lazyLoadQueue:this.lazyLoadQueue,loadPromises:f});o.append(t),o.classList.add("preview-with-document")}let d,h=document.createElement("div");if(h.classList.add("quote-text"),a&&h.append(a),t.site_name){const e=Z.b.wrapRichText(t.url),s=Object(Rs.a)(e).firstElementChild;s.classList.add("webpage-name"),b(s,Z.b.wrapEmojiText(t.site_name)),h.append(s),d=s}if(t.rTitle){let e=document.createElement("div");e.classList.add("title"),b(e,t.rTitle),h.append(e),d=e}if(t.rDescription){let e=document.createElement("div");e.classList.add("text"),b(e,t.rDescription),h.append(e),d=e}if(r.append(h),l&&!c){i.classList.add("photo");const t=l.sizes[l.sizes.length-1];let s=!1;t.w===t.h&&d?(i.classList.add("is-square-photo"),s=!0,this.appPhotosManager.setAttachmentSize(l,o,48,48,!1)):t.h>t.w&&i.classList.add("is-vertical-photo"),ys({photo:l,message:e,container:o,boxWidth:s?0:v.b.active.webpage.width,boxHeight:s?0:v.b.active.webpage.height,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),loadPromises:f,withoutPreloader:s,noAutoDownload:this.chat.noAutoDownloadMedia})}n.append(r),p.insertBefore(n,C);break}case"messageMediaDocument":{const n=L.document;if(n.sticker){i.classList.add("sticker"),E=!1,M=!0,n.animated&&i.classList.add("sticker-animated");const e=v.b.active,s=i.classList.contains("emoji-big")?e.emojiSticker:n.animated?e.animatedSticker:e.staticSticker;this.appPhotosManager.setAttachmentSize(n,t,s.width,s.height),m.style.height=t.style.height,m.style.width=t.style.width,Ls({doc:n,div:t,middleware:this.getMiddleware(),lazyLoadQueue:this.lazyLoadQueue,group:ho,play:!0,loop:!0,emoji:i.classList.contains("emoji-big")?y:void 0,withThumb:!0,loadPromises:f})}else if("video"===n.type||"gif"===n.type||"round"===n.type){const s="round"===n.type;s&&(M=!0),!s&&y||(E=!1),e.viaBotId||i.classList.add("hide-name"),i.classList.add(s?"round":"video");const a=this.appMessagesManager.groupedMessagesStorage[e.grouped_id];if(e.grouped_id&&1!==a.size&&r)i.classList.add("is-album","is-grouped"),Is({groupId:e.grouped_id,attachmentDiv:t,middleware:this.getMiddleware(),isOut:u,lazyLoadQueue:this.lazyLoadQueue,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia});else{const a=!h.IS_ANDROID&&!h.IS_APPLE&&!s&&E&&!P&&!1;a&&i.classList.add("with-media-tail"),vs({doc:n,container:t,message:e,boxWidth:v.b.active.regular.width,boxHeight:v.b.active.regular.height,withTail:a,isOut:x,lazyLoadQueue:this.lazyLoadQueue,middleware:this.getMiddleware(),group:ho,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia,searchContext:s?{peerId:this.peerId,inputFilter:{_:"inputMessagesFilterRoundVoice"},threadId:this.chat.threadId,useSearch:!e.pFlags.is_scheduled,isScheduled:e.pFlags.is_scheduled}:void 0})}}else{const t=function({albumMustBeRenderedFull:e,message:t,bubble:s,messageDiv:i,chat:n,loadPromises:a,noAutoDownload:o,lazyLoadQueue:r,searchContext:l,useSearch:c}){let d;const h=e?n.getMidsByMid(t.mid):[t.mid];return h.forEach((e,t)=>{const s=n.getMessage(e),c=fs({message:s,loadPromises:a,noAutoDownload:o,lazyLoadQueue:r,searchContext:l}),u=document.createElement("div");u.classList.add("document-container"),u.dataset.mid=""+e,u.dataset.peerId=""+s.peerId;const p=document.createElement("div");if(p.classList.add("document-wrapper"),s.message){const e=document.createElement("div");e.classList.add("document-message");const t=Z.b.wrapRichText(s.message,{entities:s.totalEntities});e.innerHTML=t,p.append(e)}if(h.length>1){const e=document.createElement("div");e.classList.add("document-selection"),u.append(e),u.classList.add("grouped-item"),0===t&&(d=p)}p.append(c),u.append(p),i.append(u)}),h.length>1&&s.classList.add("is-multiple-documents","is-grouped"),d}({albumMustBeRenderedFull:r,message:e,bubble:i,messageDiv:p,chat:this.chat,loadPromises:f,noAutoDownload:this.chat.noAutoDownloadMedia,lazyLoadQueue:this.lazyLoadQueue,searchContext:"voice"===n.type||"audio"===n.type?{peerId:this.peerId,inputFilter:{_:"voice"===n.type?"inputMessagesFilterRoundVoice":"inputMessagesFilterMusic"},threadId:this.chat.threadId,useSearch:!e.pFlags.is_scheduled,isScheduled:e.pFlags.is_scheduled}:void 0});t&&(O=t);const a=p.lastElementChild.querySelector(".document-message, .document-size, .audio");a&&a.append(C.cloneNode(!0)),i.classList.remove("is-message-empty"),p.classList.add((["photo","pdf"].includes(n.type)?"document":n.type||"document")+"-message"),s=!0}break}case"messageMediaContact":{const t=document.createElement("div");t.classList.add("contact"),t.dataset.peerId=""+L.user_id,p.classList.add("contact-message"),s=!0;const n=[];e.media.first_name&&n.push(Z.b.wrapEmojiText(e.media.first_name)),e.media.last_name&&n.push(Z.b.wrapEmojiText(e.media.last_name)),t.innerHTML=`\n
\n
${n.join(" ")}
\n
${e.media.phone_number?"+"+Object(Fs.a)(e.media.phone_number).formatted:"Unknown phone number"}
\n
`;const a=new ko;a.lazyLoadQueue=this.lazyLoadQueue,a.setAttribute("peer",""+e.media.user_id),a.classList.add("contact-avatar","avatar-54"),t.prepend(a),i.classList.remove("is-message-empty"),p.classList.add("contact-message"),p.append(t);break}case"messageMediaPoll":{i.classList.remove("is-message-empty");const t=function(e){const t=new ns;return t.message=e,t.setAttribute("peer-id",""+e.peerId),t.setAttribute("poll-id",e.media.poll.id),t.setAttribute("message-id",""+e.mid),t.render(),t}(e);p.prepend(t),p.classList.add("poll-message");break}default:i.classList.remove("is-message-empty"),p.innerHTML='This message is currently not supported on Telegram Web. Try desktop.telegram.org',p.append(C),this.log.warn("unrecognized media type:",e.media._,e)}s||m.append(t)}M&&i.classList.add("just-media"),this.chat.selection.isSelecting&&this.chat.selection.toggleElementCheckbox(i,!0);let _="";const F=e.fromId!==a.default.myId&&d<0&&!this.appPeersManager.isBroadcast(d)||e.viaBotId;if(F||e.fwd_from||e.reply_to_mid){let t;const s=e.from_id&&"peerChannel"===e.from_id._&&e.fromId===e.fwdFromId;let n=e.fwd_from&&!e.fwd_from.from_id&&!e.fwd_from.channel_id;if(e.viaBotId?(t=document.createElement("span"),t.innerText="@"+this.appUsersManager.getUser(e.viaBotId).username,t.classList.add("peer-title")):n?(t=document.createElement("span"),t.innerHTML=Z.b.wrapEmojiText(e.fwd_from.from_name),t.classList.add("peer-title"),i.classList.add("hidden-profile")):t=new ft.a({peerId:e.viaBotId||e.fwdFromId||e.fromId}).element,e.viaBotId){let s=document.createElement("div");s.classList.add("name","is-via"),s.dataset.peerId=e.viaBotId,s.append(Object(A.i18n)("ViaBot")," ",t),O.append(s)}else if(e.fwdFromId||e.fwd_from){this.peerId===a.default.myId||s||i.classList.add("forwarded"),e.savedFrom&&(_=e.savedFrom);let n=document.createElement("div");if(n.classList.add("name"),n.dataset.peerId=e.fwdFromId,this.peerId!==a.default.myId&&this.peerId!==gn.b&&!s||M){if(M){const e=document.createDocumentFragment();e.append(document.createElement("br")),e.append(t),t=e}n.append(Object(A.i18n)("ForwardedFrom",[t])),_&&(n.dataset.savedFrom=_)}else n.style.color=this.appPeersManager.getPeerColorById(e.fwdFromId,!1),n.append(t);O.append(n)}else if(!M&&F){let s=document.createElement("div");s.classList.add("name"),s.append(t),u||(s.style.color=this.appPeersManager.getPeerColorById(e.fromId,!1)),s.dataset.peerId=e.fromId,O.append(s)}else i.classList.add("hide-name");e.reply_to_mid&&e.reply_to_mid!==this.chat.threadId&&pn.setReply({chat:this.chat,bubble:i,bubbleContainer:m,message:e});if(this.chat.isAnyGroup()&&!x){let t=new ko;t.lazyLoadQueue=this.lazyLoadQueue,t.classList.add("user-avatar","avatar-40"),t.loadPromises=f,!e.fwdFromId&&e.fwd_from&&e.fwd_from.from_name&&t.setAttribute("peer-title",e.fwd_from.from_name),t.setAttribute("peer",""+((e.fwd_from&&(this.peerId===a.default.myId||this.peerId===gn.b)||s?e.fwdFromId:e.fromId)||0)),g.append(t)}}else i.classList.add("hide-name");"pinned"===this.chat.type&&(_=`${this.chat.peerId}_${e.mid}`);if(T&&T.mid===this.chat.threadId&&i.classList.add("is-thread-starter","is-group-last"),_&&("pinned"===this.chat.type||e.fwd_from.saved_from_msg_id)&&this.peerId!==gn.b){const e=document.createElement("div");e.classList.add("bubble-beside-button","goto-original","tgico-arrow_next"),m.append(e),i.dataset.savedFrom=_,i.classList.add("with-beside-button")}if(i.classList.add(x?"is-out":"is-in"),n&&this.renderMessagesQueue(e,i,t,f),P){pn.renderReplies({bubble:i,bubbleContainer:m,message:T,messageDiv:p,loadPromises:f,lazyLoadQueue:this.lazyLoadQueue})&&(E=!0)}return E&&(i.classList.add("can-have-tail"),m.append(na())),i}safeRenderMessage(e,t,s,i,n){try{return this.renderMessage(e,t,s,i,n)}catch(e){this.log.error("renderMessage error:",e)}}performHistoryResult(e,t,s,i){return Zn(this,void 0,void 0,(function*(){let s;e=e.slice(),i&&e.unshift(i),this.messagesQueueOnRender=()=>{const{scrollTop:e,scrollHeight:i}=this.scrollable;s=t?i-e:e,this.messagesQueueOnRender=void 0},this.needReflowScroll&&(fn(this.scrollable.container),this.needReflowScroll=!1);const n=e=>{const s=this.chat.getMessage(e);s.id>0?this.safeRenderMessage(s,t,!0):this.processLocalMessageRender(s)},a=e.length;if(t)for(let t=0;t=0;--t)n(e[t]);if("scheduled"!==this.chat.type){const t=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId),s=t.history.first,i=t.history.last;!s.isEnd(bn.a.Bottom)||s.length&&!e.includes(s[0])||this.setLoaded("bottom",!0,!1),!i.isEnd(bn.a.Top)||i.length&&!e.includes(i[i.length-1])||this.setLoaded("top",!0,!1)}else this.setLoaded("top",!0),this.setLoaded("bottom",!0);if(yield this.messagesQueuePromise,this.scrollable.loadedAll.top&&this.messagesQueueOnRenderAdditional&&(this.messagesQueueOnRenderAdditional(),this.messagesQueueOnRenderAdditional&&this.messagesQueueOnRenderAdditional()),void 0!==s){const e=t?this.scrollable.scrollHeight-s:s;this.scrollable.scrollTop=e,h.IS_SAFARI&&fn(this.scrollable.container)}return!0}))}requestHistory(e,t,s){if("chat"===this.chat.type||"discussion"===this.chat.type)return this.appMessagesManager.getHistory(this.peerId,e,t,s,this.chat.threadId);if("pinned"===this.chat.type){return this.appMessagesManager.getSearch({peerId:this.peerId,inputFilter:{_:"inputMessagesFilterPinned"},maxId:e,limit:t,backLimit:s}).then(e=>({history:e.history.map(e=>e.mid)}))}return"scheduled"===this.chat.type?this.appMessagesManager.getScheduledMessages(this.peerId).then(e=>({history:e.slice().reverse()})):void 0}animateAsLadder(e,t,s,i,n){return Zn(this,void 0,void 0,(function*(){if(this.chat.setPeerPromise&&!this.resolveLadderAnimation)return void(this.resolveLadderAnimation=this.animateAsLadder.bind(this,e,t,s,i,n));if(!Object.keys(this.bubbles).length)return;let a,o=Object(L.e)(this.bubbles,"desc");s&&t.length&&(o=o.filter(e=>!t.includes(e))),a=i?n||Math.max(...o):e||Math.max(...o);const r=o.slice(o.findIndex(e=>a>e)),l=s?[]:[a],c=s?[]:o.slice(0,o.findIndex(e=>a>=e)).reverse();de.b&&this.log("getHistory: targeting mid:",a,n,e,r.map(e=>this.appMessagesIdsManager.getServerMessageId(e)),c.map(e=>this.appMessagesIdsManager.getServerMessageId(e)));const d=[];this.chatInner.classList.add("zoom-fading");const u=s?10:40,p=s?0:1,m=(e,t=0)=>{const s=Object(oe.a)();let i=0;return e.forEach((n,a)=>{if(!this.bubbles[n]||this.skippedMids.has(n))return void this.log.warn("animateAsLadder: no bubble by mid:",n);const o=this.bubbles[n].lastElementChild;if(i=(a+t||.1)*u,o.classList.add("zoom-fade"),o.style.transitionDelay=i+"ms",a===e.length-1){const e=t=>{t.target===o&&(s.resolve(),o.removeEventListener("transitionend",e))};o.addEventListener("transitionend",e)}d.push(o)}),e.length||s.resolve(),{lastMsDelay:i,animationPromise:s}},g=m(r,p),b=m(l),v=m(c,p),f=[g.animationPromise,b.animationPromise,v.animationPromise],y=[g.lastMsDelay,b.lastMsDelay,v.lastMsDelay];let w;return this.onAnimateLadder&&(yield this.onAnimateLadder()),Object(_e.b)(()=>{d.forEach(e=>{e.classList.remove("zoom-fade")})}),(r.length||l.length||c.length)&&(w=Promise.all(f),Object(Cs.b)(w,Math.max(...y)+200).then(()=>{Object(_e.b)(()=>{d.forEach(e=>{e.style.transitionDelay=""}),this.chatInner.classList.remove("zoom-fading")}),h.IS_SAFARI||(this.needReflowScroll=!0)})),w}))}renderEmptyPlaceholder(e,t,s,i){const n="empty-bubble-placeholder";let a,o;if(t.classList.add(n,n+"-"+e),"group"===e?a=Object(A.i18n)("GroupEmptyTitle1"):"saved"===e?a=Object(A.i18n)("ChatYourSelfTitle"):"noMessages"===e||"greeting"===e?a=Object(A.i18n)("NoMessages"):"noScheduledMessages"===e&&(a=Object(A.i18n)("NoScheduledMessages")),a.classList.add("center",n+"-title"),i.push(a),"group"===e)i.push(Object(A.i18n)("GroupEmptyTitle2")),o=[Object(A.i18n)("GroupDescription1"),Object(A.i18n)("GroupDescription2"),Object(A.i18n)("GroupDescription3"),Object(A.i18n)("GroupDescription4")];else if("saved"===e)o=[Object(A.i18n)("ChatYourSelfDescription1"),Object(A.i18n)("ChatYourSelfDescription2"),Object(A.i18n)("ChatYourSelfDescription3"),Object(A.i18n)("ChatYourSelfDescription4")];else if("greeting"===e){const e=Object(A.i18n)("NoMessagesGreetingsDescription");e.classList.add("center",n+"-subtitle"),this.messagesQueue.findAndSplice(e=>e.bubble===t);const a=document.createElement("div");a.classList.add(n+"-sticker");const o=this.getMiddleware(),r=this.appStickersManager.getGreetingSticker().then(e=>{if(!o())return;const t=[];return Ls({doc:e,div:a,middleware:o,lazyLoadQueue:this.lazyLoadQueue,group:ho,play:!0,loop:!0,withThumb:!0,loadPromises:t}),Object(l.b)(a,e=>{Object(c.a)(e),Yn.onMediaClick({target:e.target})}),Promise.all(t)});this.renderMessagesQueue(s,t,!1,[r]),i.push(e,a)}o&&(i.push(...o.map(e=>{const t=document.createElement("span");return t.classList.add(n+"-list-item"),t.append(e),t})),"group"===e?o.forEach(e=>{const t=document.createElement("span");t.classList.add("tgico-check"),e.prepend(t)}):"saved"===e&&o.forEach(e=>{const t=document.createElement("span");t.classList.add(n+"-list-bullet"),t.innerText="•",e.prepend(t)})),i.length>1&&t.classList.add("has-description"),i.forEach(e=>e.classList.add(n+"-line"))}processLocalMessageRender(e){const t=this.safeRenderMessage(e,void 0,void 0,void 0,!1);t.classList.add("bubble-first","is-group-last","is-group-first"),t.classList.remove("can-have-tail","is-in");const s=t.querySelector(".message, .service-msg"),i=[],n=this.appPeersManager.isBot(this.peerId);if(n&&"message"===e._){const e=document.createElement("b");e.append(Object(A.i18n)("BotInfoTitle")),i.push(e,"\n\n")}else this.appPeersManager.isAnyGroup(this.peerId)&&this.appPeersManager.getPeer(this.peerId).pFlags.creator?this.renderEmptyPlaceholder("group",t,e,i):a.default.myId===this.peerId?this.renderEmptyPlaceholder("saved",t,e,i):this.peerId>0&&!n&&this.appMessagesManager.canSendToPeer(this.peerId)&&"chat"===this.chat.type?this.renderEmptyPlaceholder("greeting",t,e,i):"scheduled"===this.chat.type?this.renderEmptyPlaceholder("noScheduledMessages",t,e,i):this.renderEmptyPlaceholder("noMessages",t,e,i);s.prepend(...i),this.messagesQueueOnRenderAdditional?this.onAnimateLadder=()=>{if(this.chatInner.prepend(t),this.onAnimateLadder=void 0,!this.messagesQueuePromise)return Object(_e.d)()}:this.chatInner.prepend(t),this.emptyPlaceholderMid=e.mid}generateLocalFirstMessage(e,t){const s=this.appMessagesIdsManager.generateMessageId("scheduled"===this.chat.type?-1:0),i={_:e?"messageService":"message",date:0,id:-(this.peerId+s),peer_id:this.appPeersManager.getOutputPeer(this.peerId),pFlags:{}};return e||(i.message=""),Object(ji.a)(i),t&&t(i),this.appMessagesManager.saveMessages([i]),i}setLoaded(e,t,s=!0){if(this.scrollable.loadedAll[e]!==t){if(this.scrollable.loadedAll[e]=t,"top"===e&&t&&this.appUsersManager.isBot(this.peerId)){this.log("inject bot description");const e=this.getMiddleware();return this.appProfileManager.getProfile(this.peerId).then(t=>{var s;if(!e())return;if(!(null===(s=t.bot_info)||void 0===s?void 0:s.description))return void this.checkIfEmptyPlaceholderNeeded();const i=this.generateLocalFirstMessage(!1,e=>{e.message=t.bot_info.description});this.processLocalMessageRender(i)})}this.checkIfEmptyPlaceholderNeeded()}}checkIfEmptyPlaceholderNeeded(){if(this.scrollable.loadedAll.top&&this.scrollable.loadedAll.bottom&&void 0===this.emptyPlaceholderMid&&(!this.appMessagesManager.getHistoryStorage(this.peerId).count||Object.keys(this.bubbles).length&&!this.getRenderedLength()||"scheduled"===this.chat.type&&!Object.keys(this.bubbles).length)){this.log("inject empty peer placeholder");const e=this.generateLocalFirstMessage(!0);return this.processLocalMessageRender(e),!0}return!1}getHistory(e=0,t=!1,s=!1,i=0,n=!1){const o=this.peerId,r=Math.min(30,yt.a.windowH/38|0),l=Object.keys(this.bubbles).length>0?Math.max(40,r):r;let c=l;if(void 0!==ta){if(!ta)return{cached:!1,promise:Promise.resolve(!0)};Object.keys(this.bubbles).length>0&&--ta}let d,h=0;if(s&&(h=c,t||(c=0)),i&&!s)if("pinned"===this.chat.type)d=[i];else{const t=this.appMessagesManager.getHistoryStorage(o,this.chat.threadId).history.slice;if(t.length=0;--e){if(!this.chat.getMessage(d[e]).grouped_id)break;d.splice(e,1)}e=d[d.length-1]||e}}let u,p=this.requestHistory(e,c,h);const m=(null==d?void 0:d.length)&&p instanceof Promise,g=this.isFirstLoad&&h&&p instanceof Promise||m;m&&(u=p,p={history:d}),this.isFirstLoad=!1;const b=e=>Zn(this,void 0,void 0,(function*(){if("offsetIdOffset"in e&&e.history.isEnd(bn.a.Top)){if("discussion"===this.chat.type){const t=this.appMessagesManager.threadsServiceMessagesIdsStorage[this.peerId+"_"+this.chat.threadId];t&&e.history.push(t),e.history.push(...this.chat.getMidsByMid(this.chat.threadId).reverse())}yield this.setLoaded("top",!0)}})),v=e=>Object(Cs.c)().then(()=>b(e)).then(()=>this.performHistoryResult(e.history||[],t,s,!m&&i)),f=e=>{const s=e.then(e=>(t?this.getHistoryTopPromise!==s:this.getHistoryBottomPromise!==s)?(this.log.warn("getHistory: peer changed"),Promise.reject()):n?(this.scrollable.onScroll(),!0):v(e),e=>{throw this.log.error("getHistory error:",e),e});return s};let y,w;if(p instanceof Promise)w=!1,y=f(p);else{if(n)return null;w=!0,y=v(p)}const S=m?f(u):y;if(g&&a.default.settings.animationsEnabled){let s=m?2:1;this.messagesQueueOnRenderAdditional=()=>{if(this.log("ship went past rocks of magnets"),--s)return;this.messagesQueueOnRenderAdditional=void 0;(this.animateAsLadder(i,d,m,h,e)||Promise.resolve()).then(()=>{setTimeout(()=>{this.loadMoreHistory(t,!0)},0)})}}else this.messagesQueueOnRenderAdditional=void 0;return t?this.getHistoryTopPromise=S:this.getHistoryBottomPromise=S,S.then(()=>{t?this.getHistoryTopPromise=void 0:this.getHistoryBottomPromise=void 0}),n?null:(!g&&y.then(()=>{let e;t?(this.loadedTopTimes++,this.loadedBottomTimes=Math.max(0,--this.loadedBottomTimes)):(this.loadedBottomTimes++,this.loadedTopTimes=Math.max(0,--this.loadedTopTimes)),(t&&this.loadedTopTimes>2||!t&&this.loadedBottomTimes>2)&&(e=Object(L.e)(this.bubbles));const s=2*l;e&&e.length>s&&(t?(e=e.slice(s),this.setLoaded("bottom",!1)):(e=e.slice(0,e.length-s),this.setLoaded("top",!1)),this.deleteMessagesByIds(e,!1))}),y.then(()=>{"chat"===this.chat.type&&setTimeout(()=>{t?this.loadMoreHistory(!0,!0):this.loadMoreHistory(!1,!0)},0)}),{cached:w,promise:y})}setUnreadDelimiter(){if("chat"!==this.chat.type&&"discussion"!==this.chat.type)return;if(this.attachedUnreadBubble)return;const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId);let t=this.appMessagesManager.getReadMaxIdIfUnread(this.peerId,this.chat.threadId);if(t&&(t=Object.keys(this.bubbles).filter(e=>!this.bubbles[e].classList.contains("is-out")).map(e=>+e).sort((e,t)=>e-t).find(e=>e>t),t&&this.bubbles[t])){let s=this.bubbles[t];this.firstUnreadBubble&&this.firstUnreadBubble!==s&&(this.firstUnreadBubble.classList.remove("is-first-unread"),this.firstUnreadBubble=null),t!==e.maxId&&s.classList.add("is-first-unread"),this.firstUnreadBubble=s,this.attachedUnreadBubble=!0}}deleteEmptyDateGroups(){const e=+!!this.stickyIntersector+1;for(const t in this.dateMessages){const s=this.dateMessages[t];s.container.childElementCount===e&&(s.container.remove(),this.stickyIntersector&&this.stickyIntersector.unobserve(s.container,s.div),delete this.dateMessages[t])}this.checkIfEmptyPlaceholderNeeded()}}function na(){const e=document.createElementNS("http://www.w3.org/2000/svg","svg");e.setAttributeNS(null,"viewBox","0 0 11 20"),e.setAttributeNS(null,"width","11"),e.setAttributeNS(null,"height","20"),e.classList.add("bubble-tail");const t=document.createElementNS("http://www.w3.org/2000/svg","use");return t.setAttributeNS(null,"href","#message-tail-filled"),e.append(t),e}class aa{constructor(e,t,s,n){var r;let l,c,d,h=[],u=[];const p=o.a.canPinMessage(e),m=(a,o,r)=>{setTimeout(()=>{let a;a=s&&!t?p?i.a.unpinAllMessages(e):i.a.hidePinnedMessages(e):i.a.updatePinnedMessage(e,t,s,r,o),n&&a.then(n)},300)};if(s){let s="UnpinMessage";t?(l="UnpinMessageAlertTitle",c="Chat.Confirm.Unpin"):p?(l="Popup.Unpin.AllTitle",c="Chat.UnpinAllMessagesConfirmation",d=[""+((null===(r=i.a.pinnedMessages[e])||void 0===r?void 0:r.count)||1)]):(l="Popup.Unpin.HideTitle",c="Popup.Unpin.HideDescription",s="Popup.Unpin.Hide"),h.push({langKey:s,isDanger:!0,callback:m})}else{l="PinMessageAlertTitle";const t="PinMessage";e<0?(h.push({langKey:t,callback:e=>m(0,!1,!e.size)}),G.a.isBroadcast(-e)?c="PinMessageAlertChannel":(c="PinMessageAlert",u.push({text:"PinNotify",checked:!0}))):(c="PinMessageAlertChat",e===a.default.myId?h.push({langKey:t,callback:m}):(h.push({langKey:t,callback:e=>m(0,!e.size)}),u.push({text:"PinAlsoFor",textArgs:[new ft.a({peerId:e}).element],checked:!0})))}Object(ct.a)(h);new ht("popup-delete-chat",{peerId:e,titleLangKey:l,descriptionLangKey:c,descriptionLangArgs:d,buttons:h,checkboxes:u}).show()}}function oa(e=window.getSelection()){if(!e||!e.rangeCount)return!0;const t=e.getRangeAt(0);return!t.toString()||!t.START_TO_END}class ra extends ht{constructor(e,t,s,n){super("popup-report-messages-confirm",{noTitle:!0,descriptionLangKey:"ReportInfo",buttons:[{langKey:"ReportChat",callback:()=>{o.isValid()&&(n&&n(),i.a.reportMessages(e,t,s,o.value).then(e=>{e&&at({langPackKey:"ReportSentInfo"})}))}}],body:!0});const a=document.createElement("div");Ls({doc:hs.getAnimatedEmojiSticker(ra.STICKER_EMOJI),div:a,emoji:ra.STICKER_EMOJI,width:100,height:100,loop:!1,play:!0}).finally(()=>{this.show()}),this.header.append(a);const o=new F.b({label:"ReportHint",maxLength:512,placeholder:"ReportChatDescription"});this.body.append(o.container)}}ra.STICKER_EMOJI="👮‍♀️";class la extends ht{constructor(e,t,s){super("popup-report-messages",{titleLangKey:"ChatTitle.ReportMessages",buttons:[],body:!0}),t=t.slice();const i=[["ReportChatSpam","inputReportReasonSpam"],["ReportChatViolence","inputReportReasonViolence"],["ReportChatChild","inputReportReasonChildAbuse"],["ReportChatPornography","inputReportReasonPornography"],["ReportChatOther","inputReportReasonOther"]];i.forEach(e=>{const t=Object(U.a)("btn-primary btn-transparent",{text:e[0]});this.body.append(t)});const n=hs.preloadAnimatedEmojiSticker(ra.STICKER_EMOJI);Object(l.b)(this.body,a=>{const o=Object(Ce.a)(a.target,"btn-primary"),r=i[Object(Ts.a)(o)][1];n.then(()=>{this.hide(),new ra(e,t,r,s)})},{listenerSetter:this.listenerSetter}),this.body.style.margin="0 -1rem",this.buttons.style.marginTop=".5rem",this.show()}}class ca{constructor(e,t,s,i,n,a,o){this.attachTo=e,this.chat=t,this.appMessagesManager=s,this.appPeersManager=i,this.appPollsManager=n,this.appDocsManager=a,this.appMessagesIdsManager=o,this.onSendScheduledClick=()=>{this.chat.selection.isSelecting?Object(l.d)(this.chat.selection.selectionSendNowBtn):new Hs(this.peerId,this.chat.getMidsByMid(this.mid))},this.onReplyClick=()=>{this.chat.input.initMessageReply(this.mid)},this.onEditClick=()=>{this.chat.input.initMessageEditing(this.mid)},this.onCopyClick=()=>{if(oa()){et((this.chat.selection.isSelecting?[...this.chat.selection.selectedMids.get(this.peerId)].sort((e,t)=>e-t):[this.mid]).reduce((e,t)=>{const s=this.chat.getMessage(t);return e+((null==s?void 0:s.message)?s.message+"\n":"")},"").trim())}else document.execCommand("copy")},this.onCopyAnchorLinkClick=()=>{et(this.target.href)},this.onCopyLinkClick=()=>{let e;"discussion"===this.chat.type&&(e=this.appMessagesManager.getMessageByPeer(this.peerId,this.chat.threadId));const t=this.appPeersManager.getPeerUsername(e?e.fromId:this.peerId),s=this.appMessagesIdsManager.getServerMessageId(this.mid);let i,n="https://t.me/";t?(n+=t+"/"+(e?this.appMessagesIdsManager.getServerMessageId(e.fwd_from.channel_post):s),e&&(n+="?comment="+s),i="LinkCopied"):(n+="c/"+Math.abs(this.peerId)+"/"+s,e&&(n+="?thread="+this.appMessagesIdsManager.getServerMessageId(e.mid)),i="LinkCopiedPrivateInfo"),nt(A.default.format(i,!0)),et(n)},this.onPinClick=()=>{new aa(this.peerId,this.mid)},this.onUnpinClick=()=>{new aa(this.peerId,this.mid,!0)},this.onRetractVote=()=>{this.appPollsManager.sendVote(this.message,[])},this.onStopPoll=()=>{this.appPollsManager.stopPoll(this.message)},this.onForwardClick=()=>{if(this.chat.selection.isSelecting)Object(l.d)(this.chat.selection.selectionForwardBtn);else{const e=this.isTargetAGroupedItem?[this.mid]:this.chat.getMidsByMid(this.mid);new Ds({[this.peerId]:e})}},this.onSelectClick=()=>{this.chat.selection.toggleByElement(Object(Ce.a)(this.target,"grouped-item")||Object(Ce.a)(this.target,"bubble"))},this.onClearSelectionClick=()=>{this.chat.selection.cancelSelection()},this.onDeleteClick=()=>{this.chat.selection.isSelecting?Object(l.d)(this.chat.selection.selectionDeleteBtn):new Bs(this.peerId,this.isTargetAGroupedItem?[this.mid]:this.chat.getMidsByMid(this.mid),this.chat.type)};const r=e=>{let s,i;this.init&&(this.init(),this.init=null);try{i=Object(Ce.a)(e.target,"bubble-content-wrapper"),s=i?i.parentElement:Object(Ce.a)(e.target,"bubble")}catch(e){}if(!s||s.classList.contains("bubble-first"))return;if((e instanceof MouseEvent||e.hasOwnProperty("preventDefault"))&&e.preventDefault(),this.element.classList.contains("active"))return!1;(e instanceof MouseEvent||e.hasOwnProperty("cancelBubble"))&&(e.cancelBubble=!0);let n=+s.dataset.mid;if(!n)return;if(this.isSelectable=this.chat.selection.canSelectBubble(s),this.peerId=this.chat.peerId,this.target=e.target,this.isTextSelected=!oa(),this.isAnchorTarget="A"===this.target.tagName&&("_blank"===this.target.target||this.target.classList.contains("anchor-url")),this.isUsernameTarget="A"===this.target.tagName&&this.target.classList.contains("mention"),t.selection.isSelecting&&!i){const e=this.chat.getMidsByMid(n);if(e.length>1){const t=this.chat.selection.isMidSelected(this.peerId,n)?n:e.find(e=>this.chat.selection.isMidSelected(this.peerId,e));t&&(n=t)}}const a=Object(Ce.a)(this.target,"grouped-item");this.isTargetAGroupedItem=!!a,this.mid=a?+a.dataset.mid:n,this.isSelected=this.chat.selection.isMidSelected(this.peerId,this.mid),this.message=this.chat.getMessage(this.mid),this.buttons.forEach(e=>{let s;t.selection.isSelecting&&!e.withSelection?s=!1:(i||pe.IS_TOUCH_SUPPORTED,s=e.verify()),e.element.classList.toggle("hide",!s)});const o=s.classList.contains("is-in")?"left":"right";Object(se.e)(e.touches?e.touches[0]:e,this.element,o),Object(se.d)(this.element,()=>{this.peerId=this.mid=0,this.target=null})};pe.IS_TOUCH_SUPPORTED?Object(l.b)(e,e=>{if(t.selection.isSelecting)return;const s=e.target.className;if(!s||!s.includes)return;t.log("touchend",e);["bubble","bubble-content-wrapper","bubble-content","message","time","inner"].find(e=>s.match(new RegExp(e+"($|\\s)")))&&(Object(c.a)(e),r(e))},{listenerSetter:this.chat.bubbles.listenerSetter}):Object(se.a)(e,r,this.chat.bubbles.listenerSetter)}init(){this.buttons=[{icon:"send2",text:"MessageScheduleSend",onClick:this.onSendScheduledClick,verify:()=>"scheduled"===this.chat.type&&!this.message.pFlags.is_outgoing},{icon:"send2",text:"Message.Context.Selection.SendNow",onClick:this.onSendScheduledClick,verify:()=>"scheduled"===this.chat.type&&this.isSelected&&!this.chat.selection.selectionSendNowBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0},{icon:"schedule",text:"MessageScheduleEditTime",onClick:()=>{this.chat.input.scheduleSending(()=>{this.appMessagesManager.editMessage(this.message,this.message.message,{scheduleDate:this.chat.input.scheduleDate,entities:this.message.entities}),this.chat.input.onMessageSent(!1,!1)},new Date(1e3*this.message.date))},verify:()=>"scheduled"===this.chat.type},{icon:"reply",text:"Reply",onClick:this.onReplyClick,verify:()=>this.appMessagesManager.canSendToPeer(this.peerId,this.chat.threadId)&&!this.message.pFlags.is_outgoing&&!!this.chat.input.messageInput&&"scheduled"!==this.chat.type},{icon:"edit",text:"Edit",onClick:this.onEditClick,verify:()=>this.appMessagesManager.canEditMessage(this.message,"text")&&!!this.chat.input.messageInput},{icon:"copy",text:"Copy",onClick:this.onCopyClick,verify:()=>!(!this.message.message||this.isTextSelected||this.isAnchorTarget&&this.message.message===this.target.innerText)},{icon:"copy",text:"Chat.CopySelectedText",onClick:this.onCopyClick,verify:()=>!!this.message.message&&this.isTextSelected},{icon:"copy",text:"Message.Context.Selection.Copy",onClick:this.onCopyClick,verify:()=>{if(!this.isSelected)return!1;for(const[e,t]of this.chat.selection.selectedMids)for(const s of t)if(this.appMessagesManager.getMessageByPeer(e,s).message)return!0;return!1},notDirect:()=>!0,withSelection:!0},{icon:"copy",text:"CopyLink",onClick:this.onCopyAnchorLinkClick,verify:()=>this.isAnchorTarget,withSelection:!0},{icon:"copy",text:"Text.Context.Copy.Username",onClick:()=>{et(this.target.innerHTML)},verify:()=>this.isUsernameTarget,withSelection:!0},{icon:"copy",text:"Text.Context.Copy.Hashtag",onClick:()=>{et(this.target.innerHTML)},verify:()=>this.target.classList.contains("anchor-hashtag"),withSelection:!0},{icon:"link",text:"MessageContext.CopyMessageLink1",onClick:this.onCopyLinkClick,verify:()=>this.appPeersManager.isChannel(this.peerId)&&!this.message.pFlags.is_outgoing},{icon:"pin",text:"Message.Context.Pin",onClick:this.onPinClick,verify:()=>!this.message.pFlags.is_outgoing&&"messageService"!==this.message._&&!this.message.pFlags.pinned&&this.appPeersManager.canPinMessage(this.peerId)&&"scheduled"!==this.chat.type},{icon:"unpin",text:"Message.Context.Unpin",onClick:this.onUnpinClick,verify:()=>this.message.pFlags.pinned&&this.appPeersManager.canPinMessage(this.peerId)},{icon:"download",text:"MediaViewer.Context.Download",onClick:()=>{this.appDocsManager.saveDocFile(this.message.media.document)},verify:()=>{var e;if(this.message.pFlags.is_outgoing)return!1;const t=null===(e=this.message.media)||void 0===e?void 0:e.document;if(!t)return!1;let s=!!pe.IS_TOUCH_SUPPORTED;const i=!t.type||!["gif","video","sticker"].includes(t.type);return i&&(s=s||!!Object(Ce.a)(this.target,"document")||!!Object(Ce.a)(this.target,"audio")),i&&s}},{icon:"checkretract",text:"Chat.Poll.Unvote",onClick:this.onRetractVote,verify:()=>{var e;const t=null===(e=this.message.media)||void 0===e?void 0:e.poll;return t&&t.chosenIndexes.length&&!t.pFlags.closed&&!t.pFlags.quiz}},{icon:"stop",text:"Chat.Poll.Stop",onClick:this.onStopPoll,verify:()=>{var e;const t=null===(e=this.message.media)||void 0===e?void 0:e.poll;return this.appMessagesManager.canEditMessage(this.message,"poll")&&t&&!t.pFlags.closed&&!this.message.pFlags.is_outgoing}},{icon:"forward",text:"Forward",onClick:this.onForwardClick,verify:()=>"scheduled"!==this.chat.type&&!this.message.pFlags.is_outgoing&&"messageService"!==this.message._},{icon:"forward",text:"Message.Context.Selection.Forward",onClick:this.onForwardClick,verify:()=>this.chat.selection.selectionForwardBtn&&this.isSelected&&!this.chat.selection.selectionForwardBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0},{icon:"flag",text:"ReportChat",onClick:()=>{new la(this.peerId,[this.mid])},verify:()=>!this.message.pFlags.out&&"message"===this.message._&&!this.message.pFlags.is_outgoing&&this.appPeersManager.isChannel(this.peerId),notDirect:()=>!0,withSelection:!0},{icon:"select",text:"Message.Context.Select",onClick:this.onSelectClick,verify:()=>!this.message.action&&!this.isSelected&&this.isSelectable,notDirect:()=>!0,withSelection:!0},{icon:"select",text:"Message.Context.Selection.Clear",onClick:this.onClearSelectionClick,verify:()=>this.isSelected,notDirect:()=>!0,withSelection:!0},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>this.appMessagesManager.canDeleteMessage(this.message)},{icon:"delete danger",text:"Message.Context.Selection.Delete",onClick:this.onDeleteClick,verify:()=>this.isSelected&&!this.chat.selection.selectionDeleteBtn.hasAttribute("disabled"),notDirect:()=>!0,withSelection:!0}],this.element=Ee(this.buttons,this.chat.bubbles.listenerSetter),this.element.id="bubble-contextmenu",this.element.classList.add("contextmenu"),this.chat.container.append(this.element)}}var da=s(143),ha=s.n(da),ua=s(136);class pa{constructor(e){this.sendMenuButtons=[{icon:"mute",text:"Chat.Send.WithoutSound",onClick:e.onSilentClick,verify:()=>"schedule"===this.type},{icon:"schedule",text:"Chat.Send.ScheduledMessage",onClick:e.onScheduleClick,verify:()=>"schedule"===this.type},{icon:"schedule",text:"Chat.Send.SetReminder",onClick:e.onScheduleClick,verify:()=>"reminder"===this.type}],this.sendMenu=Ee(this.sendMenuButtons,e.listenerSetter),this.sendMenu.classList.add("menu-send",e.openSide),Object(se.a)(e.onContextElement,t=>{e.onOpen&&!e.onOpen()||(this.sendMenuButtons.forEach(e=>{e.element.classList.toggle("hide",!e.verify())}),Object(c.a)(t),Object(se.d)(this.sendMenu))},e.listenerSetter)}setPeerId(e){this.type=e===a.default.myId?"reminder":"schedule"}}var ma=s(64),ga=s(82);class ba extends ct.b{constructor(e){if(super("popup-create-poll popup-new-media",null,{closable:!0,withConfirm:"Create",body:!0}),this.chat=e,this.tempId=0,this.onSubmitClick=()=>{this.send()},this.onInput=e=>{const t=e.target,s=Object(mt.a)(t,"LABEL"),i=Object(ga.a)(t);i||(t.parentElement.classList.add("is-filled"),s.classList.remove("hidden-widget"),s.firstElementChild.removeAttribute("disabled"));!s.nextElementSibling&&!i&&this.questions.childElementCount<10&&this.appendMoreField(),this.handleChange()},this.onDeleteClick=e=>{const t=e.target,s=Object(mt.a)(t,"LABEL"),i=Object(Ts.a)(s);this.correctAnswers&&this.correctAnswers[0][0]===i&&(this.correctAnswers=void 0),s.remove(),this.optionInputFields.splice(i,1),this.optionInputFields.forEach((e,t)=>{e.options.labelOptions.length=0,e.options.labelOptions.push(t+1);A.default.weakMap.get(e.label.firstElementChild).update()}),this.handleChange()},Object(A._i18n)(this.title,"NewPoll"),this.questionInputField=new F.b({placeholder:"AskAQuestion",label:"AskAQuestion",name:"question",maxLength:255}),this.listenerSetter.add(this.questionInputField.input)("input",()=>{this.handleChange()}),this.optionInputFields=[],"scheduled"!==this.chat.type){const e=new pa({onSilentClick:()=>{this.chat.input.sendSilent=!0,this.send()},onScheduleClick:()=>{this.chat.input.scheduleSending(()=>{this.send()})},openSide:"bottom-left",onContextElement:this.btnConfirm});e.setPeerId(this.chat.peerId),this.header.append(e.sendMenu)}this.header.append(this.questionInputField.container);const t=document.createElement("hr"),s=document.createElement("div");s.classList.add("caption"),Object(A._i18n)(s,"PollOptions"),this.questions=document.createElement("form"),this.questions.classList.add("poll-create-questions");const i=document.createElement("div");i.classList.add("poll-create-settings");const n=document.createElement("div");n.classList.add("caption"),Object(A._i18n)(n,"Settings"),this.chat.appPeersManager.isBroadcast(this.chat.peerId)||(this.anonymousCheckboxField=new dt.a({text:"NewPoll.Anonymous",name:"anonymous"}),this.anonymousCheckboxField.input.checked=!0,i.append(this.anonymousCheckboxField.label)),this.multipleCheckboxField=new dt.a({text:"NewPoll.MultipleChoice",name:"multiple"}),this.quizCheckboxField=new dt.a({text:"NewPoll.Quiz",name:"quiz"}),this.listenerSetter.add(this.multipleCheckboxField.input)("change",()=>{const e=this.multipleCheckboxField.input.checked;this.quizCheckboxField.input.toggleAttribute("disabled",e)}),this.listenerSetter.add(this.quizCheckboxField.input)("change",()=>{const e=this.quizCheckboxField.input.checked;Array.from(this.questions.children).map(t=>{t.classList.toggle("radio-field",e)}),e||(this.correctAnswers=void 0,this.quizSolutionField.setValueSilently("")),a.forEach(t=>t.classList.toggle("hide",!e)),this.multipleCheckboxField.input.toggleAttribute("disabled",e),this.handleChange()}),i.append(this.multipleCheckboxField.label,this.quizCheckboxField.label);const a=[],o=document.createElement("div");o.classList.add("caption"),Object(A._i18n)(o,"AccDescrQuizExplanation");const r=document.createElement("hr"),c=document.createElement("div");c.classList.add("poll-create-questions"),this.quizSolutionField=new F.b({placeholder:"NewPoll.Explanation.Placeholder",label:"NewPoll.Explanation.Placeholder",name:"solution",maxLength:200}),this.listenerSetter.add(this.questionInputField.input)("input",()=>{this.handleChange()});const d=document.createElement("div");d.classList.add("subtitle"),Object(A._i18n)(d,"AddAnExplanationInfo"),c.append(this.quizSolutionField.container,d),a.push(r,o,c),a.forEach(e=>e.classList.add("hide")),this.body.parentElement.insertBefore(t,this.body),this.body.append(s,this.questions,document.createElement("hr"),n,i,...a),Object(l.b)(this.btnConfirm,this.onSubmitClick,{listenerSetter:this.listenerSetter}),this.scrollable=new P.b(this.body),this.appendMoreField(),this.onEscape=()=>!this.getFilledAnswers().length,this.handleChange()}getFilledAnswers(){return Array.from(this.questions.children).map((e,t)=>{const s=e.querySelector(".input-field-input");return s instanceof HTMLInputElement?s.value:Object(ma.a)(s,!1).value}).filter(e=>!!e.trim())}validate(){var e;const t=this.questionInputField.value;if(!t)return!1;if(t.length>255)return!1;if(this.quizCheckboxField.input.checked&&!(null===(e=this.correctAnswers)||void 0===e?void 0:e.length))return!1;const s=this.getFilledAnswers();if(s.length<2)return!1;if(s.find(e=>e.length>100))return!1;const{value:i}=Object(ma.a)(this.quizSolutionField.input,!1);return!(i.length>200)}handleChange(){const e=this.validate();this.btnConfirm.toggleAttribute("disabled",!e)}send(e=!1){const t=this.questionInputField.value,s=this.getFilledAnswers(),{value:i,entities:n}=Object(ma.a)(this.quizSolutionField.input);if("scheduled"===this.chat.type&&!e)return void this.chat.input.scheduleSending(()=>{this.send(!0)});this.hide();const a={};this.anonymousCheckboxField&&!this.anonymousCheckboxField.input.checked&&(a.public_voters=!0),this.multipleCheckboxField.input.checked&&(a.multiple_choice=!0),this.quizCheckboxField.input.checked&&(a.quiz=!0);const o={_:"poll",pFlags:a,question:t,answers:s.map((e,t)=>({_:"pollAnswer",text:e,option:new Uint8Array([t])})),id:void 0},r=this.chat.appPollsManager.getInputMediaPoll(o,this.correctAnswers,i,n);this.chat.appMessagesManager.sendOther(this.chat.peerId,r,{threadId:this.chat.threadId,replyToMsgId:this.chat.input.replyToMsgId,scheduleDate:this.chat.input.scheduleDate,silent:this.chat.input.sendSilent}),"reply"===this.chat.input.helperType&&this.chat.input.clearHelper(),this.chat.input.onMessageSent(!1,!1)}appendMoreField(){const e=this.tempId++,t=this.questions.childElementCount+1,s=new F.b({placeholder:"NewPoll.OptionsAddOption",label:"NewPoll.OptionLabel",labelOptions:[t],name:"question-"+e,maxLength:100});this.listenerSetter.add(s.input)("input",this.onInput);const i=new st({text:"",name:"question"});i.main.append(s.container),Object(l.b)(s.input,c.a,{listenerSetter:this.listenerSetter}),i.label.classList.add("hidden-widget"),i.input.disabled=!0,this.quizCheckboxField.input.checked||i.label.classList.remove("radio-field"),this.listenerSetter.add(i.input)("change",()=>{if(i.input.checked){const e=Object(Ts.a)(i.label);this.correctAnswers=[new Uint8Array([e])],this.handleChange()}});const n=document.createElement("span");n.classList.add("btn-icon","tgico-close"),s.container.append(n),Object(l.b)(n,this.onDeleteClick,{listenerSetter:this.listenerSetter,once:!0}),this.questions.append(i.label),this.scrollable.scrollIntoViewNew(this.questions.lastElementChild,"center"),this.optionInputFields.push(s)}}var va=s(95);class fa extends ct.b{constructor(e,t,s){if(super("popup-send-photo popup-new-media",null,{closable:!0,withConfirm:"Modal.Send",confirmShortcutIsSendShortcut:!0}),this.chat=e,this.wasInputValue="",this.willAttach={sendFileDetails:[],group:!1},this.onKeyDown=e=>{const t=e.target;if(t!==this.input){if("INPUT"===t.tagName||t.hasAttribute("contenteditable"))return;this.input.focus(),Object(va.a)(this.input)}},this.attachFile=e=>{const t=this.willAttach;return new Promise(s=>{const i={};i.file=e;const n=document.createElement("div");switch(t.type){case"media":{const t=0===e.type.indexOf("video/");if(n.classList.add("popup-item-media"),t){const t=document.createElement("video"),a=document.createElement("source");a.src=i.objectURL=URL.createObjectURL(e),t.autoplay=!0,t.controls=!1,t.muted=!0,t.setAttribute("playsinline","true"),t.addEventListener("timeupdate",()=>{t.pause()},{once:!0}),Object(me.d)(t).then(()=>{i.width=t.videoWidth,i.height=t.videoHeight,i.duration=Math.floor(t.duration);const e=t.webkitAudioDecodedByteCount;void 0!==e&&(i.noSound=!e),n.append(t),Object(me.b)(t).then(e=>{i.thumb=Object.assign({url:URL.createObjectURL(e.blob)},e),s(n)})}),t.append(a)}else{const t=new Image;t.src=i.objectURL=URL.createObjectURL(e),t.onload=()=>{i.width=t.naturalWidth,i.height=t.naturalHeight,n.append(t),s(n)}}break}case"document":{const t=-1!==e.type.indexOf("image/"),a=-1!==e.type.indexOf("audio/");(t||a)&&(i.objectURL=URL.createObjectURL(e));const o={_:"document",file:e,file_name:e.name||"",fileName:e.name?Z.b.wrapEmojiText(e.name):"",size:e.size,type:t?"photo":"doc"},r=he.a.getCacheContext(o);r.url=i.objectURL,r.downloaded=e.size;const l=fs({message:{_:"message",pFlags:{is_outgoing:!0},mid:0,peerId:0,media:{_:"messageMediaDocument",document:o}}}),c=()=>{n.append(l),s(n)};if(t){const e=new Image;e.src=i.objectURL,e.onload=()=>{i.width=e.naturalWidth,i.height=e.naturalHeight,c()},e.onerror=c}else c();break}}t.sendFileDetails.push(i)})},this.willAttach.type=s,Object(l.b)(this.btnConfirm,()=>this.send(),{listenerSetter:this.listenerSetter}),"scheduled"!==this.chat.type){const e=new pa({onSilentClick:()=>{this.chat.input.sendSilent=!0,this.send()},onScheduleClick:()=>{this.chat.input.scheduleSending(()=>{this.send()})},openSide:"bottom-left",onContextElement:this.btnConfirm,listenerSetter:this.listenerSetter});e.setPeerId(this.chat.peerId),this.header.append(e.sendMenu)}this.mediaContainer=document.createElement("div"),this.mediaContainer.classList.add("popup-photo");const i=new P.b(null);i.container.append(this.mediaContainer),this.inputField=new F.b({placeholder:"PreviewSender.CaptionPlaceholder",label:"Caption",name:"photo-caption",maxLength:a.default.config.caption_length_max,showLengthOn:80}),this.input=this.inputField.input,this.inputField.value=this.wasInputValue=this.chat.input.messageInputField.input.innerHTML,this.chat.input.messageInputField.value="",this.container.append(i.container),t.length>1&&(this.groupCheckboxField=new dt.a({text:"PreviewSender.GroupItems",name:"group-items"}),this.container.append(this.groupCheckboxField.label,this.inputField.container),this.groupCheckboxField.input.checked=!0,this.willAttach.group=!0,this.listenerSetter.add(this.groupCheckboxField.input)("change",()=>{const e=this.groupCheckboxField.input.checked;this.willAttach.group=e,this.willAttach.sendFileDetails.length=0,this.attachFiles(t)})),this.container.append(this.inputField.container),this.attachFiles(t)}send(e=!1){if("scheduled"===this.chat.type&&!e)return void this.chat.input.scheduleSending(()=>{this.send(!0)});let t=this.inputField.value;if(t.length>a.default.config.caption_length_max)return void nt(A.default.format("Error.PreviewSender.CaptionTooLong",!0));this.hide();const s=this.willAttach;s.isMedia="media"===s.type||void 0;const i=this.chat.peerId,n=this.chat.input,o=n.sendSilent,r=n.scheduleDate;if(s.sendFileDetails.length>1&&s.group)for(let e=0;ee.file),Object.assign({caption:t,replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,isMedia:s.isMedia,silent:o,scheduleDate:r,clearDraft:!0},c)),t=void 0,n.replyToMsgId=this.chat.threadId}else{t&&s.sendFileDetails.length>1&&(this.chat.appMessagesManager.sendText(i,t,{replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,silent:o,scheduleDate:r,clearDraft:!0}),t="");s.sendFileDetails.map(e=>{const a=this.chat.appMessagesManager.sendFile(i,e.file,Object.assign({isMedia:s.isMedia,caption:t,replyToMsgId:n.replyToMsgId,threadId:this.chat.threadId,silent:o,scheduleDate:r,clearDraft:!0},e));return t="",a});n.replyToMsgId=this.chat.threadId}n.onMessageSent()}attachFiles(e){const t=this.container,s=this.willAttach;e="media"===s.type?e.filter(e=>g.has(e.type)):e.slice(),Promise.all(e.map(this.attachFile)).then(i=>{if(this.container.classList.remove("is-media","is-document","is-album"),this.mediaContainer.innerHTML="",e.length){let i;const n=[];if("document"===s.type)i="PreviewSender.SendFile",n.push(e.length),t.classList.add("is-document");else{t.classList.add("is-media");let a=0,o=0;e.forEach(e=>{0===e.type.indexOf("image/")?++a:0===e.type.indexOf("video/")&&++o});const r=a+o;if(r>1&&s.group){i="PreviewSender.SendAlbum";const e=Math.ceil(r/10);n.push(e)}else a?(i="PreviewSender.SendPhoto",n.push(a)):o&&(i="PreviewSender.SendVideo",n.push(o))}this.title.textContent="",this.title.append(Object(A.i18n)(i,n))}if("media"===s.type)if(s.sendFileDetails.length>1&&s.group){t.classList.add("is-album");for(let e=0;e({w:e.width,h:e.height})),maxWidth:380,minWidth:100,spacing:4}),this.mediaContainer.append(t)}}else for(let e=0;e{this.wasInputValue&&(this.chat.input.messageInputField.value=this.wasInputValue)},this.show())})}}const ya=["ArrowUp","ArrowDown"],wa=["ArrowLeft","ArrowRight"];function La({list:e,type:t,onSelect:s,once:i,waitForKey:n}){const a=new Set("xy"===t?ya.concat(wa):"x"===t?wa:ya);let o;const r=()=>o||e.querySelector(".active")||e.firstElementChild,d=(e,s)=>{if(o===e)return;let i=!1;o&&(i=!0,o.classList.remove("active")),o=e,o&&(o.classList.add("active"),i&&m&&s&&Object(bt.b)(m,o,"center",void 0,void 0,void 0,100,"x"===t?"x":"y"))},h=(t,s)=>{let i;return i=s?t.nextElementSibling||e.firstElementChild:t.previousElementSibling||e.lastElementChild,i};let u;u="xy"===t?(t,s)=>"ArrowUp"===s||"ArrowDown"===s?((t,s)=>{const i=s?"nextElementSibling":"previousElementSibling",n=s?"firstElementChild":"lastElementChild",a=t.getBoundingClientRect();let o=t[i]||e[n];for(;o!==t;){const t=o.getBoundingClientRect();if(t.x===a.x&&t.y!==a.y)break;o=o[i]||e[n]}return o})(t,"ArrowDown"===s):h(t,"ArrowRight"===s):(e,t)=>h(e,"ArrowRight"===t||"ArrowDown"===t);let p=t=>{if(a.has(t.key)){if(Object(c.a)(t),e.childElementCount>1){let e=r();e=u(e,t.key),d(e,!0)}}else"Enter"===t.key&&(Object(c.a)(t),v(r()))};const m=Object(Ce.a)(e,"scrollable");e.classList.add("navigable-list");const g=t=>{const s=Object(zs.a)(t.target,e);s&&d(s,!1)},b=t=>{Object(c.a)(t);const s=Object(zs.a)(t.target,e);s&&(d(s,!1),v(r()))},v=e=>{const t=s(e);(void 0!==t?!t:i)&&f()},f=()=>{document.removeEventListener("keydown",p,{capture:!0}),e.removeEventListener("mousemove",g),Object(l.c)(e,b)},y=()=>{n||d(e.firstElementChild,!1)};if(n){const e=p;p=t=>{t.key===n&&(Object(c.a)(t),document.removeEventListener("keydown",p,{capture:!0}),p=e,document.addEventListener("keydown",p,{capture:!0,passive:!1}),n=void 0,y())}}else y();return document.addEventListener("keydown",p,{capture:!0,passive:!1}),e.addEventListener("mousemove",g,{passive:!0}),Object(l.b)(e,b),{detach:f,resetTarget:y}}class Sa extends R.a{constructor(e){super(!1),this.hidden=!0,this.onVisible=()=>{this.detach&&this.detach();const e=this.list,{detach:t,resetTarget:s}=La({list:e,type:this.listType,onSelect:this.onSelect,once:!0,waitForKey:this.waitForKey});this.detach=t,this.resetTarget=s,h.IS_MOBILE||this.navigationItem||(this.navigationItem={type:"autocomplete-helper",onPop:()=>{this.navigationItem=void 0,this.toggle(!0)},noBlurOnPop:!0},B.a.pushItem(this.navigationItem)),this.addEventListener("hidden",()=>{this.resetTarget=void 0,this.detach=void 0,e.innerHTML="",t(),this.navigationItem&&(B.a.removeItem(this.navigationItem),this.navigationItem=void 0)},{once:!0})},Object(L.g)(this,e),this.container=document.createElement("div"),this.container.classList.add("autocomplete-helper","z-depth-1"),e.appendTo.append(this.container),this.attachNavigation(),this.controller.addHelper(this)}attachNavigation(){this.addEventListener("visible",this.onVisible)}toggle(e,t=!1){this.init||(void 0===e&&(e=this.container.classList.contains("is-visible")&&!this.container.classList.contains("backwards")),this.hidden!==e?(this.hidden=e,e?(this.navigationItem&&(B.a.removeItem(this.navigationItem),this.navigationItem=void 0),t||this.controller.hideOtherHelpers(),this.detach&&this.detach()):(this.controller.hideOtherHelpers(this),this.dispatchEvent("visible")),Object(Xt.a)(this.container,"is-visible",!e,a.default.settings.animationsEnabled?200:0,()=>{this.hidden&&this.dispatchEvent("hidden")})):e||this.dispatchEvent("visible"))}}class Ea extends Sa{constructor(e,t){super({appendTo:e,controller:t,listType:"xy",onSelect:e=>!Yn.onMediaClick({target:e},!0),waitForKey:"ArrowUp"}),this.container.classList.add("stickers-helper"),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)}),this.addEventListener("hidden",()=>{this.onChangeScreen&&(v.b.removeEventListener("changeScreen",this.onChangeScreen),this.onChangeScreen=void 0)})}checkEmoticon(e){const t=this.controller.getMiddleware();this.lazyLoadQueue&&this.lazyLoadQueue.clear(),hs.getStickersByEmoticon(e).then(e=>{if(!t())return;this.init&&(this.init(),this.init=null);const s=this.list.cloneNode();let i;this.lazyLoadQueue.clear(),i=e.length?new Promise(t=>{const i=[];e.forEach(e=>{s.append(this.superStickerRenderer.renderSticker(e,void 0,i))}),Promise.all(i).finally(t)}):Promise.resolve(),i.then(()=>{this.list.replaceWith(s),this.list=s,this.onChangeScreen||(this.onChangeScreen=()=>{const e=this.list.childElementCount*v.b.active.esgSticker.width+(this.list.childElementCount-1);this.list.style.width=e+"px"},v.b.addEventListener("changeScreen",this.onChangeScreen)),this.onChangeScreen(),this.toggle(!e.length),this.scrollable.scrollTop=0})})}init(){this.list=document.createElement("div"),this.list.classList.add("stickers-helper-stickers","super-stickers"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.lazyLoadQueue=new te.d,this.superStickerRenderer=new Rn(this.lazyLoadQueue,ho)}}const Ma=()=>{const e=new Date;return e.setHours(0,0,0,0),e},Ia=()=>{const e=new Date;return e.setFullYear(e.getFullYear()+1),e.setDate(e.getDate()-1),e};class Ca extends dn{constructor(e,t,s){var i;if(super((i=e).getTime()>Ia().getTime()?new Date:i,t,{noButtons:!0,noTitle:!0,closable:!0,withConfirm:!0,minDate:Ma(),maxDate:Ia(),withTime:!0,showOverflowMonths:!0,confirmShortcutIsSendShortcut:!0}),this.element.classList.add("popup-schedule"),this.header.append(this.controlsDiv),this.title.replaceWith(this.monthTitle),this.body.append(this.btnConfirm),s){const e=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary",{text:"Schedule.SendWhenOnline"});this.body.append(e),Object(l.b)(e,()=>{t(2147483646),this.hide()})}}}var ka=s(133),Ta=s(79);function Pa(e,t=!0){const s=[],i=[],n=window.getSelection();let a,o;if(n&&n.rangeCount){const e=n.getRangeAt(0);e.startContainer&&e.startContainer==e.endContainer&&e.startOffset==e.endOffset&&(a=e.startContainer,o=e.startOffset)}const r=t?[]:void 0;Object(Ta.a)(e,s,i,a,o,r),i.length&&s.push(i.join(""));let l=s.join("\n");const c=l.indexOf("");return-1!=c&&(l=l.substr(0,c)+l.substr(c+1)),l=l.replace(/\u00A0/g," "),r&&Z.b.combineSameEntities(r),{value:l,entities:r,caretPos:c}}class xa extends Sa{constructor(e,t,s,i){super({appendTo:e,controller:t,listType:"x",onSelect:e=>{s.onEmojiSelected(An(e),!0)}}),this.appEmojiManager=i,this.container.classList.add("emoji-helper")}init(){this.list=document.createElement("div"),this.list.classList.add("emoji-helper-emojis","super-emojis"),this.container.append(this.list),this.scrollable=new P.a(this.container),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollLeft=0},0)})}render(e,t){if(this.init){if(!e.length)return;this.init(),this.init=null}(e=e.slice(0,80)).length&&(this.list.innerHTML="",e.forEach(e=>{xn(e,this.list,!1,!0)})),this.waitForKey=t?"ArrowUp":void 0,this.toggle(!e.length)}checkQuery(e,t){const s=this.controller.getMiddleware();this.appEmojiManager.getBothEmojiKeywords().then(()=>{if(!s())return;const i=e.replace(/^:/,""),n=this.appEmojiManager.searchEmojis(i);this.render(n,":"!==t)})}}class Aa extends Sa{constructor(e,t,s,i){super({appendTo:e,controller:t,listType:"y",onSelect:i}),this.className=s,this.container.classList.add(Aa.BASE_CLASS,s)}init(){this.list=document.createElement("div"),this.list.classList.add(Aa.BASE_CLASS+"-list"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)})}render(e){if(this.init){if(!e.length)return;this.init(),this.init=null}e.length&&(this.list.innerHTML="",e.forEach(e=>{const t=Aa.listElement({className:this.className,peerId:e.peerId,name:e.name,description:e.description});this.list.append(t)})),this.toggle(!e.length)}static listElement(e){const t=Aa.BASE_CLASS_LIST_ELEMENT;e.className+="-list-element";const s=document.createElement("div");s.classList.add(t,e.className),s.dataset.peerId=""+e.peerId;const i=new ko;i.classList.add("avatar-30",t+"-avatar",e.className+"-avatar"),i.setAttribute("dialog","0"),i.setAttribute("peer",""+e.peerId);const n=document.createElement("div");if(n.classList.add(t+"-name",e.className+"-name"),e.name?n.innerHTML=Z.b.wrapEmojiText(e.name):n.append(new ft.a({peerId:e.peerId,dialog:!1,onlyFirstName:!1,plainText:!1}).element),s.append(i,n),e.description){const i=document.createElement("div");i.classList.add(t+"-description",e.className+"-description"),i.innerHTML=Z.b.wrapEmojiText(e.description),s.append(i)}return s}}Aa.BASE_CLASS="autocomplete-peer-helper",Aa.BASE_CLASS_LIST_ELEMENT=Aa.BASE_CLASS+"-list-element";class Oa extends Aa{constructor(e,t,s,i,n){super(e,t,"commands-helper",e=>{const t=e.querySelector(`.${Aa.BASE_CLASS_LIST_ELEMENT}-name`).innerHTML;return s.getReadyToSend(()=>{s.messageInput.innerHTML=t,s.sendMessage(!0)})}),this.appProfileManager=i,this.appUsersManager=n}checkQuery(e,t){if(!this.appUsersManager.isBot(t))return!1;const s=this.controller.getMiddleware();return this.appProfileManager.getProfileByPeerId(t).then(t=>{if(!s())return;const i=[].concat(t.bot_info),n=new Ln.a({ignoreCase:!0}),a=new Map;i.forEach(e=>{e.commands.forEach(t=>{const s="/"+t.command;a.set(t.command,{peerId:e.user_id,name:s,description:t.description}),n.indexObject(t.command,s)})});const o=n.search(e),r=Array.from(o).map(e=>a.get(e));this.render(r)}),!0}}class _a{constructor(){this.helpers=new Set,this.middleware=Object(ks.a)()}getMiddleware(){return this.middleware.clean(),this.middleware.get()}addHelper(e){this.helpers.add(e)}hideOtherHelpers(e){this.helpers.forEach(t=>{t!==e&&t.toggle(!0,!0)}),e||this.middleware.clean()}}class Fa extends Aa{constructor(e,t,s,i,n){super(e,t,"mentions-helper",e=>{const t=n.getUser(+e.dataset.peerId);let i,a="";t.username?a="@"+t.username:(a=t.first_name||t.last_name,i={_:"messageEntityMentionName",length:a.length,offset:0,user_id:t.id}),a+=" ",s.insertAtCaret(a,i)}),this.appProfileManager=i,this.appUsersManager=n}checkQuery(e,t,s){const i=e.trim();if(e.length!==i.length)return!1;const n=this.controller.getMiddleware();return this.appProfileManager.getMentions(t?-t:0,i,s).then(e=>{if(!n())return;const t=i.slice(1).toLowerCase();this.render(e.map(e=>{const s=this.appUsersManager.getUser(e);if(!s.username||s.username.toLowerCase()!==t)return{peerId:e,description:s.username?"@"+s.username:void 0}}).filter(Boolean))}),!0}}var ja=s(3);class Da extends qn{constructor(e){super({element:document.createElement("div")}),this.onBodyTouchStart=e=>{const t=e.touches[0].target;Object(zs.a)(t,this.element)||t===this.btnHover||(Object(c.a)(e),this.toggle(!1))},Object(L.g)(this,e),this.element.classList.add(Da.BASE_CLASS),this.element.style.display="none",this.attachButtonListener(this.btnHover,this.listenerSetter),this.listenerSetter.add(a.default)("history_reply_markup",({peerId:e})=>{this.peerId===e&&(this.checkAvailability()&&this.isActive()&&this.render(),Object(Cs.c)().then(()=>{this.checkForceReply()}))})}init(){return this.appendTo.append(this.element),this.listenerSetter.add(this)("open",()=>{this.render(),pe.IS_TOUCH_SUPPORTED&&(this.touchListener=this.listenerSetter.add(document.body)("touchstart",this.onBodyTouchStart,{passive:!1,capture:!0}),this.listenerSetter.add(this)("close",()=>{this.listenerSetter.remove(this.touchListener)},{once:!0}))}),this.listenerSetter.add(this.element)("click",e=>{const t=Object(Ce.a)(e.target,"btn");t&&(this.appMessagesManager.sendText(this.peerId,t.dataset.text),this.toggle(!1))}),super.init()}checkForceReply(){const e=this.getReplyMarkup();"replyKeyboardForceReply"!==e._||e.pFlags.hidden||e.pFlags.used||(e.pFlags.used=!0,this.chatInput.initMessageReply(e.mid))}getReplyMarkup(){var e;return null!==(e=this.appMessagesManager.getHistoryStorage(this.peerId).replyMarkup)&&void 0!==e?e:{_:"replyKeyboardHide"}}render(e=this.getReplyMarkup()){this.element.innerHTML="";for(const t of e.rows){const e=document.createElement("div");e.classList.add(Da.BASE_CLASS+"-row");for(const s of t.buttons){const t=document.createElement("button");t.classList.add(Da.BASE_CLASS+"-button","btn"),t.innerHTML=Z.b.wrapEmojiText(s.text),t.dataset.text=s.text,e.append(t)}this.element.append(e)}}checkAvailability(e=this.getReplyMarkup()){var t;const s="replyKeyboardHide"===e._||!(null===(t=e.rows)||void 0===t?void 0:t.length);return this.btnHover.classList.toggle("hide",s),s&&this.toggle(!1),!s}setPeer(e){this.peerId=e,this.checkAvailability(),this.checkForceReply()}}Da.BASE_CLASS="reply-keyboard";var Ba=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Ra extends Sa{constructor(e,t,s,i,n){super({appendTo:e,controller:t,listType:"xy",onSelect:e=>{const{peerId:t,botId:s,queryId:i}=this.list.dataset;return this.chat.input.getReadyToSend(()=>{const n=this.appInlineBotsManager.generateQId(i,e.dataset.resultId);this.appInlineBotsManager.sendInlineResult(+t,+s,n,{clearDraft:!0,scheduleDate:this.chat.input.scheduleDate,silent:this.chat.input.sendSilent,replyToMsgId:this.chat.input.replyToMsgId}),this.chat.input.onMessageSent(!0,!0)})}}),this.chat=s,this.appUsersManager=i,this.appInlineBotsManager=n,this._checkQuery=(e,t,s)=>Ba(this,void 0,void 0,(function*(){const i=this.controller.getMiddleware(),n=yield this.appUsersManager.resolveUsername(t);if(!i())throw"PEER_CHANGED";if("user"!==n._)throw"NOT_A_BOT";const a=this.appInlineBotsManager.getInlineResults(e,n.id,s).then(t=>{var s;if(!i())throw"PEER_CHANGED";this.init&&(this.init(),this.init=null);const a=this.list.cloneNode();a.dataset.peerId=""+e,a.dataset.botId=""+n.id,a.dataset.queryId=t.query_id;const o=new jn(null,"INLINE-HELPER",this.scrollable,!1);this.lazyLoadQueue.clear(),this.superStickerRenderer.clear();const r=[],c=!!t.pFlags.gallery;for(const e of t.results){const t=document.createElement("div");t.classList.add("inline-helper-result"),t.dataset.resultId=e.id;const n=c?void 0:document.createElement("div");if(n&&(n.classList.add("inline-helper-result-preview"),t.append(n)),a.append(t),c)t.classList.add("grid-item");else{n.classList.add("empty"),n.innerHTML=Z.b.wrapEmojiText([...e.title.trim()][0]);const s=document.createElement("div");s.classList.add("inline-helper-result-title"),s.innerHTML=Z.b.wrapEmojiText(e.title);const i=document.createElement("div");i.classList.add("inline-helper-result-description"),i.innerHTML=Z.b.wrapRichText(e.description,{noCommands:!0,noLinks:!0}),t.append(s,i);const o=document.createElement("div");o.classList.add("inline-helper-separator"),a.append(o)}if("botInlineResult"===e._){if(e.thumb&&0===e.thumb.mime_type.indexOf("image/")){let s;n?(s=document.createElement("div"),n.append(s)):s=t,s.classList.add("media-container"),c&&s.classList.add("no-border-radius"),this.lazyLoadQueue.push({div:t,load:()=>he.a.download({dcId:4,location:{_:"inputWebFileLocation",access_hash:e.thumb.access_hash,url:e.thumb.url},size:e.thumb.size,mimeType:e.thumb.mime_type}).then(e=>{const t=new Image;t.classList.add("media-photo"),Object(ae.b)(e).then(e=>{ws(s,t,e,!0)})})})}}else{const a=e.document||e.photo;if(["sticker","gif"].includes(null===(s=a)||void 0===s?void 0:s.type)&&c)Object(ji.a)(a),"gif"===a.type?o.add(a,t):"sticker"===a.type&&(t.classList.add("super-sticker"),this.superStickerRenderer.renderSticker(a,t,r),2===a.sticker&&this.superStickerRenderer.observeAnimatedDiv(t));else if(a){const e=c?48:void 0;c&&t.classList.add("no-border-radius"),ys({photo:a,container:c?t:n,boxWidth:e,boxHeight:e,middleware:i,lazyLoadQueue:this.lazyLoadQueue,loadPromises:r})}}}return Promise.all(r).then(()=>{if(!i())return void o.clear();a.classList.toggle("is-gallery",c),a.classList.toggle("super-stickers",c),this.container.classList.toggle("is-gallery",c);const s=this.list.parentElement;if(s.textContent="",t.switch_pm){const i=Object(U.a)("btn-primary btn-secondary btn-primary-transparent primary");i.insertAdjacentHTML("beforeend",Z.b.wrapEmojiText(t.switch_pm.text)),Object(l.b)(i,s=>{this.appInlineBotsManager.switchToPM(e,n.id,t.switch_pm.start_param)}),s.append(i)}s.append(this.list=a),this.gifsMasonry&&this.gifsMasonry.detach(),this.gifsMasonry=o,o.attach(),this.onChangeScreen||(this.onChangeScreen=()=>{if(this.list.classList.contains("is-gallery")){const e=this.list.childElementCount*v.b.active.esgSticker.width+(this.list.childElementCount-1);this.list.style.width=e+"px"}else this.list.style.width=""},v.b.addEventListener("changeScreen",this.onChangeScreen)),this.onChangeScreen(),this.toggle(!t.results.length&&!t.switch_pm),this.scrollable.scrollTop=0})});return{user:n,renderPromise:a}})),this.container.classList.add("inline-helper"),this.addEventListener("visible",()=>{setTimeout(()=>{this.scrollable.container.scrollTop=0},0)}),this.checkQuery=ot(this._checkQuery,200,!0,!0),this.addEventListener("hidden",()=>{this.onChangeScreen&&(v.b.removeEventListener("changeScreen",this.onChangeScreen),this.onChangeScreen=void 0)})}init(){this.list=document.createElement("div"),this.list.classList.add("inline-helper-results"),this.container.append(this.list),this.scrollable=new P.b(this.container),this.lazyLoadQueue=new te.d,this.superStickerRenderer=new Rn(this.lazyLoadQueue,"INLINE-HELPER")}}var Ha=s(2);class Ua{constructor(e,t,s,i,n,a,o,r,d,h,u,p,m,g){this.chat=e,this.appMessagesManager=t,this.appMessagesIdsManager=s,this.appDocsManager=i,this.appChatsManager=n,this.appPeersManager=a,this.appWebPagesManager=o,this.appImManager=r,this.appDraftsManager=d,this.serverTimeManager=h,this.appNotificationsManager=u,this.appEmojiManager=p,this.appUsersManager=m,this.appInlineBotsManager=g,this.lastUrl="",this.lastTimeType=0,this.replyElements={},this.willSendWebPage=null,this.recording=!1,this.recordCanceled=!1,this.recordStartTime=0,this.lockRedo=!1,this.canRedoFromHTML="",this.undoHistory=[],this.executedHistory=[],this.canUndoFromHTML="",this.onCancelRecordClick=e=>{e&&Object(c.a)(e),this.recordCanceled=!0,this.recorder.stop(),ua.a.setKeepAlive(!1)},this.onEmoticonsOpen=()=>{const e=pe.IS_TOUCH_SUPPORTED?"flip-icon":"active";this.btnToggleEmoticons.classList.toggle(e,!0)},this.onEmoticonsClose=()=>{const e=pe.IS_TOUCH_SUPPORTED?"flip-icon":"active";this.btnToggleEmoticons.classList.toggle(e,!1)},this.scheduleSending=(e=this.sendMessage.bind(this,!0),t=new Date)=>{const s=this.chat.peerId>0&&this.appUsersManager.isUserOnlineVisible(this.chat.peerId);new Ca(t,t=>{t<=10+(Date.now()/1e3|0)&&(t=void 0),this.scheduleDate=t,e(),"scheduled"!==this.chat.type&&t&&this.appImManager.openScheduled(this.chat.peerId)},s).show()},this.prepareDocumentExecute=()=>(this.executedHistory.push(this.messageInput.innerHTML),()=>this.canUndoFromHTML=this.messageInput.innerHTML),this.undoRedo=(e,t,s)=>{Object(c.a)(e);let i=this.messageInput.innerHTML;if(i&&i!==s){this.lockRedo=!0;let e=0;do{document.execCommand(t,!1,null);const s=this.messageInput.innerHTML;if(i===s){if(++e>2)break}else e=0;i=s}while(i!==s);this.lockRedo=!1}},this.handleMarkdownShortcut=e=>{const t={B:"bold",I:"italic",U:"underline",S:"strikethrough",M:"monospace",K:"link"};if(document.getSelection().toString().trim().length)for(const s in t){if(e.code==="Key"+s){if("K"===s&&this.appImManager.markupTooltip){this.appImManager.markupTooltip.showLinkEditor(),Object(c.a)(e);break}this.applyMarkdown(t[s]),Object(c.a)(e);break}}if("KeyZ"===e.code){let t=this.messageInput.innerHTML;e.shiftKey?this.undoHistory.length&&(this.executedHistory.push(t),t=this.undoHistory.pop(),this.undoRedo(e,"redo",t),t=this.messageInput.innerHTML,this.canRedoFromHTML=this.undoHistory.length?t:"",this.canUndoFromHTML=t):!this.executedHistory.length||this.canUndoFromHTML&&t!==this.canUndoFromHTML||(this.undoHistory.push(t),t=this.executedHistory.pop(),this.undoRedo(e,"undo",t),this.canUndoFromHTML=this.canRedoFromHTML=this.messageInput.innerHTML)}},this.onMessageInput=e=>{const{value:t,entities:s,caretPos:i}=Pa(this.messageInputField.input),n=Z.b.parseMarkdown(t,s,!0),a=Z.b.mergeEntities(s,Z.b.parseEntities(n));this.canRedoFromHTML&&!this.lockRedo&&this.messageInput.innerHTML!==this.canRedoFromHTML&&(this.canRedoFromHTML="",this.undoHistory.length=0);const o=a.filter(e=>"messageEntityUrl"===e._||"messageEntityTextUrl"===e._);if(o.length)for(const e of o){let s;if("messageEntityTextUrl"===e._)s=e.url;else if(s=t.slice(e.offset,e.offset+e.length),!s.includes("http://")&&!s.includes("https://"))continue;if(this.lastUrl!==s){this.lastUrl=s;const e=this.getWebPagePromise=rt.a.invokeApiHashable("messages.getWebPage",{url:s}).then(t=>{t=this.appWebPagesManager.saveWebPage(t),this.getWebPagePromise===e&&(this.getWebPagePromise=void 0),this.lastUrl===s&&("webPage"===t._?(this.setTopInfo("webpage",()=>{},t.site_name||t.title||"Webpage",t.description||t.url||""),delete this.noWebPage,this.willSendWebPage=t):this.willSendWebPage&&this.onHelperCancel())})}break}else this.lastUrl&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null,this.helperType?this.helperFunc():this.clearHelper());if(t.trim()){const e=Date.now();e-this.lastTimeType>=6e3&&(this.lastTimeType=e,this.appMessagesManager.setTyping(this.chat.peerId,{_:"sendMessageTypingAction"}))}else this.lastTimeType&&this.appMessagesManager.setTyping(this.chat.peerId,{_:"sendMessageCancelAction"}),this.appImManager.markupTooltip&&this.appImManager.markupTooltip.hide();this.editMsgId||this.saveDraftDebounced(),this.checkAutocomplete(t,i,a),this.updateSendBtn()},this.onEmojiSelected=(e,t)=>{t&&this.insertAtCaret(e,Z.b.getEmojiEntityFromEmoji(e))},this.onBtnSendClick=e=>{if(Object(c.a)(e),!this.recorder||this.recording||!this.isInputEmpty()||this.forwarding||this.editMsgId)this.recording?Date.now()-this.recordStartTime<500?this.onCancelRecordClick():this.recorder.stop():this.sendMessage();else{if(this.chat.peerId<0&&!this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,"send_media"))return void nt("Posting media content isn't allowed in this group.");this.chatInput.classList.add("is-locked"),Object(Us.a)(),this.recorder.start().then(()=>{this.releaseMediaPlayback=fe.setSingleMedia(),this.recordCanceled=!1,this.chatInput.classList.add("is-recording"),this.recording=!0,this.updateSendBtn(),ua.a.setKeepAlive(!0);const e=()=>{new ht("popup-cancel-record",{titleLangKey:"DiscardVoiceMessageTitle",descriptionLangKey:"DiscardVoiceMessageDescription",buttons:[{langKey:"DiscardVoiceMessageAction",callback:()=>{Object(l.d)(this.btnCancelRecord)}},{langKey:"Continue",isCancel:!0}]}).show()};this.recordingOverlayListener=this.listenerSetter.add(document.body)("mousedown",t=>{Object(Ce.a)(t.target,"chat-input")||Object(Ce.a)(t.target,"popup-cancel-record")||(Object(c.a)(t),e())},{capture:!0,passive:!1}),B.a.pushItem(this.recordingNavigationItem={type:"voice",onPop:()=>(setTimeout(()=>{e()},0),!1)}),this.recordStartTime=Date.now();const t=this.recorder.sourceNode,s=t.context.createAnalyser();t.connect(s),s.fftSize=32;const i=new Uint8Array(s.frequencyBinCount),n=255*i.length;let a=()=>{if(!this.recording)return;s.getByteFrequencyData(i);let e=0;i.forEach(t=>{e+=t});let t=Math.min(1,e/n+.36);this.recordRippleEl.style.transform=`scale(${t})`;let o=Date.now()-this.recordStartTime,r=o%1e3,l=(""+o/1e3).toHHMMSS()+","+("00"+Math.round(r/10)).slice(-2);this.recordTimeEl.innerText=l,Object(_e.b)(a)};a()}).catch(e=>{switch(e.name){case"NotAllowedError":nt("Please allow access to your microphone");break;case"NotReadableError":nt(e.message);break;default:console.error("Recorder start error:",e,e.name,e.message),nt(e.message)}this.chatInput.classList.remove("is-recording","is-locked")})}},this.onHelperCancel=e=>{if(e&&Object(c.a)(e),this.willSendWebPage){const e=this.lastUrl;let t=!1;if(this.helperType&&(this.helperFunc(),t=!0),this.lastUrl=e,this.noWebPage=!0,this.willSendWebPage=null,t)return}this.clearHelper(),this.updateSendBtn()},this.onHelperClick=e=>{if(Object(c.a)(e),Object(Ce.a)(e.target,"reply-wrapper"))if("forward"===this.helperType){if(this.helperWaitingForward)return;this.helperWaitingForward=!0;const e=this.helperFunc;this.clearHelper(),this.updateSendBtn();let t=!1;new Ds(Object(L.a)(this.forwarding),()=>{t=!0},()=>{this.helperWaitingForward=!1,t||e()})}else"reply"===this.helperType?this.chat.setMessageId(this.replyToMsgId):"edit"===this.helperType&&this.chat.setMessageId(this.editMsgId)},this.listenerSetter=new H.a}construct(){this.chatInput=document.createElement("div"),this.chatInput.classList.add("chat-input"),this.chatInput.style.display="none",this.inputContainer=document.createElement("div"),this.inputContainer.classList.add("chat-input-container"),this.rowsWrapper=document.createElement("div"),this.rowsWrapper.classList.add("rows-wrapper","chat-input-wrapper");const e=na();this.rowsWrapper.append(e);const t=this.fakeRowsWrapper=document.createElement("div");t.classList.add("fake-wrapper","fake-rows-wrapper");const s=document.createElement("div");s.classList.add("fake-wrapper","fake-selection-wrapper"),this.inputContainer.append(this.rowsWrapper,t,s),this.chatInput.append(this.inputContainer),this.goDownBtn=$({icon:"arrow_down",className:"bubbles-corner-button bubbles-go-down hide"}),this.inputContainer.append(this.goDownBtn),Object(l.b)(this.goDownBtn,e=>{Object(c.a)(e),this.chat.bubbles.onGoDownClick()},{listenerSetter:this.listenerSetter})}constructPeerHelpers(){this.replyElements.container=document.createElement("div"),this.replyElements.container.classList.add("reply-wrapper"),this.replyElements.cancelBtn=N("close reply-cancel"),this.replyElements.container.append(this.replyElements.cancelBtn),this.newMessageWrapper=document.createElement("div"),this.newMessageWrapper.classList.add("new-message-wrapper"),this.btnToggleEmoticons=N("none toggle-emoticons",{noRipple:!0}),this.inputMessageContainer=document.createElement("div"),this.inputMessageContainer.classList.add("input-message-container"),"chat"===this.chat.type&&(this.goDownUnreadBadge=document.createElement("span"),this.goDownUnreadBadge.classList.add("badge","badge-24","badge-primary"),this.goDownBtn.append(this.goDownUnreadBadge),this.goMentionBtn=$({icon:"mention",className:"bubbles-corner-button bubbles-go-mention"}),this.goMentionUnreadBadge=document.createElement("span"),this.goMentionUnreadBadge.classList.add("badge","badge-24","badge-primary"),this.goMentionBtn.append(this.goMentionUnreadBadge),this.inputContainer.append(this.goMentionBtn),Object(l.b)(this.goMentionBtn,e=>{Object(c.a)(e),this.appMessagesManager.goToNextMention(this.chat.peerId)},{listenerSetter:this.listenerSetter}),this.btnScheduled=N("scheduled btn-scheduled float hide",{noRipple:!0}),Object(l.b)(this.btnScheduled,e=>{this.appImManager.openScheduled(this.chat.peerId)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("scheduled_new",({peerId:e})=>{this.chat.peerId===e&&this.btnScheduled.classList.remove("hide")}),this.listenerSetter.add(a.default)("scheduled_delete",({peerId:e})=>{this.chat.peerId===e&&this.appMessagesManager.getScheduledMessages(this.chat.peerId).then(e=>{this.btnScheduled.classList.toggle("hide",!e.length)})}),this.btnToggleReplyMarkup=N("botcom toggle-reply-markup float hide",{noRipple:!0}),this.replyKeyboard=new Da({appendTo:this.rowsWrapper,listenerSetter:this.listenerSetter,appMessagesManager:this.appMessagesManager,btnHover:this.btnToggleReplyMarkup,chatInput:this}),this.listenerSetter.add(this.replyKeyboard)("open",()=>this.btnToggleReplyMarkup.classList.add("active")),this.listenerSetter.add(this.replyKeyboard)("close",()=>this.btnToggleReplyMarkup.classList.remove("active"))),this.attachMenuButtons=[{icon:"image",text:"Chat.Input.Attach.PhotoOrVideo",onClick:()=>{this.fileInput.value="";const e=[...g].join(", ");this.fileInput.setAttribute("accept",e),this.willAttachType="media",this.fileInput.click()},verify:(e,t)=>this.appMessagesManager.canSendToPeer(e,t,"send_media")},{icon:"document",text:"Chat.Input.Attach.Document",onClick:()=>{this.fileInput.value="",this.fileInput.removeAttribute("accept"),this.willAttachType="document",this.fileInput.click()},verify:(e,t)=>this.appMessagesManager.canSendToPeer(e,t,"send_media")},{icon:"poll",text:"Poll",onClick:()=>{new ba(this.chat).show()},verify:(e,t)=>e<0&&this.appMessagesManager.canSendToPeer(e,t,"send_polls")}],this.attachMenu=Ie({noRipple:!0,listenerSetter:this.listenerSetter},"top-left",this.attachMenuButtons),this.attachMenu.classList.add("attach-file","tgico-attach"),this.attachMenu.classList.remove("tgico-more"),this.recordTimeEl=document.createElement("div"),this.recordTimeEl.classList.add("record-time"),this.fileInput=document.createElement("input"),this.fileInput.type="file",this.fileInput.multiple=!0,this.fileInput.style.display="none",this.newMessageWrapper.append(...[this.btnToggleEmoticons,this.inputMessageContainer,this.btnScheduled,this.btnToggleReplyMarkup,this.attachMenu,this.recordTimeEl,this.fileInput].filter(Boolean)),this.rowsWrapper.append(this.replyElements.container),this.autocompleteHelperController=new _a,this.stickersHelper=new Ea(this.rowsWrapper,this.autocompleteHelperController),this.emojiHelper=new xa(this.rowsWrapper,this.autocompleteHelperController,this,this.appEmojiManager),this.commandsHelper=new Oa(this.rowsWrapper,this.autocompleteHelperController,this,this.chat.appProfileManager,this.chat.appUsersManager),this.mentionsHelper=new Fa(this.rowsWrapper,this.autocompleteHelperController,this,this.chat.appProfileManager,this.chat.appUsersManager),this.inlineHelper=new Ra(this.rowsWrapper,this.autocompleteHelperController,this.chat,this.appUsersManager,this.appInlineBotsManager),this.rowsWrapper.append(this.newMessageWrapper),this.btnCancelRecord=N("delete danger btn-circle z-depth-1 btn-record-cancel"),this.btnSendContainer=document.createElement("div"),this.btnSendContainer.classList.add("btn-send-container"),this.recordRippleEl=document.createElement("div"),this.recordRippleEl.classList.add("record-ripple"),this.btnSend=N("none btn-circle z-depth-1 btn-send animated-button-icon"),this.btnSend.insertAdjacentHTML("afterbegin",'\n \n \n \n \n '),this.btnSendContainer.append(this.recordRippleEl,this.btnSend),"scheduled"!==this.chat.type&&(this.sendMenu=new pa({onSilentClick:()=>{this.sendSilent=!0,this.sendMessage()},onScheduleClick:()=>{this.scheduleSending(void 0)},listenerSetter:this.listenerSetter,openSide:"top-left",onContextElement:this.btnSend,onOpen:()=>!this.isInputEmpty()}),this.btnSendContainer.append(this.sendMenu.sendMenu)),this.inputContainer.append(this.btnCancelRecord,this.btnSendContainer),Jn.attachButtonListener(this.btnToggleEmoticons,this.listenerSetter),this.listenerSetter.add(Jn)("open",this.onEmoticonsOpen),this.listenerSetter.add(Jn)("close",this.onEmoticonsClose),this.attachMessageInputField(),this.listenerSetter.add(a.default)("settings_updated",()=>{(this.stickersHelper||this.emojiHelper)&&(this.previousQuery="",this.checkAutocomplete()),this.messageInputField&&this.messageInputField.onFakeInput()}),this.listenerSetter.add(a.default)("draft_updated",({peerId:e,threadId:t,draft:s,force:i})=>{this.chat.threadId===t&&this.chat.peerId===e&&this.setDraft(s,!0,i)}),this.listenerSetter.add(a.default)("peer_changing",e=>{this.chat===e&&this.saveDraft()}),"scheduled"===this.chat.type?this.listenerSetter.add(a.default)("scheduled_delete",({peerId:e,mids:t})=>{this.chat.peerId===e&&t.includes(this.editMsgId)&&this.onMessageSent()}):this.listenerSetter.add(a.default)("history_delete",({peerId:e,msgs:t})=>{this.chat.peerId===e&&(t.has(this.editMsgId)&&this.onMessageSent(),this.replyToMsgId&&t.has(this.replyToMsgId)&&this.clearHelper("reply"))});try{this.recorder=new ha.a({encoderSampleRate:48e3,monitorGain:0,numberOfChannels:1,recordingGain:1,reuseWorker:!0})}catch(e){console.error("Recorder constructor error:",e)}this.updateSendBtn(),this.listenerSetter.add(this.fileInput)("change",e=>{let t=e.target.files;t.length&&(new fa(this.chat,Array.from(t).slice(),this.willAttachType),this.fileInput.value="")},!1),Object(l.b)(this.btnSend,this.onBtnSendClick,{listenerSetter:this.listenerSetter,touchMouseDown:!0}),this.recorder&&(Object(l.b)(this.btnCancelRecord,this.onCancelRecordClick,{listenerSetter:this.listenerSetter}),this.recorder.onstop=()=>{this.recording=!1,this.chatInput.classList.remove("is-recording","is-locked"),this.updateSendBtn(),this.recordRippleEl.style.transform=""},this.recorder.ondataavailable=e=>{if(this.releaseMediaPlayback&&(this.releaseMediaPlayback(),this.releaseMediaPlayback=void 0),this.recordingOverlayListener&&(this.listenerSetter.remove(this.recordingOverlayListener),this.recordingOverlayListener=void 0),this.recordingNavigationItem&&(B.a.removeItem(this.recordingNavigationItem),this.recordingNavigationItem=void 0),this.recordCanceled)return;const{peerId:t,threadId:s}=this.chat,i=this.replyToMsgId,n=(Date.now()-this.recordStartTime)/1e3|0,a=new Blob([e],{type:"audio/ogg"});ua.a.decode(e,!0).then(e=>{ua.a.setKeepAlive(!1),this.appMessagesManager.sendFile(t,a,{isVoiceMessage:!0,isMedia:!0,duration:n,waveform:e.waveform,objectURL:e.url,replyToMsgId:i,threadId:s,clearDraft:!0}),this.onMessageSent(!1,!0)})}),Object(l.b)(this.replyElements.cancelBtn,this.onHelperCancel,{listenerSetter:this.listenerSetter}),Object(l.b)(this.replyElements.container,this.onHelperClick,{listenerSetter:this.listenerSetter}),this.saveDraftDebounced=ot(()=>this.saveDraft(),2500,!1,!0)}constructPinnedHelpers(){const e=document.createElement("div");e.classList.add("pinned-container"),this.pinnedControlBtn=Object(U.a)("btn-primary btn-transparent text-bold pinned-container-button",{icon:"unpin"}),e.append(this.pinnedControlBtn);const t=e.cloneNode(!0);this.fakePinnedControlBtn=t.firstChild,this.fakeRowsWrapper.append(t),this.listenerSetter.add(this.pinnedControlBtn)("click",()=>{const e=this.chat.peerId;new aa(e,0,!0,()=>{this.chat.appImManager.setPeer(0);const e=this.chat.appImManager.chat;e.topbar.pinnedMessage&&e.topbar.pinnedMessage.pinnedMessageContainer.toggle(!0)})}),this.rowsWrapper.append(e),this.chatInput.classList.add("type-pinned"),this.rowsWrapper.classList.add("is-centered")}getReadyToSend(e){return"scheduled"===this.chat.type?(this.scheduleSending(e),!0):(e(),!1)}setUnreadCount(){const e=this.appMessagesManager.getDialogOnly(this.chat.peerId),t=null==e?void 0:e.unread_count;if(this.goDownUnreadBadge.innerText=""+(t||""),this.goDownUnreadBadge.classList.toggle("badge-gray",this.appNotificationsManager.isPeerLocalMuted(this.chat.peerId,!0)),this.goMentionUnreadBadge&&"chat"===this.chat.type){const t=!!(null==e?void 0:e.unread_mentions_count);this.goMentionUnreadBadge.innerText=t?""+e.unread_mentions_count:"",this.goMentionBtn.classList.toggle("is-visible",t)}}saveDraft(){if(!this.chat.peerId||this.editMsgId||"scheduled"===this.chat.type)return;const{value:e,entities:t}=Object(ma.a)(this.messageInputField.input);let s;(e.length||this.replyToMsgId)&&(s={_:"draftMessage",date:Object(re.f)(!0)+this.serverTimeManager.serverTimeOffset,message:e,entities:t.length?t:void 0,pFlags:{no_webpage:this.noWebPage},reply_to_msg_id:this.replyToMsgId}),this.appDraftsManager.syncDraft(this.chat.peerId,this.chat.threadId,s)}destroy(){this.listenerSetter.removeAll()}cleanup(e=!0){this.chat.peerId||(this.chatInput.style.display="none",this.goDownBtn.classList.add("hide")),Ns(),this.lastTimeType=0,this.messageInput&&(this.clearInput(),e&&this.clearHelper())}setDraft(e,t=!0,s=!1){return!(!s&&!Object(ga.a)(this.messageInput)||"scheduled"===this.chat.type)&&(!(!e&&!(e=this.appDraftsManager.getDraft(this.chat.peerId,this.chat.threadId)))&&((this.messageInputField.value!==e.rMessage||this.replyToMsgId!==e.reply_to_msg_id)&&(this.clearHelper(),this.noWebPage=e.pFlags.no_webpage,e.reply_to_msg_id&&this.initMessageReply(e.reply_to_msg_id),this.setInputValue(e.rMessage,t,t),!0)))}finishPeerChange(){const e=this.chat.peerId;this.chatInput.style.display="";const t=this.appPeersManager.isBroadcast(e);if(this.goDownBtn.classList.toggle("is-broadcast",t),this.goDownBtn.classList.remove("hide"),this.goDownUnreadBadge&&this.setUnreadCount(),"pinned"===this.chat.type&&this.chatInput.classList.toggle("can-pin",this.appPeersManager.canPinMessage(e)),this.btnScheduled){this.btnScheduled.classList.add("hide");const t=this.chat.bubbles.getMiddleware();this.appMessagesManager.getScheduledMessages(e).then(e=>{t()&&this.btnScheduled.classList.toggle("hide",!e.length)})}this.replyKeyboard&&this.replyKeyboard.setPeer(e),this.sendMenu&&this.sendMenu.setPeerId(e),this.messageInput?this.updateMessageInput():this.pinnedControlBtn&&(this.appPeersManager.canPinMessage(this.chat.peerId)?(this.pinnedControlBtn.append(Object(A.i18n)("Chat.Input.UnpinAll")),this.fakePinnedControlBtn.append(Object(A.i18n)("Chat.Input.UnpinAll"))):(this.pinnedControlBtn.append(Object(A.i18n)("Chat.Pinned.DontShow")),this.fakePinnedControlBtn.append(Object(A.i18n)("Chat.Pinned.DontShow"))))}updateMessageInput(){const{peerId:e,threadId:t}=this.chat,s=this.appMessagesManager.canSendToPeer(e,t);this.chatInput.classList.add("no-transition"),this.chatInput.classList.toggle("is-hidden",!s),this.chatInput.offsetLeft,this.chatInput.classList.remove("no-transition");const i=A.default.weakMap.get(this.messageInput);if(i){let s;s=t?"Comment":this.appPeersManager.isBroadcast(e)?"ChannelBroadcast":this.appMessagesManager.isAnonymousSending(e)?"SendAnonymously":"Message",i.key!==s&&(i.key=s,i.update())}const n=this.attachMenuButtons.filter(s=>{const i=s.verify(e,t);return s.element.classList.toggle("hide",!i),i});s?(this.messageInput.setAttribute("contenteditable","true"),this.setDraft(void 0,!1),this.messageInput.innerHTML||this.messageInputField.onFakeInput()):this.messageInput.removeAttribute("contenteditable"),this.attachMenu.toggleAttribute("disabled",!n.length),this.attachMenu.classList.toggle("btn-disabled",!n.length),this.updateSendBtn()}attachMessageInputField(){const e=this.messageInputField;this.messageInputField=new F.b({placeholder:"Message",name:"message",animate:!0}),this.messageInputField.input.classList.replace("input-field-input","input-message-input"),this.messageInputField.inputFake.classList.replace("input-field-input","input-message-input"),this.messageInput=this.messageInputField.input,this.messageInput.classList.add("no-scrollbar"),this.attachMessageInputListeners(),Ha.a&&Object(Ha.b)(this.messageInput),e?(e.input.replaceWith(this.messageInputField.input),e.inputFake.replaceWith(this.messageInputField.inputFake)):this.inputMessageContainer.append(this.messageInputField.input,this.messageInputField.inputFake)}attachMessageInputListeners(){this.listenerSetter.add(this.messageInput)("keydown",e=>{if(Object(ka.a)(e))this.sendMessage();else if(e.ctrlKey||e.metaKey)this.handleMarkdownShortcut(e);else if(("PageUp"===e.key||"PageDown"===e.key)&&!e.shiftKey)if(e.preventDefault(),"PageUp"===e.key){const e=document.createRange(),t=window.getSelection();e.setStart(this.messageInput.childNodes[0]||this.messageInput,0),e.collapse(!0),t.removeAllRanges(),t.addRange(e)}else Object(va.a)(this.messageInput)}),pe.IS_TOUCH_SUPPORTED&&Object(l.b)(this.messageInput,e=>{this.appImManager.selectTab(1),Jn.toggle(!1)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(this.messageInput)("input",this.onMessageInput),this.listenerSetter.add(this.messageInput)("keyup",()=>{this.checkAutocomplete()}),"chat"!==this.chat.type&&"discussion"!==this.chat.type||this.listenerSetter.add(this.messageInput)("focusin",()=>{this.chat.bubbles.scrollable.loadedAll.bottom&&this.appMessagesManager.readAllHistory(this.chat.peerId,this.chat.threadId)})}applyMarkdown(e,t){const s={bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",monospace:()=>document.execCommand("fontName",!1,"monospace"),link:t?()=>document.execCommand("createLink",!1,t):()=>document.execCommand("unlink",!1,null)};if(!s[e])return!1;const i=s[e],n=this.prepareDocumentExecute(),a=[];if(a.push(document.execCommand("styleWithCSS",!1,"true")),"monospace"===e){let t=!1;const s=window.getSelection();if(!s.isCollapsed){const i=s.getRangeAt(0),n=Ta.b[e],a=i.commonAncestorContainer;(a.parentNode.matches(n.match)||a instanceof HTMLElement&&a.matches(n.match))&&(t=!0)}t?a.push(document.execCommand("fontName",!1,"Roboto")):a.push("function"==typeof i?i():document.execCommand(i,!1,null))}else a.push("function"==typeof i?i():document.execCommand(i,!1,null));return a.push(document.execCommand("styleWithCSS",!1,"false")),n(),this.appImManager.markupTooltip&&this.appImManager.markupTooltip.setActiveMarkupButton(),!0}insertAtCaret(e,t,s=!0){const{value:i,caretPos:n,entities:a}=Pa(this.messageInput),o=n>=0?n:i.length,r=i.substr(0,o),l=i.substr(o),c=s?r.match(Ua.AUTO_COMPLETE_REG_EXP):null,d=c?c.index+(c[0].length-c[2].length):r.length,h=r.slice(0,d)+e+l,u=Z.b.parseEntities(i);Z.b.mergeEntities(a,u);const p=t?Math.max(t.length,e.length):e.length,m=[];t&&(m.push(t),t.offset=d),m.push({_:"messageEntityCaret",length:0,offset:d+p});const g=p-(c?c[2].length:r.length);a.forEach(e=>{e.offset>=d&&(e.offset+=g)}),Z.b.mergeEntities(a,m),this.messageInputField.setValueSilently(Z.b.wrapDraftText(h,{entities:a}),!0);const b=this.messageInput.querySelector(".composer-sel");!function(e,t,s){if(e.focus(),!t||t.parentNode!=e||t.nextSibling||s||(e.removeChild(t),t=null),window.getSelection&&document.createRange){const i=document.createRange();t?i.selectNode(t):i.selectNodeContents(e),s||i.collapse(!1);const n=window.getSelection();n.removeAllRanges(),n.addRange(i)}}(this.messageInput,b),b.remove(),this.onMessageInput()}checkAutocomplete(e,t,s){if(void 0===e){const i=Pa(this.messageInputField.input,!0);e=i.value,t=i.caretPos,s=i.entities}if(-1===t&&(t=e.length),void 0===s){const t=Z.b.parseMarkdown(e,s,!0);s=Z.b.mergeEntities(s,Z.b.parseEntities(t))}if(e=e.substr(0,t),this.previousQuery===e)return;this.previousQuery=e;const i=e.match(Ua.AUTO_COMPLETE_REG_EXP);let n;if(i){const t=s[0];let o=i[2];const r=o[0];if(this.stickersHelper&&a.default.settings.stickers.suggest&&this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,"send_stickers")&&"messageEntityEmoji"===(null==t?void 0:t._)&&t.length===e.length&&!t.offset)n=this.stickersHelper,this.stickersHelper.checkEmoticon(e);else if("@"===r){const e=this.chat.threadId?this.appMessagesIdsManager.getServerMessageId(this.chat.threadId):void 0;this.mentionsHelper.checkQuery(o,this.chat.peerId>0?0:this.chat.peerId,e)&&(n=this.mentionsHelper)}else i[1]||"/"!==r?a.default.settings.emoji.suggest&&(o=o.replace(/^\s*/,""),e.match(/^\s*:(.+):\s*$/)||e.match(/:[;!@#$%^&*()-=|]/)||!o||(n=this.emojiHelper,this.emojiHelper.checkQuery(o,r))):this.commandsHelper.checkQuery(o,this.chat.peerId)&&(n=this.commandsHelper)}n=this.checkInlineAutocomplete(e,n),this.autocompleteHelperController.hideOtherHelpers(n)}checkInlineAutocomplete(e,t){let s=!1;if(!t){const i=e.match(/^@([a-zA-Z\\d_]{3,32})\s/);if(i){const n=i[1],a=e.slice(i[0].length);s=i[0].length===e.length,t=this.inlineHelper,this.btnPreloader?Object(Xt.a)(this.btnPreloader,"show",!0,400):(this.btnPreloader=N("none btn-preloader float show disable-hover",{noRipple:!0}),Object(se.f)(this.btnPreloader,!0),this.inputMessageContainer.parentElement.insertBefore(this.btnPreloader,this.inputMessageContainer.nextSibling)),this.inlineHelper.checkQuery(this.chat.peerId,n,a).then(({user:e,renderPromise:t})=>{s&&e.bot_inline_placeholder&&(this.messageInput.dataset.inlinePlaceholder=e.bot_inline_placeholder),t.then(()=>{Object(Xt.a)(this.btnPreloader,"show",!1,400)})}).catch(Ae.a)}}return s||delete this.messageInput.dataset.inlinePlaceholder,t!==this.inlineHelper&&this.btnPreloader&&Object(Xt.a)(this.btnPreloader,"show",!1,400),t}clearInput(e=!0,t=!0,s=""){if(document.activeElement===this.messageInput&&h.IS_MOBILE_SAFARI){const e=document.createElement("input");document.body.append(e),Object(ja.a)(e),this.messageInputField.setValueSilently(s),Object(ja.a)(this.messageInput),e.remove()}else this.messageInputField.setValueSilently(s);pe.IS_TOUCH_SUPPORTED||(this.canRedoFromHTML="",this.undoHistory.length=0,this.executedHistory.length=0,this.canUndoFromHTML="");let i=!1;e&&(i=this.setDraft(void 0,!1)),!i&&t&&this.onMessageInput()}isInputEmpty(){return Object(ga.a)(this.messageInput)}updateSendBtn(){let e;const t=this.isInputEmpty();e=this.editMsgId?"edit":!this.recorder||this.recording||!t||this.forwarding?"scheduled"===this.chat.type?"schedule":"send":"record",["send","record","edit","schedule"].forEach(t=>{this.btnSend.classList.toggle(t,e===t)}),this.btnScheduled&&this.btnScheduled.classList.toggle("show",t),this.btnToggleReplyMarkup&&this.btnToggleReplyMarkup.classList.toggle("show",t)}onMessageSent(e=!0,t){"scheduled"!==this.chat.type&&this.appMessagesManager.readAllHistory(this.chat.peerId,this.chat.threadId,!0),this.scheduleDate=void 0,this.sendSilent=void 0;const s=this.messageInputField.value;Z.b.parseEntities(s).filter(e=>"messageEntityEmoji"===e._).forEach(e=>{const t=Object(ne.a)(e.unicode);this.appEmojiManager.pushRecentEmoji(t)}),e&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null,this.clearInput()),(t||e)&&this.clearHelper(),this.updateSendBtn()}sendMessage(e=!1){if("scheduled"===this.chat.type&&!e&&!this.editMsgId)return void this.scheduleSending();const{value:t,entities:s}=Object(ma.a)(this.messageInputField.input);if(this.editMsgId){const e=this.chat.getMessage(this.editMsgId);if(!t.trim()&&!e.media)return void new Bs(this.chat.peerId,[this.editMsgId],this.chat.type);this.appMessagesManager.editMessage(e,t,{entities:s,noWebPage:this.noWebPage})}else this.appMessagesManager.sendText(this.chat.peerId,t,{entities:s,replyToMsgId:this.replyToMsgId,threadId:this.chat.threadId,noWebPage:this.noWebPage,webPage:this.getWebPagePromise?void 0:this.willSendWebPage,scheduleDate:this.scheduleDate,silent:this.sendSilent,clearDraft:!0});if(this.forwarding){const e=Object(L.a)(this.forwarding),t=this.chat.peerId,s=this.sendSilent,i=this.scheduleDate;setTimeout(()=>{for(const n in e)this.appMessagesManager.forwardMessages(t,+n,e[n],{silent:s,scheduleDate:i})},0)}this.onMessageSent()}sendMessageWithDocument(e,t=!1,s=!1){var i;const n="sticker"===(e=this.appDocsManager.getDoc(e)).type?"send_stickers":"gif"===e.type?"send_gifs":"send_media";return this.chat.peerId<0&&!this.appMessagesManager.canSendToPeer(this.chat.peerId,this.chat.threadId,n)?(nt("Posting media content isn't allowed in this group."),!1):"scheduled"!==this.chat.type||t?!!e&&(this.appMessagesManager.sendFile(this.chat.peerId,e,{isMedia:!0,replyToMsgId:this.replyToMsgId,threadId:this.chat.threadId,silent:this.sendSilent,scheduleDate:this.scheduleDate,clearDraft:s||void 0}),this.onMessageSent(s,!0),"sticker"===e.type&&(null===(i=Jn.stickersTab)||void 0===i||i.pushRecentSticker(e)),!0):(this.scheduleSending(()=>this.sendMessageWithDocument(e,!0,s)),!1)}initMessageEditing(e){const t=this.chat.getMessage(e);let s=Z.b.wrapDraftText(t.message,{entities:t.totalEntities});const i=()=>{const n=this.appMessagesManager.wrapMessageForReply(t,void 0,[t.mid]);this.setTopInfo("edit",i,Object(A.i18n)("AccDescrEditing"),n,s,t),this.editMsgId=e,s=void 0};i()}initMessagesForward(e){const t=()=>{const s=Object.keys(e).map(e=>+e),i=new Set;let n=0;s.forEach(t=>{const s=e[t];s.forEach(e=>{var s;const n=this.appMessagesManager.getMessageByPeer(t,e);!(null===(s=n.fwd_from)||void 0===s?void 0:s.from_name)||n.fromId||n.fwdFromId?i.add(n.fromId):i.add(n.fwd_from.from_name)}),n+=s.length});const a=i.size>2,o=[...i].map(e=>"number"==typeof e?new ft.a({peerId:e,dialog:!1,onlyFirstName:a}).element:a?e.split(" ")[0]:e),r=document.createDocumentFragment();let l,c;if(o.length<3?r.append(...Object(A.join)(o,!1)):r.append(o[0],Object(A.i18n)("AndOther",[o.length-1])),1===s.length){const t=s[0],i=e[t];if(l=this.appMessagesManager.getMessageByPeer(t,i[0]),c=!!l.grouped_id,c){const e=this.appMessagesManager.getMidsByMessage(l);(e.length!==n||e.find(e=>!i.includes(e)))&&(c=!1)}}if(c||1===n){const i=e[s[0]],n=this.appMessagesManager.wrapMessageForReply(l,void 0,i);this.setTopInfo("forward",t,r,n)}else this.setTopInfo("forward",t,r,Object(A.i18n)("ForwardedMessageCount",[n]));this.forwarding=e};t()}initMessageReply(e){let t=this.chat.getMessage(e);const s=()=>{let i;"messageEmpty"===t._?(i=Object(A.i18n)("Loading"),this.chat.appMessagesManager.wrapSingleMessage(this.chat.peerId,e).then(()=>{this.replyToMsgId===e&&(t=this.chat.getMessage(e),"messageEmpty"===t._?this.clearHelper("reply"):s())})):i=new ft.a({peerId:t.fromId,dialog:!1}).element,this.setTopInfo("reply",s,i,t&&t.message,void 0,t),this.replyToMsgId=e};s()}clearHelper(e){"edit"===this.helperType&&"edit"!==e&&this.clearInput(),e&&(this.lastUrl="",delete this.noWebPage,this.willSendWebPage=null),this.replyToMsgId=void 0,this.forwarding=void 0,this.editMsgId=void 0,this.helperType=this.helperFunc=void 0,this.chat.container.classList.contains("is-helper-active")&&(B.a.removeByType("input-helper"),this.chat.container.classList.remove("is-helper-active"))}setInputValue(e,t=!0,s=!0){e||(e=""),t?this.clearInput(!1,!1,e):this.messageInputField.setValueSilently(e),Object(_e.b)(()=>{s&&Object(va.a)(this.messageInput),this.onMessageInput(),this.messageInput.scrollTop=this.messageInput.scrollHeight})}setTopInfo(e,t,s="",i="",n,a){"webpage"!==e&&(this.clearHelper(e),this.helperType=e,this.helperFunc=t);const o=this.replyElements.container;"DIV"===o.lastElementChild.tagName&&o.lastElementChild.remove(),o.append(Es(s,i,a)),this.chat.container.classList.add("is-helper-active"),h.IS_MOBILE||B.a.pushItem({type:"input-helper",onPop:()=>{this.onHelperCancel()}}),void 0!==n&&this.setInputValue(n),setTimeout(()=>{this.updateSendBtn()},0)}}Ua.AUTO_COMPLETE_REG_EXP=/(\s|^)((?:(?:@|^\/)\S*)|(?::|^[^:@\/])(?!.*[:@\/]).*)$/;const Na=["is-pinned-message-shown","is-pinned-audio-shown"];class za{constructor(e){this.floating=!1,Object(L.g)(this,e);const{divAndCaption:t,className:s}=this;t.container.classList.add("pinned-container","hide"),t.title.classList.add("pinned-container-title"),t.subtitle.classList.add("pinned-container-subtitle"),t.content.classList.add("pinned-container-content"),this.btnClose=document.createElement("button"),this.btnClose.classList.add("pinned-container-close",`pinned-${s}-close`,"btn-icon","tgico-close"),this.wrapper=document.createElement("div"),this.wrapper.classList.add("pinned-container-wrapper"),Object(ie.ripple)(this.wrapper),this.wrapperUtils=document.createElement("div"),this.wrapperUtils.classList.add("pinned-container-wrapper-utils"),this.wrapperUtils.append(this.btnClose),this.wrapper.append(...Array.from(t.container.children),this.wrapperUtils),t.container.append(this.wrapper),this.attachOnCloseEvent(this.btnClose)}attachOnCloseEvent(e){Object(l.b)(e,e=>{Object(c.a)(e),((this.onClose?this.onClose():null)||Promise.resolve(!0)).then(e=>{e&&this.toggle(!0)})},{listenerSetter:this.listenerSetter})}toggle(e){const t=this.divAndCaption.container.classList.contains("hide");if(void 0===e)e=!t;else if(e===t)return;const s=this.chat.bubbles.scrollable,i=(this.floating||v.b.isMobile)&&!e,n=i||this.divAndCaption.container.classList.contains("is-floating")?s.scrollTop:void 0;this.divAndCaption.container.classList.toggle("is-floating",i),this.divAndCaption.container.classList.toggle("hide",e),this.topbar.container.classList.toggle("is-pinned-floating",i),this.topbar.container.classList.toggle(`is-pinned-${this.className}-shown`,!e);const a=Na.filter(e=>this.topbar.container.classList.contains(e)),o=e?0:1;void 0!==n&&a.length<=o&&(s.scrollTop=n+52*(e?-1:1)),this.topbar.setFloating(),this.topbar.setUtilsWidth()}fill(e,t,s){this.divAndCaption.container.dataset.peerId=""+s.peerId,this.divAndCaption.container.dataset.mid=""+s.mid,this.divAndCaption.fill(e,t,s),this.topbar.setUtilsWidth()}}class Va extends za{constructor(e,t,s){super({topbar:e,chat:t,listenerSetter:e.listenerSetter,className:"audio",divAndCaption:new He("pinned-audio",(e,t)=>{Object(x.a)(this.divAndCaption.title,e),Object(x.a)(this.divAndCaption.subtitle,t)}),onClose:()=>{fe.stop()},floating:!0}),this.topbar=e,this.chat=t,this.appMessagesManager=s,this.divAndCaption.border.remove();const i=N("pprevious active",{noRipple:!0}),n=N("nnext active",{noRipple:!0});i.innerHTML='',n.innerHTML='';const o=(e,t)=>{Object(l.b)(e,e=>{Object(c.a)(e),t()},{listenerSetter:this.topbar.listenerSetter})};o(i,()=>{fe.previous()}),o(n,()=>{fe.next()}),this.toggleEl=N("",{noRipple:!0}),this.toggleEl.classList.add("active","pinned-audio-ico","tgico"),o(this.toggleEl,()=>{fe.toggle()}),this.wrapper.prepend(this.wrapper.firstElementChild,i,this.toggleEl,n),this.volumeSelector=new Te(this.listenerSetter,!0);const r=document.createElement("div");r.classList.add("progress-line-container"),r.append(this.volumeSelector.container);const d=document.createElement("div");d.classList.add("pinned-audio-volume-tunnel"),this.volumeSelector.btn.classList.add("pinned-audio-volume","active"),this.volumeSelector.btn.prepend(d),this.volumeSelector.btn.append(r),this.wrapperUtils.prepend(this.volumeSelector.btn);const h=document.createElement("div");h.classList.add("pinned-audio-progress-wrapper"),this.progressLine=new ke(void 0,void 0,!0,!0),this.progressLine.container.classList.add("pinned-audio-progress"),h.append(this.progressLine.container),this.wrapper.insertBefore(h,this.wrapperUtils),this.topbar.listenerSetter.add(a.default)("media_play",({doc:e,message:t,media:s})=>{let i,n;"voice"===e.type||"round"===e.type?(i=new ft.a({peerId:t.fromId}).element,n=Object(re.c)(t.date)):(i=e.audioTitle||e.fileName,n=e.audioPerformer||Object(A.i18n)("AudioUnknownArtist")),this.progressLine.setMedia(s),this.fill(i,n,t),this.toggleEl.classList.add("flip-icon"),this.toggle(!1)}),this.topbar.listenerSetter.add(a.default)("media_pause",()=>{this.toggleEl.classList.remove("flip-icon")}),this.topbar.listenerSetter.add(a.default)("media_stop",()=>{this.toggle(!0)})}}var Wa;!function(e){e[e.ONE=32]="ONE",e[e.TWO=15]="TWO",e[e.THREE=10]="THREE",e[e.FOUR=8]="FOUR",e[e.MORE=8]="MORE"}(Wa||(Wa={}));class Ka{constructor(){this.drawRect=(e,t,s,i,n)=>`M${e},${t+n}a${n},${n},0,0,1,${s},0v${i-2*n}a${n},${n},0,0,1,${-s},0Z`,this.getClipPath=(e,t,s)=>{let i="";if(2===s)i=this.drawRect(0,0,2,t,1)+this.drawRect(0,t+2,2,t,1);else for(let e=0;e{let s;return e<=1?s=Wa.ONE:2===e?s=Wa.TWO:3===e?s=Wa.THREE:4===e?s=Wa.FOUR:e>3&&(s=Wa.MORE),s},this.getMarkHeight=(e,t)=>{let s;return e<=1?s=Wa.ONE:2===e?s=Wa.TWO:3===e?s=Wa.THREE:4===e?s=Wa.FOUR:e>3&&(s=Wa.MORE),s},this.getMarkTranslateY=(e,t,s)=>1===s?0:2===s?e?t+1:0:3===s?e?1===e?t+1:2*t+2+1:0:(t+1)*e,this.getTrackTranslateY=(e,t,s,i)=>t<=4||e<=1?0:e>=t-2?i-Wa.ONE-s:(e-2)*s+1*e,this.getTrackHeight=(e,t)=>e<=3?Wa.ONE:t*e+1*(e-1)}render(e,t){if(this.border||(this.border=document.createElement("div"),this.border.classList.add("pinned-message-border"),this.wrapper=document.createElement("div"),this.border.append(this.wrapper)),1===e)return this.count!==e&&(this.wrapper.className="pinned-message-border-wrapper-1",this.border.classList.remove("pinned-message-border-mask"),this.wrapper.innerHTML=this.wrapper.style.cssText=""),this.border;const s=this.getBarHeight(e,t),i=this.getMarkHeight(e,t),n=this.getTrackHeight(e,s),a="clipPath_"+e,o=this.getClipPath(a,s,e),r=this.getMarkTranslateY(t,s,e),l=this.getTrackTranslateY(t,e,s,n);return this.border.classList.toggle("pinned-message-border-mask",e>4),t<=1?(this.border.classList.add("mask-bottom"),this.border.classList.remove("mask-top")):t>=e-2?(this.border.classList.add("mask-top"),this.border.classList.remove("mask-bottom")):this.border.classList.add("mask-top","mask-bottom"),this.wrapper.className="pinned-message-border-wrapper",this.wrapper.style.cssText=`clip-path: url(#${a}); width: 2px; height: ${n}px; transform: translateY(-${l}px);`,this.svg||(this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.setAttributeNS(null,"height","0"),this.svg.setAttributeNS(null,"width","0"),this.defs=document.createElementNS("http://www.w3.org/2000/svg","defs"),this.defs.append(o),this.svg.append(this.defs),this.mark=document.createElement("div"),this.mark.classList.add("pinned-message-border-mark")),this.svg.parentElement||this.wrapper.append(this.svg,this.mark),this.mark.style.cssText=`height: ${i}px; transform: translateY(${r}px);`,this.count=e,this.index=t,this.border}}var Ga=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class qa{constructor(){this.rows={},this.container=document.createElement("div"),this.container.className=qa.BASE_CLASS}getRow(e,t=!1){if(this.rows[e])return this.rows[e].element;const s=document.createElement("div"),i=!Object.keys(this.rows).length&&!t;return s.className=qa.BASE_CLASS+"-row"+(i?"":" is-hiding hide"),this.rows[e]={element:s,new:!0},this.container.append(s),s}clearRow(e){this.rows[e]&&(this.rows[e].element.remove(),delete this.rows[e])}clearRows(e){this.clearTimeout&&clearTimeout(this.clearTimeout),this.clearTimeout=window.setTimeout(()=>{for(const t in this.rows)+t!==e&&this.clearRow(+t)},qa.DURATION)}setNewRow(e,t=!1){const s=this.rows[e];s.new&&(t?(s.element.classList.remove("hide"),s.element.offsetLeft):s.element.classList.remove("is-hiding","hide"),delete s.new),this.clearRows(e)}animate(e,t,s=e>t,i=!1){if(e===t)return this.setNewRow(e);const n=this.rows[e],a=this.rows[t];if(!a&&!i)return this.setNewRow(e);const o=["from-top","from-bottom"];s||o.reverse(),n.element.classList.add(o[0]),n.element.classList.remove(o[1]),a&&(a.element.classList.add(o[1]),a.element.classList.remove(o[0])),n.new&&this.setNewRow(e,!0),n.element.classList.toggle("is-hiding",!1),a&&a.element.classList.toggle("is-hiding",!0),this.clearRows(e)}}qa.DURATION=200,qa.BASE_CLASS="animated-super";class Qa{constructor(e=!1){this.reverse=e,this.decimals=[],this.previousNumber=0,this.container=document.createElement("div"),this.container.className=Qa.BASE_CLASS}getDecimal(e){if(this.decimals[e])return this.decimals[e];const t=document.createElement("div");t.className=Qa.BASE_CLASS+"-decimal";const s=document.createElement("div");s.className=Qa.BASE_CLASS+"-decimal-placeholder";const i=new qa;return i.container.className=Qa.BASE_CLASS+"-decimal-wrapper",t.append(s,i.container),this.container.append(t),this.decimals[e]={container:t,placeholder:s,animatedSuper:i}}clear(e){this.clearTimeout&&clearTimeout(this.clearTimeout);const t=(""+e).length;t>=this.decimals.length||(this.clearTimeout=window.setTimeout(()=>{this.decimals.splice(t,this.decimals.length-t).forEach(e=>{e.container.remove()})},qa.DURATION))}hideLeft(e){const t=(""+e).length;this.decimals.slice(t).forEach(t=>{const s=+t.placeholder.innerText||0;t.animatedSuper.getRow(Qa.EMPTY_INDEX,!0);t.animatedSuper.animate(Qa.EMPTY_INDEX,s,this.reverse?ethis.previousNumber,!0)}),this.clear(e)}setCount(e){const t=Array.from(""+this.previousNumber).map(e=>+e);Array.from(""+e).map(e=>+e).forEach((s,i)=>{var n;const a=this.getDecimal(i),o=a.animatedSuper.getRow(s,!0),r=null!==(n=t[i])&&void 0!==n?n:Qa.EMPTY_INDEX;o.innerText=a.placeholder.innerText=""+s,a.animatedSuper.animate(s,r,this.reverse?ethis.previousNumber,!0)}),this.hideLeft(e),this.previousNumber=e}}Qa.EMPTY_INDEX=-1,Qa.BASE_CLASS="animated-counter";class $a{constructor(e,t,s,i){this.topbar=e,this.chat=t,this.appMessagesManager=s,this.appPeersManager=i,this.pinnedMaxMid=0,this.pinnedMid=0,this.pinnedIndex=-1,this.wasPinnedIndex=0,this.wasPinnedMediaIndex=0,this.locked=!1,this.waitForScrollBottom=!1,this.count=0,this.mids=[],this.offsetIndex=0,this.loading=!1,this.loadedBottom=!1,this.loadedTop=!1,this.scrollDownListenerSetter=null,this.hidden=!1,this.getCurrentIndexPromise=null,this.isStatic=!1,this.debug=!1,this.listenerSetter=new H.a;const n=new Ne("pinned-message");this.pinnedMessageContainer=new za({topbar:e,chat:t,listenerSetter:this.listenerSetter,className:"message",divAndCaption:n,onClose:()=>Ga(this,void 0,void 0,(function*(){return i.canPinMessage(this.topbar.peerId)?new aa(this.topbar.peerId,this.pinnedMid,!0):new aa(this.topbar.peerId,0,!0),!1}))}),this.pinnedMessageBorder=new Ka,n.border.replaceWith(this.pinnedMessageBorder.render(1,0)),this.animatedSubtitle=new qa,n.subtitle.append(this.animatedSubtitle.container),this.animatedMedia=new qa,this.animatedMedia.container.classList.add("pinned-message-media-container"),n.content.prepend(this.animatedMedia.container),this.animatedCounter=new Qa(!0),n.title.append(Object(A.i18n)("PinnedMessage")," ",this.animatedCounter.container);const o=this.pinnedMessageContainer.btnClose.cloneNode(!0);this.pinnedMessageContainer.attachOnCloseEvent(o),n.container.prepend(o),this.btnOpen=N("pinlist pinned-container-close pinned-message-pinlist",{noRipple:!0}),this.pinnedMessageContainer.wrapperUtils.prepend(this.btnOpen),Object(l.b)(this.btnOpen,e=>{Object(c.a)(e),this.topbar.openPinned(!0)},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("peer_pinned_messages",({peerId:e})=>{e===this.topbar.peerId&&(this.hidden&&this.pinnedMessageContainer.toggle(this.hidden=!1),this.loadedTop=this.loadedBottom=!1,this.pinnedIndex=-1,this.pinnedMid=0,this.count=0,this.mids=[],this.offsetIndex=0,this.pinnedMaxMid=0,this.setCorrectIndex(0))}),this.listenerSetter.add(a.default)("peer_pinned_hidden",({peerId:e})=>{e===this.topbar.peerId&&this.pinnedMessageContainer.toggle(this.hidden=!0)}),this.setPinnedMessage=ot(()=>this._setPinnedMessage(),100,!0,!0),this.isStatic="discussion"===this.chat.type}destroy(){this.pinnedMessageContainer.divAndCaption.container.remove(),this.pinnedMessageContainer.toggle(!0),this.listenerSetter.removeAll(),this.unsetScrollDownListener(!1)}setCorrectIndex(e){if(this.isStatic)return;if(this.locked||this.hidden)return;if((this.loadedBottom||this.loadedTop)&&!this.count)return;let t=this.chat.bubbles.getBubbleByPoint("bottom");if(!t)return;const s=t.dataset.mid;t&&void 0!==s&&this.testMid(+s,e)}testMid(e,t){if(this.isStatic)return;if(this.hidden)return;let s=this.mids.findIndex(t=>t<=e);if(-1===s||this.isNeededMore(s)){if(!(this.loadedTop&&es))return;this.pinnedIndex=s,this.pinnedMid=this.mids.find(t=>t<=e)||this.mids[this.mids.length-1],this.setPinnedMessage()}}isNeededMore(e){return this.count>$a.LOAD_COUNT&&(!this.loadedBottom&&e<=$a.LOAD_OFFSET||!this.loadedTop&&this.count-1-e<=$a.LOAD_OFFSET)}getCurrentIndex(e,t=!0){return Ga(this,void 0,void 0,(function*(){if(!this.loading){this.loading=!0;try{let s=!1;const i=[this.appMessagesManager.getSearch({peerId:this.topbar.peerId,inputFilter:{_:"inputMessagesFilterPinned"},maxId:e,limit:$a.LOAD_COUNT,backLimit:$a.LOAD_COUNT}).then(e=>(s=!0,e))];if(!this.pinnedMaxMid){const e=this.appMessagesManager.getPinnedMessage(this.topbar.peerId).then(e=>{e.maxId&&(this.pinnedMaxMid=e.maxId,!s&&t&&(this.mids=[this.pinnedMaxMid],this.count=e.count,this.pinnedIndex=0,this.pinnedMid=this.mids[0],this.setPinnedMessage()))});i.push(e)}const n=(yield Promise.all(i))[0];let a=n.history.findIndex(t=>t.mid<=e);-1===a&&(a=n.history.length),this.offsetIndex=n.offset_id_offset?n.offset_id_offset-a:0,this.mids=n.history.map(e=>e.mid).slice(),this.count=n.count,this.count||this.pinnedMessageContainer.toggle(!0),this.loadedTop=this.offsetIndex+this.mids.length===this.count,this.loadedBottom=!this.offsetIndex,this.debug&&this.chat.log("[PM]: getCurrentIndex result:",e,n,a,this.offsetIndex,this.loadedTop,this.loadedBottom)}catch(e){this.chat.log.error("[PM]: getCurrentIndex error",e)}this.loading=!1,this.locked?this.testMid(e):t&&this.setCorrectIndex(0),this.getCurrentIndexPromise=null}}))}setScrollDownListener(){this.waitForScrollBottom=!0,this.scrollDownListenerSetter||(this.scrollDownListenerSetter=new H.a,function(e,t,s,i){if(pe.IS_TOUCH_SUPPORTED){let n;const a={passive:!0};i.add(e)("touchstart",t=>{t.touches.length>1?r():(n=t.touches[0].clientY,i.add(e)("touchmove",o,a),i.add(e)("touchend",r,a))},a);const o=e=>{const i=e.touches[0].clientY,a=i{i.removeManual(e,"touchmove",o,a),i.removeManual(e,"touchend",r,a)}}else i.add(e)("wheel",e=>{const i=e.deltaY>0;"bottom"===t&&i?s():"top"!==t||i||s()},{passive:!0})}(this.chat.bubbles.scrollable.container,"bottom",()=>{this.unsetScrollDownListener()},this.scrollDownListenerSetter))}unsetScrollDownListener(e=!0){this.waitForScrollBottom=!1,this.scrollDownListenerSetter&&(this.scrollDownListenerSetter.removeAll(),this.scrollDownListenerSetter=null),e&&this.setCorrectIndex(0)}handleFollowingPinnedMessage(){return Ga(this,void 0,void 0,(function*(){this.locked=!0,this.debug&&this.chat.log("[PM]: handleFollowingPinnedMessage");try{this.setScrollDownListener();const e=this.chat.setPeerPromise;e instanceof Promise&&(yield e),yield Object(Cs.c)(),this.getCurrentIndexPromise&&(yield this.getCurrentIndexPromise),this.debug&&this.chat.log("[PM]: handleFollowingPinnedMessage: unlock"),this.locked=!1}catch(e){this.chat.log.error("[PM]: handleFollowingPinnedMessage error:",e),this.locked=!1,this.waitForScrollBottom=!1,this.setCorrectIndex(0)}}))}followPinnedMessage(e){return Ga(this,void 0,void 0,(function*(){const t=this.chat.getMessage(e);t&&!t.deleted&&(this.chat.setMessageId(e),(this.chat.setPeerPromise||Promise.resolve()).then(()=>{this.handleFollowingPinnedMessage(),this.testMid(this.pinnedIndex>=this.count-1?this.pinnedMaxMid:e-1)}))}))}_setPinnedMessage(){return Ga(this,void 0,void 0,(function*(){const e=this.count;if(e){const t=this.pinnedIndex,s=this.chat.getMessage(this.pinnedMid),i=0===t;this.animatedCounter.container.classList.toggle("is-last",i),i||this.animatedCounter.setCount(e-t),this.pinnedMessageContainer.toggle(!1);const n=t>this.wasPinnedIndex;this.debug&&this.chat.log("[PM]: setPinnedMessage: fromTop",n,t,this.wasPinnedIndex);const a=this.animatedSubtitle.getRow(t),o=this.animatedMedia.getRow(t);o.classList.add("pinned-message-media");const r=[],l=Ue({title:void 0,titleEl:null,subtitle:s.message,subtitleEl:a,message:s,mediaEl:o,loadPromises:r});yield Promise.all(r),this.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-media",l),this.animatedSubtitle.animate(t,this.wasPinnedIndex),l?(this.animatedMedia.animate(t,this.wasPinnedMediaIndex),this.wasPinnedMediaIndex=t):this.animatedMedia.clearRows(),this.pinnedMessageBorder.render(e,e-t-1),this.wasPinnedIndex=t,this.pinnedMessageContainer.divAndCaption.container.dataset.mid=""+s.mid}else this.pinnedMessageContainer.toggle(!0),this.wasPinnedIndex=0;this.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-many",this.count>1)}))}}$a.LOAD_COUNT=50,$a.LOAD_OFFSET=5;class Ya{constructor(e,t,s,i,n,a,o,r){this.chat=e,this.appSidebarRight=t,this.appMessagesManager=s,this.appPeersManager=i,this.appChatsManager=n,this.appNotificationsManager=a,this.appProfileManager=o,this.appUsersManager=r,this.menuButtons=[],this.onResize=()=>{this.setUtilsWidth(!0),this.setFloating()},this.onChangeScreen=(e,t)=>{this.container.classList.toggle("is-pinned-floating",v.b.isMobile),this.pinnedMessage&&this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.classList.toggle("is-floating",t===v.a.mobile),this.onResize()},this.setUtilsWidth=(e=!1)=>{this.setUtilsRAF&&window.cancelAnimationFrame(this.setUtilsRAF),h.IS_SAFARI&&e&&this.chatUtils.classList.add("hide"),this.setUtilsRAF=window.requestAnimationFrame(()=>{h.IS_SAFARI&&e&&this.chatUtils.classList.remove("hide");const t=this.chatUtils.getBoundingClientRect().width;this.chat.log("utils width:",t),this.chatInfo.style.setProperty("--utils-width",t+"px"),this.setUtilsRAF=0})},this.setFloating=()=>{const e=[this.chatAudio,this.pinnedMessage&&this.pinnedMessage.pinnedMessageContainer].filter(Boolean).reduce((e,t)=>{const s=t.divAndCaption.container.classList.contains("is-floating");return this.container.classList.toggle(`is-pinned-${t.className}-floating`,s),e+ +s},0);this.container.dataset.floating=""+e},this.setPeerStatus=(e=!1)=>{if(!this.subtitle)return;const t=this.peerId;this.chat.appImManager.setPeerStatus(this.peerId,this.subtitle,e,!1,()=>t===this.peerId)},this.listenerSetter=new H.a}construct(){this.container=document.createElement("div"),this.container.classList.add("sidebar-header","topbar"),this.container.dataset.floating="0",this.btnBack=N("left sidebar-close-button",{noRipple:!0}),this.chatInfo=document.createElement("div"),this.chatInfo.classList.add("chat-info");const e=document.createElement("div");e.classList.add("person");const t=document.createElement("div");t.classList.add("content");const s=document.createElement("div");s.classList.add("top"),this.title=document.createElement("div"),this.title.classList.add("user-title"),s.append(this.title);const i=document.createElement("div");i.classList.add("bottom"),this.subtitle&&i.append(this.subtitle),t.append(s,i),this.avatarElement&&e.append(this.avatarElement),e.append(t),this.chatInfo.append(e),this.chatUtils=document.createElement("div"),this.chatUtils.classList.add("chat-utils"),this.chatAudio=new Va(this,this.chat,this.appMessagesManager),this.menuButtons.length&&(this.btnMore=Ie({listenerSetter:this.listenerSetter},"bottom-left",this.menuButtons,e=>{Object(c.a)(e),this.menuButtons.forEach(e=>{e.element.classList.toggle("hide",!e.verify())}),this.menuButtons[this.menuButtons.length-1].element.lastChild.replaceWith(Object(A.i18n)(this.appPeersManager.getDeleteButtonText(this.peerId)))})),this.chatUtils.append(...[this.pinnedMessage?this.pinnedMessage.pinnedMessageContainer.divAndCaption.container:null,this.btnJoin,this.btnPinned,this.btnMute,this.btnSearch,this.btnMore].filter(Boolean)),this.container.append(this.btnBack,this.chatInfo,this.chatUtils),this.chatAudio&&this.container.append(this.chatAudio.divAndCaption.container,this.chatUtils),this.listenerSetter.add(window)("resize",this.onResize),this.listenerSetter.add(v.b)("changeScreen",this.onChangeScreen),Object(l.b)(this.container,e=>{const t=Object(Ce.a)(e.target,"pinned-container");if(Object(Us.a)(),t){if(Object(c.a)(e),Object(Ce.a)(e.target,"progress-line"))return;const s=+t.dataset.mid,i=+t.dataset.peerId;if(t.classList.contains("pinned-message"))this.pinnedMessage.followPinnedMessage(s);else{const e=fe.getSearchContext();this.chat.appImManager.setInnerPeer(i,s,e.isScheduled?"scheduled":e.threadId?"discussion":void 0,e.threadId)}}else v.b.activeScreen===v.a.medium&&document.body.classList.contains("is-left-column-shown")?n():Object(mt.a)(e.target,"AVATAR-ELEMENT")?this.appSidebarRight.toggleSidebar(!document.body.classList.contains("is-right-column-shown")):this.appSidebarRight.toggleSidebar(!0)},{listenerSetter:this.listenerSetter});const n=e=>{if(e&&Object(c.a)(e),v.b.activeScreen===v.a.medium&&document.body.classList.contains("is-left-column-shown"))this.chat.appImManager.setPeer(this.peerId);else{const e=0===this.chat.appImManager.chats.indexOf(this.chat);B.a.back(e?"im":"chat")}};Object(l.b)(this.btnBack,n,{listenerSetter:this.listenerSetter})}constructUtils(){this.menuButtons=[{icon:"search",text:"Search",onClick:()=>{this.chat.initSearch()},verify:()=>v.b.isMobile},{icon:"mute",text:"ChatList.Context.Mute",onClick:()=>{this.appMessagesManager.mutePeer(this.peerId)},verify:()=>"chat"===this.chat.type&&a.default.myId!==this.peerId&&!this.appNotificationsManager.isPeerLocalMuted(this.peerId,!1)},{icon:"unmute",text:"ChatList.Context.Unmute",onClick:()=>{this.appMessagesManager.mutePeer(this.peerId)},verify:()=>"chat"===this.chat.type&&a.default.myId!==this.peerId&&this.appNotificationsManager.isPeerLocalMuted(this.peerId,!1)},{icon:"comments",text:"ViewDiscussion",onClick:()=>{this.appProfileManager.getChannelFull(-this.peerId).then(e=>{e.linked_chat_id&&this.chat.appImManager.setInnerPeer(-e.linked_chat_id)})},verify:()=>{var e;const t=this.appProfileManager.chatsFull[-this.peerId];return"chat"===this.chat.type&&this.appPeersManager.isBroadcast(this.peerId)&&!!(null===(e=t)||void 0===e?void 0:e.linked_chat_id)}},{icon:"select",text:"Chat.Menu.SelectMessages",onClick:()=>{const e=this.chat.selection;e.toggleSelection(!0,!0),k.default.getState().then(t=>{if(t.chatContextMenuHintWasShown)return;const s=e.toggleByElement.bind(e);e.toggleByElement=t=>{k.default.pushToState("chatContextMenuHintWasShown",!0),nt(Object(A.i18n)("Chat.Menu.Hint")),e.toggleByElement=s,e.toggleByElement(t)}})},verify:()=>!this.chat.selection.isSelecting&&!!Object.keys(this.chat.bubbles.bubbles).length},{icon:"select",text:"Chat.Menu.ClearSelection",onClick:()=>{this.chat.selection.cancelSelection()},verify:()=>this.chat.selection.isSelecting},{icon:"adduser",text:"AddContact",onClick:()=>{if(!this.appSidebarRight.isTabExists(Ft)){const e=new Ft(this.appSidebarRight);e.peerId=this.peerId,e.open(),this.appSidebarRight.toggleSidebar(!0)}},verify:()=>this.peerId>0&&!this.appUsersManager.isContact(this.peerId)},{icon:"forward",text:"ShareContact",onClick:()=>{const e=this.peerId;new It({peerTypes:["dialogs","contacts"],onSelect:t=>new Promise((s,i)=>{new ht("",{titleLangKey:"SendMessageTitle",descriptionLangKey:"SendContactToGroupText",descriptionLangArgs:[new ft.a({peerId:t,dialog:!0}).element],buttons:[{langKey:"Send",callback:()=>{s(),this.appMessagesManager.sendOther(t,this.appUsersManager.getContactMediaInput(e)),this.chat.appImManager.setInnerPeer(t)}},{langKey:"Cancel",callback:()=>{i()},isCancel:!0}],peerId:t,overlayClosable:!0}).show()}),placeholder:"ShareModal.Search.Placeholder",chatRightsAction:"send_messages",selfPresence:"ChatYourSelf"})},verify:()=>a.default.myId!==this.peerId&&this.peerId>0&&this.appUsersManager.isContact(this.peerId)},{icon:"lock",text:"BlockUser",onClick:()=>{new ht("",{peerId:this.peerId,titleLangKey:"BlockUser",descriptionLangKey:"AreYouSureBlockContact2",descriptionLangArgs:[new ft.a({peerId:this.peerId}).element],buttons:[{langKey:"BlockUser",isDanger:!0,callback:()=>{this.appUsersManager.toggleBlock(this.peerId,!0).then(e=>{e&&at({langPackKey:"UserBlocked"})})}}]}).show()},verify:()=>{var e;const t=this.appProfileManager.usersFull[this.peerId];return this.peerId>0&&this.peerId!==a.default.myId&&t&&!(null===(e=t.pFlags)||void 0===e?void 0:e.blocked)}},{icon:"lockoff",text:"Unblock",onClick:()=>{this.appUsersManager.toggleBlock(this.peerId,!1).then(e=>{e&&at({langPackKey:"UserUnblocked"})})},verify:()=>{var e;const t=this.appProfileManager.usersFull[this.peerId];return this.peerId>0&&!!(null===(e=null==t?void 0:t.pFlags)||void 0===e?void 0:e.blocked)}},{icon:"delete danger",text:"Delete",onClick:()=>{new xt(this.peerId)},verify:()=>"chat"===this.chat.type&&!!this.appMessagesManager.getDialogOnly(this.peerId)}],this.btnSearch=N("search"),Object(l.b)(this.btnSearch,e=>{Object(c.a)(e),this.chat.initSearch()},{listenerSetter:this.listenerSetter})}constructPeerHelpers(){return this.avatarElement=new ko,this.avatarElement.setAttribute("dialog","1"),this.avatarElement.classList.add("avatar-42","person-avatar"),this.subtitle=document.createElement("div"),this.subtitle.classList.add("info"),this.pinnedMessage=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager),this.btnJoin=Object(U.a)("btn-primary btn-color-primary chat-join hide"),this.btnPinned=N("pinlist"),this.btnMute=N("mute"),Object(l.b)(this.btnPinned,e=>{Object(c.a)(e),Object(Us.a)(),this.openPinned(!0)},{listenerSetter:this.listenerSetter}),Object(l.b)(this.btnMute,e=>{Object(c.a)(e),Object(Us.a)(),this.appMessagesManager.mutePeer(this.peerId)},{listenerSetter:this.listenerSetter}),Object(l.b)(this.btnJoin,e=>{Object(c.a)(e),Object(Us.a)();const t=this.chat.bubbles.getMiddleware();this.btnJoin.setAttribute("disabled","true");const s=-this.peerId;let i;i=this.appChatsManager.isChannel(s)?this.appChatsManager.joinChannel(s):this.appChatsManager.addChatUser(s,a.default.myId),i.finally(()=>{t()&&this.btnJoin.removeAttribute("disabled")})},{listenerSetter:this.listenerSetter}),this.listenerSetter.add(a.default)("chat_update",e=>{var t,s;if(this.peerId===-e){const i=this.appChatsManager.getChat(e);this.btnJoin.classList.toggle("hide",!(null===(s=null===(t=i)||void 0===t?void 0:t.pFlags)||void 0===s?void 0:s.left)),this.setUtilsWidth()}}),this.listenerSetter.add(a.default)("dialog_notify_settings",e=>{e.peerId===this.peerId&&this.setMutedState()}),this.listenerSetter.add(a.default)("peer_typings",({peerId:e})=>{this.peerId===e&&this.setPeerStatus()}),this.listenerSetter.add(a.default)("user_update",e=>{this.peerId===e&&this.setPeerStatus()}),this.pinnedMessage&&this.chat.addEventListener("setPeer",(e,t)=>{const s=this.chat.bubbles.getMiddleware();k.default.getState().then(i=>{s()&&(this.pinnedMessage.hidden=!!i.hiddenPinnedMessages[this.chat.peerId],t?(this.pinnedMessage.unsetScrollDownListener(),this.pinnedMessage.testMid(e,0)):this.pinnedMessage.locked||(this.pinnedMessage.handleFollowingPinnedMessage(),this.pinnedMessage.testMid(e)))})}),this.setPeerStatusInterval=window.setInterval(this.setPeerStatus,6e4),this}constructPinnedHelpers(){this.listenerSetter.add(a.default)("peer_pinned_messages",e=>{const{peerId:t,mids:s,pinned:i}=e;t===this.peerId&&s&&this.setTitle()})}constructDiscussionHelpers(){this.pinnedMessage=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager)}openPinned(e){this.chat.appImManager.setInnerPeer(this.peerId,e?+this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.dataset.mid:0,"pinned")}destroy(){this.listenerSetter.removeAll(),window.clearInterval(this.setPeerStatusInterval),this.pinnedMessage&&this.pinnedMessage.destroy(),delete this.chatAudio,delete this.pinnedMessage}setPeer(e){this.wasPeerId=this.peerId,this.peerId=e,this.container.style.display=e?"":"none"}finishPeerChange(e,t,s){var i,n;const a=this.peerId;this.avatarElement&&(this.avatarElement.setAttribute("peer",""+a),this.avatarElement.update());const o=this.appPeersManager.isBroadcast(a);this.btnMute&&this.btnMute.classList.toggle("hide",!o),this.btnJoin&&(Object(x.a)(this.btnJoin,Object(A.i18n)(this.appChatsManager.isChannel(-a)?"Chat.Subscribe":"ChannelJoin")),this.btnJoin.classList.toggle("hide",!(null===(n=null===(i=this.appChatsManager.getChat(-a))||void 0===i?void 0:i.pFlags)||void 0===n?void 0:n.left))),this.setUtilsWidth();const r=this.chat.bubbles.getMiddleware();if(this.pinnedMessage)if("chat"===this.chat.type){if(void 0!==this.wasPeerId){const e=new $a(this,this.chat,this.appMessagesManager,this.appPeersManager);this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.replaceWith(e.pinnedMessageContainer.divAndCaption.container),this.pinnedMessage.destroy(),this.pinnedMessage=e}k.default.getState().then(t=>{r()&&(this.pinnedMessage.hidden=!!t.hiddenPinnedMessages[a],e||this.pinnedMessage.setCorrectIndex(0))})}else"discussion"===this.chat.type&&(this.pinnedMessage.pinnedMid=this.chat.threadId,this.pinnedMessage.count=1,this.pinnedMessage.pinnedIndex=0,this.pinnedMessage._setPinnedMessage());Object(_e.b)(()=>{this.setTitle(),this.setPeerStatus(!0),this.setMutedState()})}setTitle(e){var t;let s;if("pinned"===this.chat.type?(s=void 0===e?Object(A.i18n)("Loading"):Object(A.i18n)("PinnedMessagesCount",[e]),void 0===e&&this.appMessagesManager.getSearchCounters(this.peerId,[{_:"inputMessagesFilterPinned"}],!1).then(e=>{const t=e[0].count;if(this.setTitle(t),!t){this.chat.appImManager.setPeer(0);const e=this.chat.appImManager.chat;e.topbar.pinnedMessage&&e.topbar.pinnedMessage.pinnedMessageContainer.toggle(!0)}})):"scheduled"===this.chat.type?(s=this.peerId===a.default.myId?Object(A.i18n)("Reminders"):Object(A.i18n)("ScheduledMessages"),void 0===e&&this.appMessagesManager.getScheduledMessages(this.peerId).then(e=>{this.setTitle(e.length)})):"discussion"===this.chat.type?(s=void 0===e?Object(A.i18n)("Loading"):Object(A.i18n)("Chat.Title.Comments",[e]),void 0===e&&Promise.all([this.appMessagesManager.getHistory(this.peerId,0,1,0,this.chat.threadId),Promise.resolve()]).then(()=>{const e=this.appMessagesManager.getHistoryStorage(this.peerId,this.chat.threadId).count;null===e?setTimeout(()=>{this.setTitle()},30):this.setTitle(e)})):"chat"===this.chat.type&&(s=new ft.a({peerId:this.peerId,dialog:!0}).element),Object(x.a)(this.title,s),"chat"===this.chat.type){const e=this.appPeersManager.getPeer(this.peerId);(null===(t=null==e?void 0:e.pFlags)||void 0===t?void 0:t.verified)&&this.title.append(Bt())}}setMutedState(){if(!this.btnMute)return;const e=this.peerId;let t=this.appNotificationsManager.isPeerLocalMuted(e,!1);this.appPeersManager.isBroadcast(e)?(this.btnMute.classList.remove("tgico-mute","tgico-unmute"),this.btnMute.classList.add(t?"tgico-unmute":"tgico-mute"),this.btnMute.style.display=""):this.btnMute.style.display="none"}}class Xa extends V{constructor(){super(...arguments),this.peerId=0,this.threadId=0,this.query=""}onOpenAfterTimeout(){this.appSearch.beginSearch(this.peerId,this.threadId,this.query)}init(){this.container.id="search-private-container",this.container.classList.add("chatlist-container"),this.inputSearch=new j("Search"),this.title.replaceWith(this.inputSearch.container),this.btnPickDate=N("calendar sidebar-header-right"),this.header.append(this.btnPickDate);const e=document.createElement("div");e.classList.add("chatlist-container"),this.scrollable.container.replaceWith(e),this.appSearch=new _(e,this.inputSearch,{messages:new O("Chat.Search.PrivateSearch","messages")})}open(e,t,s,i){const n=super.open();return this.peerId?this.appSearch.beginSearch(this.peerId,this.threadId,i):(this.query=i,this.peerId=e,this.threadId=t,this.onDatePick=s,this.btnPickDate.classList.toggle("hide",!this.onDatePick),this.onDatePick&&Object(l.b)(this.btnPickDate,()=>{new dn(new Date,this.onDatePick).show()}),i&&this.appSearch.searchInput.inputField.setValueSilently(i),$t.toggleSidebar(!0)),n}}class Ja{constructor(e,t,s){this.topbar=e,this.chat=t,this.query=s,this.foundCount=0,this.selectedIndex=0,this.onDateClick=e=>{Object(c.a)(e),new dn(new Date,this.chat.bubbles.onDatePick).show()},this.selectResult=e=>{if(this.setPeerPromise)return this.setPeerPromise;const t=+e.dataset.peerId,s=+e.dataset.mid||void 0,i=Object(Ts.a)(e);i===this.foundCount-1?this.upBtn.setAttribute("disabled","true"):this.upBtn.removeAttribute("disabled"),i?this.downBtn.removeAttribute("disabled"):this.downBtn.setAttribute("disabled","true"),this.results.classList.remove("active"),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active");const n=this.chat.setPeer(t,s);this.setPeerPromise=(n instanceof Promise?n:Promise.resolve(n)).then(()=>{this.selectedIndex=i,Object(x.a)(this.foundCountEl,Object(A.i18n)("Of",[i+1,this.foundCount]));const e=this.searchGroup.list.childElementCount;this.selectedIndex>=e-6&&this.appSearch.searchMore()}).finally(()=>{this.setPeerPromise=null})},this.onResultsClick=e=>{const t=Object(mt.a)(e.target,"LI");t&&this.selectResult(t)},this.onFooterClick=e=>{this.foundCount&&(this.chat.bubbles.bubblesContainer.classList.toggle("search-results-active"),this.results.classList.toggle("active"))},this.onUpClick=e=>{Object(c.a)(e),this.selectResult(this.searchGroup.list.children[this.selectedIndex+1])},this.onDownClick=e=>{Object(c.a)(e),this.selectResult(this.searchGroup.list.children[this.selectedIndex-1])},this.element=document.createElement("div"),this.element.classList.add("sidebar-header","chat-search","chatlist-container"),this.backBtn=document.createElement("button"),this.backBtn.classList.add("btn-icon","tgico-left","sidebar-close-button"),Object(ie.ripple)(this.backBtn),this.backBtn.addEventListener("click",()=>{this.topbar.container.classList.remove("hide-pinned"),this.element.remove(),this.inputSearch.remove(),this.results.remove(),this.footer.remove(),this.footer.removeEventListener("click",this.onFooterClick),this.dateBtn.removeEventListener("click",this.onDateClick),this.upBtn.removeEventListener("click",this.onUpClick),this.downBtn.removeEventListener("click",this.onDownClick),this.searchGroup.list.removeEventListener("click",this.onResultsClick),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active")},{once:!0}),this.inputSearch=new j("Search"),this.results=document.createElement("div"),this.results.classList.add("chat-search-results","chatlist-container"),this.searchGroup=new O(!1,"messages",void 0,"",!1),this.searchGroup.list.addEventListener("click",this.onResultsClick),this.appSearch=new _(this.results,this.inputSearch,{messages:this.searchGroup},e=>{this.foundCount=e,this.foundCount?this.selectResult(this.searchGroup.list.children[0]):(this.foundCountEl.replaceWith(this.inputSearch.value?Object(A.i18n)("NoResult"):""),this.results.classList.remove("active"),this.chat.bubbles.bubblesContainer.classList.remove("search-results-active"),this.upBtn.setAttribute("disabled","true"),this.downBtn.setAttribute("disabled","true"))}),this.appSearch.beginSearch(this.chat.peerId,this.chat.threadId),this.chat.bubbles.bubblesContainer.append(this.results),this.footer=document.createElement("div"),this.footer.classList.add("chat-search-footer"),this.footer.addEventListener("click",this.onFooterClick),Object(ie.ripple)(this.footer),this.foundCountEl=document.createElement("span"),this.foundCountEl.classList.add("chat-search-count"),this.dateBtn=document.createElement("button"),this.dateBtn.classList.add("btn-icon","tgico-calendar"),this.controls=document.createElement("div"),this.controls.classList.add("chat-search-controls"),this.upBtn=document.createElement("button"),this.upBtn.classList.add("btn-icon","tgico-up"),this.downBtn=document.createElement("button"),this.downBtn.classList.add("btn-icon","tgico-down"),this.upBtn.setAttribute("disabled","true"),this.downBtn.setAttribute("disabled","true"),this.dateBtn.addEventListener("click",this.onDateClick),this.upBtn.addEventListener("click",this.onUpClick),this.downBtn.addEventListener("click",this.onDownClick),this.controls.append(this.upBtn,this.downBtn),this.footer.append(this.foundCountEl,this.dateBtn,this.controls),this.topbar.container.parentElement.insertBefore(this.footer,t.input.chatInput),this.element.append(this.backBtn,this.inputSearch.container),this.topbar.container.classList.add("hide-pinned"),this.topbar.container.parentElement.append(this.element),this.inputSearch.input.focus(),s&&(this.inputSearch.inputField.value=s)}}class Za extends R.a{constructor(e,t,s,i,n,a,o,r,l,c,d,h,u,p,m,g,b,v,f){super(),this.appImManager=e,this.appChatsManager=t,this.appDocsManager=s,this.appInlineBotsManager=i,this.appMessagesManager=n,this.appPeersManager=a,this.appPhotosManager=o,this.appProfileManager=r,this.appStickersManager=l,this.appUsersManager=c,this.appWebPagesManager=d,this.appPollsManager=h,this.apiManager=u,this.appDraftsManager=p,this.serverTimeManager=m,this.storage=g,this.appNotificationsManager=b,this.appEmojiManager=v,this.appMessagesIdsManager=f,this.wasAlreadyUsed=!1,this.peerId=0,this.type="chat",this.inited=!1,this.container=document.createElement("div"),this.container.classList.add("chat","tabs-tab"),this.backgroundEl=document.createElement("div"),this.backgroundEl.classList.add("chat-background"),this.log=Object(J.b)("CHAT",J.a.Log|J.a.Warn|J.a.Debug|J.a.Error),this.container.append(this.backgroundEl),this.appImManager.chatsContainer.append(this.container)}setBackground(e){const t=a.default.getTheme();let s;if("color"===t.background.type&&"grabbing"===document.documentElement.style.cursor){const e=this.backgroundEl.lastElementChild;e&&e.dataset.type===t.background.type&&(s=e)}return s||(s=document.createElement("div"),s.classList.add("chat-background-item"),s.dataset.type=t.background.type),"color"===t.background.type&&(s.style.backgroundColor=t.background.color,s.style.backgroundImage="none"),new Promise(t=>{const i=()=>{const e=this.backgroundEl.lastElementChild;e!==s?(this.backgroundEl.append(s),Object(_e.b)(()=>{Object(_e.b)(()=>{Object(Xt.a)(s,"is-visible",!0,200,e?()=>{e.remove()}:null)})}),t()):t()};e?Object(Rt.a)(s,e,i):i()})}setType(e){this.type=e,"scheduled"===this.type&&(this.getMessagesStorage=()=>this.appMessagesManager.getScheduledMessagesStorage(this.peerId))}init(){this.topbar=new Ya(this,$t,this.appMessagesManager,this.appPeersManager,this.appChatsManager,this.appNotificationsManager,this.appProfileManager,this.appUsersManager),this.bubbles=new ia(this,this.appMessagesManager,this.appStickersManager,this.appUsersManager,this.appInlineBotsManager,this.appPhotosManager,this.appPeersManager,this.appProfileManager,this.appDraftsManager,this.appMessagesIdsManager),this.input=new Ua(this,this.appMessagesManager,this.appMessagesIdsManager,this.appDocsManager,this.appChatsManager,this.appPeersManager,this.appWebPagesManager,this.appImManager,this.appDraftsManager,this.serverTimeManager,this.appNotificationsManager,this.appEmojiManager,this.appUsersManager,this.appInlineBotsManager),this.selection=new Gs(this,this.bubbles,this.input,this.appMessagesManager),this.contextMenu=new ca(this.bubbles.bubblesContainer,this,this.appMessagesManager,this.appPeersManager,this.appPollsManager,this.appDocsManager,this.appMessagesIdsManager),"chat"===this.type?(this.topbar.constructUtils(),this.topbar.constructPeerHelpers()):"pinned"===this.type?this.topbar.constructPinnedHelpers():"discussion"===this.type&&(this.topbar.constructUtils(),this.topbar.constructDiscussionHelpers()),this.topbar.construct(),this.input.construct(),"chat"===this.type?(this.bubbles.constructPeerHelpers(),this.input.constructPeerHelpers()):"pinned"===this.type?(this.bubbles.constructPinnedHelpers(),this.input.constructPinnedHelpers()):"scheduled"===this.type?(this.bubbles.constructScheduledHelpers(),this.input.constructPeerHelpers()):"discussion"===this.type&&(this.bubbles.constructPeerHelpers(),this.input.constructPeerHelpers()),this.container.classList.add("type-"+this.type),this.container.append(this.topbar.container,this.bubbles.bubblesContainer,this.input.chatInput),this.bubbles.listenerSetter.add(a.default)("dialog_migrate",({migrateFrom:e,migrateTo:t})=>{this.peerId===e&&this.setPeer(t)}),this.bubbles.listenerSetter.add(a.default)("dialog_drop",e=>{e.peerId===this.peerId&&this.appImManager.setPeer(0)})}beforeDestroy(){this.bubbles.cleanup()}destroy(){this.topbar.destroy(),this.bubbles.destroy(),this.input.destroy(),delete this.topbar,delete this.bubbles,delete this.input,delete this.selection,delete this.contextMenu,this.container.remove()}cleanup(e=!0){this.input.cleanup(e),this.selection.cleanup()}setPeer(e,t){e?this.inited||(this.init&&(this.init(),this.init=null),this.inited=!0):this.inited=!1;const s=this.peerId===e;if(s){if(this.setPeerPromise)return}else a.default.dispatchEvent("peer_changing",this),this.peerId=e;if(!e)return $t.toggleSidebar(!1),this.cleanup(!0),this.topbar.setPeer(e),this.bubbles.setPeer(e),void a.default.dispatchEvent("peer_changed",e);if(!s){const t=$t.getTab(Xa);t&&t.close(),$t.sharedMediaTab.setPeer(e,this.threadId),this.input.clearHelper(),this.selection.cleanup(),this.setAutoDownloadMedia()}this.peerChanged=s;const i=this.bubbles.setPeer(e,t);if(!i)return;const{promise:n}=i,o=this.setPeerPromise=n.finally(()=>{this.setPeerPromise===o&&(this.setPeerPromise=null)});return s||($t.sharedMediaTab.setLoadMutex(this.setPeerPromise),$t.sharedMediaTab.loadSidebarMedia(!0)),i}setAutoDownloadMedia(){let e;e=this.peerId<0?this.appPeersManager.isBroadcast(this.peerId)?"channels":"groups":this.appUsersManager.isContact(this.peerId)?"contacts":"private",this.noAutoDownloadMedia=!a.default.settings.autoDownload[e]}setMessageId(e){return this.setPeer(this.peerId,e)}finishPeerChange(e,t,s){if(this.peerChanged)return;let i=this.peerId;this.peerChanged=!0,this.cleanup(!1),this.topbar.setPeer(i),this.topbar.finishPeerChange(e,t,s),this.bubbles.finishPeerChange(),this.input.finishPeerChange(),$t.sharedMediaTab.fillProfileElements(),this.log.setPrefix("CHAT-"+i+"-"+this.type),a.default.dispatchEvent("peer_changed",i),this.wasAlreadyUsed=!0}getMessagesStorage(){return this.appMessagesManager.getMessagesStorage(this.peerId)}getMessage(e){return this.appMessagesManager.getMessageFromStorage(this.getMessagesStorage(),e)}getMidsByMid(e){return this.appMessagesManager.getMidsByMessage(this.getMessage(e))}isAnyGroup(){return this.peerId===a.default.myId||this.peerId===gn.b||this.appPeersManager.isAnyGroup(this.peerId)}initSearch(e){if(this.peerId)if(v.b.isMobile)new Ja(this.topbar,this,e);else{let t=$t.getTab(Xa);t||(t=new Xa($t)),t.open(this.peerId,this.threadId,this.bubbles.onDatePick,e)}}}var eo=s(137);class to{constructor(e){this.appImManager=e,this.buttons={},this.addedListener=!1,this.waitingForMouseUp=!1,this.mouseUpCounter=0,this.onMouseUpSingle=e=>{if(this.waitingForMouseUp=!1,pe.IS_TOUCH_SUPPORTED){if(Object(c.a)(e),0!=this.mouseUpCounter++)return void this.hide();this.resetSelection(this.savedRange)}this.show()}}init(){this.container=document.createElement("div"),this.container.classList.add("markup-tooltip","z-depth-1","hide"),this.wrapper=document.createElement("div"),this.wrapper.classList.add("markup-tooltip-wrapper");const e=document.createElement("div"),t=document.createElement("div");e.classList.add("markup-tooltip-tools"),t.classList.add("markup-tooltip-tools");["bold","italic","underline","strikethrough","monospace","link"].forEach(t=>{const s=N(t,{noRipple:!0});e.append(this.buttons[t]=s),"link"!==t?s.addEventListener("mousedown",e=>{Object(c.a)(e),this.appImManager.chat.input.applyMarkdown(t),this.cancelClosening()}):Object(l.b)(s,e=>{Object(c.a)(e),this.showLinkEditor(),this.cancelClosening()})}),this.linkBackButton=N("left",{noRipple:!0}),this.linkInput=document.createElement("input"),Object(A._i18n)(this.linkInput,"MarkupTooltip.LinkPlaceholder",void 0,"placeholder"),this.linkInput.classList.add("input-clear"),this.linkInput.addEventListener("keydown",e=>{const t=!this.linkInput.value.length||!!Z.b.matchUrl(this.linkInput.value);"Enter"===e.code&&(t?this.applyLink(e):(this.linkInput.classList.contains("error")&&(this.linkInput.classList.remove("error"),this.linkInput.offsetLeft),this.linkInput.classList.add("error")))}),this.linkInput.addEventListener("input",e=>{const t=this.isLinkValid();this.linkInput.classList.toggle("is-valid",t),this.linkInput.classList.remove("error")}),this.linkBackButton.addEventListener("mousedown",e=>{Object(c.a)(e),this.container.classList.remove("is-link"),this.resetSelection(),this.setTooltipPosition(),this.cancelClosening()}),this.linkApplyButton=N("check markup-tooltip-link-apply",{noRipple:!0}),this.linkApplyButton.addEventListener("mousedown",e=>{this.applyLink(e)});const s=document.createElement("div");s.classList.add("markup-tooltip-link-apply-container");const i=document.createElement("span"),n=document.createElement("span"),a=document.createElement("span");i.classList.add("markup-tooltip-delimiter"),n.classList.add("markup-tooltip-delimiter"),a.classList.add("markup-tooltip-delimiter"),e.insertBefore(i,this.buttons.link),s.append(a,this.linkApplyButton),t.append(this.linkBackButton,n,this.linkInput,s),this.wrapper.append(e,t),this.container.append(this.wrapper),document.body.append(this.container),window.addEventListener("resize",()=>{this.hide()})}showLinkEditor(){this.container&&this.container.classList.contains("is-visible")||this.show();const e=this.buttons.link;this.container.classList.add("is-link");const t=document.getSelection();if(this.savedRange=t.getRangeAt(0),e.classList.contains("active")){const e=this.savedRange.startContainer.parentElement;this.linkInput.value=e.href}else this.linkInput.value="";this.setTooltipPosition(!0),setTimeout(()=>{this.linkInput.focus()},200),this.linkInput.classList.toggle("is-valid",this.isLinkValid())}applyLink(e){Object(c.a)(e),this.resetSelection();let t=this.linkInput.value;t&&!Z.b.matchUrlProtocol(t)&&(t="https://"+t),this.appImManager.chat.input.applyMarkdown("link",t),setTimeout(()=>{this.hide()},0)}isLinkValid(){return!this.linkInput.value.length||!!Z.b.matchUrl(this.linkInput.value)}resetSelection(e=this.savedRange){const t=window.getSelection();t.removeAllRanges(),t.addRange(e),this.appImManager.chat.input.messageInput.focus()}hide(){this.init||(this.container.classList.remove("is-visible"),document.removeEventListener("mouseup",this.onMouseUpSingle),this.waitingForMouseUp=!1,B.a.removeByType("markup"),this.hideTimeout&&clearTimeout(this.hideTimeout),this.hideTimeout=window.setTimeout(()=>{this.hideTimeout=void 0,this.container.classList.add("hide"),this.container.classList.remove("is-link")},200))}getActiveMarkupButton(){const e=function(){const e=[],t=window.getSelection();for(let s=0;s!!e)}(),t=[...new Set(e.map(e=>e.parentNode))],s=new Set;return t.forEach(e=>{for(const t in Ta.b){const i=Ta.b[t];e.closest(i.match+", [contenteditable]")!==this.appImManager.chat.input.messageInput&&s.add(this.buttons[t])}}),[...s]}setActiveMarkupButton(){const e=this.getActiveMarkupButton();for(const t in this.buttons){const s=this.buttons[t];s.classList.toggle("active",e.includes(s))}}setTooltipPosition(e=!1){const t=document.getSelection().getRangeAt(0),s=document.body.getBoundingClientRect(),i=t.getBoundingClientRect(),n=this.appImManager.chat.input.rowsWrapper.getBoundingClientRect();this.container.style.maxWidth=n.width+"px";const a=i.top+-1*s.top,o=(this.container.classList.contains("is-link")?this.wrapper.lastElementChild:this.wrapper.firstElementChild).getBoundingClientRect(),r=a-o.height-8,l=n.left,c=n.left+n.width-Math.min(n.width,o.width);let d;if(e){const e=this.container.getBoundingClientRect();d=Object(C.a)(e.left,l,c)}else{const e=i.left+(i.width-o.width)/2;d=Object(C.a)(e,l,c)}this.container.style.transform=`translate3d(${d}px, ${r}px, 0)`}show(){if(this.init&&(this.init(),this.init=null),oa())return void this.hide();if(void 0!==this.hideTimeout&&clearTimeout(this.hideTimeout),this.container.classList.contains("is-visible"))return;this.setActiveMarkupButton(),this.container.classList.remove("is-link");const e=this.container.classList.contains("hide");e&&(this.container.classList.remove("hide"),this.container.classList.add("no-transition")),this.setTooltipPosition(),e&&(this.container.offsetLeft,this.container.classList.remove("no-transition")),this.container.classList.add("is-visible"),h.IS_MOBILE||B.a.pushItem({type:"markup",onPop:()=>{this.hide()}})}setMouseUpEvent(){this.waitingForMouseUp||(this.waitingForMouseUp=!0,document.addEventListener("mouseup",this.onMouseUpSingle,{once:!0}))}cancelClosening(){pe.IS_TOUCH_SUPPORTED&&!h.IS_APPLE&&(document.removeEventListener("mouseup",this.onMouseUpSingle),document.addEventListener("mouseup",e=>{Object(c.a)(e),this.mouseUpCounter=1,this.waitingForMouseUp=!1,this.setMouseUpEvent()},{once:!0}))}handleSelection(){this.addedListener||(this.addedListener=!0,document.addEventListener("selectionchange",e=>{if(document.activeElement===this.linkInput)return;if(document.activeElement!==this.appImManager.chat.input.messageInput)return void this.hide();const t=document.getSelection();if(oa(t))this.hide();else if(pe.IS_TOUCH_SUPPORTED)if(h.IS_APPLE)this.show(),this.setTooltipPosition();else{if(2===this.mouseUpCounter)return void(this.mouseUpCounter=0);this.savedRange=t.getRangeAt(0),this.setMouseUpEvent()}else this.setMouseUpEvent()}))}}function so(e,t,s,i,n,a,o){return[e,",",t," ",s," ",i,",",n," ",a,",",o].join("")}function io(e,t,s,i,n,a,o,r){const l=[];return l.push("M"+(e+s/2)+","+t),l.push("H"+(e+s-a)),a>0&&l.push("A"+so(a,a,0,0,1,e+s,t+a)),l.push("V"+(t+i-o)),o>0&&l.push("A"+so(o,o,0,0,1,e+s-o,t+i)),l.push("H"+(e+r)),r>0&&l.push("A"+so(r,r,0,0,1,e+0,t+i-r)),l.push("V"+(t+n)),n>0&&l.push("A"+so(n,n,0,0,1,e+n,t+0)),l.push("Z"),l.join(" ")}de.a.generatePathData=io;class no{constructor(e,t){this.options=t,this.onDragOver=e=>{this.container.classList.add("is-dragover")},this.onDragLeave=e=>{this.container.classList.remove("is-dragover")},this.onDrop=e=>{this.options.onDrop(e)},this.container=document.createElement("div"),this.container.classList.add("drop","z-depth-1"),this.outlineWrapper=document.createElement("div"),this.outlineWrapper.classList.add("drop-outline-wrapper"),this.svg=document.createElementNS("http://www.w3.org/2000/svg","svg"),this.svg.classList.add("drop-outline"),this.path=document.createElementNS("http://www.w3.org/2000/svg","path"),this.path.classList.add("drop-outline-path");const s=document.createElement("div");s.classList.add("drop-icon","tgico-"+t.icon);const i=document.createElement("div");i.classList.add("drop-header"),i.append(Object(A.i18n)(t.header));const n=document.createElement("div");n.classList.add("drop-subtitle"),n.append(Object(A.i18n)(t.subtitle)),this.svg.append(this.path),this.outlineWrapper.append(this.svg),this.container.append(this.outlineWrapper,s,i,n),e.append(this.container),this.container.addEventListener("dragover",this.onDragOver),this.container.addEventListener("dragleave",this.onDragLeave),this.container.addEventListener("drop",this.onDrop)}destroy(){delete this.options,this.container.remove(),this.container.removeEventListener("dragover",this.onDragOver),this.container.removeEventListener("dragleave",this.onDragLeave),this.container.removeEventListener("drop",this.onDrop)}setPath(){const e=this.outlineWrapper.getBoundingClientRect();this.svg.setAttributeNS(null,"preserveAspectRatio","none"),this.svg.setAttributeNS(null,"viewBox",`0 0 ${e.width} ${e.height}`),this.svg.setAttributeNS(null,"width",""+e.width),this.svg.setAttributeNS(null,"height",""+e.height);const t=io(5,5,e.width-10,e.height-10,10,10,10,10);this.path.setAttributeNS(null,"d",t)}}function ao(e){e.forEach(e=>e.classList.add("no-transition")),Object(_e.a)().then(()=>{e.forEach(e=>e.classList.remove("no-transition"))})}var oo,ro=s(132);class lo extends ct.b{constructor(e,t){super("popup-join-chat-invite",Object(ct.a)([{langKey:t.pFlags.broadcast?"JoinByPeekChannelTitle":"JoinByPeekGroupTitle",callback:()=>{rt.a.invokeApi("messages.importChatInvite",{hash:e}).then(e=>{Xs.a.processUpdateMessage(e);const t=-e.chats[0].id;a.default.dispatchEvent("history_focus",{peerId:t})})}}]),{closable:!0,overlayClosable:!0,body:!0}),this.header.remove();const s=new ko;s.setAttribute("dialog","0"),s.classList.add("avatar-100"),"photo"===t.photo._?(t.photo=r.a.savePhoto(t.photo),ys({container:s,message:null,photo:t.photo,boxHeight:100,boxWidth:100,withoutPreloader:!0}),s.style.width=s.style.height=""):d.a.putPhoto(s,-0,!1,t.title);const i=document.createElement("div");i.classList.add("chat-title"),i.innerHTML=Z.b.wrapEmojiText(t.title);const n=t.pFlags.broadcast,o=Object(A.i18n)(n?"Subscribers":"Members",[t.participants_count]);o.classList.add("chat-participants-count"),this.body.append(s,i,o)}}!function(e){e[e.MESSAGE=0]="MESSAGE",e[e.PRIVATE_POST=1]="PRIVATE_POST",e[e.STICKER_SET=2]="STICKER_SET",e[e.JOIN_CHAT=3]="JOIN_CHAT"}(oo||(oo={}));var co=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const ho="chat",uo=pe.IS_TOUCH_SUPPORTED?"touchstart":"mousemove";const po=new class{constructor(){this.columnEl=document.getElementById("column-center"),this.offline=!1,this.updateStatusInterval=0,this.setPeerPromise=null,this.tabId=-1,this.chats=[],this.backgroundPromises={},this.onHashChange=()=>{const e=location.hash,t=e.split("?"),s=this.parseUriParams(e,t);if(this.log("hashchange",e,t[0],s),s.tgaddr){B.a.replaceState();const{onclick:e}=Z.b.wrapUrl(s.tgaddr);if(e){const t=document.createElement("a");t.href=s.tgaddr,window[e](t)}}else switch(t[0]){case"#/im":{const e=s.p;let t=void 0!==s.post?f.a.generateMessageId(+s.post):void 0;switch(e[0]){case"@":this.openUsername(e,t);break;default:this.setInnerPeer(t?-+e:+e,t)}}}},this.setSettings=()=>{document.documentElement.style.setProperty("--messages-text-size",a.default.settings.messagesTextSize+"px"),document.body.classList.toggle("animation-level-0",!a.default.settings.animationsEnabled),document.body.classList.toggle("animation-level-1",!1),document.body.classList.toggle("animation-level-2",a.default.settings.animationsEnabled),this.chatsSelectTabDebounced=ot(()=>{const e=this.chat.topbar;e.pinnedMessage&&e.pinnedMessage.setCorrectIndex(0),rt.a.setQueueId(this.chat.bubbles.lazyLoadQueue.queueId)},a.default.settings.animationsEnabled?250:0,!1,!0),le.b.setLoop(a.default.settings.stickers.loop),I.a.checkAnimations(!1);for(const e of this.chats)e.setAutoDownloadMedia()},this.onDocumentPaste=(e,t)=>{if(this.canDrag()){if(e instanceof DragEvent){const t=e.dataTransfer.types;(t.contains?t.contains("Files"):t.indexOf("Files")>=0)&&Object(c.a)(e)}Object(me.c)(e).then(e=>{if(e.length){e.find(e=>!g.has(e.type))&&(t="document");const s=this.chat.input;s.willAttachType=t||(g.has(e[0].type)?"media":"document"),new fa(this.chat,e,s.willAttachType)}})}},Xs.a.attach(),_t.a.start(),this.log=Object(J.b)("IM",J.a.Log|J.a.Warn|J.a.Debug|J.a.Error),this.selectTab(0),window.addEventListener("blur",()=>{I.a.checkAnimations(!0),this.offline=a.default.idle.isIDLE=!0,this.updateStatus(),clearInterval(this.updateStatusInterval),a.default.dispatchEvent("idle",a.default.idle.isIDLE),window.addEventListener("focus",()=>{this.offline=a.default.idle.isIDLE=!1,this.updateStatus(),this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4),I.a.checkAnimations(!1),a.default.dispatchEvent("idle",a.default.idle.isIDLE)},{once:!0})}),window.addEventListener(uo,()=>{this.updateStatusInterval=window.setInterval(()=>this.updateStatus(),5e4),this.updateStatus(),this.offline=a.default.idle.isIDLE=!1,a.default.dispatchEvent("idle",a.default.idle.isIDLE)},{once:!0,passive:!0}),this.chatsContainer=document.createElement("div"),this.chatsContainer.classList.add("chats-container","tabs-container"),this.chatsContainer.dataset.animation="navigation",this.columnEl.append(this.chatsContainer),this.createNewChat(),this.chatsSelectTab(this.chat.container),B.a.onHashChange=this.onHashChange,this.setSettings(),a.default.addEventListener("settings_updated",this.setSettings),Object(Cs.a)(()=>{I.a.setOnlyOnePlayableGroup("lock"),I.a.checkAnimations(!0)},()=>{I.a.setOnlyOnePlayableGroup(""),I.a.checkAnimations(!1)}),this.applyCurrentTheme(),v.b.addEventListener("changeScreen",(e,t)=>{document.body.classList.contains("is-left-column-shown")&&document.body.classList.contains("is-right-column-shown")&&$t.toggleSidebar(!1)}),a.default.addEventListener("history_focus",e=>{let{peerId:t,threadId:s,mid:i}=e;s&&(s=f.a.generateMessageId(s)),i&&(i=f.a.generateMessageId(i)),this.setInnerPeer(t,i,s?"discussion":void 0,s)}),a.default.addEventListener("peer_changing",e=>{this.saveChatPosition(e)}),a.default.addEventListener("theme_change",()=>{this.applyCurrentTheme()}),a.default.addEventListener("instance_deactivated",()=>{const e=new ct.b("popup-instance-deactivated",void 0,{overlayClosable:!0}),t=document.createElement("div");t.classList.add("instance-deactivated-container"),e.container.replaceWith(t);const s=document.createElement("div");s.classList.add("header"),s.append(Object(A.i18n)("Deactivated.Title"));const i=document.createElement("div");i.classList.add("subtitle"),i.append(Object(A.i18n)("Deactivated.Subtitle")),t.append(s,i),document.body.classList.add("deactivated"),e.onClose=()=>{document.body.classList.add("deactivated-backwards"),ro.a.activateInstance(),setTimeout(()=>{document.body.classList.remove("deactivated","deactivated-backwards")},333)},e.show()}),Sn.a.get("chatPositions").then(e=>{Sn.a.setToCache("chatPositions",e||{})}),ro.a.activateInstance(),this.addAnchorListener({name:"showMaskedAlert",callback:(e,t)=>{const s=t.href,i=t.cloneNode(!0);i.className="anchor-url",i.innerText=s,i.removeAttribute("onclick"),new ht("popup-masked-url",{titleLangKey:"OpenUrlTitle",descriptionLangKey:"OpenUrlAlert2",descriptionLangArgs:[i],buttons:[{langKey:"Open",callback:()=>{i.click()}}]}).show()}}),this.addAnchorListener({name:"execBotCommand",callback:({uriParams:e})=>{const{command:t,bot:s}=e;i.a.sendText(this.chat.peerId,"/"+t+(s?"@"+s:""))}}),this.addAnchorListener({name:"searchByHashtag",callback:({uriParams:e})=>{const{hashtag:t}=e;t&&this.chat.initSearch("#"+t+" ")}}),this.addAnchorListener({name:"addstickers",callback:({pathnameParams:e})=>{const t={_:oo.STICKER_SET,set:e[1]};this.processInternalLink(t)}}),this.addAnchorListener({name:"joinchat",callback:({pathnameParams:e})=>{const t={_:oo.JOIN_CHAT,invite:e[1]};this.processInternalLink(t)}}),this.addAnchorListener({name:"im",callback:({pathnameParams:e,uriParams:t})=>co(this,void 0,void 0,(function*(){let s;s="c"===e[0]?{_:oo.PRIVATE_POST,channel:e[1],post:e[2],thread:"thread"in t?t.thread:void 0,comment:t.comment}:{_:oo.MESSAGE,domain:e[0],post:e[1],comment:t.comment},this.processInternalLink(s)}))}),this.addAnchorListener({name:"resolve",protocol:"tg",callback:({uriParams:e})=>{let t;"telegrampassport"===e.domain||(t=this.makeLink(oo.MESSAGE,e)),this.processInternalLink(t)}}),this.addAnchorListener({name:"privatepost",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.PRIVATE_POST,e);this.processInternalLink(t)}}),this.addAnchorListener({name:"addstickers",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.STICKER_SET,e);this.processInternalLink(t)}}),this.addAnchorListener({name:"joinchat",protocol:"tg",callback:({uriParams:e})=>{const t=this.makeLink(oo.JOIN_CHAT,e);this.processInternalLink(t)}}),this.onHashChange(),this.attachKeydownListener()}get myId(){return a.default.myId}get chat(){return this.chats[this.chats.length-1]}attachKeydownListener(){const e=new Set(["PageUp","PageDown","Meta","Control"]);document.body.addEventListener("keydown",t=>{if(a.default.isOverlayActive||e.has(t.key))return;const s=t.target,n=this.chat;if("KeyC"!==t.code||!t.ctrlKey&&!t.metaKey||"INPUT"===s.tagName){if(!t.altKey||"ArrowUp"!==t.code&&"ArrowDown"!==t.code){if("ArrowUp"===t.code){if(n.input.editMsgId||!n.input.isInputEmpty())return;{const e=i.a.getHistoryStorage(n.peerId,n.threadId).history.slice;if(e.isEnd(bn.a.Bottom)&&e.length){let s;for(const t of e){const e=n.getMessage(t);if((this.myId===n.peerId?e.fromId===this.myId:e.pFlags.out)&&i.a.canEditMessage(n.getMessage(t),"text")){s=t;break}}s&&(n.input.initMessageEditing(s),Object(c.a)(t))}}}else if("ArrowDown"===t.code)return}else{const e=i.a.dialogsStorage.getFolder(a.default.filterId,!0);let s;if(a.default.peerId){const i=e.findIndex(e=>e.peerId===a.default.peerId);if(-1!==i){s=e["ArrowUp"===t.code?i-1:i+1]}}else"ArrowDown"===t.code&&(s=e[0]);s&&this.setPeer(s.peerId)}!n.input.messageInput||t.target===n.input.messageInput||"INPUT"===s.tagName||s.hasAttribute("contenteditable")||pe.IS_TOUCH_SUPPORTED||v.b.isMobile&&1!==this.tabId||this.chat.selection.isSelecting||this.chat.input.recording||(n.input.messageInput.focus(),Object(va.a)(n.input.messageInput))}})}makeLink(e,t){return Object.assign({_:e},t)}processInternalLink(e){return co(this,void 0,void 0,(function*(){switch(null==e?void 0:e._){case oo.MESSAGE:{const t=e.post?f.a.generateMessageId(+e.post):void 0,s=e.comment?f.a.generateMessageId(+e.comment):void 0;this.openUsername(e.domain,t,void 0,s);break}case oo.PRIVATE_POST:{const t=-+e.channel;if(G.a.getChat(-t).deleted)try{yield G.a.resolveChannel(-t)}catch(e){throw at({langPackKey:"LinkNotFound"}),e}const s=f.a.generateMessageId(+e.post),i=e.thread?f.a.generateMessageId(+e.thread):void 0;i?this.openThread(t,s,i):this.setInnerPeer(t,s);break}case oo.STICKER_SET:new Di({id:e.set}).show();break;case oo.JOIN_CHAT:rt.a.invokeApi("messages.checkChatInvite",{hash:e.invite}).then(t=>{t.chat&&G.a.saveApiChat(t.chat,!0),"chatInviteAlready"!==t._&&"chatInvitePeek"!==t._?new lo(e.invite,t).show():this.setInnerPeer(-t.chat.id)},e=>{"INVITE_HASH_EXPIRED"===e.type&&nt(Object(A.i18n)("InviteExpired"))});break;default:this.log.warn("Not supported internal link:",e)}}))}addAnchorListener(e){window[(e.protocol?e.protocol+"_":"")+e.name]=t=>{Object(c.a)(null);const s=t.href;let i,n;e.noPathnameParams||(i=new URL(t.href).pathname.split("/").slice(1)),e.noUriParams||(n=this.parseUriParams(s));const a=e.callback({pathnameParams:i,uriParams:n},t);return void 0===a&&a}}parseUriParams(e,t=e.split("?")){const s={};return t[1]?(t[1].split("&").forEach(e=>{s[e.split("=")[0]]=decodeURIComponent(e.split("=")[1])}),s):s}openUsername(e,t,s,i){return T.a.resolveUsername(e).then(e=>{const n="user"===e._?e.id:-e.id;return s?this.openThread(n,t,s):i?this.openComment(n,t,i):this.setInnerPeer(n,t)},e=>{"USERNAME_NOT_OCCUPIED"===e.type?at({langPackKey:"NoUsernameFound"}):"USERNAME_INVALID"===e.type&&at({langPackKey:"Alert.UserDoesntExists"})})}openThread(e,t,s){return i.a.wrapSingleMessage(e,s).then(()=>{const n=i.a.getMessageByPeer(e,s);return i.a.generateThreadServiceStartMessage(n),this.setInnerPeer(e,t,"discussion",s)})}openComment(e,t,s){return i.a.getDiscussionMessage(e,t).then(e=>this.openThread(e.peerId,s,e.mid))}setCurrentBackground(e=!1){const t=a.default.getTheme();if("image"===t.background.type||"default"===t.background.type&&t.background.slug){const s=k.AppStateManager.STATE_INIT.settings.themes.find(e=>e.name===t.name);if(!(t.background.blur===s.background.blur&&t.background.slug===s.background.slug))return this.getBackground(t.background.slug).then(t=>this.setBackground(t,e),()=>(t.background=Object(L.a)(s.background),this.setBackground("",!0)))}return this.setBackground("",e)}getBackground(e){return this.backgroundPromises[e]?this.backgroundPromises[e]:this.backgroundPromises[e]=he.a.cacheStorage.getFile("backgrounds/"+e).then(e=>URL.createObjectURL(e))}setBackground(e,t=!0){const s=this.chats.map(t=>t.setBackground(e));return s[s.length-1].then(()=>{t&&a.default.dispatchEvent("background_change")})}saveChatPosition(e){if(!["chat","discussion"].includes(e.type)||!e.peerId)return;const t=e.bubbles,s=t.scrollable.scrollTop,i=e.peerId+(e.threadId?"_"+e.threadId:""),n=Sn.a.getFromCache("chatPositions");if(t.scrollable.getDistanceToEnd()<=16&&t.scrollable.loadedAll.bottom||!Object.keys(t.bubbles).length)delete n[i],this.log("deleted chat position");else{const e={mids:Object(L.e)(t.bubbles,"desc"),top:s};n[i]=e,this.log("saved chat position:",e)}Sn.a.set({chatPositions:n},!0)}getChatSavedPosition(e){if(!["chat","discussion"].includes(e.type)||!e.peerId)return;const t=e.peerId+(e.threadId?"_"+e.threadId:""),s=Sn.a.getFromCache("chatPositions");return s&&s[t]}applyHighlightningColor(){let e;const t=a.default.getTheme();t.background.highlightningColor?(e=t.background.highlightningColor,document.documentElement.style.setProperty("--message-highlightning-color",e)):document.documentElement.style.removeProperty("--message-highlightning-color"),!pe.IS_TOUCH_SUPPORTED&&e&&(a.default.themeColor=function(e){return Ti(e).slice(0,-2)}(e))}applyCurrentTheme(e,t,s){return this.applyHighlightningColor(),a.default.setTheme(),t&&(this.backgroundPromises[e]=Promise.resolve(t)),this.setCurrentBackground(void 0===s?!!e:s)}chatsSelectTab(e,t){if(this.prevTab!==e){if(!1===t&&this.prevTab&&ao([e,this.prevTab].filter(Boolean)),this.prevTab){this.prevTab.classList.remove("active"),this.chatsSelectTabDebounced(),a.default.settings.animationsEnabled&&!1!==t&&Object(Cs.b)(Object(yn.a)(400),400);const s=Object(Ts.a)(this.prevTab);Object(Ts.a)(e)>s&&B.a.pushItem({type:"chat",onPop:e=>{this.setPeer(0,void 0,e),Object(Us.a)()}})}e.classList.add("active"),this.prevTab=e}}init(){document.addEventListener("paste",this.onDocumentPaste,!0),pe.IS_TOUCH_SUPPORTED||this.attachDragAndDropListeners(),this.markupTooltip=new to(this),this.markupTooltip.handleSelection()}attachDragAndDropListeners(){const e=[];let t=!1;const s=(a,o)=>co(this,void 0,void 0,(function*(){if(o===t)return;const r=a.dataTransfer.types,l=r.contains?r.contains("Files"):r.indexOf("Files")>=0;if(l&&this.canDrag()){if(o&&!e.length){const t=yield Object(me.c)(a,!0),i=l&&!t.length,o=t.filter(e=>g.has(e)).length,r=t.length-o;this.log("drag files",t),(t.length||i)&&e.push(new no(n,{icon:"dragfiles",header:"Chat.DropTitle",subtitle:"Chat.DropAsFilesDesc",onDrop:e=>{s(e,!1),po.log("drop",e),po.onDocumentPaste(e,"document")}})),(o&&!r||i)&&e.push(new no(n,{icon:"dragmedia",header:"Chat.DropTitle",subtitle:"Chat.DropQuickDesc",onDrop:e=>{s(e,!1),po.log("drop",e),po.onDocumentPaste(e,"media")}})),this.chat.container.append(n)}Object(Xt.a)(n,"is-visible",o,200,()=>{o||(e.forEach(e=>{e.destroy()}),e.length=0)}),o?e.forEach(e=>{e.setPath()}):i=0,document.body.classList.toggle("is-dragging",o),t=o}else i=0}));let i=0;document.body.addEventListener("dragenter",e=>{i++}),document.body.addEventListener("dragover",e=>{s(e,!0),Object(c.a)(e)}),document.body.addEventListener("dragleave",e=>{i--,0===i&&s(e,!1)});const n=document.createElement("div");n.classList.add("drops-container")}canDrag(){var e;const t=null===(e=this.chat)||void 0===e?void 0:e.peerId;return!(!t||a.default.isOverlayActive||!i.a.canSendToPeer(t,this.chat.threadId,"send_media"))}selectTab(e,t){!1===t&&ao([ln.sidebarEl,this.columnEl,$t.sidebarEl]),document.body.classList.toggle("is-left-column-shown",0===e);const s=this.tabId;this.log("selectTab",e,s);let i=a.default.settings.animationsEnabled?Object(_e.a)():Promise.resolve();if(-1!==s&&s!==e&&a.default.settings.animationsEnabled&&!1!==t){const e=100+(v.b.isMobile?250:200);i=Object(yn.a)(e),Object(Cs.b)(i,e)}return this.tabId=e,Object(Us.a)(),v.b.isMobile&&2===s&&e<2&&document.body.classList.remove("is-right-column-shown"),-1!==s&&e>s&&(e<2||!B.a.findItemByType("im"))&&B.a.pushItem({type:"im",onPop:e=>{this.setPeer(0,void 0,e)}}),a.default.dispatchEvent("im_tab_change",e),i}updateStatus(){return this.myId?(T.a.setUserStatus(this.myId,this.offline),rt.a.invokeApiSingle("account.updateStatus",{offline:this.offline})):Promise.resolve()}createNewChat(){const e=new Za(this,G.a,M.a,zn,i.a,o.a,r.a,n.default,hs,T.a,eo.a,$e.a,rt.a,Si.a,Ye.a,Sn.a,_t.a,Cn,f.a);this.chats.length&&e.backgroundEl.append(this.chat.backgroundEl.lastElementChild.cloneNode(!0)),this.chats.push(e)}spliceChats(e,t=!0,s,i){if(!(e>=this.chats.length)){this.chats.length>1&&t&&a.default.dispatchEvent("peer_changing",this.chat),i||(i=this.chats.splice(e,this.chats.length-e));for(let e=0;e1&&i.slice(0,-1).forEach(e=>{e.container.remove()}),this.chatsSelectTab(this.chat.container,s),t){a.default.dispatchEvent("peer_changed",this.chat.peerId);const e=$t.getTab(Xa);e&&e.close();$t.sharedMediaTab.setPeer(this.chat.peerId,this.chat.threadId)&&($t.sharedMediaTab.loadSidebarMedia(!0),$t.sharedMediaTab.fillProfileElements())}i.forEach(e=>{e.beforeDestroy()}),setTimeout(()=>{i.forEach(e=>{e.destroy()})},350)}}setPeer(e,t,s){this.init&&(this.init(),this.init=null);const i=this.chat,n=this.chats.indexOf(i);if(e){if(n>0&&i.peerId&&i.peerId!==e){const s=this.chats.splice(1,this.chats.length-1);if(this.chat.peerId===e)return void this.spliceChats(0,!0,!0,s);{const i=this.setPeer(e,t);return this.spliceChats(0,!1,!1,s),i}}}else{if(n>0)return void this.spliceChats(n,void 0,s);if(v.b.activeScreen===v.a.medium)return void this.selectTab(+!this.tabId,s)}if(e===i.peerId&&v.b.activeScreen<=v.a.medium&&document.body.classList.contains("is-left-column-shown"))return this.selectTab(1,s),!1;if(e||v.b.activeScreen!==v.a.mobile){const n=i.setPeer(e,t),a=(null==n?void 0:n.cached)?n.promise:Promise.resolve();e&&a.then(()=>{setTimeout(()=>{setTimeout(()=>{this.chatsSelectTab(this.chat.container)},0),this.selectTab(1,s)},0)})}return e?void 0:(this.selectTab(0,s),!1)}setInnerPeer(e,t,s="chat",i){const n=this.chats.findIndex(t=>t.peerId===e&&t.type===s);if(-1!==n)return this.spliceChats(n+1),this.setPeer(e,t);return this.chat.inited&&this.createNewChat(),s&&(this.chat.setType(s),i&&(this.chat.threadId=i)),this.setPeer(e,t)}openScheduled(e){this.setInnerPeer(e,void 0,"scheduled")}getTypingElement(e){const t=document.createElement("span");switch(t.classList.add("peer-typing"),t.dataset.action=e._,e._){case"sendMessageTypingAction":{const e="peer-typing-text";t.classList.add(e);for(let s=0;s<3;++s){const s=document.createElement("span");s.className=e+"-dot",t.append(s)}break}case"sendMessageUploadAudioAction":case"sendMessageUploadDocumentAction":case"sendMessageUploadRoundAction":case"sendMessageUploadVideoAction":case"sendMessageUploadPhotoAction":{const e="peer-typing-upload";t.classList.add(e);break}case"sendMessageRecordAudioAction":case"sendMessageRecordRoundAction":case"sendMessageRecordVideoAction":{const e="peer-typing-record";t.classList.add(e);break}}return t}getPeerTyping(e,t){if(!T.a.isBot(e)){const s=n.default.getPeerTypings(e);if(!s||!s.length)return;const i=s[0],a={private:{sendMessageTypingAction:"Peer.Activity.User.TypingText",sendMessageUploadAudioAction:"Peer.Activity.User.SendingFile",sendMessageUploadDocumentAction:"Peer.Activity.User.SendingFile",sendMessageUploadPhotoAction:"Peer.Activity.User.SendingPhoto",sendMessageUploadVideoAction:"Peer.Activity.User.SendingVideo",sendMessageUploadRoundAction:"Peer.Activity.User.SendingVideo",sendMessageRecordVideoAction:"Peer.Activity.User.RecordingVideo",sendMessageRecordAudioAction:"Peer.Activity.User.RecordingAudio",sendMessageRecordRoundAction:"Peer.Activity.User.RecordingVideo",sendMessageGamePlayAction:"Peer.Activity.User.PlayingGame"},chat:{sendMessageTypingAction:"Peer.Activity.Chat.TypingText",sendMessageUploadAudioAction:"Peer.Activity.Chat.SendingFile",sendMessageUploadDocumentAction:"Peer.Activity.Chat.SendingFile",sendMessageUploadPhotoAction:"Peer.Activity.Chat.SendingPhoto",sendMessageUploadVideoAction:"Peer.Activity.Chat.SendingVideo",sendMessageUploadRoundAction:"Peer.Activity.Chat.SendingVideo",sendMessageRecordVideoAction:"Peer.Activity.Chat.RecordingVideo",sendMessageRecordAudioAction:"Peer.Activity.Chat.RecordingAudio",sendMessageRecordRoundAction:"Peer.Activity.Chat.RecordingVideo",sendMessageGamePlayAction:"Peer.Activity.Chat.PlayingGame"},multi:{sendMessageTypingAction:"Peer.Activity.Chat.Multi.TypingText1",sendMessageUploadAudioAction:"Peer.Activity.Chat.Multi.SendingFile1",sendMessageUploadDocumentAction:"Peer.Activity.Chat.Multi.SendingFile1",sendMessageUploadPhotoAction:"Peer.Activity.Chat.Multi.SendingPhoto1",sendMessageUploadVideoAction:"Peer.Activity.Chat.Multi.SendingVideo1",sendMessageUploadRoundAction:"Peer.Activity.Chat.Multi.SendingVideo1",sendMessageRecordVideoAction:"Peer.Activity.Chat.Multi.RecordingVideo1",sendMessageRecordAudioAction:"Peer.Activity.Chat.Multi.RecordingAudio1",sendMessageRecordRoundAction:"Peer.Activity.Chat.Multi.RecordingVideo1",sendMessageGamePlayAction:"Peer.Activity.Chat.Multi.PlayingGame1"}},o=e>0?a.private:s.length>1?a.multi:a.chat;let r=i.action;if(s.length>1){const e={};s.forEach(t=>{const s=t.action._;void 0===e[s]&&(e[s]=0),++e[s]}),Object.keys(e).length>1&&(r={_:"sendMessageTypingAction"})}const l=o[r._];if(!l)return;t||(t=document.createElement("span")).classList.add("online","peer-typing-container");let c,d=t.firstElementChild;d?d.dataset.action!==r._&&d.replaceWith(this.getTypingElement(r)):(d=this.getTypingElement(r),t.prepend(d)),e<0&&(c=[new ft.a({peerId:i.userId,onlyFirstName:!0}).element,s.length-1]);const h=Object(A.i18n)(l,c);return h.classList.add("peer-typing-description"),t.childElementCount>1?t.lastElementChild.replaceWith(h):t.append(h),t}}getPeerStatus(e){var t;return co(this,void 0,void 0,(function*(){let s;if(!e)return"";if(e<0){let t=this.getPeerTyping(e);if(t)return t;const i=yield n.default.getChatFull(-e);this.chat.log("chatInfo res:",i);i.participants_count||i.participants&&i.participants.participants&&i.participants.participants.length;return s=n.default.getChatMembersString(-e),s}{const i=T.a.getUser(e);if(a.default.myId===e)return"";if(i){if(s=T.a.getUserStatusString(i.id),!T.a.isBot(e)){let n=this.getPeerTyping(e);if(n||"userStatusOnline"!==(null===(t=i.status)||void 0===t?void 0:t._)||(n=document.createElement("span"),n.classList.add("online"),n.append(s)),n)return n}return s}}}))}setPeerStatus(e,t,s,i,n){s&&(t.innerHTML=i?"‎":"");const a=t.querySelector(".peer-typing-container");a&&this.getPeerTyping(e,a)||this.getPeerStatus(e).then(e=>{n()&&Object(x.a)(t,e||(i?"‎":""))})}};de.a&&(de.a.appImManager=po);var mo=po;var go=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class bo extends R.a{constructor(e,t){super(!1),this.listLoader=e,this.author={},this.content={},this.buttons={},this.tempId=0,this.preloader=null,this.preloaderStreamable=null,this.isFirstOpen=!0,this.pageEl=document.getElementById("page-chats"),this.zoomElements={},this.zoomSwipeStartX=0,this.zoomSwipeStartY=0,this.zoomSwipeX=0,this.zoomSwipeY=0,this.setZoomValue=(e=this.zoomElements.rangeSelector.value)=>{1===e&&(this.zoomSwipeX=0,this.zoomSwipeY=0),this.moversContainer.style.transform=`matrix(${e}, 0, 0, ${e}, ${this.zoomSwipeX}, ${this.zoomSwipeY})`,this.zoomElements.btnOut.classList.toggle("inactive",.5===e),this.zoomElements.btnIn.classList.toggle("inactive",4===e),this.toggleZoom(1!==e)},this.onClick=e=>{if(this.setMoverAnimationPromise)return;const t=e.target;if("A"===t.tagName)return;if(Object(c.a)(e),pe.IS_TOUCH_SUPPORTED)return this.highlightSwitchersTimeout?clearTimeout(this.highlightSwitchersTimeout):this.wholeDiv.classList.add("highlight-switchers"),void(this.highlightSwitchersTimeout=window.setTimeout(()=>{this.wholeDiv.classList.remove("highlight-switchers"),this.highlightSwitchersTimeout=0},3e3));const s=this.isZooming();let i=null;const n=["ckin__player","media-viewer-buttons","media-viewer-author","media-viewer-caption","zoom-container"];s&&n.push("media-viewer-movers"),n.find(e=>{try{if(i=Object(Ce.a)(t,e),i)return!0}catch(e){return!1}}),i&&(s||"IMG"!==t.tagName&&"image"!==t.tagName)||this.buttons.close.click()},this.onKeyDown=e=>{if(a.default.overlaysActive>1)return;let t=!0;"ArrowRight"===e.key?this.buttons.next.click():"ArrowLeft"===e.key?this.buttons.prev.click():"-"===e.key||"="===e.key?this.ctrlKeyDown&&this.changeZoom("="===e.key):t=!1,(e.ctrlKey||e.metaKey)&&(this.ctrlKeyDown=!0),t&&Object(c.a)(e)},this.onKeyUp=e=>{a.default.overlaysActive>1||e.ctrlKey||e.metaKey||(this.ctrlKeyDown=!1,this.isZooming()&&this.setZoomValue())},this.onWheel=e=>{if(!(a.default.overlaysActive>1||Object(Ce.a)(e.target,"media-viewer-caption")&&!this.ctrlKeyDown)&&(Object(c.a)(e),this.ctrlKeyDown)){const t=e.deltaY<0;this.changeZoom(!!t)}},this.log=Object(J.b)("AMV"),this.preloader=new ye.a,this.preloaderStreamable=new ye.a({cancelable:!1,streamable:!0}),this.preloader.construct(),this.preloaderStreamable.construct(),this.lazyLoadQueue=new te.a,this.wholeDiv=document.createElement("div"),this.wholeDiv.classList.add("media-viewer-whole"),this.overlaysDiv=document.createElement("div"),this.overlaysDiv.classList.add("overlays");const s=document.createElement("div");s.classList.add("media-viewer");const i=this.topbar=document.createElement("div");i.classList.add("media-viewer-topbar","media-viewer-appear");const n=document.createElement("div");n.classList.add("media-viewer-topbar-left"),this.buttons["mobile-close"]=N("close",{onlyMobile:!0}),this.author.container=document.createElement("div"),this.author.container.classList.add("media-viewer-author","no-select");const o=document.createElement("div");this.author.avatarEl=new ko,this.author.avatarEl.classList.add("media-viewer-userpic","avatar-44"),this.author.nameEl=document.createElement("div"),this.author.nameEl.classList.add("media-viewer-name"),this.author.date=document.createElement("div"),this.author.date.classList.add("media-viewer-date"),o.append(this.author.nameEl,this.author.date),this.author.container.append(this.author.avatarEl,o);const r=document.createElement("div");r.classList.add("media-viewer-buttons"),t.concat(["download","zoom","close"]).forEach(e=>{const t=N(e,{noRipple:!0});this.buttons[e]=t,r.append(t)}),this.buttons.zoom.classList.add("zoom-in"),this.zoomElements.container=document.createElement("div"),this.zoomElements.container.classList.add("zoom-container"),this.zoomElements.btnOut=N("zoomout",{noRipple:!0}),this.zoomElements.btnOut.addEventListener("click",()=>this.changeZoom(!1)),this.zoomElements.btnIn=N("zoomin",{noRipple:!0}),this.zoomElements.btnIn.addEventListener("click",()=>this.changeZoom(!0)),this.zoomElements.rangeSelector=new Le({step:.5,min:.5,max:4,withTransition:!0},1),this.zoomElements.rangeSelector.setListeners(),this.zoomElements.rangeSelector.setHandlers({onScrub:this.setZoomValue,onMouseUp:()=>this.setZoomValue()}),this.zoomElements.container.append(this.zoomElements.btnOut,this.zoomElements.rangeSelector.container,this.zoomElements.btnIn),this.wholeDiv.append(this.zoomElements.container),this.content.main=document.createElement("div"),this.content.main.classList.add("media-viewer-content"),this.content.container=document.createElement("div"),this.content.container.classList.add("media-viewer-container"),this.content.media=document.createElement("div"),this.content.media.classList.add("media-viewer-media"),this.content.container.append(this.content.media),this.content.main.append(this.content.container),s.append(this.content.main),this.overlaysDiv.append(s),n.append(this.buttons["mobile-close"],this.author.container),i.append(n,r),this.buttons.prev=document.createElement("div"),this.buttons.prev.className="media-viewer-switcher media-viewer-switcher-left",this.buttons.prev.innerHTML='',this.buttons.next=document.createElement("div"),this.buttons.next.className="media-viewer-switcher media-viewer-switcher-right",this.buttons.next.innerHTML='',this.moversContainer=document.createElement("div"),this.moversContainer.classList.add("media-viewer-movers"),this.wholeDiv.append(this.overlaysDiv,this.buttons.prev,this.buttons.next,this.topbar,this.moversContainer),this.setNewMover()}get target(){return this.listLoader.current}set target(e){this.listLoader.current=e}setListeners(){if(this.buttons.download.addEventListener("click",this.onDownloadClick),[this.buttons.close,this.buttons["mobile-close"],this.preloaderStreamable.preloader].forEach(e=>{e.addEventListener("click",this.close.bind(this))}),[[-1,this.buttons.prev],[1,this.buttons.next]].forEach(([e,t])=>{t.addEventListener("click",t=>{Object(c.a)(t),this.setMoverPromise||this.listLoader.go(e)})}),this.buttons.zoom.addEventListener("click",()=>{this.isZooming()?this.toggleZoom(!1):this.changeZoom(!0)}),this.wholeDiv.addEventListener("click",this.onClick),this.listLoader.onJump=(e,t)=>{t?this.onNextClick(e):this.onPrevClick(e)},pe.IS_TOUCH_SUPPORTED){new zt({element:this.wholeDiv,onSwipe:(e,t)=>{if(Pe.isFullScreen())return;if(Math.abs(e)/yt.a.windowW>.2||e>125)return e<0?this.buttons.prev.click():this.buttons.next.click(),!0;return(Math.abs(t)/yt.a.windowH>.2||t>125)&&(this.buttons.close.click(),!0)},verifyTouchTarget:e=>"INPUT"!==e.target.tagName&&!Object(Ce.a)(e.target,"media-viewer-caption")})}}toggleZoom(e){const t=this.isZooming();if((this.zoomElements.rangeSelector.mousedown||this.ctrlKeyDown)&&(e=!0),t===e)return;void 0===e&&(e=!t),this.buttons.zoom.classList.toggle("zoom-in",!e),this.zoomElements.container.classList.toggle("is-visible",e);const s=e?this.zoomElements.rangeSelector.value:1;if(this.setZoomValue(s),this.zoomElements.rangeSelector.setProgress(s),this.videoPlayer&&this.videoPlayer.lockControls(!e&&void 0),e){if(this.zoomSwipeHandler)this.zoomSwipeHandler.setListeners();else{let e,t;const s=-1;this.zoomSwipeHandler=new zt({element:this.moversContainer,onFirstSwipe:()=>{e=t=0,this.moversContainer.classList.add("no-transition")},onSwipe:(i,n)=>{[i,n]=[i*s,n*s],this.zoomSwipeX+=i-e,this.zoomSwipeY+=n-t,[e,t]=[i,n],this.setZoomValue()},onReset:()=>{this.moversContainer.classList.remove("no-transition")},cursor:"move"})}this.zoomElements.rangeSelector.setProgress(s)}else e||this.zoomSwipeHandler.removeListeners()}changeZoom(e){this.zoomElements.rangeSelector.addProgress(.5*(e?1:-1)),this.setZoomValue()}isZooming(){return this.zoomElements.container.classList.contains("is-visible")}setBtnMenuToggle(e){const t=Ie({onlyMobile:!0},"bottom-left",e);this.topbar.append(t)}close(e){var t;if(e&&Object(c.a)(e),this.setMoverAnimationPromise)return Promise.reject();B.a.removeByType("media"),this.lazyLoadQueue.clear();const s=this.setMoverToTarget(null===(t=this.target)||void 0===t?void 0:t.element,!0).then(({onAnimationEnd:e})=>e);return this.listLoader.reset(),this.listLoader.cleanup&&this.listLoader.cleanup(),this.setMoverPromise=null,this.tempId=-1,window.appMediaViewer=void 0,this.zoomSwipeHandler&&(this.zoomSwipeHandler.removeListeners(),this.zoomSwipeHandler=void 0),window.removeEventListener("keydown",this.onKeyDown),window.removeEventListener("keyup",this.onKeyUp),window.removeEventListener("wheel",this.onWheel,{capture:!0}),s.finally(()=>{this.wholeDiv.remove(),a.default.isOverlayActive=!1,I.a.checkAnimations(!1)}),s}setMoverToTarget(e,t=!1,s=0){return go(this,void 0,void 0,(function*(){this.dispatchEvent("setMoverBefore");const i=this.content.mover;t||(i.innerHTML="");const n=this.isZooming()&&t?this.zoomElements.rangeSelector.value:1;this.removeCenterFromMover(i);const o=0!==s,r=a.default.settings.animationsEnabled?o?350:200:0;let l,c;e&&(e instanceof ko||e.classList.contains("grid-item")?(l=e,c=e.getBoundingClientRect()):e instanceof SVGImageElement||e.parentElement instanceof SVGForeignObjectElement?(l=Object(Ce.a)(e,"attachment"),c=l.getBoundingClientRect()):e.classList.contains("profile-avatars-avatar")&&(l=Object(Ce.a)(e,"profile-avatars-container"),c=l.getBoundingClientRect(),t&&e.getBoundingClientRect().left!==c.left&&(e=l=c=void 0))),e||(e=this.content.media),c||(l=e.parentElement,c=e.getBoundingClientRect());let d=!1;if(e!==this.content.media&&!e.classList.contains("profile-avatars-avatar")){const s=function(e,t){const s=e.getBoundingClientRect(),i=t.getBoundingClientRect();let{top:n,bottom:a}=i;const o=t.querySelector(".sticky");if(o){n=o.getBoundingClientRect().bottom}if(s.top>=a||s.bottom<=n||s.right<=i.left||s.left>=i.right)return null;const r={top:!1,right:!1,bottom:!1,left:!1,vertical:0,horizontal:0},l="visualViewport"in window?window.visualViewport:window,c=(l.width||l.innerWidth,l.height||l.innerHeight);return{rect:{top:s.topa&&a!==c?(r.bottom=!0,++r.vertical,a):s.bottom,left:0},overflow:r}}(l,Object(Ce.a)(l,"scrollable"));!t||s&&2!==s.overflow.vertical&&2!==s.overflow.horizontal?!s||1!==s.overflow.vertical&&1!==s.overflow.horizontal||(d=!0):(l=(e=this.content.media).parentElement,c=e.getBoundingClientRect())}const h=this.content.media.getBoundingClientRect();let u,p,m,g="";if(o?(u=1===s?yt.a.windowW:-h.width,p=h.top):(u=c.left,p=c.top),g+=`translate3d(${u}px,${p}px,0) `,e instanceof HTMLImageElement||e instanceof HTMLVideoElement||"DIV"===e.tagName){if(i.firstElementChild&&i.firstElementChild.classList.contains("media-viewer-aspecter")){m=i.firstElementChild;const e=m.querySelector(".ckin__player");if(e){const t=e.firstElementChild;m.append(t),e.remove()}m.style.cssText||(i.classList.remove("active"),this.setFullAspect(m,h,c),i.offsetLeft,i.classList.add("active"))}else m=document.createElement("div"),m.classList.add("media-viewer-aspecter"),i.prepend(m);m.style.cssText=`width: ${c.width}px; height: ${c.height}px; transform: scale3d(${h.width/c.width}, ${h.height/c.height}, 1);`}i.style.width=h.width+"px",i.style.height=h.height+"px";const b=c.width/h.width,v=c.height/h.height;o||(g+=`scale3d(${b},${v},1) `);let f=window.getComputedStyle(l).getPropertyValue("border-radius");const y=function(e){let t=e.split(" ");if(4!==t.length){t[0]||(t[0]="0px");for(let e=t.length;e<4;++e)t[e]=t[e%2]||t[0]||"0px"}return t}(f);if(f=y.map(e=>parseInt(e)/b+"px").join(" "),o||(i.style.borderRadius=f),t&&1!==n){const e=yt.a.windowW/2-c.width/2,t=yt.a.windowH/2-c.height/2,s=c.left-e,i=c.top-t;this.moversContainer.style.transform=`matrix(${b}, 0, 0, ${v}, ${s}, ${i})`}else i.style.transform=g;let w;d&&(i.style.opacity="0");const L=e.classList.contains("is-out"),S=this.setMoverAnimationPromise=Object(oe.a)(),E={onAnimationEnd:S},M=setTimeout(()=>{S.isFulfilled||S.isRejected||S.resolve()},1e3);if(S.finally(()=>{this.dispatchEvent("setMoverAfter"),this.setMoverAnimationPromise===S&&(this.setMoverAnimationPromise=null),clearTimeout(M)}),t)return e instanceof SVGSVGElement&&(w=i.querySelector("path"),w&&this.sizeTailPath(w,h,b,r,!1,L,f)),e.classList.contains("media-viewer-media")&&i.classList.add("hiding"),this.wholeDiv.classList.add("backwards"),setTimeout(()=>{this.wholeDiv.classList.remove("active")},0),setTimeout(()=>{i.style.borderRadius=f,i.firstElementChild&&(i.firstElementChild.style.borderRadius=f)},r/2),setTimeout(()=>{i.innerHTML="",i.classList.remove("moving","active","hiding"),i.style.cssText="display: none;",S.resolve()},r),i.classList.remove("opening"),E;{let t,s;if(e instanceof HTMLVideoElement){const t=Array.from(e.parentElement.querySelectorAll("img"));t.length&&(e=t.pop())}if("DIV"===e.tagName||"AVATAR-ELEMENT"===e.tagName){const n=Array.from(e.querySelectorAll("img")).pop();n&&(t=new Image,s=n.src,i.append(t))}else if(e instanceof HTMLImageElement)t=new Image,s=e.src;else if(e instanceof HTMLVideoElement)t=document.createElement("video"),t.src=e.src;else if(e instanceof SVGSVGElement){const t=e.dataset.clipId,s=t+"-mv",{width:n,height:a}=h,o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.setAttributeNS(null,"width",""+n),o.setAttributeNS(null,"height",""+a),o.setAttributeNS(null,"viewBox",`0 0 ${n} ${a}`),o.setAttributeNS(null,"preserveAspectRatio","xMidYMid meet"),o.insertAdjacentHTML("beforeend",e.firstElementChild.outerHTML.replace(t,s)),o.insertAdjacentHTML("beforeend",e.lastElementChild.outerHTML.replace(t,s));const r=o.firstElementChild,l=r.firstElementChild.firstElementChild;if(l instanceof SVGUseElement){let e,t=l.getAttributeNS(null,"transform");t=t.replace(/translate\((.+?), (.+?)\) scale\((.+?), (.+?)\)/,(e,t,s,i,o)=>`translate(${t=2!==(t=+t)?n-2/b:2/b}, ${a}) scale(${+i/b}, ${+o/v})`),l.setAttributeNS(null,"transform",t),w=r.firstElementChild.lastElementChild;const s=f.split(" ").map(e=>parseInt(e));e=L?io(0,0,n-9/b,a,...s):io(9/b,0,n-9/b,a,...s),w.setAttributeNS(null,"d",e)}const c=o.lastElementChild;c.setAttributeNS(null,"width",""+h.width),c.setAttributeNS(null,"height",""+h.height),i.prepend(o)}m&&(m.style.borderRadius=f,t&&m.append(t)),t=i.querySelector("video, img"),t instanceof HTMLImageElement&&(t.classList.add("thumbnail"),m||(t.style.width=h.width+"px",t.style.height=h.height+"px"),s&&(yield Object(Rt.b)(t,s))),i.style.display="",Object(_e.b)(()=>{i.classList.add(o?"moving":"active")})}return i.classList.add("opening"),yield Object(_e.a)(),i.style.transform=`translate3d(${h.left}px,${h.top}px,0) scale3d(1,1,1)`,d&&(i.style.opacity=""),m&&this.setFullAspect(m,h,c),setTimeout(()=>{i.style.borderRadius="",i.firstElementChild&&(i.firstElementChild.style.borderRadius="")},0),i.dataset.timeout=""+setTimeout(()=>{i.classList.remove("moving","opening"),m&&(i.querySelector("video"),i.classList.remove("active"),m.style.cssText="",i.offsetLeft),i.classList.add("center","no-transition"),i.classList.add("active"),delete i.dataset.timeout,S.resolve()},r),w&&this.sizeTailPath(w,h,b,r,!0,L,f),E}))}setFullAspect(e,t,s){const i=t.width/t.height;let{width:n,height:a}=s;i>0?n=a*i:a=n*i,e.style.cssText=`width: ${n}px; height: ${a}px; transform: scale3d(${t.width/n}, ${t.height/a}, 1);`}sizeTailPath(e,t,s,i,n,a,o){const r=Date.now(),{width:l,height:c}=t;i/=2;const d=o.split(" ").map(e=>parseInt(e)),h=()=>{const t=Date.now()-r;let o=i?t/i:1;o>1&&(o=1),n&&(o=1-o);const u=d.map(e=>e*o);let p;p=a?io(0,0,l-9/s*o,c,...u):io(9/s*o,0,l,c,...u),e.setAttributeNS(null,"d",p),t{const a=t?-i.width:s;return e.replace(n,a+"px")});e.style.transform=n,setTimeout(()=>{e.remove()},350)}setNewMover(){const e=document.createElement("div");if(e.classList.add("media-viewer-mover"),e.style.display="none",this.content.mover){this.content.mover.parentElement.append(e)}else this.moversContainer.append(e);return this.content.mover=e}updateMediaSource(e,t,s){const i=e.tagName.toLowerCase()===s?e:e.querySelector(s);if(i){if(!e.classList.contains("document-ico")&&Object(Ce.a)(e,"attachment")){const t=e.parentElement.parentElement.querySelector(".preloader-container");if(t){if("video"===s)return void(t.classList.contains("manual")&&t.click());t.remove()}}Object(Rt.a)(i,t),i.classList.contains("thumbnail")&&i.parentElement.classList.contains("media-container-aspecter")&&i.classList.remove("thumbnail")}}setAuthorInfo(e,t){Object(x.a)(this.author.date,Object(re.c)(t)),Object(x.a)(this.author.nameEl,new ft.a({peerId:e,dialog:!1,onlyFirstName:!1,plainText:!1}).element);let s=this.author.avatarEl;this.author.avatarEl=this.author.avatarEl.cloneNode(),this.author.avatarEl.setAttribute("peer",""+(e||a.default.myId)),s.parentElement.replaceChild(this.author.avatarEl,s)}_openMedia(e,t,s,i,n,o=!1,l=[],c=[],d){return go(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;this.setAuthorInfo(s,t);const u="document"===e._,p=u&&e.mime_type&&(["video","gif"].includes(e.type)||0===e.mime_type.indexOf("video/"));this.isFirstOpen&&(this.isFirstOpen=!1,this.listLoader.setTargets(l,c,o),window.appMediaViewer=this),this.buttons.prev.classList.toggle("hide",!this.listLoader.previous.length),this.buttons.next.classList.toggle("hide",!this.listLoader.next.length);const m=this.content.media,g=!n||n===m;g&&(n=m),this.target={element:n};const b=++this.tempId;m.firstElementChild&&(m.innerHTML="");if(0!==i)this.moveTheMover(this.content.mover,1===i),this.setNewMover();else{window.addEventListener("keydown",this.onKeyDown),window.addEventListener("keyup",this.onKeyUp),pe.IS_TOUCH_SUPPORTED||window.addEventListener("wheel",this.onWheel,{passive:!1,capture:!0});const e=document.getElementById("main-columns");this.pageEl.insertBefore(this.wholeDiv,e),this.wholeDiv.offsetLeft,this.wholeDiv.classList.add("active"),a.default.isOverlayActive=!0,I.a.checkAnimations(!0),h.IS_MOBILE_SAFARI||B.a.pushItem({type:"media",onPop:e=>{if(this.setMoverAnimationPromise)return!1;this.close()}})}const f=this.content.mover,y=yt.a.windowW;let w=0;const L=yt.a.windowH;L<1e6&&!v.b.isMobile&&(w=120);const S=L-120-w;let E=Promise.resolve();const C=r.a.setAttachmentSize(e,m,y,S,!v.b.isMobile,void 0,!!(u&&e.w&&e.h)).photoSize;if(g){const t=he.a.getCacheContext(e,C.type);let s;if(t.downloaded)s=new Image,s.src=t.url;else{const i=r.a.getStrippedThumbIfNeeded(e,t,!0);i&&(E=i.loadPromise,s=i.image)}s&&(s.classList.add("thumbnail"),m.append(s))}const k=!(!u||!e.supportsStreaming),T=k?this.preloaderStreamable:this.preloader;let P;if(p){const t=d&&"gif"!==e.type,s=document.createElement("video"),a=()=>this.setMoverToTarget(n,!1,i).then(({onAnimationEnd:i})=>{const a=f.firstElementChild&&f.firstElementChild.classList.contains("media-viewer-aspecter")?f.firstElementChild:f,o=f.querySelector("video");o&&o.remove(),s.setAttribute("playsinline","true"),s.addEventListener("timeupdate",()=>{this.tempId!==b&&s.pause()}),s.addEventListener("error",()=>{4!==s.error.code&&this.log.error("Error "+s.error.code+"; details: "+s.error.message),T&&T.detach()},{once:!0}),this.addEventListener("setMoverAfter",()=>{s.src="",s.load()},{once:!0}),h.IS_SAFARI&&(s.autoplay=!0),"gif"===e.type&&(s.muted=!0,s.autoplay=!0,s.loop=!0),a.append(s);const r=new Promise(e=>{s.addEventListener("canplay",e,{once:!0})}),l=()=>{"gif"!==e.type&&(s.dataset.ckin="default",s.dataset.overlay="1",Promise.all([r,i]).then(()=>{if(this.tempId!==b)return;(this.videoPlayer=new Pe(s,!0,k)).addEventListener("toggleControls",e=>{this.wholeDiv.classList.toggle("has-video-controls",e)}),this.addEventListener("setMoverBefore",()=>{this.wholeDiv.classList.remove("has-video-controls"),this.videoPlayer.removeListeners(),this.videoPlayer=void 0},{once:!0}),this.isZooming()&&this.videoPlayer.lockControls(!1)}))};if(k){i.then(()=>{s.readyState{s.addEventListener("canplay",()=>{T.detach(),s.parentElement.classList.remove("is-buffering")},{once:!0})};s.addEventListener("waiting",()=>{const t=s.networkState===s.NETWORK_LOADING,i=s.readyState{const o=he.a.getCacheContext(e),r=k?Promise.resolve():M.a.downloadDoc(e);return k||i.then(()=>{o.url||T.attach(f,!0,r)}),Promise.all([r,i]).then(()=>{if(this.tempId!==b)return void this.log.warn("media viewer changed video");if(t){const e=fe.setSingleMedia(s,d);this.addEventListener("setMoverBefore",()=>{e()},{once:!0})}const e=o.url;n instanceof SVGSVGElement?a.firstElementChild.lastElementChild.append(s):Object(Rt.a)(s,e),this.updateMediaSource(n,e,"video"),l()}),r}})});P=E.then(a)}else{const t=()=>this.setMoverToTarget(n,!1,i).then(({onAnimationEnd:t})=>{this.lazyLoadQueue.unshift({load:()=>{const s=he.a.getCacheContext(e,C.type),i=u?M.a.downloadDoc(e):r.a.preloadPhoto(e,C);return t.then(()=>{s.url||this.preloader.attachPromise(i)}),Promise.all([t,i]).then(()=>{var e;if(this.tempId!==b)return void this.log.warn("media viewer changed photo");const t=s.url;if(n instanceof SVGSVGElement){if(this.updateMediaSource(n,t,"img"),this.updateMediaSource(f,t,"img"),v.b.isMobile){const e=f.querySelectorAll("img");e&&e.length&&e.forEach(e=>{e.classList.remove("thumbnail")})}}else{const s=f.firstElementChild&&f.firstElementChild.classList.contains("media-viewer-aspecter")?f.firstElementChild:f,i="IMG"===(null===(e=s.firstElementChild)||void 0===e?void 0:e.tagName)?s.firstElementChild:null;if(!i||i.src!==t){let e=new Image;e.classList.add("thumbnail"),Object(Rt.a)(e,t,()=>{this.updateMediaSource(n,t,"img"),i&&Object(_e.b)(()=>{i.remove()}),s.append(e)})}}}).catch(e=>{this.log.error(e),this.preloader.attach(f),this.preloader.setManual()}),i}})});P=E.then(t)}return this.setMoverPromise=P.catch(()=>{this.setMoverAnimationPromise=null}).finally(()=>{this.setMoverPromise=null})}))}}var vo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class fo extends bo{constructor(){let e;super(new E({processItem:e=>{const t="inputMessagesFilterDocument"===this.searchContext.inputFilter._,{mid:s,peerId:n}=e,a=i.a.getMediaFromMessage(e);if(a&&(!t||fo.isMediaCompatibleForDocumentViewer(a)))return{element:null,mid:s,peerId:n}}}),["delete","forward"]),this.onPrevClick=e=>{this.openMedia(this.getMessageByPeer(e.peerId,e.mid),e.element,-1)},this.onNextClick=e=>{this.openMedia(this.getMessageByPeer(e.peerId,e.mid),e.element,1)},this.onDeleteClick=()=>{const e=this.target;new Bs(e.peerId,[e.mid],"chat",()=>{this.target={element:this.content.media},this.close()})},this.onForwardClick=()=>{const e=this.target;e.mid&&new Ds({[e.peerId]:[e.mid]},()=>this.close())},this.onAuthorClick=e=>{const{mid:t,peerId:s}=this.target;if(t&&t!==Number.MAX_SAFE_INTEGER){const i=this.searchContext.threadId;this.close(e).then(()=>{if(v.b.isMobile){const e=$t.getTab(qt);e&&e.close()}const e=this.getMessageByPeer(s,t);mo.setInnerPeer(e.peerId,t,i?"discussion":void 0,i)})}},this.onDownloadClick=()=>{const{peerId:e,mid:t}=this.target,s=this.getMessageByPeer(e,t);if(s.media.photo)r.a.savePhotoFile(s.media.photo,mo.chat.bubbles.lazyLoadQueue.queueId);else{let e=null;e=s.media.webpage?s.media.webpage.document:s.media.document,e&&M.a.saveDocFile(e,mo.chat.bubbles.lazyLoadQueue.queueId)}},this.listLoader.onEmptied=()=>{this.close()},this.content.caption=document.createElement("div"),this.content.caption.classList.add("media-viewer-caption");const t=()=>{e&&clearTimeout(e),e=window.setTimeout(()=>{e=void 0,this.content.caption.classList.remove("is-focused")},800)};this.content.caption.addEventListener("touchstart",()=>{v.b.isMobile&&(this.content.caption.classList.add("is-focused"),e&&(clearTimeout(e),e=void 0),document.addEventListener("touchend",t,{once:!0}))});new P.b(this.content.caption).onAdditionalScroll=t,this.wholeDiv.append(this.content.caption),Object(l.b)(this.buttons.delete,this.onDeleteClick);const s=[{icon:"forward",text:"Forward",onClick:this.onForwardClick},{icon:"download",text:"MediaViewer.Context.Download",onClick:this.onDownloadClick},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick}];this.setBtnMenuToggle(s),this.btnMenuDelete=s[s.length-1].element,this.setListeners()}get searchContext(){return this.listLoader.searchContext}setListeners(){super.setListeners(),this.buttons.forward.addEventListener("click",this.onForwardClick),this.author.container.addEventListener("click",this.onAuthorClick);const e=t=>{if(t.target instanceof HTMLAnchorElement){const s=t.target.getAttribute("onclick");if(!s||s.includes("showMaskedAlert"))return;return Object(c.a)(t),this.close().then(()=>{this.content.caption.removeEventListener("click",e,{capture:!0}),t.target.click()}),!1}};this.content.caption.addEventListener("click",e,{capture:!0})}getMessageByPeer(e,t){return this.searchContext.isScheduled?i.a.getScheduledMessageByPeer(e,t):i.a.getMessageByPeer(e,t)}setCaption(e){const t=e.message;let s="";t&&(s=Z.b.wrapRichText(t,{entities:e.totalEntities})),b(this.content.caption.firstElementChild,s),this.content.caption.classList.toggle("hide",!t)}setSearchContext(e){return this.listLoader.setSearchContext(e),this}openMedia(e,t,s=0,n=!1,a=[],o=[]){const r=Object.create(null,{_openMedia:{get:()=>super._openMedia}});return vo(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;const l=e.mid,c=e.fromId,d=i.a.getMediaFromMessage(e);this.buttons.forward.classList.toggle("hide","messageService"===e._);const h=i.a.canDeleteMessage(e);[this.buttons.delete,this.btnMenuDelete].forEach(e=>{e.classList.toggle("hide",!h)}),this.setCaption(e);const u=r._openMedia.call(this,d,e.date,c,s,t,n,a,o,e);return this.target.mid=l,this.target.peerId=e.peerId,u}))}static isMediaCompatibleForDocumentViewer(e){return"photo"===e._||g.has(e.mime_type)}}class yo extends S{constructor(e){super(Object.assign(Object.assign({},e),{loadMore:(e,t,s)=>{if(this.peerId<0||!t)return Promise.resolve({count:0,items:[]});const i=null==e?void 0:e.photoId;return r.a.getUserPhotos(this.peerId,i,s).then(e=>{const t=e.photos.map(e=>({element:null,photoId:e}));return{count:e.count,items:t}})}})),this.loadedAllUp=!0,this.peerId=e.peerId}}var wo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class Lo extends bo{constructor(e){super(new yo({peerId:e}),[]),this.onPrevClick=e=>{this.openMedia(e.photoId,e.element,-1)},this.onNextClick=e=>{this.openMedia(e.photoId,e.element,1)},this.onDownloadClick=()=>{r.a.savePhotoFile(r.a.getPhoto(this.target.photoId),mo.chat.bubbles.lazyLoadQueue.queueId)},this.peerId=e,this.setBtnMenuToggle([{icon:"download",text:"MediaViewer.Context.Download",onClick:this.onDownloadClick}]),this.setListeners()}openMedia(e,t,s=0,i,n){const a=Object.create(null,{_openMedia:{get:()=>super._openMedia}});return wo(this,void 0,void 0,(function*(){if(this.setMoverPromise)return this.setMoverPromise;const o=r.a.getPhoto(e),l=a._openMedia.call(this,o,o.date,this.peerId,s,t,!1,i,n);return this.target.photoId=o.id,l}))}}var So=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};const Eo=e=>{d.a.removeFromAvatarsCache(e),Array.from(document.querySelectorAll('avatar-element[peer="'+e+'"]')).forEach(e=>{e.update()})};function Mo(e,t,s,a,o,l){return So(this,void 0,void 0,(function*(){let c=yield n.default.getFullPhoto(t);if(!s()||!c)return;const d=()=>Array.from(e.querySelectorAll("img")).find(e=>!e.classList.contains("emoji"))?e:null;if(t<0){const e=!!a,n="inputMessagesFilterChatPhotos";if(!a&&(a=yield i.a.getSearch({peerId:t,inputFilter:{_:n},maxId:0,limit:1}).then(e=>e.history[0]),!s()))return;if(a){a.action.photo.id!==c.id&&(e||(a=i.a.generateFakeAvatarMessage(t,c)));const s=e=>e.map(e=>({element:e.element,mid:e.item.mid,peerId:e.item.peerId}));return void(new fo).setSearchContext({peerId:t,inputFilter:{_:n}}).openMedia(a,d(),void 0,void 0,o?s(o):void 0,l?s(l):void 0)}}if(c){"string"==typeof a&&(c=r.a.getPhoto(a));const e=e=>e.map(e=>({element:e.element,photoId:e.item}));new Lo(t).openMedia(c.id,d(),void 0,o?e(o):void 0,l?e(l):void 0)}}))}a.default.addEventListener("avatar_update",Eo),a.default.addEventListener("peer_title_edit",e=>{d.a.isAvatarCached(e)||Eo(e)});const Io=new Map,Co=new Set;class ko extends HTMLElement{constructor(){super(...arguments),this.isDialog=!1,this.addedToQueue=!1}connectedCallback(){if(this.isDialog="1"===this.getAttribute("dialog"),""===this.getAttribute("clickable")){this.setAttribute("clickable","set");let e=!1;Object(l.b)(this,t=>So(this,void 0,void 0,(function*(){if(Object(c.a)(t),e)return;const s=this.peerId;e=!0,yield Mo(this,this.peerId,()=>this.peerId===s),e=!1})))}}disconnectedCallback(){const e=Io.get(this.peerId);e&&e.has(this)&&(e.delete(this),e.size||Io.delete(this.peerId)),this.lazyLoadQueue&&this.lazyLoadQueue.unobserve(this)}static get observedAttributes(){return["peer","dialog","peer-title"]}attributeChangedCallback(e,t,s){if("peer"===e){if(this.peerId===+s)return;this.peerId=o.a.getPeerMigratedTo(+s)||+s;const e=+t;if(e){const t=Io.get(e);t&&(t.delete(this),t.size||Io.delete(e))}this.update()}else"peer-title"===e?this.peerTitle=s:"dialog"===e&&(this.isDialog="1"===s)}r(e=!1){const t=d.a.putPhoto(this,this.peerId,this.isDialog,this.peerTitle,e),s=t?t.loadPromise:Promise.resolve();return this.loadPromises&&(t&&t.cached&&this.loadPromises.push(s),s.finally(()=>{this.loadPromises=void 0})),t}update(){if(this.lazyLoadQueue){if(!Co.has(this.peerId)){if(this.addedToQueue)return;this.addedToQueue=!0;let e=Io.get(this.peerId);return e||(e=new Set,Io.set(this.peerId,e)),e.add(this),this.r(!0),void this.lazyLoadQueue.push({div:this,load:()=>(Co.add(this.peerId),this.update())})}this.addedToQueue&&this.lazyLoadQueue.unobserve(this)}Co.add(this.peerId);const e=this.r(),t=e?e.loadPromise:Promise.resolve();this.addedToQueue&&t.finally(()=>{this.addedToQueue=!1});const s=Io.get(this.peerId);if(s){s.delete(this);const e=Array.from(s);Io.delete(this.peerId);for(let t=0,s=e.length;t{let e=i.a.getDialogOnly(this.selectedId);e&&i.a.editPeerFolders([e.peerId],+!e.folder_id)},this.onPinClick=()=>{i.a.toggleDialogPin(this.selectedId,this.filterId).catch(e=>{"PINNED_DIALOGS_TOO_MUCH"===e.type&&(this.filterId>=1?at({langPackKey:"PinFolderLimitReached"}):new ht("pinned-dialogs-too-much",{buttons:[{langKey:"OK",isCancel:!0},{langKey:"FiltersSetupPinAlert",callback:()=>{new Ki(ln).open()}}],descriptionLangKey:"PinToTopLimitReached2",descriptionLangArgs:[Object(A.i18n)("Chats",[a.default.config.pinned_dialogs_count_max])]}).show())})},this.onUnmuteClick=()=>{i.a.mutePeer(this.selectedId,!1)},this.onMuteClick=()=>{i.a.mutePeer(this.selectedId,!0)},this.onUnreadClick=()=>{const e=i.a.getDialogOnly(this.selectedId);e&&(e.unread_count?(i.a.readHistory(this.selectedId,e.top_message),i.a.markDialogUnread(this.selectedId,!0)):i.a.markDialogUnread(this.selectedId))},this.onDeleteClick=()=>{new xt(this.selectedId)},this.onContextMenu=e=>{this.init&&(this.init(),this.init=null);let t=null;try{t=Object(mt.a)(e.target,"LI")}catch(e){}if(t){if(e instanceof MouseEvent&&e.preventDefault(),this.element.classList.contains("active"))return!1;e instanceof MouseEvent&&(e.cancelBubble=!0),this.filterId=Do.filterId,this.selectedId=+t.dataset.peerId,this.dialog=i.a.getDialogOnly(this.selectedId),this.buttons.forEach(e=>{const t=e.verify();e.element.classList.toggle("hide",!t)}),this.buttons[this.buttons.length-1].element.lastChild.replaceWith(Object(A.i18n)(o.a.getDeleteButtonText(this.selectedId))),t.classList.add("menu-open"),Object(se.e)(e,this.element),Object(se.d)(this.element,()=>{t.classList.remove("menu-open"),this.selectedId=this.dialog=this.filterId=void 0})}}}init(){this.buttons=[{icon:"unread",text:"MarkAsUnread",onClick:this.onUnreadClick,verify:()=>{var e;return!!(!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.unread_mark)&&!this.dialog.unread_count)}},{icon:"readchats",text:"MarkAsRead",onClick:this.onUnreadClick,verify:()=>{var e;return!(!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.unread_mark)&&!this.dialog.unread_count)}},{icon:"pin",text:"ChatList.Context.Pin",onClick:this.onPinClick,verify:()=>{var e;return!(this.filterId>1?i.a.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId):!!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.pinned))}},{icon:"unpin",text:"ChatList.Context.Unpin",onClick:this.onPinClick,verify:()=>{var e;return this.filterId>1?i.a.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId):!!(null===(e=this.dialog.pFlags)||void 0===e?void 0:e.pinned)}},{icon:"mute",text:"ChatList.Context.Mute",onClick:this.onMuteClick,verify:()=>this.selectedId!==a.default.myId&&!_t.a.isPeerLocalMuted(this.dialog.peerId)},{icon:"unmute",text:"ChatList.Context.Unmute",onClick:this.onUnmuteClick,verify:()=>this.selectedId!==a.default.myId&&_t.a.isPeerLocalMuted(this.dialog.peerId)},{icon:"archive",text:"Archive",onClick:this.onArchiveClick,verify:()=>0===this.filterId&&this.selectedId!==a.default.myId},{icon:"unarchive",text:"Unarchive",onClick:this.onArchiveClick,verify:()=>1===this.filterId&&this.selectedId!==a.default.myId},{icon:"delete danger",text:"Delete",onClick:this.onDeleteClick,verify:()=>!0}],this.element=Ee(this.buttons),this.element.id="dialogs-contextmenu",this.element.classList.add("contextmenu"),document.getElementById("page-chats").append(this.element)}}var Po,xo;!function(e){e[e.Connected=0]="Connected",e[e.Connecting=1]="Connecting",e[e.Closed=2]="Closed",e[e.TimedOut=3]="TimedOut"}(Po||(Po={}));class Ao{constructor(e){this.hadConnect=!1,this.connecting=!1,this.timedOut=!1,this.updating=!1,this.setConnectionStatus=()=>{sn.a.get("dc").then(e=>{e||(e=tn.a.baseDcId),this.setFirstConnectionTimeout&&(clearTimeout(this.setFirstConnectionTimeout),this.setFirstConnectionTimeout=0);const t=a.default.connectionStatus["NET-"+e],s=t&&t.status===Po.Connected;this.connecting&&s&&Xs.a.forceGetDifference(),s&&!this.hadConnect&&(this.hadConnect=!0),this.timedOut=t&&t.status===Po.TimedOut,this.connecting=!s,this.retryAt=t&&t.retryAt,de.b&&this.log("connecting",this.connecting),this.setState()})},this.setStatusText=(e,t)=>{this.currentLangPackKey!==e&&(this.currentLangPackKey=e,Object(x.a)(this.statusEl,Object(A.i18n)(e,t)),this.statusPreloader.attach(this.statusEl))},this.setState=()=>{const e=Ao.CHANGE_STATE_DELAY;if(this.connecting)if(this.timedOut){const e=this.getA("ConnectionStatus.ForceReconnect",()=>rt.a.forceReconnect());this.setStatusText("ConnectionStatus.TimedOut",[e])}else if(this.hadConnect)if(void 0!==this.retryAt){const e=document.createElement("span"),t=this.retryAt,s=()=>{const s=Date.now();e.innerText=""+Math.round((t-s)/1e3),s>t&&clearInterval(i)},i=setInterval(s,1e3);s();const n=this.getA("ConnectionStatus.Reconnect",()=>rt.a.forceReconnectTimeout());this.setStatusText("ConnectionStatus.ReconnectIn",[e,n])}else this.setStatusText("ConnectionStatus.Reconnecting");else this.setStatusText("ConnectionStatus.Waiting");else this.updating&&this.setStatusText("Updating");de.b&&this.log("setState",this.connecting||this.updating),window.requestAnimationFrame(()=>{this.setStateTimeout&&clearTimeout(this.setStateTimeout);this.setStateTimeout=window.setTimeout(()=>{Object(Xt.a)(this.statusContainer,"is-shown",this.connecting||this.updating,200),this.setStateTimeout=0,de.b&&this.log("setState: isShown:",this.connecting||this.updating)},e)})},this.log=Object(J.b)("CS"),this.statusContainer=document.createElement("div"),this.statusContainer.classList.add("connection-status"),this.statusEl=Object(U.a)("btn-primary bg-warning connection-status-button",{noRipple:!0}),this.statusPreloader=new ye.a({cancelable:!1}),this.statusPreloader.constructContainer({color:"transparent",bold:!0}),this.statusContainer.append(this.statusEl),e.prepend(this.statusContainer),a.default.addEventListener("connection_status_change",e=>{const t=e;console.log(t),this.setConnectionStatus()}),a.default.addEventListener("state_synchronizing",e=>{e||(this.updating=!0,de.b&&this.log("updating",this.updating),this.setState())}),a.default.addEventListener("state_synchronized",e=>{const t=e;de.b&&this.log("state_synchronized",t),t||(this.updating=!1,de.b&&this.log("updating",this.updating),this.setState())}),this.setFirstConnectionTimeout=window.setTimeout(this.setConnectionStatus,Ao.CHANGE_STATE_DELAY+1e3)}getA(e,t){const s=document.createElement("a");return s.classList.add("force-reconnect"),s.append(Object(A.i18n)(e)),s.addEventListener("click",e=>{Object(c.a)(e),t()}),s}}Ao.CHANGE_STATE_DELAY=1e3,function(e){e[e.Error=-1]="Error",e[e.Pending=0]="Pending",e[e.Sent=1]="Sent",e[e.Read=2]="Read"}(xo||(xo={}));var Oo=function(e,t,s,i){return new(s||(s=Promise))((function(n,a){function o(e){try{l(i.next(e))}catch(e){a(e)}}function r(e){try{l(i.throw(e))}catch(e){a(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,r)}l((i=i.apply(e,t||[])).next())}))};class _o extends xs{constructor(e,t){super({getIndex:e=>i.a.getDialogOnly(e)[this.indexKey],onDelete:e=>{e.dom.listEl.remove(),jo.onListLengthChange()},onSort:(e,t)=>{const s=e.dom.listEl.parentElement!==this.list;Ps(e.dom.listEl,this.list,t),s&&jo.onListLengthChange()},onElementCreate:(e,t)=>{const s=t?[]:void 0,{dom:i}=jo.addListDialog({dialog:e.id,loadPromises:s,isBatch:t});return e.dom=i,(null==s?void 0:s.length)&&(e.loadPromises=s,Promise.all(s).finally(()=>{delete e.loadPromises})),e},updateElementWith:_e.c}),this.list=e,this.indexKey=t}clear(){this.list.innerHTML="",super.clear()}}class Fo{constructor(){this.chatsContainer=document.getElementById("chatlist-container"),this.scroll=null,this.log=Object(J.b)("DIALOGS",J.a.Log|J.a.Error|J.a.Warn|J.a.Debug),this.contextMenu=new To,this.sortedLists={},this.scrollables={},this.folders={menu:document.getElementById("folders-tabs"),menuScrollContainer:null,container:document.getElementById("folders-container")},this.filtersRendered={},this.lastActiveElements=new Set,this.offsets={top:0,bottom:0},this.onTabChange=()=>{this.scroll=this.scrollables[this.filterId],this.scroll.loadedAll.top=!0,this.scroll.loadedAll.bottom=!1,this.offsets.top=this.offsets.bottom=0,this.loadDialogsPromise=void 0,this.sortedList=this.sortedLists[this.filterId],this.onChatsScroll()},this._onListLengthChange=()=>{if(this.checkIfPlaceholderNeeded(),this.filterId>0)return;const e=this.chatList,t=e.childElementCount,s=e.parentElement.parentElement,i=e.parentElement.nextElementSibling,n=!!i.childElementCount;if(t>=10)return void(n&&(s.classList.remove("with-contacts"),i.innerHTML="",this.loadContacts=void 0,this.processContact=void 0));if(n)return;s.classList.add("with-contacts");const a=new nn({name:"Contacts",noDelimiter:!0,fakeGradientDelimiter:!0});a.container.classList.add("hide"),T.a.getContacts(void 0,void 0,"online").then(e=>{const t=new Os({avatarSize:42,new:!0});this.loadContacts=()=>{const s=yt.a.windowH/60|0;e.splice(0,s).filter(this.verifyUserIdForContacts).forEach(e=>{t.add(e)}),e.length||(this.loadContacts=void 0)},this.loadContacts(),this.processContact=e=>{if(e<0)return;const s=this.verifyUserIdForContacts(e),i=t.has(e);!i&&s?t.add(e):i&&!s&&t.delete(e)};const s=t.list;s.classList.add("chatlist-new"),this.setListClickListener(s),a.content.append(s),a.container.classList.remove("hide")}),i.append(a.container)},this.verifyUserIdForContacts=e=>!i.a.getDialogOnly(e),this.onChatsRegularScroll=()=>{this.sliceTimeout&&clearTimeout(this.sliceTimeout),this.sliceTimeout=window.setTimeout(()=>{this.sliceTimeout=void 0,this.chatList.childElementCount&&!this.processContact&&Object(_e.c)(()=>{const e=performance.now(),t=this.scroll.scrollTop,s=this.chatList.firstElementChild,i=this.scroll.container.getBoundingClientRect(),n=s.getBoundingClientRect(),a=Array.from(this.scroll.splitUp.children);let o=this.scroll.splitUp.offsetTop;o&&t{const t=+e.dataset.peerId;this.deleteDialog(t)}),this.setOffsets(),this.scroll.scrollTop=c.offsetTop-u,this.log("slice time",performance.now()-e)})},200)},this.onChatsScrollTop=()=>{this.onChatsScroll("top")},this.onChatsScroll=(e="bottom")=>{if(!this.scroll.loadedAll[e])return this.loadDialogsPromise?this.loadDialogsPromise:(this.log("onChatsScroll",e),this.loadDialogs(e));this.loadContacts&&this.loadContacts()},this.chatsPreloader=Object(se.f)(null,!0),this.allUnreadCount=this.folders.menu.querySelector(".badge"),this.folders.menuScrollContainer=this.folders.menu.parentElement;const e=document.createElement("div");e.classList.add("connection-status-bottom"),e.append(this.folders.container),pe.IS_TOUCH_SUPPORTED&&_s(this.folders.container,e=>{const t=s.prevId();s(e?t+1:t-1)}),this.setFilterId(0),this.addFilter({id:this.filterId,title:"",titleEl:Object(A.i18n)("ChatList.Filter.AllChats"),orderIndex:0}),this.sortedList=this.sortedLists[this.filterId],this.scroll=this.scrollables[this.filterId],a.default.addEventListener("user_update",e=>{var t;const s=this.getDialogDom(e);if(s&&!T.a.isBot(e)&&e!==a.default.myId){const i="userStatusOnline"===(null===(t=T.a.getUser(e).status)||void 0===t?void 0:t._);s.avatarEl.classList.toggle("is-online",i)}}),a.default.addEventListener("dialog_flush",({peerId:e})=>{const t=i.a.getDialogOnly(e);t&&(this.setLastMessage(t,void 0,void 0,void 0,void 0,void 0,!0),this.validateDialogForFilter(t),this.setFiltersUnreadCount())}),a.default.addEventListener("dialogs_multiupdate",e=>{for(const t in e){const s=e[t];this.updateDialog(s),this.processContact&&this.processContact(+t),this.validateDialogForFilter(s)}this.setFiltersUnreadCount()}),a.default.addEventListener("dialog_drop",({peerId:e})=>{this.deleteDialog(e),this.setFiltersUnreadCount(),this.processContact&&this.processContact(e)}),a.default.addEventListener("dialog_unread",({peerId:e})=>{const t=i.a.getDialogOnly(e);t&&(this.setUnreadMessages(t),this.validateDialogForFilter(t),this.setFiltersUnreadCount())}),a.default.addEventListener("dialog_notify_settings",e=>{this.setUnreadMessages(e)}),a.default.addEventListener("dialog_draft",({dialog:e,drop:t,peerId:s})=>{t?this.sortedList.delete(s):this.updateDialog(e),this.processContact&&this.processContact(s)}),a.default.addEventListener("peer_changed",e=>{for(const t of this.lastActiveElements)+t.dataset.peerId!==e&&(t.classList.remove("active"),this.lastActiveElements.delete(t));Array.from(document.querySelectorAll(`[data-autonomous="0"] li[data-peer-id="${e}"]`)).forEach(e=>{e.classList.add("active"),this.lastActiveElements.add(e)})}),a.default.addEventListener("filter_update",e=>{if(!this.filtersRendered[e.id])return void this.addFilter(e);if(e.id===this.filterId){const t=i.a.dialogsStorage.getFolder(e.id);this.validateListForFilter();for(let e=0,s=t.length;e{const t=this.filtersRendered[e.id];t&&(this.folders.menu.firstElementChild.click(),t.container.remove(),t.menu.remove(),delete this.sortedLists[e.id],delete this.scrollables[e.id],delete this.filtersRendered[e.id],Object.keys(this.filtersRendered).length<=1&&this.folders.menuScrollContainer.classList.add("hide"))}),a.default.addEventListener("filter_order",e=>{const t=this.folders.menu;e.forEach(e=>{const s=i.a.filtersStorage.getFilter(e),n=this.filtersRendered[e];this.sortedLists[e].indexKey=i.a.dialogsStorage.getDialogIndexKey(e),Ps(n.menu,t,s.orderIndex),Ps(n.container,this.folders.container,s.orderIndex)}),this.indexKey=i.a.dialogsStorage.getDialogIndexKey(this.filterId)}),a.default.addEventListener("peer_typings",({peerId:e,typings:t})=>{const s=i.a.getDialogOnly(e);s&&(t.length?this.setTyping(s):this.unsetTyping(s))}),a.default.addEventListener("state_cleared",()=>{k.default.getState().then(e=>{T.a.clear(),G.a.clear();const t=i.a.filtersStorage.filters;for(const e in t)a.default.dispatchEvent("updateDialogFilter",{_:"updateDialogFilter",id:+e});i.a.clear(),this.validateListForFilter(),this.onStateLoaded(e)})});const t=new P.a(this.folders.menuScrollContainer);e.prepend(this.folders.menuScrollContainer);const s=Object(ee.a)(this.folders.menu,this.folders.container,(e,t)=>{e=+t.dataset.filterId||0,this.filterId!==e&&(this.sortedLists[e].clear(),this.setFilterId(e),this.onTabChange())},()=>{for(const e in this.sortedLists)+e!==this.filterId&&this.sortedLists[e].clear()},void 0,t);this.folders.menu.firstElementChild.click(),i.a.construct(),k.default.getState().then(e=>this.onStateLoaded(e)).then(()=>{const e=i.a.dialogsStorage.isDialogsLoaded(0),t=i.a.dialogsStorage.isDialogsLoaded(1),s=e||t,n=e?Promise.resolve():i.a.getConversationsAll("",0),a=t?Promise.resolve():i.a.getConversationsAll("",1);n.finally(()=>{a.then(()=>{this.accumulateArchivedUnread(),s&&(Xs.a.updatesState.syncLoading||Promise.resolve()).then(()=>{i.a.refreshConversations()})})})}),new Ao(this.chatsContainer),this.chatsContainer.append(e),setTimeout(()=>{le.b.loadLottieWorkers()},200),this.onListLengthChange=ot(this._onListLengthChange,100,!1,!0)}get chatList(){return this.sortedList.list}setFilterId(e){this.filterId=e,this.indexKey=i.a.dialogsStorage?i.a.dialogsStorage.getDialogIndexKey(this.filterId):"index",a.default.filterId=e}onStateLoaded(e){return Oo(this,void 0,void 0,(function*(){_t.a.getNotifyPeerTypeSettings();const t=i.a.filtersStorage.getDialogFilters().then(e=>{for(const t of e)this.addFilter(t)});return e.filters&&Object.keys(e.filters).length&&(yield t,this.showFiltersPromise&&(yield this.showFiltersPromise)),k.default.storagesResults.dialogs.length&&Si.a.addMissedDialogs(),this.onChatsScroll()}))}getOffsetIndex(e){return{index:this.scroll.loadedAll[e]?0:this.offsets[e]}}isDialogMustBeInViewport(e){if(void 0!==e.migratedTo||!this.testDialogForFilter(e))return!1;const t=this.getOffsetIndex("top"),s=this.getOffsetIndex("bottom");if(!t.index&&!s.index)return!0;const i=e[this.indexKey];return(!t.index||i<=t.index)&&(!s.index||i>=s.index)}deleteDialog(e){this.sortedList.delete(e)}updateDialog(e){if(!this.isDialogMustBeInViewport(e))return void this.deleteDialog(e.peerId);if(!this.sortedList.has(e.peerId))return void this.sortedList.add(e.peerId);const t=this.getDialogDom(e.peerId);t&&(this.setLastMessage(e,void 0,t,void 0,void 0,void 0,!0),this.sortedList.update(e.peerId))}setFilterUnreadCount(e,t){var s;const n=0===e?this.allUnreadCount:null===(s=this.filtersRendered[e])||void 0===s?void 0:s.unread;if(!n)return;t=t||i.a.dialogsStorage.getFolder(e);let a=0,o=0;t.forEach(t=>{const s=_t.a.isPeerLocalMuted(t.peerId,!0);if(s&&0===e)return;const i=+!!t.unread_count||+t.pFlags.unread_mark||0;s?a+=i:o+=i}),n.classList.toggle("badge-gray",a&&!o);const r=a+o;n.innerText=r?""+r:""}setFiltersUnreadCount(){for(const e in this.filtersRendered)this.setFilterUnreadCount(+e);this.setFilterUnreadCount(0)}validateListForFilter(){const e=i.a.filtersStorage.getFilter(this.filterId);this.sortedList.getAll().forEach(t=>{const s=i.a.getDialogOnly(t.id);this.testDialogForFilter(s,e||null)||this.deleteDialog(t.id)})}validateDialogForFilter(e,t){this.getDialogDom(e.peerId)&&(this.testDialogForFilter(e,t)||this.deleteDialog(e.peerId))}testDialogForFilter(e,t=i.a.filtersStorage.getFilter(this.filterId)){return!(!e||t&&!i.a.filtersStorage.testDialogForFilter(e,t)||!t&&this.filterId!==e.folder_id)}generateScrollable(e,t){const s=new P.b(null,"CL",500);s.container.addEventListener("scroll",this.onChatsRegularScroll),s.container.dataset.filterId=""+t,s.onScrolledTop=this.onChatsScrollTop,s.onScrolledBottom=this.onChatsScroll,s.setVirtualContainer(e);const n=new _o(e,i.a.dialogsStorage?i.a.dialogsStorage.getDialogIndexKey(t):"index");return this.scrollables[t]=s,this.sortedLists[t]=n,s}addFilter(e){if(this.filtersRendered[e.id])return;const t=document.createElement("div");t.classList.add("menu-horizontal-div-item");const s=document.createElement("span"),i=document.createElement("span");i.classList.add("text-super"),e.titleEl?i.append(e.titleEl):i.innerHTML=Z.a.wrapEmojiText(e.title);const n=document.createElement("div");n.classList.add("badge","badge-20","badge-primary");const a=document.createElement("i");s.append(i,n,a),t.append(s),Object(ie.ripple)(t);Ps(t,this.folders.menu,e.orderIndex);const o=this.createChatList(),r=this.generateScrollable(o,e.id);r.container.classList.add("tabs-tab","chatlist-parts");const l=document.createElement("div");l.classList.add("chatlist-top");const c=document.createElement("div");c.classList.add("chatlist-bottom"),l.append(o),r.container.append(l,c);const d=r.container;Ps(r.container,this.folders.container,e.orderIndex),this.setListClickListener(o,null,!0),this.filtersRendered[e.id]={menu:t,container:d,unread:n,title:i},!this.showFiltersPromise&&Object.keys(this.filtersRendered).length>1&&(this.showFiltersPromise=new Promise(e=>{window.setTimeout(()=>{this.showFiltersPromise=void 0,Object.keys(this.filtersRendered).length>1&&(this.folders.menuScrollContainer.classList.remove("hide"),this.setFiltersUnreadCount()),e()},0)}))}loadDialogs(e){if(this.loadDialogsPromise)return this.loadDialogsPromise;const t=new Promise(s=>Oo(this,void 0,void 0,(function*(){const{chatList:n,filterId:a}=this;let o=yt.a.windowH/72*1.25|0,r=0;const{index:l}=this.getOffsetIndex(e);if(l)if("top"===e){const e=i.a.dialogsStorage.getFolder(a,!0),t=e.findIndex(e=>e[this.indexKey]<=l),s=Math.max(0,t-o);o=t-s,r=e[s][this.indexKey]+1}else r=l;try{const s=i.a.getConversations("",r,o,a,!0);if(!s.cached&&!n.childElementCount){n.parentElement.append(this.chatsPreloader)}const l=yield s.promise;if(this.loadDialogsPromise!==t)return;if("bottom"===e?l.isEnd&&(this.scroll.loadedAll[e]=!0):l.isTopEnd&&(this.scroll.loadedAll[e]=!0),l.dialogs.length){const t="top"===e?l.dialogs.slice().reverse():l.dialogs,s=[],i=[],n=e=>{i.push(e)};t.forEach(e=>{const t=this.sortedList.add(e.peerId,!0,n,!1);t.loadPromises&&s.push(...t.loadPromises)}),yield Promise.all(s).finally(),i.forEach(e=>e())}else this.onListLengthChange();const c=l.dialogs["top"===e?0:l.dialogs.length-1];c&&(this.offsets[e]=c[this.indexKey]),this.log.debug("getDialogs "+o+" dialogs by offset:",r,l,n.childElementCount),setTimeout(()=>{this.scroll.onScroll()},0)}catch(e){this.log.error(e)}this.chatsPreloader.parentElement&&this.chatsPreloader.remove(),s()}))).finally(()=>{this.loadDialogsPromise=void 0});return this.loadDialogsPromise=t}generateEmptyPlaceholder(e){const t="empty-placeholder",s=document.createElement("div");s.classList.add(t,t+"-"+e.classNameType);const i=document.createElement("div");i.classList.add(t+"-header"),Object(A._i18n)(i,e.title);const n=document.createElement("div");return n.classList.add(t+"-subtitle"),e.subtitle&&Object(A._i18n)(n,e.subtitle,e.subtitleArgs),s.append(i,n),{container:s,header:i,subtitle:n}}checkIfPlaceholderNeeded(){if(1===this.filterId)return;const e=this.chatList,t=e.parentElement;let s=Array.from(t.children).find(e=>e.matches(".empty-placeholder"));const n=this.scroll.loadedAll.bottom&&!e.childElementCount;if(n&&s)return;if(!n)return void(s&&(t.classList.remove("with-placeholder"),s.remove()));let a;if(this.filterId){a=this.generateEmptyPlaceholder({title:"FilterNoChatsToDisplay",subtitle:"FilterNoChatsToDisplayInfo",classNameType:"folder"}),s=a.container,s.prepend(function({emoji:e,width:t,height:s}){const i=document.createElement("div"),n=hs.getAnimatedEmojiSticker(e);return n?Ls({doc:n,div:i,loop:!1,play:!0,width:t,height:s,emoji:e}).then(()=>{}):i.classList.add("media-sticker-wrapper"),{container:i}}({emoji:"📂",width:128,height:128}).container);const e=Object(U.a)("btn-primary btn-color-primary btn-control tgico",{text:"FilterHeaderEdit",icon:"settings"});Object(l.b)(e,()=>{new Vi(ln).open(i.a.filtersStorage.getFilter(this.filterId))}),s.append(e)}else{a=this.generateEmptyPlaceholder({title:"ChatList.Main.EmptyPlaceholder.Title",classNameType:"dialogs"}),s=a.container;const e=document.createElement("img");e.classList.add("empty-placeholder-dialogs-icon"),Promise.all([T.a.getContacts().then(e=>{let t,s;e.length?(t="ChatList.Main.EmptyPlaceholder.Subtitle",s=[Object(A.i18n)("Contacts.Count",[e.length])]):(t="ChatList.Main.EmptyPlaceholder.SubtitleNoContacts",s=[]);new A.default.IntlElement({key:t,args:s,element:a.subtitle})}),Object(Rt.b)(e,"assets/img/EmptyChats.svg"),Object(_e.d)()]).then(()=>{s.classList.add("visible")}),s.prepend(e)}t.append(s),t.classList.add("with-placeholder")}setOffsets(){const e=this.chatList,t=this.getDialogFromElement(e.firstElementChild),s=this.getDialogFromElement(e.lastElementChild);this.offsets.top=t[this.indexKey],this.offsets.bottom=s[this.indexKey]}getDialogFromElement(e){return i.a.getDialogOnly(+e.dataset.peerId)}setListClickListener(e,t,s=!1,n=!1,a=!1){let o;const r=(a?mo.setInnerPeer:mo.setPeer).bind(mo);e.dataset.autonomous=""+ +n,e.addEventListener("mousedown",e=>{if(0!==e.button)return;this.log("dialogs click list");const s=e.target,i=Object(mt.a)(s,"LI");if(i){if(n){const e=o===i;o&&!e&&o.classList.remove("active"),i&&(i.classList.add("active"),o=i,this.lastActiveElements.add(i))}if(i){t&&t();const e=+i.dataset.peerId,s=+i.dataset.mid||void 0;r(e,s)}else r(0)}},{capture:!0}),de.b&&e.addEventListener("dblclick",e=>{const t=Object(mt.a)(e.target,"LI");if(t){const e=+t.dataset.peerId;this.log("debug dialog:",i.a.getDialogByPeerId(e))}}),s&&Object(se.a)(e,this.contextMenu.onContextMenu)}createChatList(e={}){const t=document.createElement("ul");return t.classList.add("chatlist"),e.new&&t.classList.add("chatlist-new"),t}setLastMessage(e,t,s,n,l,c=!1,d=!1){if(!s&&!(s=this.getDialogDom(e.peerId)))return;let h;if(t||(e.draft&&"draftMessage"===e.draft._&&(h=e.draft),t=i.a.getMessageByPeer(e.peerId,e.top_message)),"messageEmpty"===t._)return s.lastMessageSpan.innerHTML="",s.lastTimeSpan.innerHTML="",delete s.listEl.dataset.mid,void(d&&this.setUnreadMessages(e,s,c));const u=e.peerId;{let e;if(!t.deleted&&!h){const s=i.a.getMediaFromMessage(t);if(s&&("photo"===s._||["video","gif"].includes(s.type))){const i=r.a.choosePhotoSize(s,20,20);if("photoSizeEmpty"!==i._&&(e=document.createElement("div"),e.classList.add("dialog-subtitle-media"),ys({photo:s,message:t,container:e,withoutPreloader:!0,size:i,loadPromises:l}),"video"===s.type)){const t=document.createElement("span");t.classList.add("tgico-play"),e.append(t)}}}const c=!!e&&!!(null==t?void 0:t.message);let d;if(d=n&&t.message?i.a.wrapMessageForReply(t,void 0,void 0,!1,n,c):h?i.a.wrapMessageForReply(h):t.deleted?document.createDocumentFragment():i.a.wrapMessageForReply(t,void 0,void 0,!1,void 0,c),e&&d.prepend(e),Object(x.a)(s.lastMessageSpan,d),h){const e=document.createElement("b");e.classList.add("danger"),e.append(Object(A.i18n)("Draft"),": "),s.lastMessageSpan.prepend(e)}else if(u<0&&u!==t.fromId&&!t.action){const e=o.a.getPeer(t.fromId);if(e&&e.id){const i=document.createElement("b");e.id===a.default.myId?i.append(Object(A.i18n)("FromYou")):i.append(new ft.a({peerId:t.fromId,onlyFirstName:!0}).element),i.append(": "),s.lastMessageSpan.prepend(i)}}}if(!t.deleted||h){const e=h?Math.max(h.date,t.date||0):t.date;Object(x.a)(s.lastTimeSpan,Object(re.b)(new Date(1e3*e)))}else s.lastTimeSpan.textContent="";null!==d&&(d?this.setUnreadMessages(e,s,c):s.listEl.dataset.mid=t.mid)}setUnreadMessages(e,t=this.getDialogDom(e.peerId),s=!1){var n;if(1===e.folder_id&&this.accumulateArchivedUnread(),!t)return;if(!s){const s=_t.a.isPeerLocalMuted(e.peerId,!0);s!==t.listEl.classList.contains("is-muted")&&Object(Xt.a)(t.listEl,"is-muted",s,200)}let o;if("draftMessage"!==(null===(n=e.draft)||void 0===n?void 0:n._)){const t=i.a.getMessageByPeer(e.peerId,e.top_message);!t.deleted&&t.pFlags.out&&t.peerId!==a.default.myId&&(o=t)}!function(e,t,s){let i;if((null==t?void 0:t.pFlags.out)&&(i=t.pFlags.is_outgoing?"sending":t.pFlags.unread?"check":"checks"),!i)return void(e.textContent="");const n="tgico-"+i,a=e.lastElementChild;if(a&&a.classList.contains(n))return;const o=document.createElement("i");o.classList.add("sending-status-icon",n),e.append(o),a&&a.remove()}(t.statusSpan,o);const r=i.a.filtersStorage.getFilter(this.filterId);let l;l=r?-1!==r.pinned_peers.indexOf(e.peerId):!!e.pFlags.pinned;const c=l||!!e.unread_count||e.pFlags.unread_mark,d=Object(us.a)(t.unreadBadge);c&&!d&&t.subtitleEl.append(t.unreadBadge);const h=e.unread_mentions_count>1,u=t.mentionsBadge&&Object(us.a)(t.mentionsBadge);h&&(t.mentionsBadge||(t.mentionsBadge=document.createElement("div"),t.mentionsBadge.className="dialog-subtitle-badge badge badge-24 mention mention-badge",t.mentionsBadge.innerText="@",t.subtitleEl.insertBefore(t.mentionsBadge,t.lastMessageSpan.nextSibling)));const p=s?0:200;if(Object(Xt.a)(t.unreadBadge,"is-visible",c,p,c?void 0:()=>{t.unreadBadge.remove()},d?0:2),t.mentionsBadge&&Object(Xt.a)(t.mentionsBadge,"is-visible",h,p,h?void 0:()=>{t.mentionsBadge.remove(),delete t.mentionsBadge},u?0:2),!c)return;l?t.unreadBadge.classList.add("tgico-chatspinned","tgico"):t.unreadBadge.classList.remove("tgico-chatspinned","tgico");let m=!0,g=!1;e.unread_mentions_count&&1===e.unread_count?(t.unreadBadge.innerText="@",g=!0):e.unread_count||e.pFlags.unread_mark?t.unreadBadge.innerText=""+(e.unread_count||" "):(t.unreadBadge.innerText="",m=!1),t.unreadBadge.classList.toggle("unread",m),t.unreadBadge.classList.toggle("mention",g)}accumulateArchivedUnread(){this.accumulateArchivedTimeout||(this.accumulateArchivedTimeout=window.setTimeout(()=>{this.accumulateArchivedTimeout=0;const e=i.a.dialogsStorage.getFolder(1).reduce((e,t)=>e+t.unread_count,0);a.default.dispatchEvent("dialogs_archived_unread",{count:e})},0))}getDialogDom(e){const t=this.sortedList.get(e);return null==t?void 0:t.dom}getDialog(e){if("number"==typeof e){const t=i.a.getDialogOnly(e);return t||{peerId:e,peer:o.a.getOutputPeer(e),pFlags:{}}}return e}addListDialog(e){const t=this.getDialog(e.dialog);e.autonomous=!1;const s=this.addDialogNew(e);if(s){_t.a.isPeerLocalMuted(t.peerId,!0)&&s.dom.listEl.classList.add("is-muted"),this.setLastMessage(t,void 0,s.dom,void 0,e.loadPromises,e.isBatch,!0)}return s}addDialogNew(e){return this.addDialog(e.dialog,e.container,e.drawStatus,e.rippleEnabled,e.onlyFirstName,e.meAsSaved,e.append,e.avatarSize,e.autonomous,e.lazyLoadQueue,e.loadPromises)}addDialog(e,t,s=!0,i=!0,n=!1,r=!0,l=!0,c=54,d=!!t,h,u){var p,m;const g=this.getDialog(e),b=g.peerId,v=new ko;if(v.loadPromises=u,v.lazyLoadQueue=h,v.setAttribute("dialog",r?"1":"0"),v.setAttribute("peer",""+b),v.classList.add("dialog-avatar","avatar-"+c),s&&b!==a.default.myId&&b>0){const e=T.a.getUser(b);e.status&&"userStatusOnline"===e.status._&&v.classList.add("is-online")}const f=document.createElement("div");f.classList.add("user-caption");const y=document.createElement("span");y.classList.add("user-title");const w=new ft.a({peerId:b,dialog:r,onlyFirstName:n,plainText:!1});y.append(w.element),y.classList.add("tgico");const L=o.a.getPeer(b);(null===(p=null==L?void 0:L.pFlags)||void 0===p?void 0:p.verified)&&y.append(Bt());const S=document.createElement("span");S.classList.add("user-last-message"),S.setAttribute("dir","auto");const E=document.createElement("li");i&&Object(ie.ripple)(E),E.append(v,f),E.dataset.peerId=""+b;const M=document.createElement("span");M.classList.add("message-status","sending-status");const I=document.createElement("span");I.classList.add("message-time");const C=document.createElement("div");C.className="dialog-subtitle-badge badge badge-24";const k=document.createElement("p");k.classList.add("dialog-title");const P=document.createElement("span");P.classList.add("dialog-title-details"),P.append(M,I),k.append(y,P);const x=document.createElement("p");x.classList.add("dialog-subtitle"),x.append(S),f.append(k,x);const A={avatarEl:v,captionDiv:f,titleSpan:w.element,titleSpanContainer:y,statusSpan:M,lastTimeSpan:I,unreadBadge:C,lastMessageSpan:S,containerEl:E,listEl:E,subtitleEl:x};if(t){t[l?"append":"prepend"](E)}return d||(null===(m=mo.chat)||void 0===m?void 0:m.peerId)!==b||(E.classList.add("active"),this.lastActiveElements.add(E)),{dom:A,dialog:g}}setTyping(e){const t=this.getDialogDom(e.peerId);if(!t)return;let s=t.lastMessageSpan.querySelector(".peer-typing-container");s?mo.getPeerTyping(e.peerId,s):(s=mo.getPeerTyping(e.peerId),Object(x.a)(t.lastMessageSpan,s),t.lastMessageSpan.classList.add("user-typing"))}unsetTyping(e){const t=this.getDialogDom(e.peerId);t&&(t.lastMessageSpan.classList.remove("user-typing"),this.setLastMessage(e,null,t,void 0,void 0,void 0,null))}}const jo=new Fo;de.a.appDialogsManager=jo;var Do=t.default=jo},143:function(e,t,s){"undefined"!=typeof self&&self,e.exports=function(e){var t={};function s(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,s),n.l=!0,n.exports}return s.m=e,s.c=t,s.d=function(e,t,i){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(s.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)s.d(i,n,function(t){return e[t]}.bind(null,n));return i},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="",s(s.s=0)}([function(e,t,s){"use strict";(function(t){var s=t.AudioContext||t.webkitAudioContext,i=function(e){if(!i.isRecordingSupported())throw new Error("Recording is not supported in this browser");e||(e={}),this.state="inactive",this.config=Object.assign({bufferLength:4096,encoderApplication:2049,encoderFrameSize:20,encoderPath:"encoderWorker.min.js",encoderSampleRate:48e3,maxFramesPerPage:40,mediaTrackConstraints:!0,monitorGain:0,numberOfChannels:1,recordingGain:1,resampleQuality:3,streamPages:!1,reuseWorker:!1,wavBitDepth:16},e),this.encodedSamplePosition=0};i.isRecordingSupported=function(){return s&&t.navigator&&t.navigator.mediaDevices&&t.navigator.mediaDevices.getUserMedia&&t.WebAssembly},i.prototype.clearStream=function(){this.stream&&(this.stream.getTracks?this.stream.getTracks().forEach((function(e){e.stop()})):this.stream.stop(),delete this.stream),this.audioContext&&this.closeAudioContext&&(this.audioContext.close(),delete this.audioContext)},i.prototype.encodeBuffers=function(e){if("recording"===this.state){for(var t=[],s=0;s{this.encodeBuffers(e.inputBuffer)},this.monitorGainNode=this.audioContext.createGain(),this.setMonitorGain(this.config.monitorGain),this.monitorGainNode.connect(this.audioContext.destination),this.recordingGainNode=this.audioContext.createGain(),this.setRecordingGain(this.config.recordingGain),this.recordingGainNode.connect(this.scriptProcessorNode)},i.prototype.initSourceNode=function(e){return e&&e.context?t.Promise.resolve(e):t.navigator.mediaDevices.getUserMedia({audio:this.config.mediaTrackConstraints}).then(e=>(this.stream=e,this.audioContext.createMediaStreamSource(e)))},i.prototype.loadWorker=function(){this.encoder||(this.encoder=new t.Worker(this.config.encoderPath))},i.prototype.initWorker=function(){var e=(this.config.streamPages?this.streamPage:this.storePage).bind(this);return this.recordedPages=[],this.totalLength=0,this.loadWorker(),new Promise((t,s)=>{var i=s=>{switch(s.data.message){case"ready":t();break;case"page":this.encodedSamplePosition=s.data.samplePosition,e(s.data.page);break;case"done":this.encoder.removeEventListener("message",i),this.finish()}};this.encoder.addEventListener("message",i),this.encoder.postMessage(Object.assign({command:"init",originalSampleRate:this.audioContext.sampleRate,wavSampleRate:this.audioContext.sampleRate},this.config))})},i.prototype.pause=function(e){if("recording"===this.state){if(this.state="paused",e&&this.config.streamPages){var t=this.encoder;return new Promise((e,s)=>{var i=s=>{"flushed"===s.data.message&&(t.removeEventListener("message",i),this.onpause(),e())};t.addEventListener("message",i),t.postMessage({command:"flush"})})}return this.onpause(),Promise.resolve()}},i.prototype.resume=function(){"paused"===this.state&&(this.state="recording",this.onresume())},i.prototype.setRecordingGain=function(e){this.config.recordingGain=e,this.recordingGainNode&&this.audioContext&&this.recordingGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.setMonitorGain=function(e){this.config.monitorGain=e,this.monitorGainNode&&this.audioContext&&this.monitorGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.start=function(e){if("inactive"===this.state)return this.initAudioContext(e),this.initAudioGraph(),this.encodedSamplePosition=0,this.initWorker().then(()=>this.initSourceNode(e)).then(e=>{this.sourceNode=e,this.state="recording",this.onstart(),this.encoder.postMessage({command:"getHeaderPages"}),this.sourceNode.connect(this.monitorGainNode),this.sourceNode.connect(this.recordingGainNode)})},i.prototype.stop=function(){if("inactive"!==this.state){this.state="inactive",this.monitorGainNode.disconnect(),this.scriptProcessorNode.disconnect(),this.recordingGainNode.disconnect(),this.sourceNode.disconnect(),this.clearStream();var e=this.encoder;return new Promise(t=>{var s=i=>{"done"===i.data.message&&(e.removeEventListener("message",s),t())};e.addEventListener("message",s),e.postMessage({command:"done"}),this.config.reuseWorker||e.postMessage({command:"close"})})}return Promise.resolve()},i.prototype.destroyWorker=function(){"inactive"===this.state&&this.encoder&&(this.encoder.postMessage({command:"close"}),delete this.encoder)},i.prototype.storePage=function(e){this.recordedPages.push(e),this.totalLength+=e.length},i.prototype.streamPage=function(e){this.ondataavailable(e)},i.prototype.finish=function(){if(!this.config.streamPages){var e=new Uint8Array(this.totalLength);this.recordedPages.reduce((function(t,s){return e.set(s,t),t+s.length}),0),this.ondataavailable(e)}this.onstop(),this.config.reuseWorker||delete this.encoder},i.prototype.ondataavailable=function(){},i.prototype.onpause=function(){},i.prototype.onresume=function(){},i.prototype.onstart=function(){},i.prototype.onstop=function(){},e.exports=i}).call(this,s(1))},function(e,t){var s;s=function(){return this}();try{s=s||new Function("return this")()}catch(e){"object"==typeof window&&(s=window)}e.exports=s}])},17:function(e,t,s){"use strict";s.r(t),s.d(t,"ripple",(function(){return l}));var i=s(5),n=s(53),a=s(1),o=s(15);let r=0;function l(e,t=(()=>Promise.resolve()),s=null,l=!1){if(e.querySelector(".c-ripple"))return;e.classList.add("rp");let c=document.createElement("div");c.classList.add("c-ripple");let d;e.classList.contains("rp-square")&&c.classList.add("is-square"),e[l?"prepend":"append"](c);const h=(e,i)=>{const o=Date.now(),l=document.createElement("div"),h=r++,u=1e3*+window.getComputedStyle(c).getPropertyValue("--ripple-duration").replace("s","");d=()=>{let e=Date.now()-o;const t=()=>{n.a.mutate(()=>{l.remove()}),s&&s(h)};if(el.classList.add("hiding"),Math.max(s-u/2,0)),setTimeout(t,s)}else l.classList.add("hiding"),setTimeout(t,u/2);a.IS_TOUCH_SUPPORTED||window.removeEventListener("contextmenu",d),d=null,p=!1},t&&t(h),window.requestAnimationFrame(()=>{const t=c.getBoundingClientRect();l.classList.add("c-ripple__circle");const s=e-t.left,n=i-t.top,a=Math.sqrt(Math.pow(Math.abs(n-t.height/2)+t.height/2,2)+Math.pow(Math.abs(s-t.width/2)+t.width/2,2)),o=s-a/2,r=n-a/2;l.style.width=l.style.height=a+"px",l.style.left=o+"px",l.style.top=r+"px",c.append(l)})},u=t=>t.target!==e&&(["BUTTON","A"].includes(t.target.tagName)||Object(i.a)(t.target,"c-ripple")!==c);let p=!1;if(a.IS_TOUCH_SUPPORTED){let t=()=>{d&&d()};e.addEventListener("touchstart",s=>{if(!o.default.settings.animationsEnabled)return;if(s.touches.length>1||p||u(s))return;p=!0;let{clientX:i,clientY:n}=s.touches[0];h(i,n),e.addEventListener("touchend",t,{once:!0}),window.addEventListener("touchmove",s=>{s.cancelBubble=!0,s.stopPropagation(),t(),e.removeEventListener("touchend",t)},{once:!0})},{passive:!0})}else e.addEventListener("mousedown",t=>{if(![0,2].includes(t.button))return;if(!o.default.settings.animationsEnabled)return;if("0"===e.dataset.ripple||u(t))return;if(p)return void(p=!1);let{clientX:s,clientY:i}=t;h(s,i),window.addEventListener("mouseup",d,{once:!0,passive:!0}),window.addEventListener("contextmenu",d,{once:!0,passive:!0})},{passive:!0})}},28:function(e,t,s){"use strict";s.d(t,"a",(function(){return a})),s.d(t,"b",(function(){return o})),s.d(t,"c",(function(){return r})),s.d(t,"d",(function(){return l}));var i=s(1),n=s(47);const a=i.IS_TOUCH_SUPPORTED?"mousedown":"click";function o(e,t,s={}){const i=s.listenerSetter?s.listenerSetter.add(e):e.addEventListener.bind(e);s.touchMouseDown=!0,i(a,t,s)}function r(e,t,s){e.removeEventListener(a,t,s)}function l(e){Object(n.a)(e,a)}},31:function(e,t,s){"use strict";var i=s(14),n=s(17);t.a=(e,t={})=>{const s=document.createElement(t.asDiv?"div":"button");return s.className=e+(t.icon?" tgico-"+t.icon:""),t.noRipple||(t.rippleSquare&&s.classList.add("rp-square"),Object(n.ripple)(s)),t.onlyMobile&&s.classList.add("only-handhelds"),t.disabled&&s.setAttribute("disabled","true"),t.text&&s.append(Object(i.i18n)(t.text)),s}},33:function(e,t,s){"use strict";s.d(t,"f",(function(){return h})),s.d(t,"g",(function(){return u})),s.d(t,"c",(function(){return g})),s.d(t,"d",(function(){return y})),s.d(t,"e",(function(){return w})),s.d(t,"b",(function(){return E})),s.d(t,"a",(function(){return M}));var i=s(27),n=s(4),a=s(28),o=s(37),r=s(1),l=s(0),c=s(15),d=s(44);function h(e,t=!1){const s='\n \n \n ';if(t){const t=document.createElement("div");return t.classList.add("preloader"),t.innerHTML=s,e&&e.appendChild(t),t}return e.insertAdjacentHTML("beforeend",s),e.lastElementChild}function u(e,t="check"){return e.classList.remove("tgico-"+t),e.disabled=!0,h(e),()=>{e.innerHTML="",e.classList.add("tgico-"+t),e.removeAttribute("disabled")}}i.a.putPreloader=h;let p=e=>{let t=b.getBoundingClientRect(),{clientX:s,clientY:i}=e,n=s>=t.right?s-t.right:t.left-s,a=i>=t.bottom?i-t.bottom:t.top-i;(n>=100||a>=100)&&g()};const m=e=>{g()},g=()=>{b&&(b.classList.remove("active"),b.parentElement.classList.remove("menu-open"),f&&f.remove(),b=null,c.default.dispatchEvent("context_menu_toggle",!1)),v&&(v(),v=null),r.IS_TOUCH_SUPPORTED||(window.removeEventListener("mousemove",p),window.removeEventListener("contextmenu",m)),document.removeEventListener(a.a,m),l.IS_MOBILE_SAFARI||d.a.removeByType("menu")};window.addEventListener("resize",()=>{b&&g()});let b=null,v=null,f=null;function y(e,t){g(),l.IS_MOBILE_SAFARI||d.a.pushItem({type:"menu",onPop:e=>{g()}}),b=e,b.classList.add("active"),b.parentElement.classList.add("menu-open"),f||(f=document.createElement("div"),f.classList.add("btn-menu-overlay"),f.addEventListener(a.a,e=>{Object(n.a)(e),m()})),b.parentElement.insertBefore(f,b),v=t,r.IS_TOUCH_SUPPORTED||(window.addEventListener("mousemove",p),window.addEventListener("contextmenu",m,{once:!0})),document.addEventListener(a.a,m),c.default.dispatchEvent("context_menu_toggle",!0)}function w({pageX:e,pageY:t},s,i){let{scrollWidth:n,scrollHeight:a}=s;const r=document.body.getBoundingClientRect(),l=r.width,c=r.height;i=o.b.isMobile?"right":"left";let d="top";const h={x:{left:e,right:e-n},intermediateX:"right"===i?8:l-n-8,y:{top:t,bottom:t-a},intermediateY:t=8},p={top:h.y.top+a+8<=c,bottom:h.y.bottom-8>=8};{let e;e=u[i]?h.x[i]:(i="center",h.intermediateX),s.style.left=e+"px"}{let e;e=p[d]?h.y[d]:(d="center",h.intermediateY),s.style.top=e+"px"}s.className=s.className.replace(/(top|center|bottom)-(left|center|right)/g,""),s.classList.add(("center"===d?d:"bottom")+"-"+("center"===i?i:"left"===i?"right":"left"))}let L=!1,S=0;function E(){S&&clearTimeout(S),S=window.setTimeout(()=>{S=0,L=!1},400),L=!0}function M(e,t,s){const i=s?s.add(e):e.addEventListener.bind(e),a=s?s.removeManual.bind(s,e):e.removeEventListener.bind(e);if(l.IS_APPLE&&r.IS_TOUCH_SUPPORTED){let s;const o={capture:!0},r=()=>{clearTimeout(s),a("touchmove",r,o),a("touchend",r,o),a("touchcancel",r,o)};i("touchstart",a=>{a.touches.length>1?r():(i("touchmove",r,o),i("touchend",r,o),i("touchcancel",r,o),s=window.setTimeout(()=>{L?r():(t(a.touches[0]),r(),b&&e.addEventListener("touchend",n.a,{once:!0}))},400))})}else i("contextmenu",r.IS_TOUCH_SUPPORTED?s=>{t(s),b&&e.addEventListener("touchend",n.a,{once:!0})}:t)}},44:function(e,t,s){"use strict";var i=s(27),n=s(0),a=s(40),o=s(35),r=s(6),l=s(4);const c=new class{constructor(){this.navigations=[],this.id=Date.now(),this.manual=!1,this.log=Object(a.b)("NC"),this.debug=!0,this.currentHash=window.location.hash;let e=!1;if(window.addEventListener("popstate",t=>{if(this.debug&&this.log("popstate",t,e),window.location.hash!==this.currentHash)return this.onHashChange&&this.onHashChange(),void this.replaceState();this.currentHash=window.location.hash;if(t.state!==this.id)return void this.pushState();const s=this.navigations.pop();s?(this.manual=!e,this.handleItem(s)):this.pushState()}),window.addEventListener("keydown",e=>{const t=this.navigations[this.navigations.length-1];t&&("Escape"!==e.key||t.onEscape&&!t.onEscape()||(Object(l.a)(e),this.back(t.type)))},{capture:!0,passive:!1}),n.IS_MOBILE_SAFARI){const t={passive:!0};window.addEventListener("touchstart",s=>{if(s.touches.length>1)return;this.debug&&this.log("touchstart");const i=()=>{window.removeEventListener("touchend",r),window.removeEventListener("touchmove",a)};let n=!1;const a=e=>{this.debug&&this.log("touchmove"),e.touches.length>1?i():n=!0},r=t=>{this.debug&&this.log("touchend"),t.touches.length>1||!n||(e=!0,Object(o.a)().then(()=>{e=!1})),i()};window.addEventListener("touchend",r,t),window.addEventListener("touchmove",a,t)},t)}history.scrollRestoration="manual",this.pushState()}handleItem(e){const t=e.onPop(!!this.manual&&void 0);this.debug&&this.log("popstate, navigation:",e,this.navigations),!1===t?this.pushItem(e):e.noBlurOnPop||Object(r.a)(),this.manual=!1}findItemByType(e){for(let t=this.navigations.length-1;t>=0;--t){const s=this.navigations[t];if(s.type===e)return{item:s,index:t}}}back(e){if(e){const t=this.findItemByType(e);if(t)return this.manual=!0,this.navigations.splice(t.index,1),void this.handleItem(t.item)}history.back()}pushItem(e){this.navigations.push(e),this.debug&&this.log("pushstate",e,this.navigations),e.noHistory||this.pushState()}pushState(){this.manual=!1,history.pushState(this.id,"")}replaceState(){history.replaceState(this.id,"",location.origin+location.pathname)}removeItem(e){this.navigations.findAndSplice(t=>t===e)}removeByType(e,t=!1){for(let s=this.navigations.length-1;s>=0;--s){if(this.navigations[s].type===e&&(this.navigations.splice(s,1),t))break}}};i.a.appNavigationController=c,t.a=c},47:function(e,t,s){"use strict";function i(e,t){const s=new Event(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(s)}s.d(t,"a",(function(){return i}))},53:function(e,t,s){"use strict";var i=s(35),n=s(42),a=s(27),o=s(55);const r=new class{constructor(){this.promises={},this.raf=i.b.bind(null),this.scheduled=!1}do(e,t){let s=this.promises[e];return s||(this.scheduleFlush(),s=this.promises[e]=Object(n.a)()),void 0!==t&&s.then(()=>t()),s}measure(e){return this.do("read",e)}mutate(e){return this.do("write",e)}mutateElement(e,t){const s=Object(o.a)(e)?this.mutate():Promise.resolve();return void 0!==t&&s.then(()=>t()),s}scheduleFlush(){this.scheduled||(this.scheduled=!0,this.raf(()=>{this.promises.read&&this.promises.read.resolve(),this.promises.write&&this.promises.write.resolve(),this.scheduled=!1,this.promises={}}))}};a.a&&(a.a.sequentialDom=r),t.a=r},74:function(e,t,s){"use strict";var i=s(27),n=s(36),a=s(30);const o=new class{getState(){return a.a.invokeApi("account.getPassword").then(e=>e)}updateSettings(e={}){return this.getState().then(t=>{let s,i;const n={password:null,new_settings:{_:"account.passwordInputSettings",hint:e.hint,email:e.email}};s=e.currentPassword?a.a.invokeCrypto("computeSRP",e.currentPassword,t,!1):Promise.resolve({_:"inputCheckPasswordEmpty"});const o=t.new_algo,r=new Uint8Array(o.salt1.length+32);return r.randomize(),r.set(o.salt1,0),o.salt1=r,i=e.newPassword?a.a.invokeCrypto("computeSRP",e.newPassword,t,!0):Promise.resolve(new Uint8Array),Promise.all([s,i]).then(e=>(n.password=e[0],n.new_settings.new_algo=o,n.new_settings.new_password_hash=e[1],a.a.invokeApi("account.updatePasswordSettings",n)))})}check(e,t,s={}){return a.a.invokeCrypto("computeSRP",e,t,!1).then(e=>a.a.invokeApi("auth.checkPassword",{password:e},s).then(e=>("auth.authorization"===e._&&(n.a.saveApiUser(e.user),a.a.setUserAuth(e.user.id)),e)))}confirmPasswordEmail(e){return a.a.invokeApi("account.confirmPasswordEmail",{code:e})}resendPasswordEmail(){return a.a.invokeApi("account.resendPasswordEmail")}cancelPasswordEmail(){return a.a.invokeApi("account.cancelPasswordEmail")}};i.a.passwordManager=o,t.a=o},90:function(e,t,s){"use strict";s.d(t,"a",(function(){return a}));var i=s(4),n=s(38);class a extends n.b{constructor(e={}){super(Object.assign({plainText:!0},e)),this.passwordVisible=!1,this.onVisibilityClick=e=>{Object(i.a)(e),this.passwordVisible=!this.passwordVisible,this.toggleVisible.classList.toggle("eye-hidden",this.passwordVisible),this.input.type=this.passwordVisible?"text":"password",this.onVisibilityClickAdditional&&this.onVisibilityClickAdditional()};const t=this.input;t.type="password",t.setAttribute("required",""),t.autocomplete="off";const s=document.createElement("input");s.classList.add("stealthy"),s.tabIndex=-1,s.type="password",t.parentElement.prepend(s),t.parentElement.insertBefore(s.cloneNode(),t.nextSibling);const n=this.toggleVisible=document.createElement("span");n.classList.add("toggle-visible","tgico"),this.container.classList.add("input-field-password"),this.container.append(n),n.addEventListener("click",this.onVisibilityClick),n.addEventListener("touchend",this.onVisibilityClick)}}},96:function(e,t,s){"use strict";s.d(t,"a",(function(){return n}));var i=s(49);class n{constructor(e,t){this.passwordInputField=e,this.size=t,this.needFrame=0,this.container=document.createElement("div"),this.container.classList.add("media-sticker-wrapper")}load(){return this.loadPromise?this.loadPromise:this.loadPromise=i.b.loadAnimationFromURL({container:this.container,loop:!1,autoplay:!1,width:this.size,height:this.size,noCache:!0},"assets/img/TwoFactorSetupMonkeyPeek.tgs").then(e=>(this.animation=e,this.animation.addEventListener("enterFrame",e=>{(1===this.animation.direction&&e>=this.needFrame||-1===this.animation.direction&&e<=this.needFrame)&&(this.animation.setSpeed(1),this.animation.pause())}),this.passwordInputField.onVisibilityClickAdditional=()=>{this.passwordInputField.passwordVisible?(this.animation.setDirection(1),this.animation.curFrame=0,this.needFrame=16,this.animation.play()):(this.animation.setDirection(-1),this.animation.curFrame=16,this.needFrame=0,this.animation.play())},i.b.waitForFirstFrame(e)))}remove(){this.animation&&this.animation.remove()}}}}]); +//# sourceMappingURL=15.1a3e11966cccf1381885.chunk.js.map \ No newline at end of file diff --git a/public/15.1a3e11966cccf1381885.chunk.js.map b/public/15.1a3e11966cccf1381885.chunk.js.map new file mode 100644 index 00000000..cee6b8e3 --- /dev/null +++ b/public/15.1a3e11966cccf1381885.chunk.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./src/components/monkeys/tracking.ts","webpack:///./src/components/codeInputField.ts","webpack:///./src/environment/movSupport.ts","webpack:///./src/environment/mediaMimeTypesSupport.ts","webpack:///./src/helpers/dom/setInnerHTML.ts","webpack:///./src/helpers/filterChatPhotosMessages.ts","webpack:///./src/helpers/listLoader.ts","webpack:///./src/helpers/searchListLoader.ts","webpack:///./src/components/appSearch.ts","webpack:///./src/components/inputSearch.ts","webpack:///./src/components/buttonIcon.ts","webpack:///./src/components/sliderTab.ts","webpack:///./src/components/slider.ts","webpack:///./src/components/avatarEdit.ts","webpack:///./src/components/buttonCorner.ts","webpack:///./src/components/sidebarLeft/tabs/newGroup.ts","webpack:///./src/components/appMediaPlaybackController.ts","webpack:///./src/helpers/dom/attachGrabListeners.ts","webpack:///./src/components/rangeSelector.ts","webpack:///./src/components/buttonMenu.ts","webpack:///./src/components/buttonMenuToggle.ts","webpack:///./src/lib/mediaPlayer.ts","webpack:///./src/helpers/schedulers/throttleWithRaf.ts","webpack:///./src/helpers/schedulers/throttleWith.ts","webpack:///./src/components/audio.ts","webpack:///./src/components/divAndCaption.ts","webpack:///./src/components/chat/replyContainer.ts","webpack:///./src/components/groupedLayout.ts","webpack:///./src/components/editPeer.ts","webpack:///./src/components/row.ts","webpack:///./src/components/radioForm.ts","webpack:///./src/helpers/clipboard.ts","webpack:///./src/components/radioField.ts","webpack:///./src/components/toast.ts","webpack:///./src/helpers/schedulers/debounce.ts","webpack:///./src/components/usernameInputField.ts","webpack:///./src/components/popups/peer.ts","webpack:///./src/components/sidebarRight/tabs/chatType.ts","webpack:///./src/helpers/scrollableLoader.ts","webpack:///./src/components/appSelectPeers.ts","webpack:///./src/components/popups/pickUser.ts","webpack:///./src/components/sidebarRight/tabs/userPermissions.ts","webpack:///./src/components/sidebarRight/tabs/groupPermissions.ts","webpack:///./src/components/popups/deleteDialog.ts","webpack:///./src/components/sidebarRight/tabs/editChat.ts","webpack:///./src/components/sidebarRight/tabs/editContact.ts","webpack:///./src/components/sidebarLeft/tabs/addMembers.ts","webpack:///./src/environment/parallaxSupport.ts","webpack:///./src/components/generateVerifiedIcon.ts","webpack:///./src/components/swipeHandler.ts","webpack:///./src/components/peerProfileAvatars.ts","webpack:///./src/components/peerProfile.ts","webpack:///./src/components/sidebarRight/tabs/sharedMedia.ts","webpack:///./src/components/sidebarRight/index.ts","webpack:///./src/components/sidebarRight/tabs/pollResults.ts","webpack:///./src/components/poll.ts","webpack:///./src/lib/appManagers/appStickersManager.ts","webpack:///./src/components/wrappers.ts","webpack:///./src/helpers/dom/positionElementByIndex.ts","webpack:///./src/helpers/sortedList.ts","webpack:///./src/components/sortedUserList.ts","webpack:///./src/helpers/dom/handleTabSwipe.ts","webpack:///./src/components/popups/forward.ts","webpack:///./src/components/popups/deleteMessages.ts","webpack:///./src/components/popups/sendNow.ts","webpack:///./src/helpers/dom/cancelSelection.ts","webpack:///./src/components/chat/selection.ts","webpack:///./src/helpers/dom/getSelectedText.ts","webpack:///./src/components/appSearchSuper..ts","webpack:///./src/lib/appManagers/appPrivacyManager.ts","webpack:///./src/components/privacySection.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/phoneNumber.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/passwordSet.ts","webpack:///./src/helpers/dom/canFocus.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/emailConfirmation.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/email.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/hint.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/reEnterPassword.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/enterPassword.ts","webpack:///./src/components/sidebarLeft/tabs/2fa/index.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/lastSeen.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/profilePhoto.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/forwardMessages.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/addToGroups.ts","webpack:///./src/components/sidebarLeft/tabs/privacy/calls.ts","webpack:///./src/components/sidebarLeft/tabs/activeSessions.ts","webpack:///./src/components/sidebarLeft/tabs/blockedUsers.ts","webpack:///./src/components/sidebarLeft/tabs/privacyAndSecurity.ts","webpack:///./src/helpers/color.ts","webpack:///./src/helpers/highlightningColor.ts","webpack:///./src/components/colorPicker.ts","webpack:///./src/components/sidebarLeft/tabs/backgroundColor.ts","webpack:///./src/components/sidebarLeft/tabs/background.ts","webpack:///./src/helpers/averageColor.ts","webpack:///./src/components/popups/stickers.ts","webpack:///./src/components/sidebarLeft/tabs/generalSettings.ts","webpack:///./src/components/sidebarLeft/tabs/editProfile.ts","webpack:///./src/components/sidebarLeft/tabs/includedChats.ts","webpack:///./src/components/sidebarLeft/tabs/editFolder.ts","webpack:///./src/components/sidebarLeft/tabs/chatFolders.ts","webpack:///./src/components/sidebarLeft/tabs/notifications.ts","webpack:///./src/components/sidebarLeft/tabs/language.ts","webpack:///./src/components/sidebarLeft/tabs/settings.ts","webpack:///./src/components/sidebarLeft/tabs/newChannel.ts","webpack:///./src/components/popups/createContact.ts","webpack:///./src/components/sidebarLeft/tabs/contacts.ts","webpack:///./src/components/sidebarLeft/tabs/archivedTab.ts","webpack:///./src/components/sidebarLeft/index.ts","webpack:///./src/components/chat/bubbleGroups.ts","webpack:///./src/components/popups/datePicker.ts","webpack:///./src/components/stickyIntersector.ts","webpack:///./src/components/chat/replies.ts","webpack:///./src/components/chat/messageRender.ts","webpack:///./src/helpers/dom/getElementByPoint.ts","webpack:///./src/helpers/dom/reflowScrollableElement.ts","webpack:///./src/lib/appManagers/appEmojiManager.ts","webpack:///./src/components/emoticonsDropdown/tabs/emoji.ts","webpack:///./src/components/gifsMasonry.ts","webpack:///./src/components/emoticonsDropdown/tabs/gifs.ts","webpack:///./src/components/emoticonsDropdown/tabs/stickers.ts","webpack:///./src/lib/appManagers/appInlineBotsManager.ts","webpack:///./src/components/sidebarRight/tabs/gifs.ts","webpack:///./src/components/sidebarRight/tabs/stickers.ts","webpack:///./src/helpers/dropdownHover.ts","webpack:///./src/components/emoticonsDropdown/index.ts","webpack:///./src/components/chat/bubbles.ts","webpack:///./src/lib/mtproto/constants.ts","webpack:///./src/components/popups/unpinMessage.ts","webpack:///./src/helpers/dom/isSelectionEmpty.ts","webpack:///./src/components/popups/reportMessagesConfirm.ts","webpack:///./src/components/popups/reportMessages.ts","webpack:///./src/components/chat/contextMenu.ts","webpack:///./src/components/chat/sendContextMenu.ts","webpack:///./src/components/popups/createPoll.ts","webpack:///./src/components/popups/newMedia.ts","webpack:///./src/helpers/dom/attachListNavigation.ts","webpack:///./src/components/chat/autocompleteHelper.ts","webpack:///./src/components/chat/stickersHelper.ts","webpack:///./src/components/popups/schedule.ts","webpack:///./src/helpers/dom/getRichValueWithCaret.ts","webpack:///./src/components/chat/emojiHelper.ts","webpack:///./src/components/chat/autocompletePeerHelper.ts","webpack:///./src/components/chat/commandsHelper.ts","webpack:///./src/components/chat/autocompleteHelperController.ts","webpack:///./src/components/chat/mentionsHelper.ts","webpack:///./src/components/chat/replyKeyboard.ts","webpack:///./src/components/chat/inlineHelper.ts","webpack:///./src/components/chat/input.ts","webpack:///./src/helpers/dom/setRichFocus.ts","webpack:///./src/components/chat/pinnedContainer.ts","webpack:///./src/components/chat/audio.ts","webpack:///./src/components/chat/pinnedMessageBorder.ts","webpack:///./src/components/chat/pinnedMessage.ts","webpack:///./src/helpers/dom/handleScrollSideEvent.ts","webpack:///./src/components/chat/topbar.ts","webpack:///./src/components/sidebarRight/tabs/search.ts","webpack:///./src/components/chat/search.ts","webpack:///./src/components/chat/chat.ts","webpack:///./src/components/chat/markupTooltip.ts","webpack:///./src/helpers/dom/getSelectedNodes.ts","webpack:///./src/helpers/generatePathData.ts","webpack:///./src/components/chat/dragAndDrop.ts","webpack:///./src/helpers/dom/disableTransition.ts","webpack:///./src/lib/appManagers/internalLink.ts","webpack:///./src/components/popups/joinChatInvite.ts","webpack:///./src/lib/appManagers/appImManager.ts","webpack:///./src/components/appMediaViewerBase.ts","webpack:///./src/helpers/dom/getVisibleRect.ts","webpack:///./src/helpers/fillPropertyValue.ts","webpack:///./src/components/appMediaViewer.ts","webpack:///./src/helpers/avatarListLoader.ts","webpack:///./src/components/appMediaViewerAvatar.ts","webpack:///./src/components/avatar.ts","webpack:///./src/components/dialogsContextMenu.ts","webpack:///./src/lib/mtproto/connectionStatus.ts","webpack:///./src/components/sendingStatus.ts","webpack:///./src/components/connectionStatus.ts","webpack:///./src/lib/appManagers/appDialogsManager.ts","webpack:///./public/recorder.min.js","webpack:///./src/components/ripple.ts","webpack:///./src/helpers/dom/clickEvent.ts","webpack:///./src/components/button.ts","webpack:///./src/components/misc.ts","webpack:///./src/components/appNavigationController.ts","webpack:///./src/helpers/dom/dispatchEvent.ts","webpack:///./src/helpers/sequentialDom.ts","webpack:///./src/lib/mtproto/passwordManager.ts","webpack:///./src/components/passwordInputField.ts","webpack:///./src/components/monkeys/password.ts"],"names":["TrackingMonkey","inputField","size","max","needFrame","this","container","document","createElement","classList","add","input","addEventListener","playAnimation","e","value","length","animation","frame","Math","min","round","idleAnimation","stop","canvas","style","display","direction","setDirection","setSpeed","play","loadPromise","Promise","all","loadAnimationFromURL","loop","autoplay","width","height","then","waitForFirstFrame","_animation","currentFrame","pause","remove","CodeInputField","options","super","plainText","type","setAttribute","autocomplete","lastLength","setLabel","replace","slice","setValueSilently","onFill","canPlayType","MEDIA_MIME_TYPES_SUPPORTED","Set","setInnerHTML","elem","html","innerHTML","filterChatPhotosMessages","history","message","idx","arr","action","photo","splice","undefined","count","previous","next","reverse","loadCount","loadWhenLeft","loadedAllUp","loadedAllDown","loadedAll","current","loadPromiseUp","loadPromiseDown","dispatchJump","items","item","pop","push","shift","unshift","load","onJump","older","resolve","anchor","promise","loadMore","result","forEach","bind","processed","processItem","onLoadedMore","backLimit","maxId","mid","incrementMessageId","getSearch","searchContext","peerId","limit","inputFilter","_","next_rate","nextRate","filterMids","onHistoryDelete","msgs","shouldBeDeleted","has","filter","onEmptied","onHistoryMultiappend","obj","folderId","mids","sorted","Array","from","sort","a","b","targets","map","Boolean","onMessageSent","rootScope","storage","isScheduled","getScheduledMessagesStorage","getMessagesStorage","filterMessagesByInputFilter","context","useSearch","reset","removeEventListener","name","clearable","className","clickable","autonomous","onFound","list","createChatList","nameEl","append","setListClickListener","childElementCount","setActive","clear","searchInput","searchGroups","onSearch","minMsgId","loadedCount","foundCount","searchPromise","searchTimeout","query","listsContainer","threadId","scrollable","i","messages","setVirtualContainer","onChange","searchMore","onScrolledBottom","trim","window","setTimeout","focus","res","searchGroup","fromId","dialog","dom","addDialogNew","drawStatus","avatarSize","meAsSaved","listEl","dataset","setLastMessage","toggle","replaceContent","catch","err","console","error","placeholder","prevValue","timeout","onInput","clearTimeout","onClearClick","onClear","searchIcon","clearBtn","icon","slider","destroyable","_constructor","header","closeBtn","noRipple","title","content","addTab","listenerSetter","closeTab","args","init","selectTab","tabs","delete","removeAll","key","eventListener","dispatchEvent","cleanup","onCloseAfterTimeout","historyTabIds","canHideFirst","onCloseBtnClick","appNavigationController","findItemByType","navigationType","back","id","animate","isNavigation","closingId","onCloseTab","tab","_selectTab","Map","tabsContainer","sidebarEl","querySelector","querySelectorAll","el","get","onOpen","onOpenAfterTimeout","pushItem","onPop","canAnimate","findAndSplice","tabConstructor","preserveTab","removeTabFromHistory","find","t","getTab","removeByType","onClose","parentElement","open","getContext","clearRect","uploadAvatar","setTitle","avatarEdit","_upload","inputWrapper","groupNameInputField","label","maxLength","nextBtn","contains","disabled","createChat","userIds","chatId","inputFile","editPhoto","chatsContainer","userId","rippleEnabled","lastMessageSpan","getUserStatusString","textContent","SHOULD_USE_SAFARI_FIX","navigator","userAgent","match","appMediaPlaybackController","media","scheduled","mediaDetails","waitingMediaForLoad","waitingScheduledMediaForLoad","waitingDocumentsForLoad","_volume","_muted","_playbackRate","seekBackward","details","playingMedia","currentTime","seekOffset","seekForward","duration","seekTo","seekTime","onMediaDocumentLoad","doc","getDoc","docId","supportsStreaming","handleSafariStreamable","cacheContext","appDownloadManager","getCacheContext","src","url","set","onPlay","target","getMessageByMedia","verify","element","listLoader","jumpLength","findIndex","go","setTargets","setMedia","getMediaFromMessage","onPause","onEnded","isTrusted","paused","clean","s","playItem","getMedia","resolveWaitingForLoadMedia","lockedSwitchers","cssText","body","mediaSession","actions","seekbackward","seekforward","seekto","previoustrack","nexttrack","setActionHandler","warn","properties","_key","dispatchPlaybackParams","Object","defineProperties","volume","muted","playbackRate","autoload","pFlags","is_scheduled","media_unread","myId","readMessages","once","deferred","w","waitingStorage","downloadDoc","safariBuffering","artwork","isVoice","artist","thumbs","bytes","sizes","h","preloadPhoto","setNewMediadata","peerPhoto","getPeerPhoto","appAvatarsManager","loadAvatar","cached","getPeerTitle","format","attribute","attributes","file_name","performer","metadata","MediaMetadata","getScheduledMessageByPeer","getMessageByPeer","willBePlayedMedia","prev","addMedia","setSearchContext","wasPlaying","willBePlayed","toggleSwitchers","enabled","attachGrabListeners","onStart","onMove","onEnd","onMouseMove","event","x","pageX","y","pageY","onMouseUp","onMouseDown","button","onTouchMove","preventDefault","touches","clientX","clientY","isTouch","onTouchEnd","onTouchStart","passive","mousedown","events","withTransition","useTransform","vertical","scrub","rect","getBoundingClientRect","seek","setFilled","onScrub","filled","step","setProgress","stepStr","index","indexOf","decimals","_removeListeners","percents","transform","rectMax","offsetAxisValue","bottom","left","toFixed","ButtonMenuItem","text","onClick","ripple","regularText","checkboxField","checked","keepOpen","cancelEvent","buttons","ButtonMenuToggleHandler","openedMenu","asDiv","btnMenu","streamable","progressRAF","onLoadedData","r","requestAnimationFrame","cancelAnimationFrame","setLoadProgress","onTimeUpdate","onProgress","removeListeners","filledLoad","prepend","setSeekMax","setListeners","setHandlers","scrubTime","isSafariBuffering","buf","buffered","numRanges","nearestStart","end","start","onMuteClick","setVolume","d","volumeSvg","btn","firstElementChild","video","showControlsTimeout","hideControls","isShown","wrapper","controlsLocked","showControls","setHideTimeout","toggleControls","show","onFullScreen","webkitFullscreenElement","parentNode","insertBefore","appendChild","skin","stylePlayer","controls","progress","finally","initDuration","player","buildControls","timeDuration","insertAdjacentHTML","fullScreenButton","timeElapsed","String","toHHMMSS","volumeSelector","togglePlay","findUpClassName","relatedTarget","overlaysActive","good","code","toggleFullScreen","altKey","split","eventName","visible","rate","settingsButton","fullscreenElement","mozFullScreenElement","msFullscreenElement","webkitEnterFullscreen","enterFullscreen","isFullScreen","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","msExitFullscreen","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","msRequestFullscreen","throttleWithRaf","fn","schedulerFn","waiting","_args","throttleWith","wrapVoiceMessage","audioEl","out","barHeightMax","mediaSizes","isMobile","svg","createElementNS","setAttributeNS","timeDiv","waveform","Uint8Array","valueCount","dataView","DataView","buffer","byteIndex","bitShift","getUint16","decodeWaveform","normValue","wfSize","barCount","maxValue","maxDelta","barX","sumI","bar_value","barWidth","rects","children","audio","lastIndex","ceil","node","throttledTimeUpdate","addAudioListener","readyPromise","mousemove","offsetX","MouseEvent","targetTouches","noop","constructDownloadPreloader","tryAgainOnFail","preloader","cancelable","construct","circle","totalLength","attr","findAudioTargets","justAudioSelector","selector","matches","elements","mediaItems","HTMLElement","withTime","voiceAsMusic","showSender","isRealVoice","isOutgoing","is_outgoing","uploading","durationStr","downloadDiv","onTypeLoad","descriptionEl","parts","audioPerformer","htmlToSpan","date","wrapSenderToPeer","titleEl","middleEllipsisEl","fontWeight","audioTitle","fileName","wrapSentTime","subtitleDiv","launched","progressLine","lastChild","replaceWith","wrapAudio","audioTimeDiv","onLoad","readyState","HAVE_CURRENT_DATA","onTypeDisconnect","getTimeStr","innerText","attach","noAutoDownload","imgs","wrapped","wrapPhoto","boxWidth","boxHeight","loadPromises","withoutPreloader","lazyLoadQueue","images","thumb","full","img","shouldPlay","onDownloadInit","pauseListener","notifyAll","done","total","cancel","Error","reject","playListener","download","setDownloadFunction","capture","isConnected","customElements","define","DivAndCaption","fill","border","subtitle","wrapReplyDivAndCaption","subtitleEl","mediaEl","wrapEmojiText","isRound","mediaChildren","middleware","wrapMessageForReply","webpage","chat","bubbles","getMiddleware","wrapSticker","div","group","CHAT_ANIMATION_GROUP","choosePhotoSize","noBlur","child","isMediaSet","RectPart","maxWidth","minWidth","spacing","maxHeight","ratios","countRatios","proportions","countProportions","averageRatio","maxSizeRatio","layout","layoutTwo","layoutThree","layoutFour","layoutTwoTopBottom","layoutTwoLeftRightEqual","layoutTwoLeftRight","layoutThreeLeftAndOther","layoutThreeTopAndOther","layoutFourTopAndOther","layoutFourLeftAndOther","geometry","sides","minimalWidth","secondWidth","firstWidth","firstHeight","thirdHeight","secondHeight","rightWidth","leftWidth","thirdWidth","h0","w0","w2","w1","h1","h2","ratio","join","cropRatios","attempts","multiHeight","offset","sum","pushAttempt","lineCounts","heights","first","second","third","fourth","optimalAttempt","optimalDiff","attempt","counts","lineCount","totalHeight","minLineHeight","bad1","bad2","line","diff","abs","optimalCounts","optimalHeights","rowCount","row","colCount","lineHeight","col","_disabled","isChanged","validLength","requiredLength","requiredValidLength","inputFields","isValid","required","handleChange","toggleAttribute","withoutAvatar","avatarElem","doNotEditAvatar","unlockOnSuccess","freezed","radioField","subtitleLangKey","subtitleLangArgs","havePadding","isToggle","titleRight","noCheckboxSubtitle","titleLangKey","c","navigationTab","RadioFormFromRows","rows","radios","form","RadioForm","copyTextToClipboard","clipboard","writeText","textArea","top","position","select","execCommand","removeChild","fallbackCopyTextToClipboard","stateKey","appStateManager","getState","state","setByKey","main","langKey","Event","toastEl","toast","toastNew","langPackKey","debounce","ms","shouldRunFirst","shouldRunLast","waitingTimeout","waitingPromise","hadNewCall","_resolve","_reject","checkUsernameDebounced","checkUsername","getValue","originalValue","setState","Neutral","isUsernameValid","setError","invalidText","head","username","checkUsernamePromise","invokeApi","channel","getChannelInput","available","Valid","availableText","takenText","overlayClosable","avatarEl","noTitle","titleLangArgs","fragment","createDocumentFragment","descriptionLangKey","description","p","descriptionLangArgs","checkboxes","o","withRipple","callback","original","nextElementSibling","isBroadcast","section","random","privateRow","publicRow","privateSection","publicSection","getChat","linkRow","chatFull","exported_invite","link","btnRevoke","toggleDisability","getChatInviteLink","caption","noDelimiter","changed","linkInputField","applyBtn","migrateChat","channelId","updateUsername","close","setOriginalValue","loading","loaded","getPromise","checkForTriggers","loadAllDialogsPromise","loadedAllDialogs","selected","offsetIndex","loadedWhat","renderedPeerIds","peerType","multiSelect","tempIds","selfPresence","needSwitchList","includes","cachedContacts","getMoreResults","f","renderResultsFunc","renderResults","peerIds","splitUp","notRendered","topContainer","selectedContainer","selectedScrollable","delimiter","li","click","findUpAttribute","checkbox","debouncedInput","appendTo","getResultsPromise","onFirstRender","testSelfSearch","dialogs","archived","pageCount","windowSize","windowH","tempId","getTempId","getConversations","newOffsetIndex","chatRightsAction","filterByRights","renderSaved","isEnd","getMoreDialogs","contacts","getMoreContacts","canSendToUser","hasRights","getContacts","searchContacts","searchResult","resultPeerIds","my_results","concat","results","channelParticipants","getChannelParticipants","q","participants","participant","getParticipantPeerId","u","promises","getConversationsAll","getMoreChannelParticipants","isNonContactUser","containerEl","getChatMembersString","scroll","insertAdjacentElement","scrollIntoViewNew","offsetWidth","onAnimationEnd","settings","animationsEnabled","values","Static","closable","getSelected","onSelect","hide","peerTypes","destroyListener","new","rights","takeOut","banned_rights","editBanned","btnDeleteException","clearChannelParticipantBannedRights","btnDelete","kickFromChannel","v","flags","exceptionText","toggleWith","defaultBannedRights","default_banned_rights","combineParticipantBannedRights","info","mainFlag","restriction","until_date","flag","chatPermissions","editChatDefaultBannedRights","addExceptionRow","openPermissions","getChannelParticipant","generateContentElement","findUpTag","setSubtitle","bannedRights","cantWhat","getPeerId","peer","update","needAdd","new_participant","view_messages","user_id","prev_participant","exceptionsCount","setLength","loader","setLoader","isChannel","migrateFrom","migrateTo","onScroll","getDialogType","peerTitleElement","callbackLeave","flush","leave","flushHistory","callbackDelete","descriptionArgs","deleteChannel","isDanger","textArgs","getChatFull","chatUpdateListeners","addChatUpdateListener","chatNameInputField","descriptionInputField","about","editPeer","chatTypeRow","setChatTypeSubtitle","permissionsRow","setPermissionsLength","reduce","acc","editTitle","editAbout","race","removeAttribute","signMessagesCheckboxField","signatures","toggleSignatures","showChatHistoryCheckboxField","togglePreHistoryHidden","onChatUpdate","hidden_prehistory","_init","isNew","isContact","nameInputField","lastNameInputField","user","getUser","setDraftValue","first_name","last_name","notificationsCheckboxField","mutePeer","isMuted","notify_settings","profileNameDiv","profileSubtitleDiv","phoneRow","phone","formatUserPhone","notificationsRow","isPeerLocalMuted","addContact","deleteContacts","skippable","attachToPromise","removeLoader","ret","selectedPeerIds","addInitial","generateVerifiedIcon","use","use2","getEvent","attachGlobalListenerTo","RESET_GLOBAL","cursor","hadMove","xDown","yDown","handleMove","onReset","handleStart","_e","verifyTouchTarget","xUp","yUp","xDiff","yDiff","setProperty","onFirstSwipe","onSwipeResult","onSwipe","photoId","avatar","BASE_CLASS","getPhoto","Image","draggable","renderImageFromUrl","putAvatar","avatars","gradient","arrowPrevious","arrowNext","checkScrollTop","scrollTop","freeze","clickX","prevTargets","nextTargets","openAvatarViewer","toRight","right","distance","offsetLeft","cancelNextClick","lastDiffX","minX","lastX","SCALE","TRANSLATE_TEMPLATE","addIndex","getUserPhotos","photos","Number","MAX_SAFE_INTEGER","m","chat_photo","generateFakeAvatarMessage","activeTab","photo_id","setText","setPeerStatus","needClear","bio","tagName","getProfileByPeerId","getPeer","notifications","generateDelimiter","setBio","self","setPeerStatusInterval","setInterval","setBioTimeout","oldAvatars","setPeer","cleaned","cleanupHTML","setAvatar","getPeerUsername","verified","override","getProfile","userFull","rAbout","wrapRichText","canSetNext","historiesStorage","newCloseBtn","animatedCloseIcon","transitionContainer","transitionFirstItem","editBtn","transitionLastItem","secondTitle","cloneNode","profile","onAdditionalScroll","searchSuper","nav","isSharedMedia","transition","cleanScrollPositions","isHeavyAnimationInProgress","toggleEditBtn","msgIdsByPeer","renderNewMessages","deleteDeletedMessages","mediaTabs","onChangeTab","mediaTab","btnAddMembers","showConfirmation","onError","inviteToChannel","addChatUser","filtered","filterMessagesByType","usedFromHistory","performSearchResult","selection","isSelecting","toggleByElement","canViewMembers","loadMutex","peerChanged","setQuery","historyStorage","fillProfileElements","single","justLoad","getElementById","isColumnProportionSet","to","medium","mobile","toggleSidebar","setColumnProportion","sharedMediaTab","proportion","scrollWidth","previousElementSibling","documentElement","enable","active","willChange","animationPromise","appSidebarRight","resultsDiv","poll","getPoll","quiz","rQuestion","voters","total_voters","roundPercents","hr","answer","answers","answerEl","answerTitle","answerPercents","minHeight","getVotes","option","votesList","votes","vote","showMore","lastElementChild","next_offset","down","lineTotalLength","minIndex","minRemainder","k","remainder","maxRemainder","pollElement","isClosed","closed","performResults","chosenIndexes","prevQuizHint","hideQuizHint","prevQuizHintOnHide","prevQuizHintTimeout","setMaxLength","resizePolls","onHide","isQuiz","isRetracted","isPublic","isMultiple","chosingIndexes","sentVote","windowW","MAX_LENGTH","MAX_OFFSET","svgLines","setLineProgress","getTotalLength","pollId","descKey","public_voters","multiple_choice","multipleSelect","descDiv","typeDiv","avatarsDiv","close_period","close_date","timeLeftDiv","quizTimer","strokeWidth","radius","circumference","PI","period","closeTime","serverTimeOffset","quizInterval","time","Date","now","timeLeft","color","stroke","strokeDashoffset","strokeDasharray","clearInterval","getResults","answerDivs","numberDivs","footerDiv","viewResults","votersCountDiv","isTabExists","sendVoteBtn","sendVotes","canVote","setVotersCount","clickHandler","solution","solution_entities","toggleHint","textEl","entities","bubblesContainer","setQuizHint","correctResult","correct","chosen","answerIndex","foundIndex","indexes","sendVotePromise","sendVote","initQuizHint","timeEl","setResults","recent_voters","isVoted","hideSendVoteBtn","hideViewResultsBtn","maxPercents","cb","getPercentValue","iterate","fullTime","times","votersCount","multiplier","getStickerSetPromises","getStickersByEmoticonsPromises","getAnimatedEmojiStickerSet","addMultipleEventsListeners","updateNewStickerSet","saveStickerSet","stickerset","getGreetingStickersTimeout","getGreetingSticker","justPreload","getGreetingStickersPromise","getStickersByEmoticon","docs","greetingStickers","saveDoc","params","overwrite","cachedSet","documents","refreshTime","useCache","saveStickers","stickerSet","getStickerSetInput","saveById","getStickerSet","invokeApiHashable","stickers","emoji","getFromCache","pack","packs","emoticon","getAnimatedEmojiSticker","newSet","assign","setToCache","needSave","installed_date","dcId","thumb_dc_id","isAnimated","animated","location","thumb_version","mimeType","access_hash","short_name","sets","covered","excludeFeatured","exclude_featured","foundSaved","cache","getCache","toLowerCase","cover","getAllStickers","allStickers","includeOurStickers","preloadStickerSets","getRecentStickers","messagesStickers","installedSets","recentStickers","foundStickers","sticker","cachedStickersAnimated","cachedStickersStatic","iteratePacks","appStickersManager","roundVideoCircumference","wrapVideo","withTail","isOut","noInfo","onlyPreview","noPlayButton","isAlbumItem","canAutoplay","autoPlay","gifs","videos","spanTime","spanPlay","needPlayButton","mime_type","photoRes","divRound","halfSize","ctx","globalVideo","setPeerPromise","isInDOM","onPaused","onFrame","drawImage","detached","foreignObject","getAttributeNS","gotThumb","getThumb","poster","aspecter","isUpload","downloaded","attachMethod","renderDeferred","detach","isFulfilled","animationIntersector","addAnimation","loadPhotoThumbFunc","loadFunc","setManual","queueId","render","wrapDocument","audioElement","extSplitted","ext","isArray","docDiv","icoDiv","descriptionParts","nameDiv","_downloadDiv","save","saveDocFile","downloading","noThumb","noFadeIn","blurAfter","setAttachmentSize","regular","thumbImage","image","isFit","loadThumbPromise","photoSize","getStrippedThumbIfNeeded","needFadeIn","renderOnLoad","renderImageWithFadeIn","canAttachPreloader","renderPromise","sequentialDom","mutateElement","mutate","onlyThumb","withThumb","stickerType","loadLottieWorkers","toneIndex","haveThumbCached","stickerCachedThumbs","afterRender","getPathFromPhotoPathSize","stickerThumbConverted","getPreviewURLFromThumb","webpWorkerController","convert","getThumbURL","json","loadAnimationWorker","animationData","saveLottiePreview","getAnimation","restart","wrapStickerSetThumb","downloadOptions","getStickerSetThumbDownloadOptions","lottieLoader","needUpscale","blob","URL","createObjectURL","wrapReply","replyContainer","prepareAlbum","widthItem","heightItem","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","forMedia","mediaDiv","wrapAlbum","groupId","attachmentDiv","getMidsByAlbum","getMessage","album","positionElementByIndex","pos","prevPos","whichChild","updateElementWith","updateListWith","onSort","canUpdate","_updateList","batch","updateBatch","base","onElementCreate","noScheduler","onDelete","getIndex","onUpdate","getUserStatusForSort","status","doTimeout","updateList","SORT_INTERVAL","handleTabSwipe","peerIdMids","overrideOnSelect","setInnerPeer","initMessagesForward","onConfirm","revoke","deleteScheduledMessages","deleteMessages","titleArgs","isMegagroup","canRevoke","sendScheduledMessages","cancelSelection","getSelection","empty","removeAllRanges","accumulateMapSet","selectedMids","onCancelSelection","toggleSelection","listenElement","selectedText","toString","createRange","verifyTouchLongPress","getElementFromTarget","getElementsBetween","last","firstRect","lastRect","isHigher","parent","lookupBetweenParentClassName","lookupBetweenElementsQuery","firstIndex","targetLookupClassName","verifyTarget","seen","selecting","firstTarget","processElement","checkBetween","seenSet","isSelected","isMidSelected","seenLength","findUpAsChild","elementsBetween","toggleByMid","canceledSelection","verifyMouseMoveTarget","removeManual","documentListenerOptions","hasCheckbox","getCheckboxInputFromElement","isElementShouldBeSelected","appendCheckbox","forceSelection","cantForward","cantDelete","cantSend","appMessagesManager","getMessageFromStorage","canDeleteMessage","onUpdateContainer","toggleCheckboxes","wasSelecting","blurActiveElement","forwards","onToggleSelection","updateContainer","toggleElementCheckbox","unselect","config","forwarded_count_max","toggleMid","updateElementSelection","contentTab","selectionCountEl","selectionGotoBtn","selectionForwardBtn","selectionDeleteBtn","navScrollableContainer","selectionContainer","btnCancel","attachClickOptions","keys","fromPeerId","isPrivate","transitionElement","opacity","recording","bubble","canSelectBubble","isGroupedBubbleSelected","getMidsByMid","getBubbleGroupedItems","groupContainer","isGroupedSelected","isGroupedMidsSelected","mounted","getMountedBubble","borderRadius","rowsWrapper","fakeSelectionWrapper","fakeRowsWrapper","fakeSelectionRect","fakeRowsRect","widthFrom","widthTo","scale","initTranslateX","br","selectionInputWrapper","selectionSendNowBtn","isGrouped","groupedCheckboxInput","attachTo","onGotoClick","onForwardClick","onSelectClick","onClearSelectionClick","onDeleteClick","onContextMenu","cancelBubble","withSelection","prevTabId","urlsToRevoke","nextRates","loadedChats","firstLoad","log","logger","monthContainers","mediaTabsMap","asChatList","groupByMonth","hideEmptyTabs","onTransitionStart","onTransitionEnd","searchContextMenu","navScrollable","tabsMenu","menuTab","span","prevId","searchGroupMedia","horizontalMenu","tabContent","skipScroll","newMediaTab","fromMediaTab","offsetTop","scrollHeight","rect2","onMediaClick","targetClassName","copySearchContext","openMedia","inputMessagesFilterPhotoVideo","inputMessagesFilterDocument","useHeavyAnimationCheck","lock","unlockAndRefresh","elemsToAppend","sharedMediaDiv","entity","totalEntities","display_url","sliced","matchUrl","same","hostname","rDescription","previewDiv","getAbbreviation","rTitle","subtitleFragment","htmlToDocumentFragment","HTMLAnchorElement","decodeURIComponent","href","firstChild","wrapPlainText","method","monthContainer","getMonthContainerByTimestamp","afterPerforming","inputMessagesFilterEmpty","showMembersCount","participants_count","regExp","RegExp","cleanSearchText","titleSpan","formatPhoneNumber","formatted","arg","globalContacts","isShort","minDate","renderRecentSearch","recent","recentSearch","getTopPeers","peers","people","onlyFirstName","renderParticipants","membersList","deleted","LOAD_COUNT","loadMembers","loadChats","logStr","used","slicedLength","ids","filters","counters","getSearchCounters","firstMediaTab","counter","membersTab","toLoad","loadType","timestamp","setHours","setDate","dateTimestamp","getTime","containers","month","getFullYear","year","dateElement","IntlDateElement","haveTimestamps","goFirst","revokeObjectURL","newInputFilter","maxDate","PrivacyType","appPrivacyManager","privacy","updatePrivacy","rules","inputKey","privacyRules","saveApiUsers","users","saveApiChats","chats","apiUpdatesManager","processLocalUpdate","inputRule","rule","privacyKey","types","allowPeers","disallowPeers","onRadioChange","captions","captionElement","radioSection","exceptions","Everybody","Nobody","radioRows","Contacts","skipTypes","noExceptions","generateSection","exceptionTexts","exception","_peerIds","newPeerIds","generateStr","splitPeersByType","getPrivacy","getPrivacyRulesDetails","setRadio","chatKey","usersKey","splitted","getUserInput","setPrivacy","phoneSection","nextSibling","stickerContainer","inputContent","btnReturn","sliceTabsUntilTab","canFocus","isFirstInput","isFirst","email","codeInputField","passwordManager","confirmPasswordEmail","goNext","btnChange","btnResend","disable","cancelPasswordEmail","resendPasswordEmail","onContinueClick","btnContinue","btnSkip","matchEmail","toggleButtons","updateSettings","hint","currentPassword","plainPassword","newPassword","symbols","isCancel","onSkipClick","saveHint","passwordInputField","monkey","verifyInput","has_password","labelText","IntlElement","getStateInterval","_state","check","auth","btnChangePassword","btnDisablePassword","btnSetRecoveryEmail","has_recovery","btnSetPassword","Session","app_name","app_version","ip","country","date_active","date_created","hash","midtitle","device_model","system_version","platform","authorizations","session","btnTerminate","otherSection","privacyTab","updateActiveSessions","onTerminateClick","menuElement","btnAdd","toggleBlock","bot","blocked","getBlocked","blockedPeerIds","blockedUsersRow","passwordState","twoFactorRow","email_unconfirmed_pattern","activeSessionsRow","setBlockedCount","updateBlocked","rowsByKeys","numberVisibilityRow","lastSeenTimeRow","photoVisibilityRow","callRow","linkAccountRow","groupChatsAddRow","updatePrivacyRow","disallowLength","allowLength","sensitive_can_change","sensitive_enabled","sensitiveRow","_enabled","deleteButton","clearAllDrafts","auths","rgbaToHsla","g","l","hslaToRgba","hue2rgb","hexaToRgba","hexa","parseInt","rgbaToHexa","rgba","hslaStringToHexa","hsla","alpha","val","endsWith","hslaStringToRgba","highlightningColor","hue","saturation","lightness","onGrabStart","boxDragger","onGrabEnd","box","sliders","hueDragger","hexInputField","rgbInputField","inputs","valid","setColor","rgbRegExp","attachBoxListeners","attachHueListeners","boxRect","saturationHandler","hueRect","hueHandler","updateHexInput","updateRgbInput","hexaToHsla","rgb","boxX","percentY","boxY","percentHue","hueX","updatePicker","rgbaArray","hex","hsl","getCurrentColor","maxX","maxY","posX","posY","lightnessX","lightnessY","_applyColor","updateColorPicker","colorPicker","background","theme","pushToState","applyCurrentTheme","onColorChange","applyColor","getTheme","grid","backgroundColor","throttle","uploadTempId","clicked","onUploadClick","file","dc_id","file_reference","wallpaper","slug","upload","addNotifyListener","_wallpaper","newDoc","newCacheContext","setBackgroundDocument","addWallPaper","onResetClick","defaultTheme","themes","blurCheckboxField","blur","onGridClick","saveToCache","fetch","response","cacheStorage","_tempId","onReady","imageUrl","naturalWidth","naturalHeight","pixel","pixels","getImageData","data","pixelsLength","outPixel","Uint8ClampedArray","averageColor","uploadButton","colorButton","resetButton","accountWallpapers","wallpapers","pattern","stickerSetInput","onStickersClick","fileId","sendMessageWithDocument","h6","setOnlyOnePlayableGroup","stickersDiv","stickersFooter","loadStickerSet","toggleStickerSet","esgSticker","initialValue","minValue","valueDiv","range","messagesTextSize","chatBackgroundButton","animationsCheckboxField","enterRow","ctrlEnterRow","contactsCheckboxField","privateCheckboxField","groupsCheckboxField","channelsCheckboxField","gifsCheckboxField","videosCheckboxField","suggestCheckboxField","bigCheckboxField","loopCheckboxField","stickerSets","renderStickerSet","assumeType","firstNameInputField","bioInputField","getSelf","usernameInputField","setProfileUrl","profileUrlContainer","profileUrlAnchor","updateProfile","uploadProfilePhoto","foundInFilters","dialogsByFilters","onSelectChange","confirmBtn","pinned_peers","other","editFolderTab","setFilter","filtersStorage","getDialogFilters","dialogsStorage","getFolder","categoriesSection","exclude_muted","ico","exclude_archived","exclude_read","non_contacts","groups","broadcasts","bots","chatsSection","selectedPeers","include_peers","exclude_peers","addedInitial","_add","hasOwnProperty","originalFilter","deleteFolderButton","updateDialogFilter","bool","menuBtn","generateList","h2Text","categories","includedFlagsContainer","excludedFlagsContainer","include","createDialogFilter","editCheckForChange","loadAnimationPromise","wrapDraftText","ul","renderMore","_length","firstTime","onEditOpen","onCreateOpen","filtersRendered","dialogFilter","folder","channels","isAnyGroup","filterId","getFilter","orderIndex","createFolderBtn","foldersSection","suggestedSection","onFiltersContainerUpdate","renderFolder","getSuggestedFilters","suggestedFilters","NotifySection","enabledRow","typeText","previewEnabledRow","inputNotifyPeer","getNotifySettings","notifySettings","applySettings","show_previews","mute","showPreviews","inputSettings","mute_until","updateNotifySettings","contactsSignUpRow","soundRow","sound","getContactSignUpNotification","setContactSignUpNotification","invokeApiCacheable","lang_pack","languages","language","lang_code","native_name","getLangPack","getCacheLangPack","langPack","logOut","phoneDiv","buttonsDiv","edit","folders","general","fillElements","channelNameInputField","channelDescriptionInputField","onLengthChange","createChannel","withConfirm","btnConfirm","importContact","telInputField","lockWithPromise","validate","country_code","inputSearch","openContacts","sortedUserList","createList","renderPage","sortedLists","chatList","generateScrollable","scrollables","wasFilterId","setFilterId","onTabChange","fakeGradientDelimiter","appSidebarLeft","sidebarHeader","onContactsClick","backBtn","btnArchive","themeCheckboxField","menuButtons","openUsername","sessionStorage","kz_version","isMainDomain","toolsBtn","btnMenuFooter","rel","stopPropagation","suffix","versionFull","newBtnMenu","initSearch","archivedCount","requestPeer","searchContainer","pickedElements","selectedPeerId","selectedMinDate","selectedMaxDate","updatePicked","removeProperty","helper","unselectEntity","renderEntity","dates","dateData","getAttribute","peopleContainer","hideNewBtnMenuTimeout","onFocus","clearRecentSearchBtn","detailsMap","newGroupDiff","updateGroup","viaBotId","fwdFromId","removeBubble","insertObject","foundBubble","foundAtIndex","foundMidOnSameTimestamp","_timestamp","_mid","bubbleGroup","insertIndex","initDate","onPick","noButtons","selectedDate","onPrevClick","selectedMonth","setMonth","getMonth","minMonth","prevBtn","onNextClick","maxMonth","onDateClick","selectedEl","setTimeTitle","setFullYear","getDate","controlsDiv","monthTitle","monthsContainer","handleTimeInput","onOverflow","maxString","hoursInputField","minutesInputField","number","setMinutes","getMinutes","getHours","popupCenterer","timeOptions","minute","hour","sendDate","dateOptions","day","weekday","firstDate","weekStartDate","getDay","renderElement","dayIndex","clonedDate","showOverflowMonths","lines","StickyIntersector","handler","observeHeaders","observeElements","headersObserver","IntersectionObserver","entries","entry","targetInfo","boundingClientRect","stickyTarget","rootBoundsInfo","rootBounds","threshold","root","elementsObserver","isIntersecting","sentinel","headerSentinel","addSentinel","observe","disconnect","unobserve","updated","postKey","replies","leftPart","recent_repliers","getHistoryStorage","channel_id","isUnread","read_max_id","max_id","readMaxId","textSpan","iconSpan","rippleContainer","subscribeRepliesThread","updateMessage","MessageRender","setTime","bubbleContainer","messageDiv","views","postAuthor","post_author","fwd_from","saved_from_msg_id","forward","edit_date","edit_hide","pinned","timeSpan","renderReplies","isFooter","repliesFooter","setReply","isReplacing","currentReplyDiv","reply_to_mid","replyToPeerId","reply_to","reply_to_peer_id","appPeersManager","originalPeerTitle","originalMessage","wrapSingleMessage","needUpdate","replyMid","getElementByPoint","verticalSide","horizontalSide","floor","elementFromPoint","reflowScrollableElement","EMOJI_LANG_PACK","keywords","version","langCode","langPackCode","keywordLangPacks","indexedLangPacks","getKeywordsPromises","storageKey","stateStorage","from_version","keywordsDifference","packKeywords","keyword","emoticons","getEmojiKeywords","lastRequestedLangCode","getRecentEmojis","indexObject","emojis","indexEmojis","search","POPULAR_EMOJI","getRecentEmojisPromise","recentEmoji","fixEmoji","appEmojiManager","loadedURLs","appendEmoji","unify","spanEmoji","kek","wrapSingleEmoji","getEmojiFromElement","nodeType","nodeValue","closeScrollTop","onContentClick","messageInput","inputHTML","inserted","savedRange","getSavedRange","sel","addRange","getRangeAt","rangeCount","deleteContents","insertNode","setStart","setStartAfter","collapse","divs","Emoji","category","titleDiv","itemsDiv","unified","menu","emojiScroll","hasRecent","activeId","menuOnClick","stickyIntersector","setMenuActive","recentItemsDiv","observeStickyHeaderChanges","scrollPromise","processInvisibleDiv","intersector","isVisible","getAnimations","checkAnimation","processVisibleDiv","gifWidth","gifHeight","willUseWidth","calcImageInBox","gifsContainer","masonry","EMOTICONSSTICKERGROUP","addLazyLoadQueueRepeat","regularLazyLoadQueue","animatedDivs","checkAnimationContainer","renderSticker","observeAnimatedDiv","queueCategoryPush","categoryDiv","categoryTitle","superStickerRenderer","recentDiv","categoryPush","menuWrapper","menuScroll","inlineResults","setHash","geo","lat","long","accuracy_radius","botId","getInputPeerById","geo_point","getGeoInput","stopTime","noErrorBox","botResults","queryId","query_id","savePhoto","generateQId","resultId","topPeers","topPeer","rating","setKeyValueToStorage","startParam","startBot","bot_inline_placeholder","peerData","setDraft","msg_id","getServerMessageId","callbackAnswer","noLinks","noLinebreaks","queryAndResultIds","inlineResult","pushPopularBot","queryID","resultID","send_message","reply_markup","replyMarkup","sendText","inputMedia","sendMessage","getMediaInput","geoPoint","address","provider","venue_id","venue_type","phone_number","vcard","percent","sendOther","appInlineBotsManager","nextOffset","onGifsClick","gifsDiv","checkAnimations","newSearch","gifBotPeerId","resolveUsername","getInlineResults","setsDiv","countDiv","stickerDiv","renderFeatured","getFeaturedStickers","coveredSets","filterRendered","renderSet","searchStickerSets","forceClose","inited","onMouseOut","displayTimeout","isActive","toElement","willBeActive","onmouseout","onmouseover","tabId","onSelectTabClick","searchButton","deleteBtn","checkRights","tabsEl","tabsElements","canSendStickers","canSendToPeer","canSendGifs","chatInput","getGoodRange","lockIntersectionGroup","unlockIntersectionGroup","unlock","refresh","emojiTab","stickersTab","gifsTab","0","1","2","getVisible","clearVisible","activeElement","jumpedTo","stuck","which","scrollLeft","clearDraft","emoticonsDropdown","IGNORE_ACTIONS","TEST_SCROLL","appUsersManager","appPhotosManager","appProfileManager","appDraftsManager","appMessagesIdsManager","unreadOut","skippedMids","dateMessages","scrolledDown","isScrollingTimeout","unreaded","unreadedSeen","loadedTopTimes","loadedBottomTimes","messagesQueuePromise","messagesQueue","messagesQueueOnRender","messagesQueueOnRenderAdditional","firstUnreadBubble","replyFollowHistory","isFirstLoad","passEntities","viewsMids","onBubblesClick","chatInner","onDatePick","contactDiv","appImManager","bubbleMid","reply_to_top_id","lastMsgId","openThread","filterMessages","getDiscussionMessage","savedFrom","msgId","isVideoComponentElement","messageId","documentDiv","isMediaCompatibleForDocumentViewer","parents","hasAspecter","albumItem","getMidsByMessage","isReplyClick","replyToMid","reply_to_msg_id","getDistanceToEnd","topbar","pinnedMessage","setCorrectIndex","lastScrollDirection","requestHistory","setMessageId","setScroll","bubbleGroups","setBubblePosition","scrollingToBubble","scrollToBubbleEnd","deleteMessagesByIds","tempMessage","repliesElement","grouped_id","newPoll","safeRenderMessage","scrollToBubbleIfLast","getGroupedBubble","updatePosition","deleteEmptyDateGroups","deletedMids","renderedId","renderMaxId","groupedMessagesStorage","highlightBubble","initMessageReply","dateMessage","renderNewMessagesByIds","msgIds","setUnreadCount","updateUnreadByDialog","finishPeerChange","updateMessageInput","isScrolledDown","setMessagesQueuePromise","performHistoryResult","postViewsElements","str","different","postViews","unreadedObserver","onUnreadedInViewport","viewsObserver","sendViewCountersDebounced","incrementMessageViews","wasHeight","offsetHeight","resizing","skip","scrolled","part","rAF","onResizeEnd","setEndRAF","ResizeObserver","contentRect","realDiff","_part","needScrollTop","readUnreaded","readPromise","idle","focusPromise","bubblesMaxId","readContents","isMentionUnread","readHistory","bad","getHistoryTopPromise","getHistoryBottomPromise","getHistory","setLoaded","onScrolledTop","loadMoreHistory","readOutboxMaxId","permanent","emptyPlaceholderMid","deleteSelectedMids","replyTo","getLastBubble","lastDateGroup","getLastDateGroup","forceDirection","forceDuration","dateGroup","scrollToBubble","lastElem","lastTime","firstTimestamp","datasetKey","today","bubbleContent","serviceMsg","bubblesToo","attachedUnreadBubble","fetchNewPromise","onAnimateLadder","resolveLadderAnimation","samePeer","topMessage","pinnedMessages","isTarget","savedPosition","getChatSavedPosition","getReadMaxIdIfUnread","isJump","apiManager","setQueueId","messageEntityBotCommand","isBot","additionMsgId","maxBubbleId","getBubbleByPoint","oldChatInner","lockGroup","lastScrollTop","unlockGroup","fromUp","followingUnread","mountedByLastMsgId","findNextMountedBubbleByMsgId","afterSetPromise","needFetchInterval","isFetchIntervalNeeded","getNewHistory","isBottomEnd","Bottom","onScrolledAllDown","getDialogOnly","unread_mark","markDialogUnread","canWrite","queue","setUnreadDelimiter","getDateContainerByMessage","addBubble","multipleRender","albumMustBeRenderedFull","our","contentWrapper","wasClassNames","classNames","transitionDelay","originalMid","unread","chat_id","wrapMessageActionTextNew","renderMessagesQueue","is_single","messageMessage","messageMedia","getAlbumText","richText","canHaveTail","isStandaloneMedia","needToSetHTML","emojiEntities","strLength","curr","big","containerDiv","rowDiv","buttonEl","same_peer","checkSwitchReturn","switchInlineQuery","column","callbackButtonClick","messageWithReplies","getMessageWithReplies","withReplies","nameContainer","processingWebPage","noAutoDownloadMedia","previewResizer","preview","quote","quoteTextDiv","site_name","textDiv","isSquare","emojiSticker","animatedSticker","staticSticker","newNameContainer","wrapGroupedDocuments","lastContainer","texts","wrapPoll","needName","isForwardFromChannel","from_id","isHidden","from_name","getPeerColorById","goto","generateTail","renderMessage","isBackLimit","previousScrollHeightMinusTop","needReflowScroll","processLocalMessageRender","firstSlice","lastSlice","Top","newScrollTop","getScheduledMessages","additionMsgIds","isAdditionRender","animateAsLadder","targetMid","sortedMids","topIds","middleIds","bottomIds","setBubbles","delay","lastMsDelay","topRes","middleRes","bottomRes","delays","listElements","creator","renderEmptyPlaceholder","service","generateMessageId","peer_id","getOutputPeer","saveMessages","side","checkPlaceholders","bot_info","checkIfEmptyPlaceholderNeeded","generateLocalFirstMessage","getRenderedLength","realLoadCount","Both","resultPromise","isFirstMessageRender","processResult","historyResult","serviceStartMessageId","threadsServiceMessagesIdsStorage","sup","processPromise","waitPromise","safeCount","mustBeCount","unpin","canUnpin","canPinMessage","oneSide","silent","unpinAllMessages","hidePinnedMessages","updatePinnedMessage","buttonText","pinButtonText","isSelectionEmpty","selectionRange","START_TO_END","reason","reportMessages","STICKER_EMOJI","preloadStickerPromise","preloadAnimatedEmojiSticker","margin","marginTop","appPollsManager","appDocsManager","onSendScheduledClick","onReplyClick","onEditClick","initMessageEditing","onCopyClick","onCopyAnchorLinkClick","onCopyLinkClick","threadMessage","channel_post","onPinClick","onUnpinClick","onRetractVote","onStopPoll","stopPoll","isTargetAGroupedItem","isSelectable","isTextSelected","isAnchorTarget","isUsernameTarget","selectedMid","groupedItem","hasAttribute","notDirect","scheduleSending","editMessage","scheduleDate","canEditMessage","hasTarget","isGoodType","sendMenuButtons","onSilentClick","onScheduleClick","sendMenu","openSide","onContextElement","onSubmitClick","send","radioLabel","isEmpty","isInputEmpty","questions","appendMoreField","correctAnswers","optionInputFields","labelOptions","weakMap","questionInputField","sendSilent","setPeerId","dd","settingsCaption","anonymousCheckboxField","multipleCheckboxField","quizCheckboxField","quizSolutionField","quizElements","quizSolutionCaption","quizHr","quizSolutionContainer","quizSolutionSubtitle","onEscape","getFilledAnswers","HTMLInputElement","getRichValue","question","quizSolution","force","quizSolutionEntities","inputMediaPoll","getInputMediaPoll","replyToMsgId","helperType","clearHelper","questionField","files","willAttachType","confirmShortcutIsSendShortcut","wasInputValue","willAttach","sendFileDetails","onKeyDown","placeCaretAtEnd","attachFile","itemDiv","isVideo","source","objectURL","videoWidth","videoHeight","audioDecodedByteCount","webkitAudioDecodedByteCount","noSound","onload","isPhoto","isAudio","finish","onerror","mediaContainer","caption_length_max","showLengthOn","messageInputField","groupCheckboxField","attachFiles","isMedia","firstType","sendAlbum","sendFile","foundPhotos","foundVideos","albumsLength","albumContainer","AXIS_Y_KEYS","AXIS_X_KEYS","attachListNavigation","waitForKey","keyNames","getCurrentTarget","setCurrentTarget","_target","scrollTo","hadTarget","fastSmoothScroll","getNextTargetX","currentTarget","isNext","nextTarget","handleArrowKey","property","endProperty","currentRect","targetRect","getNextTargetY","fireSelect","canContinue","resetTarget","_onKeyDown","hidden","onVisible","listType","navigationItem","noBlurOnPop","removeItem","attachNavigation","controller","addHelper","fromController","hideOtherHelpers","onChangeScreen","ready","getMinDate","getMaxDate","canSendWhenOnline","btnSendWhenOnline","getRichValueWithCaret","field","withEntities","selNode","selOffset","startContainer","endContainer","startOffset","endOffset","getRichElementValue","caretPos","substr","combineSameEntities","onEmojiSelected","firstChar","getBothEmojiKeywords","searchEmojis","listElement","BASE","BASE_CLASS_LIST_ELEMENT","getReadyToSend","botInfos","ignoreCase","commands","botInfo","botCommand","command","found","helpers","preserveHelper","insertAtCaret","topMsgId","trimmed","getMentions","onBodyTouchStart","btnHover","attachButtonListener","checkAvailability","checkForceReply","touchListener","getReplyMarkup","sendInlineResult","_checkQuery","gifsMasonry","isGallery","gallery","noCommands","separator","dataURL","switch_pm","btnSwitchToPM","switchToPM","start_param","checkQuery","appChatsManager","appWebPagesManager","serverTimeManager","appNotificationsManager","lastUrl","lastTimeType","replyElements","willSendWebPage","recordCanceled","recordStartTime","lockRedo","canRedoFromHTML","undoHistory","executedHistory","canUndoFromHTML","onCancelRecordClick","recorder","opusDecodeController","setKeepAlive","onEmoticonsOpen","toggleClass","btnToggleEmoticons","onEmoticonsClose","isUserOnlineVisible","openScheduled","prepareDocumentExecute","undoRedo","needHTML","sameHTMLTimes","currentHTML","handleMarkdownShortcut","formatKeys","markupTooltip","showLinkEditor","applyMarkdown","shiftKey","onMessageInput","richValue","markdownEntities","parseMarkdown","mergeEntities","parseEntities","urlEntities","getWebPagePromise","saveWebPage","setTopInfo","noWebPage","onHelperCancel","helperFunc","setTyping","editMsgId","saveDraftDebounced","checkAutocomplete","updateSendBtn","getEmojiEntityFromEmoji","onBtnSendClick","forwarding","releaseMediaPlayback","setSingleMedia","showDiscardPopup","btnCancelRecord","recordingOverlayListener","recordingNavigationItem","sourceNode","analyser","createAnalyser","connect","fftSize","frequencyData","frequencyBinCount","getByteFrequencyData","recordRippleEl","recordTimeEl","needReturn","onHelperClick","helperWaitingForward","inputContainer","tail","goDownBtn","onGoDownClick","cancelBtn","newMessageWrapper","inputMessageContainer","goDownUnreadBadge","goMentionBtn","goMentionUnreadBadge","goToNextMention","btnScheduled","btnToggleReplyMarkup","replyKeyboard","attachMenuButtons","fileInput","accept","attachMenu","multiple","autocompleteHelperController","stickersHelper","emojiHelper","commandsHelper","mentionsHelper","inlineHelper","btnSendContainer","btnSend","attachMessageInputField","previousQuery","onFakeInput","draft","saveDraft","encoderSampleRate","monitorGain","numberOfChannels","recordingGain","reuseWorker","touchMouseDown","onstop","ondataavailable","typedArray","dataBlob","Blob","decode","isVoiceMessage","pinnedControlBtn","fakeContainer","fakePinnedControlBtn","originalChat","pinnedMessageContainer","unread_count","hasMentions","unread_mentions_count","no_webpage","syncDraft","helperToo","clearInput","fromUpdate","getDraft","rMessage","setInputValue","isAnonymousSending","oldInputField","inputFake","attachMessageInputListeners","fixSafariStickyInputFocusing","isSendShortcutPressed","ctrlKey","metaKey","childNodes","readAllHistory","commandsMap","bold","italic","underline","strikethrough","monospace","saveExecuted","executed","haveThisType","isCollapsed","tag","commonAncestorContainer","setActiveMarkupButton","insertText","insertEntity","isHelper","fullValue","prefix","AUTO_COMPLETE_REG_EXP","matchIndex","newValue","hadEntities","insertLength","addEntities","caret","selectNode","noCollapse","selectNodeContents","setRichFocus","_value","foundHelper","suggest","checkEmoticon","checkInlineAutocomplete","needPlaceholder","inlineMatch","btnPreloader","inlinePlaceholder","canSetDraft","fireEvent","clearValue","fixSafariStickyInput","clearReply","unicode","pushRecentEmoji","webPage","forwardMessages","pushRecentSticker","replyFragment","fromPeerIdsMids","fromPeerIds","smth","peerTitles","firstMessage","usingFullAlbum","albumMids","peerTitleEl","callerFunc","replyParent","floating","divAndCaption","CLASSNAME_BASE","btnClose","wrapperUtils","attachOnCloseEvent","needClose","isFloating","maxActive","setFloating","setUtilsWidth","prevEl","nextEl","attachClick","toggleEl","volumeProgressLineContainer","tunnel","progressWrapper","BAR_HEIGHTS","PinnedMessageBorder","drawRect","getClipPath","barHeight","GAP","clipPath","path","getBarHeight","ONE","TWO","THREE","FOUR","MORE","getMarkHeight","markHeight","getMarkTranslateY","getTrackTranslateY","trackHeight","getTrackHeight","clipPathId","markTranslateY","trackTranslateY","defs","mark","AnimatedSuper","animateFirst","currentIndex","clearRow","DURATION","reflow","clearRows","previousIndex","fromTop","ignorePrevious","setNewRow","previousRow","AnimatedCounter","previousNumber","animatedSuper","decimal","previousDecimalNumber","getRow","EMPTY_INDEX","previousByDecimal","n","decimalNumber","getDecimal","hideLeft","pinnedMaxMid","pinnedMid","pinnedIndex","wasPinnedIndex","wasPinnedMediaIndex","locked","waitForScrollBottom","loadedBottom","loadedTop","scrollDownListenerSetter","getCurrentIndexPromise","isStatic","debug","dAC","pinnedMessageBorder","animatedSubtitle","animatedMedia","animatedCounter","btnOpen","openPinned","setPinnedMessage","_setPinnedMessage","unsetScrollDownListener","testMid","isNeededMore","getCurrentIndex","LOAD_OFFSET","correctAfter","gotRest","getPinnedMessage","backLimited","offset_id_offset","lastY","isDown","deltaY","handleScrollSideEvent","refreshPosition","setScrollDownListener","handleFollowingPinnedMessage","isLast","setCount","writeTo","writeMediaTo","onResize","resize","setUtilsRAF","chatUtils","chatInfo","chatAudio","btnBack","person","avatarElement","btnMore","getDeleteButtonText","btnJoin","btnPinned","btnMute","btnSearch","followPinnedMessage","getSearchContext","activeScreen","onBtnBackClick","isFirstChat","getChannelFull","channelFull","linked_chat_id","chatsFull","chatContextMenuHintWasShown","contactPeerId","getContactMediaInput","usersFull","joinChannel","setMutedState","isTopMessage","hiddenPinnedMessages","byCurrent","destroy","wasPeerId","newPinnedMessage","appSearch","beginSearch","btnPickDate","selectedIndex","selectResult","upBtn","downBtn","foundCountEl","renderedCount","onResultsClick","onFooterClick","onUpClick","onDownClick","footer","dateBtn","wasAlreadyUsed","backgroundEl","Log","Warn","Debug","_item","backgroundImage","contextMenu","constructUtils","constructPeerHelpers","constructPinnedHelpers","constructDiscussionHelpers","constructScheduledHelpers","searchTab","setAutoDownloadMedia","setLoadMutex","loadSidebarMedia","autoDownload","setPrefix","addedListener","waitingForMouseUp","mouseUpCounter","onMouseUpSingle","resetSelection","tools1","tools2","cancelClosening","linkBackButton","linkInput","applyLink","isLinkValid","setTooltipPosition","linkApplyButton","applyDiv","delimiter1","delimiter2","delimiter3","matchUrlProtocol","hideTimeout","nodes","getSelectedNodes","currentMarkups","closest","activeButtons","getActiveMarkupButton","isLinkToggle","bodyRect","selectionRect","inputRect","selectionTop","sizesRect","containerRect","isFirstShow","setMouseUpEvent","arcParameter","rx","ry","xAxisRotation","largeArcFlag","sweepFlag","generatePathData","tl","tr","bl","onDragOver","onDragLeave","onDrop","outlineWrapper","dropIcon","dropHeader","dropSubtitle","disableTransition","INTERNAL_LINK_TYPE","chatInvite","broadcast","updates","processUpdateMessage","putPhoto","peopleCount","FOCUS_EVENT_NAME","columnEl","offline","updateStatusInterval","backgroundPromises","onHashChange","parseUriParams","tgaddr","replaceState","onclick","wrapUrl","postId","post","setSettings","chatsSelectTabDebounced","setLoop","onDocumentPaste","attachType","canDrag","DragEvent","_types","dataTransfer","isIDLE","updateStatus","createNewChat","chatsSelectTab","saveChatPosition","popup","singleInstance","activateInstance","addAnchorListener","uriParams","hashtag","pathnameParams","STICKER_SET","processInternalLink","JOIN_CHAT","invite","PRIVATE_POST","thread","comment","MESSAGE","domain","protocol","makeLink","attachKeydownListener","IGNORE_KEYS","isOverlayActive","goodMid","nextDialog","commentId","resolveChannel","saveApiChat","noPathnameParams","pathname","noUriParams","uri","openComment","generateThreadServiceStartMessage","broadcastEvent","STATE_INIT","getBackground","setBackground","getFile","chatBubbles","chatPositions","themeColor","hslaStringToHex","backgroundUrl","applyHighlightningColor","setTheme","setCurrentBackground","prevTab","prevIdx","attachDragAndDropListeners","handleSelection","drops","mount","isFiles","foundMedia","foundDocuments","dropsContainer","drop","setPath","transitionTime","setUserStatus","invokeApiSingle","fromIndex","justReturn","spliced","beforeDestroy","chatIndex","spliceChats","existingIndex","setType","dot","typings","getPeerTypings","typing","langPackKeys","private","multi","mapa","typingElement","getTypingElement","descriptionElement","getPeerTyping","useWhitespace","typingContainer","getPeerStatus","topButtons","author","preloaderStreamable","isFirstOpen","pageEl","zoomElements","zoomSwipeStartX","zoomSwipeStartY","zoomSwipeX","zoomSwipeY","setZoomValue","rangeSelector","moversContainer","btnOut","btnIn","toggleZoom","setMoverAnimationPromise","highlightSwitchersTimeout","wholeDiv","isZooming","mover","ctrlKeyDown","changeZoom","onKeyUp","onWheel","scrollingUp","MEDIA_VIEWER_CLASSNAME","overlaysDiv","mainDiv","topbarLeft","onlyMobile","authorRight","zoom","setNewMover","onDownloadClick","moveLength","setMoverPromise","evt","zoomValue","videoPlayer","lockControls","zoomSwipeHandler","lastDiffY","addProgress","btnMenuToggle","setMoverToTarget","appMediaViewer","closing","fromRight","removeCenterFromMover","wasActive","realParent","SVGImageElement","SVGForeignObjectElement","needOpacity","visibleRect","overflowElement","overflowRect","overflowTop","overflowBottom","sticky","overflow","horizontal","visualViewport","windowHeight","innerWidth","innerHeight","getVisibleRect","HTMLImageElement","HTMLVideoElement","setFullAspect","scaleX","scaleY","getComputedStyle","getPropertyValue","brSplitted","fillPropertyValue","willBeLeft","willBeTop","isRejected","SVGSVGElement","sizeTailPath","mediaElement","clipId","newClipId","newSvg","outerHTML","SVGUseElement","sX","sY","upscale","_br","toLeft","newTransform","p1","newMover","oldAvatar","replaceChild","setAuthorInfo","isDocument","useContainerAsTarget","moveTheMover","mainColumns","padding","thumbPromise","useController","moverVideo","canPlayThrough","createPlayer","ckin","overlay","HAVE_FUTURE_DATA","attachCanPlay","networkState","NETWORK_LOADING","isntEnoughData","rollback","updateMediaSource","cancellablePromise","attachPromise","haveImage","captionTimeout","isForDocument","onAuthorClick","savePhotoFile","setCaptionTimeout","setBtnMenuToggle","btnMenuDelete","onCaptionClick","setCaption","_openMedia","onAvatarUpdate","removeFromAvatarsCache","getFullPhoto","getTarget","hadMessage","isAvatarCached","believeMe","isDialog","addedToQueue","oldValue","getPeerMigratedTo","peerTitle","onArchiveClick","selectedId","editPeerFolders","folder_id","toggleDialogPin","pinned_dialogs_count_max","onUnmuteClick","onUnreadClick","top_message","ConnectionStatus","SENDING_STATUS","hadConnect","connecting","timedOut","updating","setConnectionStatus","baseDcId","setFirstConnectionTimeout","connectionStatus","online","Connected","forceGetDifference","TimedOut","retryAt","setStatusText","currentLangPackKey","statusEl","statusPreloader","CHANGE_STATE_DELAY","getA","forceReconnect","timerSpan","interval","forceReconnectTimeout","setStateTimeout","statusContainer","constructContainer","indexKey","appDialogsManager","onListLengthChange","willChangeLength","addListDialog","isBatch","menuScrollContainer","lastActiveElements","offsets","loadDialogsPromise","sortedList","onChatsScroll","_onListLengthChange","checkIfPlaceholderNeeded","hasContacts","loadContacts","processContact","verifyUserIdForContacts","added","onChatsRegularScroll","sliceTimeout","perf","performance","scrollTopWas","rectContainer","rectTarget","firstY","firstElement","lastElement","elementOverflow","sliceFromStart","sliceFromEnd","deleteDialog","setOffsets","onChatsScrollTop","loadDialogs","chatsPreloader","allUnreadCount","bottomPart","addFilter","getDialogDom","validateDialogForFilter","setFiltersUnreadCount","updateDialog","setUnreadMessages","validateListForFilter","order","containerToAppend","renderedFilter","getDialogIndexKey","unsetTyping","onStateLoaded","foldersScrollable","isLoadedMain","isDialogsLoaded","isLoadedArchive","wasLoaded","accumulateArchivedUnread","updatesState","syncLoading","refreshConversations","getNotifyPeerTypeSettings","renderFiltersPromise","showFiltersPromise","storagesResults","addMissedDialogs","migratedTo","testDialogForFilter","topOffset","getOffsetIndex","bottomOffset","isDialogMustBeInViewport","unreadSpan","mutedCount","notMutedCount","setFilterUnreadCount","getAll","sortedDialogList","currentOffsetIndex","needIndex","getConversationsResult","isTopEnd","callbacks","cccc","offsetDialog","classNameType","subtitleArgs","placeholderContainer","generateEmptyPlaceholder","wrapLocalSticker","firstDialog","getDialogFromElement","lastDialog","withContext","openInner","lastActiveListElement","setPeerFunc","sameElement","getDialogByPeerId","lastMessage","highlightWord","setUnread","draftMessage","lastTimeSpan","playIcon","withoutMediaType","sender","senderBold","setStatusMessage","disableAnimationIfRippleFound","iconClassName","setSendingStatus","statusSpan","isPinned","hasUnreadBadge","isUnreadBadgeMounted","unreadBadge","hasMentionsBadge","isMentionBadgeMounted","mentionsBadge","transitionDuration","isMention","accumulateArchivedTimeout","originalDialog","getDialog","addDialog","_dialog","captionDiv","titleSpanContainer","titleP","rightSpan","module","exports","call","defineProperty","enumerable","Symbol","toStringTag","__esModule","create","default","prototype","AudioContext","webkitAudioContext","isRecordingSupported","bufferLength","encoderApplication","encoderFrameSize","encoderPath","maxFramesPerPage","mediaTrackConstraints","resampleQuality","streamPages","wavBitDepth","encodedSamplePosition","mediaDevices","getUserMedia","WebAssembly","clearStream","stream","getTracks","audioContext","closeAudioContext","encodeBuffers","getChannelData","encoder","postMessage","buffers","initAudioContext","initAudioGraph","scriptProcessorNode","createScriptProcessor","destination","onaudioprocess","inputBuffer","monitorGainNode","createGain","setMonitorGain","recordingGainNode","setRecordingGain","initSourceNode","createMediaStreamSource","loadWorker","Worker","initWorker","streamPage","storePage","recordedPages","samplePosition","page","originalSampleRate","sampleRate","wavSampleRate","onpause","resume","onresume","gain","setTargetAtTime","onstart","destroyWorker","Function","rippleClickId","drawRipple","startTime","clickId","elapsedTime","touchStartFired","clickY","sqrt","isRippleUnneeded","touchEnd","CLICK_EVENT_NAME","attachClickEvent","detachClickEvent","simulateClickEvent","rippleSquare","putPreloader","returnDiv","setButtonLoader","diffX","diffY","closeBtnMenu","menuOverlay","openedMenuOnClose","openBtnMenu","positionMenu","menuWidth","menuHeight","windowWidth","intermediateX","intermediateY","possibleSides","_cancelContextMenuOpening","_cancelContextMenuOpeningTimeout","cancelContextMenuOpening","attachContextMenuListener","onCancel","navigations","manual","currentHash","isPossibleSwipe","pushState","handleItem","moved","scrollRestoration","noHistory","origin","simulateEvent","raf","kind","scheduleFlush","do","read","write","currentHashPromise","newHashPromise","password","new_settings","invokeCrypto","newAlgo","new_algo","salt1","randomize","hashes","new_password_hash","inputCheckPassword","saveApiUser","setUserAuth","PasswordInputField","passwordVisible","onVisibilityClick","toggleVisible","onVisibilityClickAdditional","stealthy","tabIndex","PasswordMonkey","noCache","curFrame"],"mappings":"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","file":"15.1a3e11966cccf1381885.chunk.js","sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport InputField from \"../inputField\";\r\nimport lottieLoader, { RLottiePlayer } from \"../../lib/lottieLoader\";\r\n\r\nexport default class TrackingMonkey {\r\n public container: HTMLElement;\r\n\r\n protected max = 45;\r\n protected needFrame = 0;\r\n\r\n protected animation: RLottiePlayer;\r\n protected idleAnimation: RLottiePlayer;\r\n\r\n protected loadPromise: Promise;\r\n\r\n constructor(protected inputField: InputField, protected size: number) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('media-sticker-wrapper');\r\n\r\n const input = inputField.input;\r\n\r\n input.addEventListener('blur', () => {\r\n this.playAnimation(0);\r\n });\r\n\r\n input.addEventListener('input', (e) => {\r\n this.playAnimation(inputField.value.length);\r\n });\r\n\r\n /* codeInput.addEventListener('focus', () => {\r\n playAnimation(Math.max(codeInput.value.length, 1));\r\n }); */\r\n }\r\n\r\n // 1st symbol = frame 15\r\n // end symbol = frame 165\r\n public playAnimation(length: number) {\r\n if(!this.animation) return;\r\n\r\n length = Math.min(length, 30);\r\n let frame: number;\r\n if(length) {\r\n frame = Math.round(Math.min(this.max, length) * (165 / this.max) + 11.33);\r\n\r\n if(this.idleAnimation) {\r\n this.idleAnimation.stop(true);\r\n this.idleAnimation.canvas.style.display = 'none';\r\n }\r\n \r\n this.animation.canvas.style.display = '';\r\n } else {\r\n /* const cb = (frameNo: number) => {\r\n if(frameNo <= 1) { */\r\n /* idleAnimation.play();\r\n idleAnimation.canvas.style.display = '';\r\n animation.canvas.style.display = 'none'; */\r\n /* animation.removeListener('enterFrame', cb);\r\n }\r\n };\r\n animation.addListener('enterFrame', cb); */\r\n \r\n frame = 0;\r\n }\r\n //animation.playSegments([1, 2]);\r\n\r\n const direction = this.needFrame > frame ? -1 : 1;\r\n //console.log('keydown', length, frame, direction);\r\n\r\n this.animation.setDirection(direction);\r\n if(this.needFrame !== 0 && frame === 0) {\r\n this.animation.setSpeed(7);\r\n }\r\n /* let diff = Math.abs(needFrame - frame * direction);\r\n if((diff / 20) > 1) animation.setSpeed(diff / 20 | 0); */\r\n this.needFrame = frame;\r\n \r\n this.animation.play();\r\n\r\n /* animation.goToAndStop(15, true); */\r\n //animation.goToAndStop(length / max * );\r\n }\r\n\r\n public load() {\r\n if(this.loadPromise) return this.loadPromise;\r\n return this.loadPromise = Promise.all([\r\n lottieLoader.loadAnimationFromURL({\r\n container: this.container,\r\n loop: true,\r\n autoplay: true,\r\n width: this.size,\r\n height: this.size\r\n }, 'assets/img/TwoFactorSetupMonkeyIdle.tgs').then(animation => {\r\n this.idleAnimation = animation;\r\n\r\n // ! animationIntersector will stop animation instantly\r\n if(!this.inputField.value.length) {\r\n animation.play();\r\n }\r\n\r\n return lottieLoader.waitForFirstFrame(animation);\r\n }),\r\n\r\n lottieLoader.loadAnimationFromURL({\r\n container: this.container,\r\n loop: false,\r\n autoplay: false,\r\n width: this.size,\r\n height: this.size\r\n }, 'assets/img/TwoFactorSetupMonkeyTracking.tgs').then(_animation => {\r\n this.animation = _animation;\r\n\r\n if(!this.inputField.value.length) {\r\n this.animation.canvas.style.display = 'none';\r\n }\r\n\r\n this.animation.addEventListener('enterFrame', currentFrame => {\r\n //console.log('enterFrame', currentFrame, needFrame);\r\n //let currentFrame = Math.round(e.currentTime);\r\n \r\n if((this.animation.direction === 1 && currentFrame >= this.needFrame) ||\r\n (this.animation.direction === -1 && currentFrame <= this.needFrame)) {\r\n this.animation.setSpeed(1);\r\n this.animation.pause();\r\n }\r\n\r\n if(currentFrame === 0 && this.needFrame === 0) {\r\n //animation.curFrame = 0;\r\n \r\n if(this.idleAnimation) {\r\n this.idleAnimation.canvas.style.display = '';\r\n this.idleAnimation.play();\r\n this.animation.canvas.style.display = 'none';\r\n }\r\n }\r\n });\r\n //console.log(animation.getDuration(), animation.getDuration(true));\r\n\r\n return lottieLoader.waitForFirstFrame(_animation);\r\n })\r\n ]);\r\n }\r\n\r\n public remove() {\r\n if(this.animation) this.animation.remove();\r\n if(this.idleAnimation) this.idleAnimation.remove();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport InputField, { InputFieldOptions } from \"./inputField\";\r\n\r\nexport default class CodeInputField extends InputField {\r\n constructor(options: InputFieldOptions & {\r\n length: number,\r\n onFill: (code: string) => void\r\n }) {\r\n super({\r\n plainText: true,\r\n ...options\r\n });\r\n\r\n const input = this.input as HTMLInputElement;\r\n input.type = 'tel';\r\n input.setAttribute('required', '');\r\n input.autocomplete = 'off';\r\n\r\n let lastLength = 0;\r\n this.input.addEventListener('input', (e) => {\r\n this.input.classList.remove('error');\r\n this.setLabel();\r\n \r\n const value = this.value.replace(/\\D/g, '').slice(0, options.length);\r\n this.setValueSilently(value);\r\n \r\n const length = this.value.length;\r\n if(length === options.length) { // submit code\r\n options.onFill(this.value);\r\n } else if(length === lastLength) {\r\n return;\r\n }\r\n \r\n lastLength = length;\r\n });\r\n }\r\n}\r\n","import { IS_APPLE_MOBILE, IS_SAFARI } from \"./userAgent\";\n\n// mov is not supported in Chrome on macOS\nconst IS_MOV_SUPPORTED = !!document.createElement('video').canPlayType('video/quicktime') || IS_SAFARI || IS_APPLE_MOBILE;\n\nexport default IS_MOV_SUPPORTED;\n","import IS_MOV_SUPPORTED from \"./movSupport\";\nimport IS_WEBP_SUPPORTED from \"./webpSupport\";\n\nconst MEDIA_MIME_TYPES_SUPPORTED = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/bmp',\n 'video/mp4',\n 'video/webm'\n]);\n\nif(IS_MOV_SUPPORTED) {\n MEDIA_MIME_TYPES_SUPPORTED.add('video/quicktime');\n}\n\nif(IS_WEBP_SUPPORTED) {\n MEDIA_MIME_TYPES_SUPPORTED.add('image/webp');\n}\n\nexport default MEDIA_MIME_TYPES_SUPPORTED;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function setInnerHTML(elem: Element, html: string) {\r\n elem.setAttribute('dir', 'auto');\r\n elem.innerHTML = html;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, MessageAction } from \"../layer\";\nimport type { MyMessage } from \"../lib/appManagers/appMessagesManager\";\nimport { forEachReverse } from \"./array\";\n\nexport default function filterChatPhotosMessages(value: {\n count: number;\n next_rate: number;\n offset_id_offset: number;\n history: MyMessage[];\n}) {\n forEachReverse(value.history, (message, idx, arr) => {\n if(!((message as Message.messageService).action as MessageAction.messageActionChatEditPhoto).photo) {\n arr.splice(idx, 1);\n if(value.count !== undefined) {\n --value.count;\n }\n }\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { forEachReverse } from \"./array\";\nimport { safeAssign } from \"./object\";\n\nexport type ListLoaderOptions = {\n loadMore: ListLoader['loadMore'],\n loadCount?: ListLoader['loadCount'],\n loadWhenLeft?: ListLoader['loadWhenLeft'],\n processItem?: ListLoader['processItem'],\n onJump?: ListLoader['onJump'],\n onLoadedMore?: ListLoader['onLoadedMore']\n};\n\nexport type ListLoaderResult = {count: number, items: any[]};\nexport default class ListLoader {\n public current: T;\n public previous: T[] = [];\n public next: T[] = [];\n public count: number;\n public reverse = false; // reverse means next = higher msgid\n\n protected loadMore: (anchor: T, older: boolean, loadCount: number) => Promise>;\n protected processItem: (item: P) => T;\n protected loadCount = 50;\n protected loadWhenLeft = 20;\n \n public onJump: (item: T, older: boolean) => void;\n public onLoadedMore: () => void;\n\n protected loadedAllUp = false;\n protected loadedAllDown = false;\n protected loadPromiseUp: Promise;\n protected loadPromiseDown: Promise;\n\n constructor(options: ListLoaderOptions) {\n safeAssign(this, options);\n }\n\n public setTargets(previous: T[], next: T[], reverse: boolean) {\n this.previous = previous;\n this.next = next;\n this.reverse = reverse;\n }\n\n public get index() {\n return this.count !== undefined ? this.previous.length : -1;\n }\n\n public reset(loadedAll = false) {\n this.current = undefined;\n this.previous = [];\n this.next = [];\n this.loadedAllUp = this.loadedAllDown = loadedAll;\n this.loadPromiseUp = this.loadPromiseDown = null;\n }\n\n public go(length: number, dispatchJump = true) {\n let items: T[], item: T;\n if(length > 0) {\n items = this.next.splice(0, length);\n item = items.pop();\n if(!item) {\n return;\n }\n\n this.previous.push(this.current, ...items);\n } else {\n items = this.previous.splice(this.previous.length + length, -length);\n item = items.shift();\n if(!item) {\n return;\n }\n\n this.next.unshift(...items, this.current);\n }\n\n if(this.next.length < this.loadWhenLeft) {\n this.load(!this.reverse);\n }\n\n if(this.previous.length < this.loadWhenLeft) {\n this.load(this.reverse);\n }\n\n this.current = item;\n dispatchJump && this.onJump && this.onJump(item, length > 0);\n return this.current;\n }\n\n // нет смысла делать проверку для reverse и loadMediaPromise\n public load(older: boolean) {\n if(older && this.loadedAllDown) return Promise.resolve();\n else if(!older && this.loadedAllUp) return Promise.resolve();\n\n if(older && this.loadPromiseDown) return this.loadPromiseDown;\n else if(!older && this.loadPromiseUp) return this.loadPromiseUp;\n\n let anchor: T;\n if(older) {\n anchor = this.reverse ? this.previous[0] : this.next[this.next.length - 1];\n } else {\n anchor = this.reverse ? this.next[this.next.length - 1] : this.previous[0];\n }\n\n const promise = this.loadMore(anchor, older, this.loadCount).then(result => {\n if((older && this.loadPromiseDown !== promise) || (!older && this.loadPromiseUp !== promise)) {\n return;\n }\n\n if(result.items.length < this.loadCount) {\n if(older) this.loadedAllDown = true;\n else this.loadedAllUp = true;\n }\n\n if(this.count === undefined) {\n this.count = result.count || result.items.length;\n }\n\n const method = older ? result.items.forEach.bind(result.items) : forEachReverse.bind(null, result.items);\n method((item: any) => {\n const processed = this.processItem ? this.processItem(item) : item;\n\n if(!processed) return;\n\n if(older) {\n if(this.reverse) this.previous.unshift(processed);\n else this.next.push(processed);\n } else {\n if(this.reverse) this.next.push(processed);\n else this.previous.unshift(processed);\n }\n });\n\n this.onLoadedMore && this.onLoadedMore();\n }, () => {}).then(() => {\n if(older) this.loadPromiseDown = null;\n else this.loadPromiseUp = null;\n });\n\n if(older) this.loadPromiseDown = promise;\n else this.loadPromiseUp = promise;\n\n return promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { MediaSearchContext } from \"../components/appMediaPlaybackController\";\nimport type { SearchSuperContext } from \"../components/appSearchSuper.\";\nimport type { Message } from \"../layer\";\nimport appMessagesIdsManager from \"../lib/appManagers/appMessagesIdsManager\";\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\nimport rootScope from \"../lib/rootScope\";\nimport { forEachReverse } from \"./array\";\nimport filterChatPhotosMessages from \"./filterChatPhotosMessages\";\nimport ListLoader, { ListLoaderOptions } from \"./listLoader\";\n\nexport default class SearchListLoader extends ListLoader {\n public searchContext: MediaSearchContext;\n public onEmptied: () => void;\n\n constructor(options: Omit, 'loadMore'> & {onEmptied?: () => void} = {}) {\n super({\n ...options,\n loadMore: (anchor, older, loadCount) => {\n const backLimit = older ? 0 : loadCount;\n let maxId = this.current?.mid;\n\n if(anchor) maxId = anchor.mid;\n if(!older) maxId = appMessagesIdsManager.incrementMessageId(maxId, 1);\n\n return appMessagesManager.getSearch({\n ...this.searchContext,\n peerId: this.searchContext.peerId || anchor?.peerId,\n maxId,\n limit: backLimit ? 0 : loadCount,\n backLimit\n }).then(value => {\n /* if(DEBUG) {\n this.log('loaded more media by maxId:', maxId, value, older, this.reverse);\n } */\n\n if(this.searchContext.inputFilter._ === 'inputMessagesFilterChatPhotos') {\n filterChatPhotosMessages(value);\n }\n\n if(value.next_rate) {\n this.searchContext.nextRate = value.next_rate;\n }\n\n return {count: value.count, items: value.history};\n });\n },\n processItem: (message) => {\n const filtered = this.filterMids([message.mid]);\n if(!filtered.length) {\n return;\n }\n\n return options.processItem(message);\n }\n });\n\n rootScope.addEventListener('history_delete', this.onHistoryDelete);\n rootScope.addEventListener('history_multiappend', this.onHistoryMultiappend);\n rootScope.addEventListener('message_sent', this.onMessageSent);\n }\n\n protected filterMids(mids: number[]) {\n const storage = this.searchContext.isScheduled ? \n appMessagesManager.getScheduledMessagesStorage(this.searchContext.peerId) : \n appMessagesManager.getMessagesStorage(this.searchContext.peerId);\n const filtered = appMessagesManager.filterMessagesByInputFilter(this.searchContext.inputFilter._, mids, storage, mids.length) as Message.message[];\n return filtered;\n }\n\n protected onHistoryDelete = ({peerId, msgs}: {peerId: number, msgs: Set}) => {\n const shouldBeDeleted = (item: Item) => item.peerId === peerId && msgs.has(item.mid);\n const filter = (item: Item, idx: number, arr: Item[]) => {\n if(shouldBeDeleted(item)) {\n arr.splice(idx, 1);\n }\n };\n\n forEachReverse(this.previous, filter);\n forEachReverse(this.next, filter);\n\n if(this.current && shouldBeDeleted(this.current)) {\n /* if(this.go(1)) {\n this.previous.splice(this.previous.length - 1, 1);\n } else if(this.go(-1)) {\n this.next.splice(0, 1);\n } else */if(this.onEmptied) {\n this.onEmptied();\n }\n }\n };\n\n protected onHistoryMultiappend = (obj: {\n [peerId: string]: Set;\n }) => {\n if(this.searchContext.folderId !== undefined) {\n return;\n }\n\n // because it's reversed\n if(!this.loadedAllUp || this.loadPromiseUp) {\n return;\n }\n\n const mids = obj[this.searchContext.peerId];\n if(!mids) {\n return;\n }\n\n const sorted = Array.from(mids).sort((a, b) => a - b);\n const filtered = this.filterMids(sorted);\n const targets = filtered.map(message => this.processItem(message)).filter(Boolean);\n if(targets.length) {\n this.next.push(...targets);\n }\n };\n\n protected onMessageSent = ({message}: {message: Message.message}) => {\n this.onHistoryMultiappend({\n [message.peerId]: new Set([message.mid])\n });\n };\n\n public setSearchContext(context: SearchSuperContext) {\n this.searchContext = context;\n\n if(this.searchContext.folderId !== undefined) {\n this.loadedAllUp = true;\n\n if(this.searchContext.nextRate === undefined) {\n this.loadedAllDown = true;\n }\n }\n\n if(this.searchContext.inputFilter._ === 'inputMessagesFilterChatPhotos') {\n this.loadedAllUp = true;\n }\n\n if(!this.searchContext.useSearch) {\n this.loadedAllDown = this.loadedAllUp = true;\n }\n }\n\n public reset() {\n super.reset();\n this.searchContext = undefined;\n }\n\n public cleanup() {\n this.reset();\n rootScope.removeEventListener('history_delete', this.onHistoryDelete);\n rootScope.removeEventListener('history_multiappend', this.onHistoryMultiappend);\n rootScope.removeEventListener('message_sent', this.onMessageSent);\n this.onEmptied = undefined;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appDialogsManager from \"../lib/appManagers/appDialogsManager\";\r\nimport Scrollable from \"./scrollable\";\r\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\r\nimport InputSearch from \"./inputSearch\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\n\r\nexport class SearchGroup {\r\n container: HTMLDivElement;\r\n nameEl: HTMLDivElement;\r\n list: HTMLUListElement;\r\n\r\n constructor(public name: LangPackKey | boolean, public type: string, private clearable = true, className?: string, clickable = true, public autonomous = true, public onFound?: () => void) {\r\n this.list = appDialogsManager.createChatList();\r\n this.container = document.createElement('div');\r\n if(className) this.container.className = className;\r\n \r\n if(name) {\r\n this.nameEl = document.createElement('div');\r\n this.nameEl.classList.add('search-group__name');\r\n if(typeof(name) === 'string') {\r\n this.nameEl.append(i18n(name));\r\n }\r\n this.container.append(this.nameEl);\r\n }\r\n \r\n this.container.classList.add('search-group', 'search-group-' + type);\r\n this.container.append(this.list);\r\n this.container.style.display = 'none';\r\n\r\n if(clickable) {\r\n appDialogsManager.setListClickListener(this.list, onFound, undefined, autonomous);\r\n }\r\n }\r\n\r\n clear() {\r\n this.container.style.display = 'none';\r\n\r\n if(this.clearable) {\r\n this.list.innerHTML = '';\r\n }\r\n }\r\n\r\n setActive() {\r\n this.container.style.display = '';\r\n }\r\n\r\n toggle() {\r\n if(this.list.childElementCount) {\r\n this.setActive();\r\n } else {\r\n this.clear();\r\n }\r\n }\r\n}\r\n\r\nexport type SearchGroupType = 'contacts' | 'globalContacts' | 'messages' | string;\r\n\r\nexport default class AppSearch {\r\n private minMsgId = 0;\r\n private loadedCount = -1;\r\n private foundCount = -1;\r\n\r\n private searchPromise: Promise = null;\r\n private searchTimeout: number = 0;\r\n\r\n private query = '';\r\n\r\n private listsContainer: HTMLDivElement = null;\r\n\r\n private peerId = 0; // 0 - means global\r\n private threadId = 0;\r\n\r\n private scrollable: Scrollable;\r\n\r\n constructor(public container: HTMLElement, public searchInput: InputSearch, public searchGroups: {[group in SearchGroupType]: SearchGroup}, public onSearch?: (count: number) => void) {\r\n this.scrollable = new Scrollable(this.container);\r\n this.listsContainer = this.scrollable.container as HTMLDivElement;\r\n for(let i in this.searchGroups) {\r\n this.listsContainer.append(this.searchGroups[i as SearchGroupType].container);\r\n }\r\n\r\n if(this.searchGroups.messages) {\r\n this.scrollable.setVirtualContainer(this.searchGroups.messages.list);\r\n }\r\n\r\n this.searchInput.onChange = (value) => {\r\n /* if(!value.trim()) {\r\n //this.peerId = 0;\r\n return;\r\n } */\r\n \r\n this.query = value;\r\n this.reset(false);\r\n this.searchMore();\r\n };\r\n\r\n this.scrollable.onScrolledBottom = () => {\r\n if(!this.query.trim()) return;\r\n \r\n if(!this.searchTimeout) {\r\n this.searchTimeout = window.setTimeout(() => {\r\n this.searchMore();\r\n this.searchTimeout = 0;\r\n }, 0);\r\n }\r\n };\r\n }\r\n\r\n public reset(all = true) {\r\n if(all) {\r\n this.searchInput.value = '';\r\n this.query = '';\r\n this.peerId = 0;\r\n this.threadId = 0;\r\n }\r\n\r\n this.minMsgId = 0;\r\n this.loadedCount = -1;\r\n this.foundCount = -1;\r\n\r\n for(let i in this.searchGroups) {\r\n this.searchGroups[i as SearchGroupType].clear();\r\n }\r\n \r\n this.searchPromise = null;\r\n }\r\n\r\n public beginSearch(peerId = 0, threadId = 0, query = '') {\r\n this.peerId = peerId;\r\n this.threadId = threadId;\r\n\r\n if(this.query !== query) {\r\n this.searchInput.inputField.value = query;\r\n }\r\n\r\n this.searchInput.input.focus();\r\n }\r\n\r\n public searchMore() {\r\n if(this.searchPromise) return this.searchPromise;\r\n \r\n const query = this.query;\r\n \r\n if(!query.trim()) {\r\n this.onSearch && this.onSearch(0);\r\n return;\r\n }\r\n \r\n if(this.foundCount !== -1 && this.loadedCount >= this.foundCount) {\r\n return Promise.resolve();\r\n }\r\n \r\n const maxId = this.minMsgId || 0;\r\n\r\n return this.searchPromise = appMessagesManager.getSearch({\r\n peerId: this.peerId, \r\n query, \r\n inputFilter: {_: 'inputMessagesFilterEmpty'}, \r\n maxId, \r\n limit: 20,\r\n threadId: this.threadId\r\n }).then(res => {\r\n this.searchPromise = null;\r\n \r\n if(this.searchInput.value !== query) {\r\n return;\r\n }\r\n \r\n //console.log('input search result:', this.peerId, query, null, maxId, 20, res);\r\n \r\n const {count, history} = res;\r\n \r\n if(history.length && history[0].mid === this.minMsgId) {\r\n history.shift();\r\n }\r\n \r\n const searchGroup = this.searchGroups.messages;\r\n\r\n history.forEach((message) => {\r\n const peerId = this.peerId ? message.fromId : message.peerId;\r\n const {dialog, dom} = appDialogsManager.addDialogNew({\r\n dialog: peerId, \r\n container: this.scrollable/* searchGroup.list */, \r\n drawStatus: false,\r\n avatarSize: 54,\r\n meAsSaved: false\r\n });\r\n\r\n if(message.peerId !== peerId) {\r\n dom.listEl.dataset.peerId = '' + message.peerId;\r\n }\r\n\r\n appDialogsManager.setLastMessage(dialog, message, dom, query);\r\n });\r\n\r\n searchGroup.toggle();\r\n \r\n this.minMsgId = history.length && history[history.length - 1].mid;\r\n \r\n if(this.loadedCount === -1) {\r\n this.loadedCount = 0;\r\n }\r\n this.loadedCount += history.length;\r\n \r\n if(this.foundCount === -1) {\r\n this.foundCount = count;\r\n\r\n if(searchGroup.nameEl) {\r\n replaceContent(searchGroup.nameEl, i18n(count ? 'Chat.Search.MessagesFound' : 'Chat.Search.NoMessagesFound', [count]));\r\n }\r\n \r\n this.onSearch && this.onSearch(this.foundCount);\r\n }\r\n }).catch(err => {\r\n console.error('search error', err);\r\n this.searchPromise = null;\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { getRichValue } from \"../helpers/dom\";\r\nimport { LangPackKey } from \"../lib/langPack\";\r\nimport InputField from \"./inputField\";\r\n\r\nexport default class InputSearch {\r\n public container: HTMLElement;\r\n public input: HTMLElement;\r\n public inputField: InputField;\r\n public clearBtn: HTMLElement;\r\n\r\n public prevValue = '';\r\n public timeout = 0;\r\n public onChange: (value: string) => void;\r\n public onClear: () => void;\r\n\r\n constructor(placeholder: LangPackKey, onChange?: (value: string) => void) {\r\n this.inputField = new InputField({\r\n placeholder,\r\n plainText: true\r\n });\r\n\r\n this.container = this.inputField.container;\r\n this.container.classList.remove('input-field');\r\n this.container.classList.add('input-search');\r\n\r\n this.onChange = onChange;\r\n\r\n this.input = this.inputField.input;\r\n this.input.classList.add('input-search-input');\r\n\r\n const searchIcon = document.createElement('i');\r\n searchIcon.classList.add('tgico', 'tgico-search');\r\n\r\n this.clearBtn = document.createElement('i');\r\n this.clearBtn.classList.add('tgico', 'btn-icon', 'tgico-close');\r\n\r\n this.input.addEventListener('input', this.onInput);\r\n this.clearBtn.addEventListener('click', this.onClearClick);\r\n\r\n this.container.append(searchIcon, this.clearBtn);\r\n }\r\n \r\n onInput = () => {\r\n if(!this.onChange) return;\r\n\r\n let value = this.value;\r\n\r\n //this.input.classList.toggle('is-empty', !value.trim());\r\n\r\n if(value !== this.prevValue) {\r\n this.prevValue = value;\r\n clearTimeout(this.timeout);\r\n this.timeout = window.setTimeout(() => {\r\n this.onChange(value);\r\n }, 200);\r\n }\r\n };\r\n\r\n onClearClick = () => {\r\n this.value = '';\r\n this.onChange && this.onChange('');\r\n this.onClear && this.onClear();\r\n };\r\n\r\n get value() {\r\n return this.inputField.value;\r\n }\r\n\r\n set value(value: string) {\r\n this.prevValue = value;\r\n clearTimeout(this.timeout);\r\n this.inputField.value = value;\r\n }\r\n\r\n public remove() {\r\n clearTimeout(this.timeout);\r\n this.input.removeEventListener('input', this.onInput);\r\n this.clearBtn.removeEventListener('click', this.onClearClick);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Button from \"./button\";\r\n\r\nconst ButtonIcon = (className?: string, options: Partial<{noRipple: true, onlyMobile: true, asDiv: boolean}> = {}) => {\r\n const button = Button('btn-icon', {\r\n icon: className || undefined, \r\n ...options\r\n });\r\n\r\n return button;\r\n};\r\n\r\nexport default ButtonIcon;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport EventListenerBase from \"../helpers/eventListenerBase\";\r\nimport ListenerSetter from \"../helpers/listenerSetter\";\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\nimport ButtonIcon from \"./buttonIcon\";\r\nimport Scrollable from \"./scrollable\";\r\nimport SidebarSlider from \"./slider\";\r\n\r\nexport interface SliderTab {\r\n onOpen?: () => void,\r\n onOpenAfterTimeout?: () => void,\r\n onClose?: () => void,\r\n onCloseAfterTimeout?: () => void\r\n}\r\n\r\nexport interface SliderSuperTabConstructable {\r\n new(slider: SidebarSlider, destroyable: boolean): SliderSuperTab;\r\n}\r\n\r\nexport default class SliderSuperTab implements SliderTab {\r\n public container: HTMLElement;\r\n\r\n public header: HTMLElement;\r\n public closeBtn: HTMLElement;\r\n public title: HTMLElement;\r\n\r\n public content: HTMLElement;\r\n public scrollable: Scrollable;\r\n\r\n public slider: SidebarSlider;\r\n public destroyable: boolean;\r\n public listenerSetter: ListenerSetter;\r\n\r\n constructor(slider: SidebarSlider, destroyable?: boolean) {\r\n this._constructor(slider, destroyable);\r\n }\r\n\r\n public _constructor(slider: SidebarSlider, destroyable = true): any {\r\n this.slider = slider;\r\n this.destroyable = destroyable;\r\n\r\n this.container = document.createElement('div');\r\n this.container.classList.add('tabs-tab', 'sidebar-slider-item');\r\n\r\n // * Header\r\n this.header = document.createElement('div');\r\n this.header.classList.add('sidebar-header');\r\n\r\n this.closeBtn = ButtonIcon('left sidebar-close-button', {noRipple: true});\r\n this.title = document.createElement('div');\r\n this.title.classList.add('sidebar-header__title');\r\n this.header.append(this.closeBtn, this.title);\r\n\r\n // * Content\r\n this.content = document.createElement('div');\r\n this.content.classList.add('sidebar-content');\r\n\r\n this.scrollable = new Scrollable(this.content, undefined, undefined, true);\r\n\r\n this.container.append(this.header, this.content);\r\n\r\n this.slider.addTab(this);\r\n \r\n this.listenerSetter = new ListenerSetter();\r\n }\r\n\r\n public close() {\r\n return this.slider.closeTab(this);\r\n }\r\n\r\n public async open(...args: any[]) {\r\n if(this.init) {\r\n try {\r\n const result = this.init();\r\n this.init = null;\r\n\r\n if(result instanceof Promise) {\r\n await result;\r\n }\r\n } catch(err) {\r\n console.error('open tab error', err);\r\n }\r\n }\r\n\r\n return this.slider.selectTab(this);\r\n }\r\n\r\n protected init(): Promise | any {\r\n\r\n }\r\n\r\n public onCloseAfterTimeout() {\r\n if(this.destroyable) { // ! WARNING, пока что это будет работать только с самой последней внутренней вкладкой !\r\n this.slider.tabs.delete(this);\r\n this.container.remove();\r\n }\r\n\r\n if(this.listenerSetter) {\r\n this.listenerSetter.removeAll();\r\n }\r\n }\r\n\r\n protected setTitle(key: LangPackKey) {\r\n this.title.innerHTML = '';\r\n this.title.append(i18n(key));\r\n }\r\n}\r\n\r\nexport class SliderSuperTabEventable extends SliderSuperTab {\r\n public eventListener: EventListenerBase<{\r\n destroy: () => void\r\n }>;\r\n\r\n constructor(slider: SidebarSlider) {\r\n super(slider);\r\n this.eventListener = new EventListenerBase();\r\n }\r\n\r\n onCloseAfterTimeout() {\r\n this.eventListener.dispatchEvent('destroy');\r\n this.eventListener.cleanup();\r\n return super.onCloseAfterTimeout();\r\n }\r\n}\r\n\r\n/* // @ts-ignore\r\ninterface SliderSuperEventsTab extends SliderSuperTab, EventListenerBase<{}> {\r\n superConstructor: (...args: any[]) => any;\r\n}\r\nclass SliderSuperEventsTab implements SliderSuperEventsTab {\r\n constructor(slider: SidebarSlider) {\r\n this.superConstructor([slider, true]);\r\n }\r\n}\r\napplyMixins(SliderSuperEventsTab, [SliderSuperTab, EventListenerBase]);\r\n\r\n(window as any).lol = SliderSuperEventsTab\r\n\r\nexport {SliderSuperEventsTab}; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { horizontalMenu } from \"./horizontalMenu\";\r\nimport { TransitionSlider } from \"./transition\";\r\nimport appNavigationController, { NavigationItem } from \"./appNavigationController\";\r\nimport SliderSuperTab, { SliderSuperTabConstructable, SliderTab } from \"./sliderTab\";\r\nimport { safeAssign } from \"../helpers/object\";\r\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\r\n\r\nconst TRANSITION_TIME = 250;\r\n\r\nexport type {SliderTab};\r\nexport {SliderSuperTab};\r\n\r\nexport default class SidebarSlider {\r\n protected _selectTab: ReturnType;\r\n public historyTabIds: (number | SliderSuperTab)[] = []; // * key is any, since right sidebar is ugly nowz\r\n public tabsContainer: HTMLElement;\r\n public sidebarEl: HTMLElement;\r\n public tabs: Map; // * key is any, since right sidebar is ugly now\r\n private canHideFirst = false;\r\n private navigationType: NavigationItem['type']\r\n\r\n constructor(options: {\r\n sidebarEl: SidebarSlider['sidebarEl'],\r\n tabs?: SidebarSlider['tabs'],\r\n canHideFirst?: SidebarSlider['canHideFirst'],\r\n navigationType: SidebarSlider['navigationType']\r\n }) {\r\n safeAssign(this, options);\r\n\r\n if(!this.tabs) {\r\n this.tabs = new Map();\r\n }\r\n\r\n this.tabsContainer = this.sidebarEl.querySelector('.sidebar-slider');\r\n this._selectTab = TransitionSlider(this.tabsContainer, 'navigation', TRANSITION_TIME);\r\n if(!this.canHideFirst) {\r\n this._selectTab(0);\r\n }\r\n\r\n Array.from(this.sidebarEl.querySelectorAll('.sidebar-close-button') as any as HTMLElement[]).forEach(el => {\r\n attachClickEvent(el, this.onCloseBtnClick);\r\n });\r\n }\r\n\r\n public onCloseBtnClick = () => {\r\n const item = appNavigationController.findItemByType(this.navigationType);\r\n if(item) {\r\n appNavigationController.back(this.navigationType);\r\n } else if(this.historyTabIds.length) {\r\n this.closeTab(this.historyTabIds[this.historyTabIds.length - 1]);\r\n }\r\n // this.closeTab();\r\n };\r\n\r\n public closeTab = (id?: number | SliderSuperTab, animate?: boolean, isNavigation?: boolean) => {\r\n if(id !== undefined && this.historyTabIds[this.historyTabIds.length - 1] !== id) {\r\n return false;\r\n }\r\n\r\n //console.log('sidebar-close-button click:', this.historyTabIDs);\r\n const closingId = this.historyTabIds.pop(); // pop current\r\n this.onCloseTab(closingId, animate, isNavigation);\r\n\r\n const tab = this.historyTabIds[this.historyTabIds.length - 1];\r\n this._selectTab(tab !== undefined ? (tab instanceof SliderSuperTab ? tab.container : tab) : (this.canHideFirst ? -1 : 0), animate);\r\n return true;\r\n };\r\n\r\n public selectTab(id: number | SliderSuperTab): boolean {\r\n /* if(id instanceof SliderSuperTab) {\r\n id = id.id;\r\n } */\r\n\r\n if(this.historyTabIds[this.historyTabIds.length - 1] === id) {\r\n return false;\r\n }\r\n\r\n const tab: SliderTab = id instanceof SliderSuperTab ? id : this.tabs.get(id);\r\n if(tab) {\r\n if(tab.onOpen) {\r\n tab.onOpen();\r\n }\r\n \r\n if(tab.onOpenAfterTimeout) {\r\n setTimeout(() => {\r\n tab.onOpenAfterTimeout();\r\n }, TRANSITION_TIME);\r\n }\r\n }\r\n\r\n //if(!this.canHideFirst || this.historyTabIds.length) {\r\n appNavigationController.pushItem({\r\n type: this.navigationType, \r\n onPop: (canAnimate) => {\r\n this.closeTab(undefined, canAnimate, true);\r\n return true;\r\n }\r\n });\r\n //}\r\n \r\n this.historyTabIds.push(id);\r\n this._selectTab(id instanceof SliderSuperTab ? id.container : id);\r\n return true;\r\n }\r\n\r\n public removeTabFromHistory(id: number | SliderSuperTab) {\r\n this.historyTabIds.findAndSplice(i => i === id);\r\n this.onCloseTab(id, undefined);\r\n }\r\n\r\n public sliceTabsUntilTab(tabConstructor: SliderSuperTabConstructable, preserveTab: SliderSuperTab) {\r\n for(let i = this.historyTabIds.length - 1; i >= 0; --i) {\r\n const tab = this.historyTabIds[i];\r\n if(tab === preserveTab) continue;\r\n else if(tab instanceof tabConstructor) {\r\n break;\r\n }\r\n\r\n this.removeTabFromHistory(tab);\r\n //appNavigationController.removeByType(this.navigationType, true);\r\n }\r\n }\r\n\r\n public getTab(tabConstructor: SliderSuperTabConstructable) {\r\n return this.historyTabIds.find(t => t instanceof tabConstructor) as SliderSuperTab;\r\n }\r\n\r\n public isTabExists(tabConstructor: SliderSuperTabConstructable) {\r\n return !!this.getTab(tabConstructor);\r\n }\r\n\r\n protected onCloseTab(id: number | SliderSuperTab, animate: boolean, isNavigation?: boolean) {\r\n if(!isNavigation) {\r\n appNavigationController.removeByType(this.navigationType, true);\r\n }\r\n\r\n const tab: SliderTab = id instanceof SliderSuperTab ? id : this.tabs.get(id);\r\n if(tab) {\r\n if(tab.onClose) {\r\n tab.onClose();\r\n }\r\n\r\n if(tab.onCloseAfterTimeout) {\r\n setTimeout(() => {\r\n tab.onCloseAfterTimeout();\r\n }, TRANSITION_TIME);\r\n }\r\n }\r\n }\r\n\r\n public addTab(tab: SliderSuperTab) {\r\n if(!tab.container.parentElement) {\r\n this.tabsContainer.append(tab.container);\r\n\r\n if(tab.closeBtn) {\r\n tab.closeBtn.addEventListener('click', this.onCloseBtnClick);\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { CancellablePromise } from \"../helpers/cancellablePromise\";\r\nimport type { InputFile } from \"../layer\";\r\nimport PopupAvatar from \"./popups/avatar\";\r\n\r\nexport default class AvatarEdit {\r\n public container: HTMLElement;\r\n private canvas: HTMLCanvasElement;\r\n private icon: HTMLSpanElement;\r\n\r\n constructor(onChange: (uploadAvatar: () => CancellablePromise) => void) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('avatar-edit');\r\n\r\n this.canvas = document.createElement('canvas');\r\n this.canvas.classList.add('avatar-edit-canvas');\r\n\r\n this.icon = document.createElement('span');\r\n this.icon.classList.add('tgico', 'tgico-cameraadd');\r\n\r\n this.container.append(this.canvas, this.icon);\r\n\r\n this.container.addEventListener('click', () => {\r\n new PopupAvatar().open(this.canvas, onChange);\r\n });\r\n }\r\n\r\n public clear() {\r\n const ctx = this.canvas.getContext('2d');\r\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Button from \"./button\";\r\n\r\nconst ButtonCorner = (options: Partial<{className: string, icon: string, noRipple: true, onlyMobile: true, asDiv: boolean}> = {}) => {\r\n const button = Button('btn-circle btn-corner z-depth-1' + (options.className ? ' ' + options.className : ''), options);\r\n return button;\r\n};\r\n\r\nexport default ButtonCorner;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appSidebarLeft from \"..\";\r\nimport { InputFile } from \"../../../layer\";\r\nimport appChatsManager from \"../../../lib/appManagers/appChatsManager\";\r\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport { SearchGroup } from \"../../appSearch\";\r\nimport InputField from \"../../inputField\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport AvatarEdit from \"../../avatarEdit\";\r\nimport { i18n } from \"../../../lib/langPack\";\r\nimport ButtonCorner from \"../../buttonCorner\";\r\n\r\nexport default class AppNewGroupTab extends SliderSuperTab {\r\n private searchGroup = new SearchGroup(true, 'contacts', true, 'new-group-members disable-hover', false);\r\n private avatarEdit: AvatarEdit;\r\n private uploadAvatar: () => Promise = null;\r\n private userIds: number[];\r\n private nextBtn: HTMLButtonElement;\r\n private groupNameInputField: InputField;\r\n\r\n protected init() {\r\n this.container.classList.add('new-group-container');\r\n this.setTitle('NewGroup');\r\n\r\n this.avatarEdit = new AvatarEdit((_upload) => {\r\n this.uploadAvatar = _upload;\r\n });\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n this.groupNameInputField = new InputField({\r\n label: 'CreateGroup.NameHolder',\r\n maxLength: 128\r\n });\r\n\r\n inputWrapper.append(this.groupNameInputField.container);\r\n\r\n this.groupNameInputField.input.addEventListener('input', () => {\r\n const value = this.groupNameInputField.value;\r\n this.nextBtn.classList.toggle('is-visible', !!value.length && !this.groupNameInputField.input.classList.contains('error'));\r\n });\r\n\r\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\r\n\r\n this.nextBtn.addEventListener('click', () => {\r\n const title = this.groupNameInputField.value;\r\n\r\n this.nextBtn.disabled = true;\r\n appChatsManager.createChat(title, this.userIds).then((chatId) => {\r\n if(this.uploadAvatar) {\r\n this.uploadAvatar().then((inputFile) => {\r\n appChatsManager.editPhoto(chatId, inputFile);\r\n });\r\n }\r\n \r\n appSidebarLeft.removeTabFromHistory(this);\r\n appSidebarLeft.selectTab(0);\r\n });\r\n });\r\n\r\n const chatsContainer = document.createElement('div');\r\n chatsContainer.classList.add('chatlist-container');\r\n chatsContainer.append(this.searchGroup.container);\r\n\r\n this.content.append(this.nextBtn);\r\n this.scrollable.append(this.avatarEdit.container, inputWrapper, chatsContainer);\r\n }\r\n\r\n public onCloseAfterTimeout() {\r\n this.searchGroup.clear();\r\n this.avatarEdit.clear();\r\n this.uploadAvatar = null;\r\n this.groupNameInputField.value = '';\r\n this.nextBtn.disabled = false;\r\n }\r\n\r\n public open(userIds: number[]) {\r\n const result = super.open();\r\n result.then(() => {\r\n this.userIds = userIds;\r\n\r\n this.userIds.forEach(userId => {\r\n let {dom} = appDialogsManager.addDialogNew({\r\n dialog: userId,\r\n container: this.searchGroup.list,\r\n drawStatus: false,\r\n rippleEnabled: false,\r\n avatarSize: 48\r\n });\r\n\r\n dom.lastMessageSpan.append(appUsersManager.getUserStatusString(userId));\r\n });\r\n\r\n this.searchGroup.nameEl.textContent = '';\r\n this.searchGroup.nameEl.append(i18n('Members', [this.userIds.length]));\r\n this.searchGroup.setActive();\r\n });\r\n \r\n return result;\r\n }\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport rootScope from \"../lib/rootScope\";\r\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\r\nimport appDocsManager, {MyDocument} from \"../lib/appManagers/appDocsManager\";\r\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\r\nimport { IS_APPLE, IS_SAFARI } from \"../environment/userAgent\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport appDownloadManager from \"../lib/appManagers/appDownloadManager\";\r\nimport simulateEvent from \"../helpers/dom/dispatchEvent\";\r\nimport type { SearchSuperContext } from \"./appSearchSuper.\";\r\nimport { copy, deepEqual } from \"../helpers/object\";\r\nimport { DocumentAttribute, Message, MessageMedia, PhotoSize } from \"../layer\";\r\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport appAvatarsManager from \"../lib/appManagers/appAvatarsManager\";\r\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\r\nimport I18n from \"../lib/langPack\";\r\nimport SearchListLoader from \"../helpers/searchListLoader\";\r\nimport { onMediaLoad } from \"../helpers/files\";\r\n\r\n// TODO: Safari: проверить стрим, включить его и сразу попробовать включить видео или другую песню\r\n// TODO: Safari: попробовать замаскировать подгрузку последнего чанка\r\n// TODO: Safari: пофиксить момент, когда заканчивается песня и пытаешься включить её заново - прогресс сразу в конце\r\n\r\nexport type MediaItem = {mid: number, peerId: number};\r\n\r\ntype HTMLMediaElement = HTMLAudioElement | HTMLVideoElement;\r\n\r\nconst SHOULD_USE_SAFARI_FIX = (() => {\r\n try {\r\n return IS_SAFARI && +navigator.userAgent.match(/ Version\\/(\\d+)/)[1] < 14;\r\n } catch(err) {\r\n return false;\r\n }\r\n})();\r\n\r\nconst SEEK_OFFSET = 10;\r\n\r\nexport type MediaSearchContext = SearchSuperContext & Partial<{\r\n isScheduled: boolean,\r\n useSearch: boolean\r\n}>;\r\n\r\ntype MediaDetails = {\r\n peerId: number, \r\n mid: number, \r\n docId: string, \r\n clean?: boolean,\r\n isScheduled?: boolean, \r\n isSingle?: boolean\r\n};\r\n\r\nclass AppMediaPlaybackController {\r\n private container: HTMLElement;\r\n private media: Map> = new Map();\r\n private scheduled: AppMediaPlaybackController['media'] = new Map();\r\n private mediaDetails: Map = new Map();\r\n private playingMedia: HTMLMediaElement;\r\n\r\n private waitingMediaForLoad: Map>> = new Map();\r\n private waitingScheduledMediaForLoad: AppMediaPlaybackController['waitingMediaForLoad'] = new Map();\r\n private waitingDocumentsForLoad: {[docId: string]: Set} = {};\r\n \r\n public willBePlayedMedia: HTMLMediaElement;\r\n private searchContext: MediaSearchContext;\r\n\r\n private listLoader: SearchListLoader;\r\n\r\n public volume: number;\r\n public muted: boolean;\r\n public playbackRate: number;\r\n private _volume = 1;\r\n private _muted = false;\r\n private _playbackRate = 1;\r\n private lockedSwitchers: boolean;\r\n\r\n constructor() {\r\n this.container = document.createElement('div');\r\n //this.container.style.cssText = 'position: absolute; top: -10000px; left: -10000px;';\r\n this.container.style.cssText = 'display: none;';\r\n document.body.append(this.container);\r\n\r\n if(navigator.mediaSession) {\r\n const actions: {[action in MediaSessionAction]?: MediaSessionActionHandler} = {\r\n play: this.play,\r\n pause: this.pause,\r\n stop: this.stop,\r\n seekbackward: this.seekBackward,\r\n seekforward: this.seekForward,\r\n seekto: this.seekTo,\r\n previoustrack: this.previous,\r\n nexttrack: this.next\r\n };\r\n\r\n for(const action in actions) {\r\n try {\r\n navigator.mediaSession.setActionHandler(action as MediaSessionAction, actions[action as MediaSessionAction]);\r\n } catch(err) {\r\n console.warn('MediaSession action is not supported:', action);\r\n }\r\n }\r\n }\r\n\r\n rootScope.addEventListener('document_downloaded', (doc) => {\r\n const set = this.waitingDocumentsForLoad[doc.id];\r\n if(set) {\r\n for(const media of set) {\r\n this.onMediaDocumentLoad(media);\r\n }\r\n }\r\n });\r\n\r\n const properties: {[key: PropertyKey]: PropertyDescriptor} = {};\r\n const keys = [\r\n 'volume' as const, \r\n 'muted' as const, \r\n 'playbackRate' as const\r\n ];\r\n keys.forEach(key => {\r\n const _key = ('_' + key) as `_${typeof key}`;\r\n properties[key] = {\r\n get: () => this[_key],\r\n set: (value: number | boolean) => {\r\n if(this[_key] === value) {\r\n return;\r\n }\r\n\r\n // @ts-ignore\r\n this[_key] = value;\r\n if(this.playingMedia) {\r\n // @ts-ignore\r\n this.playingMedia[key] = value;\r\n }\r\n\r\n this.dispatchPlaybackParams();\r\n }\r\n };\r\n });\r\n Object.defineProperties(this, properties);\r\n }\r\n\r\n private dispatchPlaybackParams() {\r\n const {volume, muted, playbackRate} = this;\r\n rootScope.dispatchEvent('media_playback_params', {\r\n volume, muted, playbackRate\r\n });\r\n }\r\n\r\n public seekBackward = (details: MediaSessionActionDetails) => {\r\n const media = this.playingMedia;\r\n if(media) {\r\n media.currentTime = Math.max(0, media.currentTime - (details.seekOffset || SEEK_OFFSET));\r\n }\r\n };\r\n\r\n public seekForward = (details: MediaSessionActionDetails) => {\r\n const media = this.playingMedia;\r\n if(media) {\r\n media.currentTime = Math.min(media.duration, media.currentTime + (details.seekOffset || SEEK_OFFSET));\r\n }\r\n };\r\n\r\n public seekTo = (details: MediaSessionActionDetails) => {\r\n const media = this.playingMedia;\r\n if(media) {\r\n media.currentTime = details.seekTime;\r\n }\r\n };\r\n\r\n public addMedia(message: Message.message, autoload: boolean, clean?: boolean): HTMLMediaElement {\r\n const {peerId, mid} = message;\r\n\r\n const isScheduled = !!message.pFlags.is_scheduled;\r\n const s = isScheduled ? this.scheduled : this.media;\r\n let storage = s.get(message.peerId);\r\n if(!storage) {\r\n s.set(message.peerId, storage = new Map());\r\n }\r\n\r\n let media = storage.get(mid);\r\n if(media) {\r\n return media;\r\n }\r\n\r\n const doc: MyDocument = appMessagesManager.getMediaFromMessage(message);\r\n storage.set(mid, media = document.createElement(doc.type === 'round' || doc.type === 'video' ? 'video' : 'audio'));\r\n //const source = document.createElement('source');\r\n //source.type = doc.type === 'voice' && !opusDecodeController.isPlaySupported() ? 'audio/wav' : doc.mime_type;\r\n\r\n if(doc.type === 'round') {\r\n media.setAttribute('playsinline', 'true');\r\n //media.muted = true;\r\n }\r\n\r\n const details: MediaDetails = {\r\n peerId,\r\n mid,\r\n docId: doc.id,\r\n clean,\r\n isScheduled: message.pFlags.is_scheduled\r\n };\r\n\r\n this.mediaDetails.set(media, details);\r\n\r\n //media.autoplay = true;\r\n media.volume = 1;\r\n //media.append(source);\r\n\r\n this.container.append(media);\r\n\r\n media.addEventListener('play', this.onPlay);\r\n media.addEventListener('pause', this.onPause);\r\n media.addEventListener('ended', this.onEnded);\r\n\r\n if(doc.type !== 'audio' && message?.pFlags.media_unread && message.fromId !== rootScope.myId) {\r\n media.addEventListener('timeupdate', () => {\r\n appMessagesManager.readMessages(peerId, [mid]);\r\n }, {once: true});\r\n }\r\n \r\n /* const onError = (e: Event) => {\r\n //console.log('appMediaPlaybackController: video onError', e);\r\n\r\n if(this.nextMid === mid) {\r\n this.loadSiblingsMedia(peerId, doc.type as MediaType, mid).then(() => {\r\n if(this.nextMid && storage[this.nextMid]) {\r\n storage[this.nextMid].play();\r\n }\r\n });\r\n }\r\n };\r\n\r\n media.addEventListener('error', onError); */\r\n\r\n const deferred = deferredPromise();\r\n if(autoload) {\r\n deferred.resolve();\r\n } else {\r\n const w = message.pFlags.is_scheduled ? this.waitingScheduledMediaForLoad : this.waitingMediaForLoad;\r\n let waitingStorage = w.get(peerId);\r\n if(!waitingStorage) {\r\n w.set(peerId, waitingStorage = new Map());\r\n }\r\n\r\n waitingStorage.set(mid, deferred);\r\n }\r\n\r\n deferred.then(() => {\r\n //media.autoplay = true;\r\n //console.log('will set media url:', media, doc, doc.type, doc.url);\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n if(doc.supportsStreaming || cacheContext.url) {\r\n this.onMediaDocumentLoad(media);\r\n } else {\r\n let set = this.waitingDocumentsForLoad[doc.id];\r\n if(!set) {\r\n set = this.waitingDocumentsForLoad[doc.id] = new Set();\r\n }\r\n\r\n set.add(media);\r\n appDocsManager.downloadDoc(doc);\r\n }\r\n }/* , onError */);\r\n \r\n return media;\r\n }\r\n\r\n public getMedia(peerId: number, mid: number, isScheduled?: boolean) {\r\n const s = (isScheduled ? this.scheduled : this.media).get(peerId);\r\n return s?.get(mid);\r\n }\r\n\r\n private onMediaDocumentLoad = (media: HTMLMediaElement) => {\r\n const details = this.mediaDetails.get(media);\r\n const doc = appDocsManager.getDoc(details.docId);\r\n if(doc.type === 'audio' && doc.supportsStreaming && SHOULD_USE_SAFARI_FIX) {\r\n this.handleSafariStreamable(media);\r\n }\r\n\r\n // setTimeout(() => {\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n media.src = cacheContext.url;\r\n // }, doc.supportsStreaming ? 500e3 : 0);\r\n\r\n const set = this.waitingDocumentsForLoad[doc.id];\r\n if(set) {\r\n set.delete(media);\r\n\r\n if(!set.size) {\r\n delete this.waitingDocumentsForLoad[doc.id];\r\n }\r\n }\r\n };\r\n\r\n // safari подгрузит последний чанк и песня включится,\r\n // при этом этот чанк нельзя руками отдать из SW, потому что браузер тогда теряется\r\n private handleSafariStreamable(media: HTMLMediaElement) {\r\n media.addEventListener('play', () => {\r\n /* if(media.readyState === 4) { // https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest/readyState\r\n return;\r\n } */\r\n\r\n //media.volume = 0;\r\n const currentTime = media.currentTime;\r\n //this.setSafariBuffering(media, true);\r\n\r\n media.addEventListener('progress', () => {\r\n media.currentTime = media.duration - 1;\r\n\r\n media.addEventListener('progress', () => {\r\n media.currentTime = currentTime;\r\n //media.volume = 1;\r\n //this.setSafariBuffering(media, false);\r\n\r\n if(!media.paused) {\r\n media.play()/* .catch(() => {}) */;\r\n }\r\n }, {once: true});\r\n }, {once: true});\r\n }/* , {once: true} */);\r\n }\r\n\r\n public resolveWaitingForLoadMedia(peerId: number, mid: number, isScheduled?: boolean) {\r\n const w = isScheduled ? this.waitingScheduledMediaForLoad : this.waitingMediaForLoad;\r\n const storage = w.get(peerId);\r\n if(!storage) {\r\n return;\r\n }\r\n\r\n const promise = storage.get(mid);\r\n if(promise) {\r\n promise.resolve();\r\n storage.delete(mid);\r\n\r\n if(!storage.size) {\r\n w.delete(peerId);\r\n }\r\n }\r\n }\r\n \r\n /**\r\n * Only for audio\r\n */\r\n public isSafariBuffering(media: HTMLMediaElement) {\r\n /// @ts-ignore\r\n return !!media.safariBuffering;\r\n }\r\n\r\n private setSafariBuffering(media: HTMLMediaElement, value: boolean) {\r\n // @ts-ignore\r\n media.safariBuffering = value;\r\n }\r\n\r\n private async setNewMediadata(message: Message.message, playingMedia = this.playingMedia) {\r\n await onMediaLoad(playingMedia, undefined, false); // have to wait for load, otherwise on macOS won't set\r\n\r\n const doc = (message.media as MessageMedia.messageMediaDocument).document as MyDocument;\r\n \r\n const artwork: MediaImage[] = [];\r\n\r\n const isVoice = doc.type === 'voice' || doc.type === 'round';\r\n let title = '', artist = '';\r\n\r\n if(doc.thumbs?.length) {\r\n const size = doc.thumbs[doc.thumbs.length - 1];\r\n if(!(size as PhotoSize.photoStrippedSize).bytes) {\r\n const cacheContext = appDownloadManager.getCacheContext(doc, size.type);\r\n\r\n if(cacheContext.url) {\r\n artwork.push({\r\n src: cacheContext.url,\r\n sizes: `${(size as PhotoSize.photoSize).w}x${(size as PhotoSize.photoSize).h}`,\r\n type: 'image/jpeg'\r\n });\r\n } else {\r\n const download = appPhotosManager.preloadPhoto(doc, size);\r\n download.then(() => {\r\n if(this.playingMedia !== playingMedia || !cacheContext.url) {\r\n return;\r\n }\r\n\r\n this.setNewMediadata(message);\r\n });\r\n }\r\n }\r\n } else if(isVoice) {\r\n const peerId = message.fromId || message.peerId;\r\n const peerPhoto = appPeersManager.getPeerPhoto(peerId);\r\n if(peerPhoto) {\r\n const result = appAvatarsManager.loadAvatar(peerId, peerPhoto, 'photo_small');\r\n if(result.cached) {\r\n const url = await result.loadPromise;\r\n artwork.push({\r\n src: url,\r\n sizes: '160x160',\r\n type: 'image/jpeg'\r\n });\r\n } else {\r\n result.loadPromise.then((url) => {\r\n if(this.playingMedia !== playingMedia || !url) {\r\n return;\r\n }\r\n \r\n this.setNewMediadata(message);\r\n });\r\n }\r\n }\r\n\r\n title = appPeersManager.getPeerTitle(peerId, true, false);\r\n artist = I18n.format(doc.type === 'voice' ? 'AttachAudio' : 'AttachRound', true);\r\n }\r\n\r\n if(!isVoice) {\r\n const attribute = doc.attributes.find(attribute => attribute._ === 'documentAttributeAudio') as DocumentAttribute.documentAttributeAudio;\r\n title = attribute && attribute.title || doc.file_name;\r\n artist = attribute && attribute.performer;\r\n }\r\n\r\n if(!artwork.length) {\r\n if(IS_APPLE) {\r\n if(IS_TOUCH_SUPPORTED) {\r\n artwork.push({\r\n src: `assets/img/apple-touch-icon-precomposed.png`,\r\n sizes: '180x180',\r\n type: 'image/png'\r\n });\r\n } else {\r\n artwork.push({\r\n src: `assets/img/apple-touch-icon.png`,\r\n sizes: '180x180',\r\n type: 'image/png'\r\n });\r\n }\r\n } else {\r\n [72, 96, 144, 192, 256, 384, 512].forEach(size => {\r\n const sizes = `${size}x${size}`;\r\n artwork.push({\r\n src: `assets/img/android-chrome-${sizes}.png`,\r\n sizes,\r\n type: 'image/png'\r\n });\r\n });\r\n }\r\n }\r\n\r\n const metadata = new MediaMetadata({\r\n title,\r\n artist,\r\n artwork\r\n });\r\n\r\n navigator.mediaSession.metadata = metadata;\r\n }\r\n\r\n private getMessageByMedia(media: HTMLMediaElement) {\r\n const details = this.mediaDetails.get(media);\r\n const {peerId, mid} = details;\r\n const message = details.isScheduled ? appMessagesManager.getScheduledMessageByPeer(peerId, mid) : appMessagesManager.getMessageByPeer(peerId, mid);\r\n return message;\r\n }\r\n\r\n private onPlay = (e?: Event) => {\r\n const media = e.target as HTMLMediaElement;\r\n const details = this.mediaDetails.get(media);\r\n const {peerId, mid} = details;\r\n\r\n //console.log('appMediaPlaybackController: video playing', this.currentPeerId, this.playingMedia, media);\r\n\r\n const message = this.getMessageByMedia(media);\r\n\r\n const previousMedia = this.playingMedia;\r\n if(previousMedia !== media) {\r\n this.stop();\r\n\r\n const verify = (element: MediaItem) => element.mid === mid && element.peerId === peerId;\r\n if(!this.listLoader.current || !verify(this.listLoader.current)) {\r\n let idx = this.listLoader.previous.findIndex(verify);\r\n let jumpLength: number;\r\n if(idx !== -1) {\r\n jumpLength = -(this.listLoader.previous.length - idx);\r\n } else {\r\n idx = this.listLoader.next.findIndex(verify);\r\n if(idx !== -1) {\r\n jumpLength = idx + 1;\r\n }\r\n }\r\n \r\n if(idx !== -1) {\r\n if(jumpLength) {\r\n this.listLoader.go(jumpLength, false);\r\n }\r\n } else {\r\n this.setTargets({peerId, mid});\r\n }\r\n }\r\n\r\n this.setMedia(media, message);\r\n }\r\n\r\n // audio_pause не успеет сработать без таймаута\r\n setTimeout(() => {\r\n rootScope.dispatchEvent('media_play', {doc: appMessagesManager.getMediaFromMessage(message), message, media});\r\n }, 0);\r\n };\r\n\r\n private onPause = (e?: Event) => {\r\n /* const target = e.target as HTMLMediaElement;\r\n if(!isInDOM(target)) {\r\n this.container.append(target);\r\n target.play();\r\n return;\r\n } */\r\n\r\n rootScope.dispatchEvent('media_pause');\r\n };\r\n\r\n private onEnded = (e?: Event) => {\r\n if(!e.isTrusted) {\r\n return;\r\n }\r\n\r\n this.onPause(e);\r\n\r\n //console.log('on media end');\r\n\r\n if(!this.next()) {\r\n this.stop();\r\n rootScope.dispatchEvent('media_stop');\r\n }\r\n };\r\n\r\n public toggle(play?: boolean) {\r\n if(!this.playingMedia) {\r\n return false;\r\n }\r\n\r\n if(play === undefined) {\r\n play = this.playingMedia.paused;\r\n }\r\n\r\n if(this.playingMedia.paused !== play) {\r\n return false;\r\n }\r\n\r\n if(play) {\r\n this.playingMedia.play();\r\n } else {\r\n this.playingMedia.pause();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public play = () => {\r\n return this.toggle(true);\r\n };\r\n\r\n public pause = () => {\r\n return this.toggle(false);\r\n };\r\n\r\n public stop = () => {\r\n const media = this.playingMedia;\r\n if(!media) {\r\n return false;\r\n }\r\n\r\n if(!media.paused) {\r\n media.pause();\r\n }\r\n\r\n media.currentTime = 0;\r\n simulateEvent(media, 'ended');\r\n\r\n const details = this.mediaDetails.get(media);\r\n if(details?.clean) {\r\n media.src = '';\r\n const peerId = details.peerId;\r\n const s = details.isScheduled ? this.scheduled : this.media;\r\n const storage = s.get(peerId);\r\n if(storage) {\r\n storage.delete(details.mid);\r\n \r\n if(!storage.size) {\r\n s.delete(peerId);\r\n }\r\n }\r\n \r\n media.remove();\r\n\r\n this.mediaDetails.delete(media);\r\n }\r\n\r\n this.playingMedia = undefined;\r\n\r\n return true;\r\n };\r\n\r\n public playItem = (item: MediaItem) => {\r\n const {peerId, mid} = item;\r\n const isScheduled = this.searchContext.isScheduled;\r\n const media = this.getMedia(peerId, mid, isScheduled);\r\n\r\n /* if(isSafari) {\r\n media.autoplay = true;\r\n } */\r\n\r\n media.play();\r\n \r\n setTimeout(() => {\r\n this.resolveWaitingForLoadMedia(peerId, mid, isScheduled);\r\n }, 0);\r\n };\r\n\r\n public next = () => {\r\n return !this.lockedSwitchers && this.listLoader.go(1);\r\n };\r\n\r\n public previous = () => {\r\n const media = this.playingMedia;\r\n if(media && media.currentTime > 5) {\r\n media.currentTime = 0;\r\n this.toggle(true);\r\n return;\r\n }\r\n\r\n return !this.lockedSwitchers && this.listLoader.go(-1);\r\n };\r\n\r\n public willBePlayed(media: HTMLMediaElement) {\r\n this.willBePlayedMedia = media;\r\n }\r\n\r\n public setSearchContext(context: MediaSearchContext) {\r\n if(deepEqual(this.searchContext, context)) {\r\n return false;\r\n }\r\n\r\n this.searchContext = copy(context); // {_: type === 'audio' ? 'inputMessagesFilterMusic' : 'inputMessagesFilterRoundVoice'}\r\n return true;\r\n }\r\n\r\n public getSearchContext() {\r\n return this.searchContext;\r\n }\r\n\r\n public setTargets(current: MediaItem, prev?: MediaItem[], next?: MediaItem[]) {\r\n if(!this.listLoader) {\r\n this.listLoader = new SearchListLoader({\r\n loadCount: 10,\r\n loadWhenLeft: 5,\r\n processItem: (message: Message.message) => {\r\n this.addMedia(message, false);\r\n return {peerId: message.peerId, mid: message.mid};\r\n },\r\n onJump: (item, older) => {\r\n this.playItem(item);\r\n },\r\n onEmptied: () => {\r\n rootScope.dispatchEvent('media_stop');\r\n this.stop();\r\n }\r\n });\r\n } else {\r\n this.listLoader.reset();\r\n }\r\n\r\n const reverse = this.searchContext.folderId !== undefined ? false : true;\r\n if(prev) {\r\n this.listLoader.setTargets(prev, next, reverse);\r\n } else {\r\n this.listLoader.reverse = reverse;\r\n }\r\n\r\n this.listLoader.setSearchContext(this.searchContext);\r\n this.listLoader.current = current;\r\n\r\n this.listLoader.load(true);\r\n this.listLoader.load(false);\r\n }\r\n\r\n public setMedia(media: HTMLMediaElement, message: Message.message) {\r\n this.playingMedia = media;\r\n this.playingMedia.volume = this.volume;\r\n this.playingMedia.muted = this.muted;\r\n this.playingMedia.playbackRate = this.playbackRate;\r\n\r\n if('mediaSession' in navigator) {\r\n this.setNewMediadata(message);\r\n }\r\n }\r\n\r\n public setSingleMedia(media?: HTMLMediaElement, message?: Message.message) {\r\n const playingMedia = this.playingMedia;\r\n\r\n const wasPlaying = this.pause();\r\n\r\n this.willBePlayed(undefined);\r\n if(media) this.setMedia(media, message);\r\n else this.playingMedia = undefined;\r\n this.toggleSwitchers(false);\r\n\r\n return () => {\r\n this.toggleSwitchers(true);\r\n\r\n if(playingMedia) {\r\n if(this.mediaDetails.get(playingMedia)) {\r\n this.setMedia(playingMedia, this.getMessageByMedia(playingMedia));\r\n } else {\r\n this.next() || this.previous();\r\n }\r\n }\r\n\r\n if(media && this.playingMedia === media) {\r\n this.stop();\r\n }\r\n\r\n if(wasPlaying) {\r\n this.play();\r\n }\r\n };\r\n }\r\n\r\n public toggleSwitchers(enabled: boolean) {\r\n this.lockedSwitchers = !enabled;\r\n }\r\n}\r\n\r\nconst appMediaPlaybackController = new AppMediaPlaybackController();\r\nMOUNT_CLASS_TO.appMediaPlaybackController = appMediaPlaybackController;\r\nexport default appMediaPlaybackController;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type GrabEvent = {x: number, y: number, isTouch?: boolean, event: TouchEvent | MouseEvent};\r\n\r\nexport default function attachGrabListeners(element: HTMLElement, \r\n onStart: (position: GrabEvent) => void, \r\n onMove: (position: GrabEvent) => void, \r\n onEnd?: (position: GrabEvent) => void) {\r\n // * Mouse\r\n const onMouseMove = (event: MouseEvent) => {\r\n onMove({x: event.pageX, y: event.pageY, event});\r\n };\r\n\r\n const onMouseUp = (event: MouseEvent) => {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n element.addEventListener('mousedown', onMouseDown, {once: true});\r\n onEnd && onEnd({x: event.pageX, y: event.pageY, event});\r\n };\r\n\r\n const onMouseDown = (event: MouseEvent) => {\r\n if(event.button !== 0) {\r\n element.addEventListener('mousedown', onMouseDown, {once: true});\r\n return;\r\n }\r\n\r\n onStart({x: event.pageX, y: event.pageY, event});\r\n onMouseMove(event);\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp, {once: true});\r\n };\r\n\r\n element.addEventListener('mousedown', onMouseDown, {once: true});\r\n\r\n // * Touch\r\n const onTouchMove = (event: TouchEvent) => {\r\n event.preventDefault();\r\n onMove({x: event.touches[0].clientX, y: event.touches[0].clientY, isTouch: true, event});\r\n };\r\n\r\n const onTouchEnd = (event: TouchEvent) => {\r\n document.removeEventListener('touchmove', onTouchMove);\r\n element.addEventListener('touchstart', onTouchStart, {passive: false, once: true});\r\n onEnd && onEnd({x: event.touches[0].clientX, y: event.touches[0].clientY, isTouch: true, event});\r\n };\r\n\r\n const onTouchStart = (event: TouchEvent) => {\r\n onStart({x: event.touches[0].clientX, y: event.touches[0].clientY, isTouch: true, event});\r\n onTouchMove(event);\r\n\r\n document.addEventListener('touchmove', onTouchMove, {passive: false});\r\n document.addEventListener('touchend', onTouchEnd, {passive: false, once: true});\r\n };\r\n\r\n element.addEventListener('touchstart', onTouchStart, {passive: false, once: true});\r\n\r\n return () => {\r\n element.removeEventListener('mousedown', onMouseDown);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n\r\n element.removeEventListener('touchstart', onTouchStart);\r\n document.removeEventListener('touchmove', onTouchMove);\r\n document.removeEventListener('touchend', onTouchEnd);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { clamp } from \"../helpers/number\";\r\nimport attachGrabListeners, { GrabEvent } from \"../helpers/dom/attachGrabListeners\";\r\nimport { safeAssign } from \"../helpers/object\";\r\n\r\nexport default class RangeSelector {\r\n public container: HTMLDivElement;\r\n protected filled: HTMLDivElement;\r\n protected seek: HTMLInputElement;\r\n\r\n public mousedown = false;\r\n protected rect: DOMRect;\r\n protected _removeListeners: () => void;\r\n\r\n private events: Partial<{\r\n //onMouseMove: ProgressLine['onMouseMove'],\r\n onMouseDown: RangeSelector['onMouseDown'],\r\n onMouseUp: RangeSelector['onMouseUp'],\r\n onScrub: (value: number) => void\r\n }> = {};\r\n\r\n protected decimals: number;\r\n\r\n protected step: number;\r\n protected min: number;\r\n protected max: number;\r\n protected withTransition = false;\r\n protected useTransform = false;\r\n protected vertical = false;\r\n\r\n constructor(\r\n options: {\r\n step: RangeSelector['step'],\r\n min: RangeSelector['min'],\r\n max: RangeSelector['max'],\r\n withTransition?: RangeSelector['withTransition'],\r\n useTransform?: RangeSelector['useTransform'],\r\n vertical?: RangeSelector['vertical']\r\n }, \r\n value = 0\r\n ) {\r\n safeAssign(this, options);\r\n\r\n this.container = document.createElement('div');\r\n this.container.classList.add('progress-line');\r\n\r\n // there is no sense in using transition with transform, because it is updating every frame\r\n if(this.useTransform) {\r\n this.container.classList.add('use-transform');\r\n } else if(this.withTransition) {\r\n this.container.classList.add('with-transition');\r\n }\r\n\r\n this.filled = document.createElement('div');\r\n this.filled.classList.add('progress-line__filled');\r\n\r\n const seek = this.seek = document.createElement('input');\r\n seek.classList.add('progress-line__seek');\r\n //seek.setAttribute('max', '0');\r\n seek.type = 'range';\r\n seek.step = '' + this.step;\r\n seek.min = '' + this.min;\r\n seek.max = '' + this.max;\r\n seek.value = '' + value;\r\n\r\n if(value) {\r\n this.setProgress(value);\r\n }\r\n\r\n const stepStr = '' + this.step;\r\n const index = stepStr.indexOf('.');\r\n this.decimals = index === -1 ? 0 : stepStr.length - index - 1;\r\n\r\n //this.setListeners();\r\n\r\n this.container.append(this.filled, seek);\r\n }\r\n\r\n get value() {\r\n return +this.seek.value;\r\n }\r\n\r\n public setHandlers(events: RangeSelector['events']) {\r\n this.events = events;\r\n }\r\n\r\n protected onMouseMove = (event: GrabEvent) => {\r\n this.scrub(event);\r\n };\r\n\r\n protected onMouseDown = (event: GrabEvent) => {\r\n this.rect = this.container.getBoundingClientRect();\r\n this.mousedown = true;\r\n this.scrub(event);\r\n this.container.classList.add('is-focused');\r\n this.events?.onMouseDown && this.events.onMouseDown(event);\r\n };\r\n\r\n protected onMouseUp = (event: GrabEvent) => {\r\n this.mousedown = false;\r\n this.container.classList.remove('is-focused');\r\n this.events?.onMouseUp && this.events.onMouseUp(event);\r\n };\r\n\r\n public setListeners() {\r\n this.seek.addEventListener('input', this.onInput);\r\n this._removeListeners = attachGrabListeners(this.container, this.onMouseDown, this.onMouseMove, this.onMouseUp);\r\n }\r\n\r\n public onInput = () => {\r\n const value = +this.seek.value;\r\n this.setFilled(value);\r\n this.events?.onScrub && this.events.onScrub(value);\r\n };\r\n\r\n public setProgress(value: number) {\r\n this.seek.value = '' + value;\r\n this.setFilled(+this.seek.value); // clamp\r\n }\r\n\r\n public addProgress(value: number) {\r\n this.seek.value = '' + (+this.seek.value + value);\r\n this.setFilled(+this.seek.value); // clamp\r\n }\r\n\r\n public setFilled(value: number) {\r\n let percents = (value - this.min) / (this.max - this.min);\r\n percents = clamp(percents, 0, 1);\r\n \r\n // using scaleX and width even with vertical because it will be rotated\r\n if(this.useTransform) {\r\n this.filled.style.transform = `scaleX(${percents})`;\r\n } else {\r\n this.filled.style.width = (percents * 100) + '%';\r\n }\r\n }\r\n\r\n protected scrub(event: GrabEvent) {\r\n const rectMax = this.vertical ? this.rect.height : this.rect.width;\r\n const offsetAxisValue = clamp(this.vertical ? -(event.y - this.rect.bottom) : event.x - this.rect.left, 0, rectMax);\r\n\r\n let value = this.min + (offsetAxisValue / rectMax * (this.max - this.min));\r\n\r\n if((value - this.min) < ((this.max - this.min) / 2)) {\r\n value -= this.step / 10;\r\n }\r\n \r\n value = +value.toFixed(this.decimals);\r\n value = clamp(value, this.min, this.max);\r\n\r\n //this.seek.value = '' + value;\r\n //this.onInput();\r\n\r\n this.setProgress(value);\r\n this.events?.onScrub && this.events.onScrub(value);\r\n\r\n return value;\r\n }\r\n\r\n public removeListeners() {\r\n if(this._removeListeners) {\r\n this._removeListeners();\r\n this._removeListeners = null;\r\n }\r\n\r\n this.seek.removeEventListener('input', this.onInput);\r\n \r\n this.events = {};\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport { AttachClickOptions, attachClickEvent, CLICK_EVENT_NAME } from \"../helpers/dom/clickEvent\";\nimport ListenerSetter from \"../helpers/listenerSetter\";\nimport { i18n, LangPackKey } from \"../lib/langPack\";\nimport CheckboxField from \"./checkboxField\";\nimport { closeBtnMenu } from \"./misc\";\nimport { ripple } from \"./ripple\";\n\nexport type ButtonMenuItemOptions = {\n icon?: string, \n text?: LangPackKey, \n regularText?: string, \n onClick: (e: MouseEvent | TouchEvent) => void, \n element?: HTMLElement,\n options?: AttachClickOptions,\n checkboxField?: CheckboxField,\n keepOpen?: boolean\n /* , cancelEvent?: true */\n};\n\nconst ButtonMenuItem = (options: ButtonMenuItemOptions) => {\n if(options.element) return options.element;\n\n const {icon, text, onClick} = options;\n const el = document.createElement('div');\n el.className = 'btn-menu-item' + (icon ? ' tgico-' + icon : '');\n ripple(el);\n\n const t = text ? i18n(text) : document.createElement('span');\n if(options.regularText) t.innerHTML = options.regularText;\n t.classList.add('btn-menu-item-text');\n el.append(t);\n\n if(options.checkboxField) {\n el.append(options.checkboxField.label);\n attachClickEvent(el, () => {\n options.checkboxField.checked = !options.checkboxField.checked;\n }, options.options);\n }\n\n const keepOpen = !!options.checkboxField || !!options.keepOpen;\n\n // * cancel mobile keyboard close\n attachClickEvent(el, CLICK_EVENT_NAME !== 'click' || keepOpen ? (e) => {\n cancelEvent(e);\n onClick(e);\n\n if(!keepOpen) {\n closeBtnMenu();\n }\n } : onClick, options.options);\n\n return options.element = el;\n};\n\nconst ButtonMenu = (buttons: ButtonMenuItemOptions[], listenerSetter?: ListenerSetter) => {\n const el = document.createElement('div');\n el.classList.add('btn-menu');\n\n if(listenerSetter) {\n buttons.forEach(b => {\n if(b.options) {\n b.options.listenerSetter = listenerSetter;\n } else {\n b.options = {listenerSetter};\n }\n });\n }\n\n const items = buttons.map(ButtonMenuItem);\n\n el.append(...items);\n\n return el;\n};\n\nexport default ButtonMenu;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport { AttachClickOptions, CLICK_EVENT_NAME } from \"../helpers/dom/clickEvent\";\r\nimport ListenerSetter from \"../helpers/listenerSetter\";\r\nimport ButtonIcon from \"./buttonIcon\";\r\nimport ButtonMenu, { ButtonMenuItemOptions } from \"./buttonMenu\";\r\nimport { closeBtnMenu, openBtnMenu } from \"./misc\";\r\n\r\nconst ButtonMenuToggle = (options: Partial<{noRipple: true, onlyMobile: true, listenerSetter: ListenerSetter, asDiv: boolean}> = {}, direction: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right', buttons: ButtonMenuItemOptions[], onOpen?: (e: Event) => void) => {\r\n options.asDiv = true;\r\n const button = ButtonIcon('more btn-menu-toggle', options);\r\n\r\n const btnMenu = ButtonMenu(buttons, options.listenerSetter);\r\n btnMenu.classList.add(direction);\r\n ButtonMenuToggleHandler(button, onOpen, options);\r\n button.append(btnMenu);\r\n return button;\r\n};\r\n\r\n// TODO: refactor for attachClickEvent, because if move finger after touchstart, it will start anyway\r\nconst ButtonMenuToggleHandler = (el: HTMLElement, onOpen?: (e: Event) => void, options?: AttachClickOptions) => {\r\n const add = options?.listenerSetter ? options.listenerSetter.add(el) : el.addEventListener.bind(el);\r\n\r\n //console.trace('ButtonMenuToggleHandler attach', el, onOpen, options);\r\n add(CLICK_EVENT_NAME, (e: Event) => {\r\n //console.log('ButtonMenuToggleHandler click', e);\r\n if(!el.classList.contains('btn-menu-toggle')) return false;\r\n\r\n //window.removeEventListener('mousemove', onMouseMove);\r\n const openedMenu = el.querySelector('.btn-menu') as HTMLDivElement;\r\n cancelEvent(e);\r\n\r\n if(el.classList.contains('menu-open')) {\r\n closeBtnMenu();\r\n } else {\r\n onOpen && onOpen(e);\r\n openBtnMenu(openedMenu);\r\n }\r\n });\r\n};\r\n\r\nexport { ButtonMenuToggleHandler };\r\nexport default ButtonMenuToggle;\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appMediaPlaybackController from \"../components/appMediaPlaybackController\";\nimport { IS_APPLE_MOBILE } from \"../environment/userAgent\";\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\nimport RangeSelector from \"../components/rangeSelector\";\nimport { onMediaLoad } from \"../helpers/files\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport ListenerSetter from \"../helpers/listenerSetter\";\nimport ButtonMenu from \"../components/buttonMenu\";\nimport { ButtonMenuToggleHandler } from \"../components/buttonMenuToggle\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport rootScope from \"./rootScope\";\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\nimport { GrabEvent } from \"../helpers/dom/attachGrabListeners\";\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\n\nexport class MediaProgressLine extends RangeSelector {\n protected filledLoad: HTMLDivElement;\n\n protected progressRAF = 0;\n\n protected media: HTMLMediaElement;\n protected streamable: boolean;\n\n constructor(media?: HTMLAudioElement | HTMLVideoElement, streamable?: boolean, withTransition?: boolean, useTransform?: boolean) {\n super({\n step: 1000 / 60 / 1000, \n min: 0, \n max: 1, \n withTransition, \n useTransform\n }, 0);\n\n if(media) {\n this.setMedia(media, streamable);\n }\n }\n\n public setMedia(media: HTMLMediaElement, streamable = false) {\n if(this.media) {\n this.removeListeners();\n }\n\n if(streamable && !this.filledLoad) {\n this.filledLoad = document.createElement('div');\n this.filledLoad.classList.add('progress-line__filled', 'progress-line__loaded');\n this.container.prepend(this.filledLoad);\n //this.setLoadProgress();\n } else if(this.filledLoad) {\n this.filledLoad.classList.toggle('hide', !streamable);\n }\n\n this.media = media;\n this.streamable = streamable;\n if(!media.paused || media.currentTime > 0) {\n this.onPlay();\n }\n\n let wasPlaying = false;\n this.setSeekMax();\n this.setListeners();\n this.setHandlers({\n onMouseDown: () => {\n wasPlaying = !this.media.paused;\n wasPlaying && this.media.pause();\n },\n\n onMouseUp: (e) => {\n // cancelEvent(e.event);\n wasPlaying && this.media.play();\n }\n });\n }\n\n protected onLoadedData = () => {\n this.max = this.media.duration;\n this.seek.setAttribute('max', '' + this.max);\n };\n\n protected onEnded = () => {\n this.setProgress();\n };\n\n protected onPlay = () => {\n let r = () => {\n this.setProgress();\n\n this.progressRAF = this.media.paused ? 0 : window.requestAnimationFrame(r);\n };\n\n if(this.progressRAF) {\n window.cancelAnimationFrame(this.progressRAF);\n }\n\n if(this.streamable) {\n this.setLoadProgress();\n }\n\n this.progressRAF = window.requestAnimationFrame(r);\n };\n\n protected onTimeUpdate = () => {\n if(this.media.paused) {\n this.setProgress();\n\n if(this.streamable) {\n this.setLoadProgress();\n }\n }\n };\n\n protected onProgress = (e: Event) => {\n this.setLoadProgress();\n };\n\n protected scrub(e: GrabEvent) {\n const scrubTime = super.scrub(e);\n this.media.currentTime = scrubTime;\n return scrubTime;\n }\n\n protected setLoadProgress() {\n if(appMediaPlaybackController.isSafariBuffering(this.media)) return;\n const buf = this.media.buffered;\n const numRanges = buf.length;\n\n const currentTime = this.media.currentTime;\n let nearestStart = 0, end = 0;\n for(let i = 0; i < numRanges; ++i) {\n const start = buf.start(i);\n if(currentTime >= start && start >= nearestStart) {\n nearestStart = start;\n end = buf.end(i);\n }\n\n //console.log('onProgress range:', i, buf.start(i), buf.end(i), this.media);\n }\n\n //console.log('onProgress correct range:', nearestStart, end, this.media);\n\n const percents = this.media.duration ? end / this.media.duration : 0;\n this.filledLoad.style.width = (percents * 100) + '%';\n //this.filledLoad.style.transform = 'scaleX(' + percents + ')';\n }\n\n protected setSeekMax() {\n this.max = this.media.duration || 0;\n if(this.max > 0) {\n this.onLoadedData();\n } else {\n this.media.addEventListener('loadeddata', this.onLoadedData);\n }\n }\n\n public setProgress() {\n if(appMediaPlaybackController.isSafariBuffering(this.media)) return;\n const currentTime = this.media.currentTime;\n\n super.setProgress(currentTime);\n }\n\n public setListeners() {\n super.setListeners();\n this.media.addEventListener('ended', this.onEnded);\n this.media.addEventListener('play', this.onPlay);\n this.media.addEventListener('timeupdate', this.onTimeUpdate);\n this.streamable && this.media.addEventListener('progress', this.onProgress);\n }\n\n public removeListeners() {\n super.removeListeners();\n\n this.media.removeEventListener('loadeddata', this.onLoadedData);\n this.media.removeEventListener('ended', this.onEnded);\n this.media.removeEventListener('play', this.onPlay);\n this.media.removeEventListener('timeupdate', this.onTimeUpdate);\n this.streamable && this.media.removeEventListener('progress', this.onProgress);\n\n if(this.progressRAF) {\n window.cancelAnimationFrame(this.progressRAF);\n this.progressRAF = 0;\n }\n }\n}\n\nexport class VolumeSelector extends RangeSelector {\n public btn: HTMLElement;\n protected volumeSvg: HTMLElement;\n\n constructor(protected listenerSetter: ListenerSetter, protected vertical = false) {\n super({\n step: 0.01, \n min: 0, \n max: 1,\n vertical\n }, 1);\n\n this.setListeners();\n this.setHandlers({\n onScrub: currentTime => {\n const value = Math.max(Math.min(currentTime, 1), 0);\n\n //console.log('volume scrub:', currentTime, value);\n\n appMediaPlaybackController.muted = false;\n appMediaPlaybackController.volume = value;\n },\n\n /* onMouseUp: (e) => {\n cancelEvent(e.event);\n } */\n });\n\n this.btn = document.createElement('div');\n this.btn.classList.add('player-volume');\n\n this.btn.innerHTML = `\n \n `;\n this.btn.classList.add('btn-icon');\n this.volumeSvg = this.btn.firstElementChild as HTMLElement;\n\n this.btn.append(this.container);\n\n attachClickEvent(this.volumeSvg, this.onMuteClick, {listenerSetter: this.listenerSetter});\n this.listenerSetter.add(rootScope)('media_playback_params', this.setVolume);\n\n this.setVolume();\n }\n\n private onMuteClick = (e?: Event) => {\n e && cancelEvent(e);\n appMediaPlaybackController.muted = !appMediaPlaybackController.muted;\n };\n\n private setVolume = () => {\n // const volume = video.volume;\n const {volume, muted} = appMediaPlaybackController;\n let d: string;\n if(!volume || muted) {\n d = `M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z`;\n } else if(volume > .5) {\n d = `M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z`;\n } else if(volume > 0 && volume < .25) {\n d = `M7 9v6h4l5 5V4l-5 5H7z`;\n } else {\n d = `M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z`;\n }\n\n try {\n this.volumeSvg.innerHTML = ``;\n } catch(err) {}\n\n if(!this.mousedown) {\n this.setProgress(muted ? 0 : volume);\n }\n };\n}\n\nexport default class VideoPlayer extends EventListenerBase<{\n toggleControls: (show: boolean) => void\n}> {\n private wrapper: HTMLDivElement;\n private progress: MediaProgressLine;\n private skin: 'default';\n\n private listenerSetter: ListenerSetter;\n\n private showControlsTimeout = 0;\n\n private controlsLocked: boolean;\n\n /* private videoParent: HTMLElement;\n private videoWhichChild: number; */\n\n constructor(private video: HTMLVideoElement, play = false, streamable = false, duration?: number) {\n super(false);\n\n this.wrapper = document.createElement('div');\n this.wrapper.classList.add('ckin__player');\n\n this.listenerSetter = new ListenerSetter();\n\n video.parentNode.insertBefore(this.wrapper, video);\n this.wrapper.appendChild(video);\n\n this.skin = 'default';\n\n this.stylePlayer(duration);\n // this.setBtnMenuToggle();\n\n if(this.skin === 'default') {\n const controls = this.wrapper.querySelector('.default__controls.ckin__controls') as HTMLDivElement;\n this.progress = new MediaProgressLine(video, streamable);\n controls.prepend(this.progress.container);\n }\n\n if(play/* && video.paused */) {\n const promise = video.play();\n promise.catch((err: Error) => {\n if(err.name === 'NotAllowedError') {\n video.muted = true;\n video.autoplay = true;\n video.play();\n }\n }).finally(() => { // due to autoplay, play will not call\n this.wrapper.classList.toggle('is-playing', !this.video.paused);\n });\n //(this.wrapper.querySelector('.toggle') as HTMLButtonElement).click();\n }\n }\n\n private stylePlayer(initDuration: number) {\n const {wrapper: player, video, skin} = this;\n\n player.classList.add(skin);\n \n const html = this.buildControls();\n player.insertAdjacentHTML('beforeend', html);\n let timeDuration: HTMLElement;\n \n if(skin === 'default') {\n const toggle = player.querySelectorAll('.toggle') as NodeListOf;\n const fullScreenButton = player.querySelector('.fullscreen') as HTMLElement;\n const timeElapsed = player.querySelector('#time-elapsed');\n timeDuration = player.querySelector('#time-duration') as HTMLElement;\n timeDuration.innerHTML = String(video.duration | 0).toHHMMSS();\n\n const volumeSelector = new VolumeSelector(this.listenerSetter);\n\n const leftControls = player.querySelector('.left-controls');\n leftControls.insertBefore(volumeSelector.btn, timeElapsed.parentElement);\n\n Array.from(toggle).forEach((button) => {\n this.listenerSetter.add(button)('click', () => {\n this.togglePlay();\n });\n });\n\n this.listenerSetter.add(video)('click', () => {\n if(!IS_TOUCH_SUPPORTED) {\n this.togglePlay();\n }\n });\n\n if(IS_TOUCH_SUPPORTED) {\n this.listenerSetter.add(player)('click', () => {\n this.toggleControls();\n });\n\n /* this.listenerSetter.add(player)('touchstart', () => {\n showControls(false);\n });\n\n this.listenerSetter.add(player)('touchend', () => {\n if(player.classList.contains('is-playing')) {\n showControls();\n }\n }); */\n } else {\n this.listenerSetter.add(this.wrapper)('mousemove', () => {\n this.showControls();\n });\n\n this.listenerSetter.add(this.wrapper)('mouseenter', () => {\n this.showControls(false);\n });\n\n this.listenerSetter.add(this.wrapper)('mouseleave', (e) => {\n if(findUpClassName(e.relatedTarget, 'media-viewer-caption')) {\n this.showControls(false);\n return;\n }\n \n this.hideControls();\n });\n\n this.listenerSetter.add(document)('keydown', (e: KeyboardEvent) => {\n if(rootScope.overlaysActive > 1) { // forward popup is active, etc\n return;\n }\n\n let good = true;\n if(e.code === 'KeyF') {\n this.toggleFullScreen(fullScreenButton);\n } else if(e.code === 'KeyM') {\n appMediaPlaybackController.muted = !appMediaPlaybackController.muted;\n } else if(e.code === 'Space') {\n this.togglePlay();\n } else if(e.altKey && e.code === 'Equal') {\n appMediaPlaybackController.playbackRate += .25;\n } else if(e.altKey && e.code === 'Minus') {\n appMediaPlaybackController.playbackRate -= .25;\n } else {\n good = false;\n }\n\n if(good) {\n cancelEvent(e);\n return false;\n }\n });\n }\n \n /* player.addEventListener('click', (e) => {\n if(e.target !== player) {\n return;\n }\n\n this.togglePlay();\n }); */\n \n /* video.addEventListener('play', () => {\n }); */\n\n this.listenerSetter.add(video)('dblclick', () => {\n if(!IS_TOUCH_SUPPORTED) {\n this.toggleFullScreen(fullScreenButton);\n }\n });\n\n this.listenerSetter.add(fullScreenButton)('click', (e) => {\n this.toggleFullScreen(fullScreenButton);\n });\n\n 'webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange'.split(' ').forEach(eventName => {\n this.listenerSetter.add(player)(eventName, this.onFullScreen, false);\n });\n\n this.listenerSetter.add(video)('timeupdate', () => {\n timeElapsed.innerHTML = String(video.currentTime | 0).toHHMMSS();\n });\n\n this.listenerSetter.add(video)('play', () => {\n this.wrapper.classList.add('played');\n }, {once: true});\n\n this.listenerSetter.add(video)('pause', () => {\n this.showControls(false);\n });\n }\n\n this.listenerSetter.add(video)('play', () => {\n this.wrapper.classList.add('is-playing');\n });\n\n this.listenerSetter.add(video)('pause', () => {\n this.wrapper.classList.remove('is-playing');\n });\n \n if(video.duration || initDuration) {\n timeDuration.innerHTML = String(Math.round(video.duration || initDuration)).toHHMMSS();\n } else {\n onMediaLoad(video).then(() => {\n timeDuration.innerHTML = String(Math.round(video.duration)).toHHMMSS();\n });\n }\n }\n\n public hideControls = () => {\n clearTimeout(this.showControlsTimeout);\n this.showControlsTimeout = 0;\n\n const isShown = this.wrapper.classList.contains('show-controls');\n if(this.controlsLocked !== false) {\n if(this.video.paused || !isShown || this.controlsLocked) {\n return;\n }\n } else if(!isShown) {\n return;\n }\n \n this.dispatchEvent('toggleControls', false);\n this.wrapper.classList.remove('show-controls');\n };\n \n public showControls = (setHideTimeout = true) => {\n if(this.showControlsTimeout) {\n clearTimeout(this.showControlsTimeout);\n this.showControlsTimeout = 0;\n } else if(!this.wrapper.classList.contains('show-controls') && this.controlsLocked !== false) {\n this.dispatchEvent('toggleControls', true);\n this.wrapper.classList.add('show-controls');\n }\n\n if(!setHideTimeout || this.controlsLocked) {\n return;\n }\n\n this.showControlsTimeout = window.setTimeout(this.hideControls, 3e3);\n };\n\n public toggleControls = (show?: boolean) => {\n const isShown = this.wrapper.classList.contains('show-controls');\n\n if(show === undefined) {\n if(isShown) this.hideControls();\n else this.showControls();\n } else if(show === isShown) return;\n else if(show === false) this.hideControls();\n else this.showControls();\n };\n\n public lockControls(visible: boolean) {\n this.controlsLocked = visible;\n\n this.wrapper.classList.toggle('disable-hover', visible === false);\n this.toggleControls(visible);\n }\n\n protected togglePlay() {\n this.video[this.video.paused ? 'play' : 'pause']();\n }\n\n private buildControls() {\n const skin = this.skin;\n if(skin === 'default') {\n return `\n \n
\n
\n
\n
\n \n
\n \n / \n \n
\n
\n
\n \n \n
\n
\n
`;\n }\n }\n\n protected setBtnMenuToggle() {\n const buttons: Parameters[0] = [0.25, 0.5, 1, 1.25, 1.5, 2].map((rate) => {\n return { \n regularText: rate === 1 ? 'Normal' : '' + rate, \n onClick: () => this.video.playbackRate = rate\n };\n });\n const btnMenu = ButtonMenu(buttons);\n const settingsButton = this.wrapper.querySelector('.settings') as HTMLElement;\n btnMenu.classList.add('top-left');\n ButtonMenuToggleHandler(settingsButton);\n settingsButton.append(btnMenu);\n }\n\n public static isFullScreen(): boolean {\n // @ts-ignore\n return !!(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement);\n }\n \n protected toggleFullScreen(fullScreenButton: HTMLElement) {\n // alternative standard method\n const player = this.wrapper;\n\n // * https://caniuse.com/#feat=fullscreen\n if(IS_APPLE_MOBILE) {\n const video = this.video as any;\n video.webkitEnterFullscreen();\n video.enterFullscreen();\n return;\n }\n \n if(!VideoPlayer.isFullScreen()) {\n player.classList.add('ckin__fullscreen');\n\n /* const videoParent = this.video.parentElement;\n const videoWhichChild = whichChild(this.video);\n const needVideoRemount = videoParent !== player;\n\n if(needVideoRemount) {\n this.videoParent = videoParent;\n this.videoWhichChild = videoWhichChild;\n player.prepend(this.video);\n } */\n \n if(player.requestFullscreen) {\n player.requestFullscreen();\n // @ts-ignore\n } else if(player.mozRequestFullScreen) {\n // @ts-ignore\n player.mozRequestFullScreen(); // Firefox\n // @ts-ignore\n } else if(player.webkitRequestFullscreen) {\n // @ts-ignore\n player.webkitRequestFullscreen(); // Chrome and Safari\n // @ts-ignore\n } else if(player.msRequestFullscreen) {\n // @ts-ignore\n player.msRequestFullscreen();\n }\n \n fullScreenButton.classList.remove('tgico-fullscreen');\n fullScreenButton.classList.add('tgico-smallscreen');\n fullScreenButton.setAttribute('title', 'Exit Full Screen');\n } else {\n player.classList.remove('ckin__fullscreen');\n\n /* if(this.videoParent) {\n const {videoWhichChild, videoParent} = this;\n if(!videoWhichChild) {\n videoParent.prepend(this.video);\n } else {\n videoParent.insertBefore(this.video, videoParent.children[videoWhichChild]);\n }\n\n this.videoParent = null;\n this.videoWhichChild = -1;\n } */\n \n // @ts-ignore\n if(document.cancelFullScreen) {\n // @ts-ignore\n document.cancelFullScreen();\n // @ts-ignore\n } else if(document.mozCancelFullScreen) {\n // @ts-ignore\n document.mozCancelFullScreen();\n // @ts-ignore\n } else if(document.webkitCancelFullScreen) {\n // @ts-ignore\n document.webkitCancelFullScreen();\n // @ts-ignore\n } else if(document.msExitFullscreen) {\n // @ts-ignore\n document.msExitFullscreen();\n }\n \n fullScreenButton.classList.remove('tgico-smallscreen');\n fullScreenButton.classList.add('tgico-fullscreen');\n fullScreenButton.setAttribute('title', 'Full Screen');\n }\n }\n \n protected onFullScreen = () => {\n // @ts-ignore\n const isFullscreenNow = document.webkitFullscreenElement !== null;\n if(!isFullscreenNow) {\n this.wrapper.classList.remove('ckin__fullscreen');\n }\n };\n\n public removeListeners() {\n super.cleanup();\n this.listenerSetter.removeAll();\n this.progress.removeListeners();\n }\n}\n","// * Jolly Cobra's schedulers\n\nimport { AnyToVoidFunction } from \"../../types\";\nimport { fastRaf } from \"../schedulers\";\nimport throttleWith from \"./throttleWith\";\n\nexport default function throttleWithRaf(fn: F) {\n return throttleWith(fastRaf, fn);\n}\n","// * Jolly Cobra's schedulers\n\nimport { AnyToVoidFunction } from \"../../types\";\n\nexport default function throttleWith(schedulerFn: AnyToVoidFunction, fn: F) {\n let waiting = false;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n args = _args;\n\n if (!waiting) {\n waiting = true;\n\n schedulerFn(() => {\n waiting = false;\n // @ts-ignore\n fn(...args);\n });\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appDocsManager, {MyDocument} from \"../lib/appManagers/appDocsManager\";\nimport { wrapPhoto } from \"./wrappers\";\nimport ProgressivePreloader from \"./preloader\";\nimport { MediaProgressLine } from \"../lib/mediaPlayer\";\nimport appMediaPlaybackController, { MediaItem, MediaSearchContext } from \"./appMediaPlaybackController\";\nimport { DocumentAttribute, Message } from \"../layer\";\nimport mediaSizes from \"../helpers/mediaSizes\";\nimport { IS_SAFARI } from \"../environment/userAgent\";\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\nimport rootScope from \"../lib/rootScope\";\nimport './middleEllipsis';\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\nimport LazyLoadQueue from \"./lazyLoadQueue\";\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\nimport ListenerSetter, { Listener } from \"../helpers/listenerSetter\";\nimport noop from \"../helpers/noop\";\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\nimport { joinElementsWith } from \"../lib/langPack\";\nimport { MiddleEllipsisElement } from \"./middleEllipsis\";\nimport htmlToSpan from \"../helpers/dom/htmlToSpan\";\nimport { formatFullSentTime } from \"../helpers/date\";\nimport { formatBytes } from \"../helpers/number\";\nimport throttleWithRaf from \"../helpers/schedulers/throttleWithRaf\";\n\nrootScope.addEventListener('messages_media_read', ({mids, peerId}) => {\n mids.forEach(mid => {\n const attr = `[data-mid=\"${mid}\"][data-peer-id=\"${peerId}\"]`;\n (Array.from(document.querySelectorAll(`audio-element.is-unread${attr}, .media-round.is-unread${attr}`)) as AudioElement[]).forEach(elem => {\n elem.classList.remove('is-unread');\n });\n });\n});\n\n// https://github.com/LonamiWebs/Telethon/blob/4393ec0b83d511b6a20d8a20334138730f084375/telethon/utils.py#L1285\nexport function decodeWaveform(waveform: Uint8Array | number[]) {\n if(!(waveform instanceof Uint8Array)) {\n waveform = new Uint8Array(waveform);\n }\n\n const bitCount = waveform.length * 8;\n const valueCount = bitCount / 5 | 0;\n if(!valueCount) {\n return new Uint8Array([]);\n }\n\n let result: Uint8Array;\n try {\n const dataView = new DataView(waveform.buffer);\n result = new Uint8Array(valueCount);\n for(let i = 0; i < valueCount; i++) {\n const byteIndex = i * 5 / 8 | 0;\n const bitShift = i * 5 % 8;\n const value = dataView.getUint16(byteIndex, true);\n result[i] = (value >> bitShift) & 0b00011111;\n }\n } catch(err) {\n result = new Uint8Array([]);\n }\n\n /* var byteIndex = (valueCount - 1) / 8 | 0;\n var bitShift = (valueCount - 1) % 8;\n if(byteIndex === waveform.length - 1) {\n var value = waveform[byteIndex];\n } else {\n var value = dataView.getUint16(byteIndex, true);\n }\n console.log('decoded waveform, setting last value:', value, byteIndex, bitShift);\n result[valueCount - 1] = (value >> bitShift) & 0b00011111; */\n return result;\n}\n\nfunction wrapVoiceMessage(audioEl: AudioElement) {\n audioEl.classList.add('is-voice');\n\n const message = audioEl.message;\n const doc = appMessagesManager.getMediaFromMessage(message) as MyDocument;\n\n if(message.pFlags.out) {\n audioEl.classList.add('is-out');\n }\n\n const barWidth = 2;\n const barMargin = 2; //mediaSizes.isMobile ? 2 : 1;\n const barHeightMin = 4; //mediaSizes.isMobile ? 3 : 2;\n const barHeightMax = mediaSizes.isMobile ? 16 : 23;\n const availW = 150; //mediaSizes.isMobile ? 152 : 190;\n\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.classList.add('audio-waveform');\n svg.setAttributeNS(null, 'width', '' + availW);\n svg.setAttributeNS(null, 'height', '' + barHeightMax);\n svg.setAttributeNS(null, 'viewBox', `0 0 ${availW} ${barHeightMax}`);\n\n const timeDiv = document.createElement('div');\n timeDiv.classList.add('audio-time');\n audioEl.append(svg, timeDiv);\n\n let waveform = (doc.attributes.find(attribute => attribute._ === 'documentAttributeAudio') as DocumentAttribute.documentAttributeAudio).waveform || new Uint8Array([]);\n waveform = decodeWaveform(waveform.slice(0, 63));\n\n //console.log('decoded waveform:', waveform);\n\n const normValue = Math.max(...waveform);\n const wfSize = waveform.length ? waveform.length : 100;\n const barCount = Math.min((availW / (barWidth + barMargin)) | 0, wfSize);\n\n let maxValue = 0;\n const maxDelta = barHeightMax - barHeightMin;\n\n let html = '';\n for(let i = 0, barX = 0, sumI = 0; i < wfSize; ++i) {\n const value = waveform[i] || 0;\n if((sumI + barCount) >= wfSize) { // draw bar\n sumI = sumI + barCount - wfSize;\n\t\t\tif(sumI < (barCount + 1) / 2) {\n\t\t\t\tif(maxValue < value) maxValue = value;\n }\n \n const bar_value = Math.max(((maxValue * maxDelta) + ((normValue + 1) / 2)) / (normValue + 1), barHeightMin);\n \n const h = `\n \n `;\n html += h;\n\n barX += barWidth + barMargin;\n\n if(sumI < (barCount + 1) / 2) {\n maxValue = 0;\n } else {\n maxValue = value;\n }\n } else {\n if(maxValue < value) maxValue = value;\n\n sumI += barCount;\n }\n }\n\n svg.insertAdjacentHTML('beforeend', html);\n const rects = Array.from(svg.children) as HTMLElement[];\n\n let progress = audioEl.querySelector('.audio-waveform') as HTMLDivElement;\n \n const onLoad = () => {\n let audio = audioEl.audio;\n\n const onTimeUpdate = () => {\n const lastIndex = audio.currentTime === audio.duration ? 0 : Math.ceil(audio.currentTime / audio.duration * barCount);\n \n //svg.children[lastIndex].setAttributeNS(null, 'fill', '#000');\n //svg.children[lastIndex].classList.add('active'); #Иногда пропускает полоски..\n rects.forEach((node, idx) => node.classList.toggle('active', idx < lastIndex));\n //++lastIndex;\n //console.log('lastIndex:', lastIndex, audio.currentTime);\n //}, duration * 1000 / svg.childElementCount | 0/* 63 * duration / 10 */);\n };\n\n if(!audio.paused || (audio.currentTime > 0 && audio.currentTime !== audio.duration)) {\n onTimeUpdate();\n }\n\n const throttledTimeUpdate = throttleWithRaf(onTimeUpdate);\n audioEl.addAudioListener('timeupdate', throttledTimeUpdate);\n audioEl.addAudioListener('ended', throttledTimeUpdate);\n\n audioEl.readyPromise.then(() => {\n let mousedown = false, mousemove = false;\n progress.addEventListener('mouseleave', (e) => {\n if(mousedown) {\n audio.play();\n mousedown = false;\n }\n mousemove = false;\n })\n progress.addEventListener('mousemove', (e) => {\n mousemove = true;\n if(mousedown) scrub(e);\n });\n progress.addEventListener('mousedown', (e) => {\n e.preventDefault();\n if(e.button !== 0) return;\n if(!audio.paused) {\n audio.pause();\n }\n \n scrub(e);\n mousedown = true;\n });\n progress.addEventListener('mouseup', (e) => {\n if(mousemove && mousedown) {\n audio.play();\n mousedown = false;\n }\n });\n attachClickEvent(progress, (e) => {\n cancelEvent(e);\n if(!audio.paused) scrub(e);\n });\n \n function scrub(e: MouseEvent | TouchEvent) {\n let offsetX: number;\n if(e instanceof MouseEvent) {\n offsetX = e.offsetX;\n } else { // touch\n const rect = (e.target as HTMLElement).getBoundingClientRect();\n offsetX = e.targetTouches[0].pageX - rect.left;\n }\n \n const scrubTime = offsetX / availW /* width */ * audio.duration;\n audio.currentTime = scrubTime;\n }\n }, noop);\n \n return () => {\n progress.remove();\n progress = null;\n audio = null;\n };\n };\n\n return onLoad;\n}\n\nfunction wrapAudio(audioEl: AudioElement) {\n const withTime = audioEl.withTime;\n\n const message = audioEl.message;\n const doc: MyDocument = appMessagesManager.getMediaFromMessage(message);\n\n const isVoice = doc.type === 'voice' || doc.type === 'round';\n const descriptionEl = document.createElement('div');\n descriptionEl.classList.add('audio-description');\n \n if(!isVoice) {\n const parts: (Node | string)[] = [];\n if(doc.audioPerformer) {\n parts.push(htmlToSpan(doc.audioPerformer));\n }\n\n if(withTime) {\n parts.push(formatFullSentTime(message.date));\n } else if(!parts.length) {\n parts.push(formatBytes(doc.size));\n }\n\n if(audioEl.showSender) {\n parts.push(appMessagesManager.wrapSenderToPeer(message));\n }\n\n descriptionEl.append(...joinElementsWith(parts, ' • '));\n }\n\n const html = `\n
\n
\n
\n
`;\n audioEl.insertAdjacentHTML('beforeend', html);\n\n const titleEl = audioEl.querySelector('.audio-title') as HTMLElement;\n\n const middleEllipsisEl = new MiddleEllipsisElement();\n middleEllipsisEl.dataset.fontWeight = audioEl.dataset.fontWeight;\n if(isVoice) {\n middleEllipsisEl.append(appMessagesManager.wrapSenderToPeer(message));\n } else {\n middleEllipsisEl.innerHTML = doc.audioTitle || doc.fileName;\n }\n\n titleEl.append(middleEllipsisEl);\n\n if(audioEl.showSender) {\n titleEl.append(appMessagesManager.wrapSentTime(message));\n }\n \n const subtitleDiv = audioEl.querySelector('.audio-subtitle') as HTMLDivElement;\n subtitleDiv.append(descriptionEl);\n\n const onLoad = () => {\n let launched = false;\n\n let progressLine = new MediaProgressLine(audioEl.audio, doc.supportsStreaming);\n\n audioEl.addAudioListener('ended', () => {\n audioEl.classList.remove('audio-show-progress');\n // Reset subtitle\n subtitleDiv.lastChild.replaceWith(descriptionEl);\n launched = false;\n });\n\n const onPlay = () => {\n if(!launched) {\n audioEl.classList.add('audio-show-progress');\n launched = true;\n\n if(progressLine) {\n subtitleDiv.lastChild.replaceWith(progressLine.container);\n }\n }\n };\n\n audioEl.addAudioListener('play', onPlay);\n\n if(!audioEl.audio.paused || audioEl.audio.currentTime > 0) {\n onPlay();\n }\n\n return () => {\n progressLine.removeListeners();\n progressLine.container.remove();\n progressLine = null;\n };\n };\n\n return onLoad;\n}\n\nfunction constructDownloadPreloader(tryAgainOnFail = true) {\n const preloader = new ProgressivePreloader({cancelable: true, tryAgainOnFail});\n preloader.construct();\n\n if(!tryAgainOnFail) {\n preloader.circle.setAttributeNS(null, 'r', '23');\n preloader.totalLength = 143.58203125;\n }\n\n return preloader;\n}\n\nexport const findAudioTargets = (anchor: HTMLElement, useSearch: boolean) => {\n let prev: MediaItem[], next: MediaItem[];\n // if(anchor.classList.contains('search-super-item') || !useSearch) {\n const container = findUpClassName(anchor, anchor.classList.contains('search-super-item') ? 'tabs-tab' : 'bubbles-inner');\n if(container) {\n const attr = `:not([data-is-outgoing=\"1\"])`;\n const justAudioSelector = `.audio:not(.is-voice)${attr}`;\n let selector: string;\n if(!anchor.matches(justAudioSelector)) {\n selector = `.audio.is-voice${attr}, .media-round${attr}`;\n } else {\n selector = justAudioSelector;\n }\n\n const elements = Array.from(container.querySelectorAll(selector)) as HTMLElement[];\n const idx = elements.indexOf(anchor);\n\n const mediaItems: MediaItem[] = elements.map(element => ({peerId: +element.dataset.peerId, mid: +element.dataset.mid}));\n\n prev = mediaItems.slice(0, idx);\n next = mediaItems.slice(idx + 1);\n }\n // }\n\n return [prev, next];\n};\n\nexport default class AudioElement extends HTMLElement {\n public audio: HTMLAudioElement;\n public preloader: ProgressivePreloader;\n public message: Message.message;\n public withTime = false;\n public voiceAsMusic = false;\n public searchContext: MediaSearchContext;\n public showSender = false;\n public noAutoDownload: boolean;\n public lazyLoadQueue: LazyLoadQueue;\n public loadPromises: Promise[];\n\n private listenerSetter = new ListenerSetter();\n private onTypeDisconnect: () => void;\n public onLoad: (autoload?: boolean) => void;\n public readyPromise: CancellablePromise;\n\n public render() {\n this.classList.add('audio');\n\n this.dataset.mid = '' + this.message.mid;\n this.dataset.peerId = '' + this.message.peerId;\n\n const doc: MyDocument = appMessagesManager.getMediaFromMessage(this.message);\n const isRealVoice = doc.type === 'voice';\n const isVoice = !this.voiceAsMusic && isRealVoice;\n const isOutgoing = this.message.pFlags.is_outgoing;\n const uploading = isOutgoing && this.preloader;\n\n const durationStr = String(doc.duration | 0).toHHMMSS();\n\n this.innerHTML = `\n
\n
\n
\n
\n
\n
`;\n\n const toggle = this.firstElementChild as HTMLElement;\n\n const downloadDiv = document.createElement('div');\n downloadDiv.classList.add('audio-download');\n\n const isUnread = doc.type !== 'audio' && this.message && this.message.pFlags.media_unread;\n if(isUnread) {\n this.classList.add('is-unread');\n }\n\n if(uploading) {\n this.classList.add('is-outgoing');\n this.append(downloadDiv);\n }\n\n const onTypeLoad = isVoice ? wrapVoiceMessage(this) : wrapAudio(this);\n \n const audioTimeDiv = this.querySelector('.audio-time') as HTMLDivElement;\n audioTimeDiv.innerHTML = durationStr;\n\n const onLoad = this.onLoad = (autoload: boolean) => {\n this.onLoad = undefined;\n\n const audio = this.audio = appMediaPlaybackController.addMedia(this.message, autoload);\n\n const readyPromise = this.readyPromise = deferredPromise();\n if(this.audio.readyState >= this.audio.HAVE_CURRENT_DATA) readyPromise.resolve();\n else {\n this.addAudioListener('canplay', () => readyPromise.resolve(), {once: true});\n }\n\n this.onTypeDisconnect = onTypeLoad();\n \n const getTimeStr = () => String(audio.currentTime | 0).toHHMMSS() + (isVoice ? (' / ' + durationStr) : '');\n\n const onPlay = () => {\n audioTimeDiv.innerText = getTimeStr();\n toggle.classList.toggle('playing', !audio.paused);\n };\n\n if(!audio.paused || (audio.currentTime > 0 && audio.currentTime !== audio.duration)) {\n onPlay();\n }\n\n const togglePlay = (e?: Event, paused = audio.paused) => {\n e && cancelEvent(e);\n\n if(paused) {\n if(appMediaPlaybackController.setSearchContext(this.searchContext)) {\n const [prev, next] = findAudioTargets(this, this.searchContext.useSearch);\n appMediaPlaybackController.setTargets({peerId: this.message.peerId, mid: this.message.mid}, prev, next);\n }\n\n audio.play().catch(() => {});\n } else {\n audio.pause();\n }\n };\n\n attachClickEvent(toggle, (e) => togglePlay(e), {listenerSetter: this.listenerSetter});\n\n this.addAudioListener('ended', () => {\n toggle.classList.remove('playing');\n audioTimeDiv.innerText = durationStr;\n });\n\n this.addAudioListener('timeupdate', () => {\n if((!audio.currentTime && audio.paused) || appMediaPlaybackController.isSafariBuffering(audio)) return;\n audioTimeDiv.innerText = getTimeStr();\n });\n\n this.addAudioListener('pause', () => {\n toggle.classList.remove('playing');\n });\n\n this.addAudioListener('play', onPlay);\n\n return togglePlay;\n };\n\n if(!isOutgoing) {\n let preloader: ProgressivePreloader = this.preloader;\n\n onLoad(doc.type !== 'audio' && !this.noAutoDownload);\n\n if(doc.thumbs) {\n const imgs: HTMLImageElement[] = [];\n const wrapped = wrapPhoto({\n photo: doc, \n message: null, \n container: toggle, \n boxWidth: 48, \n boxHeight: 48,\n loadPromises: this.loadPromises,\n withoutPreloader: true,\n lazyLoadQueue: this.lazyLoadQueue\n });\n toggle.style.width = toggle.style.height = '';\n if(wrapped.images.thumb) imgs.push(wrapped.images.thumb);\n if(wrapped.images.full) imgs.push(wrapped.images.full);\n\n this.classList.add('audio-with-thumb');\n imgs.forEach(img => img.classList.add('audio-thumb'));\n }\n\n const r = (shouldPlay: boolean) => {\n if(this.audio.src) {\n return;\n }\n\n appMediaPlaybackController.resolveWaitingForLoadMedia(this.message.peerId, this.message.mid, this.message.pFlags.is_scheduled);\n\n const onDownloadInit = () => {\n if(shouldPlay) {\n appMediaPlaybackController.willBePlayed(this.audio); // prepare for loading audio\n \n if(IS_SAFARI && !this.audio.autoplay) {\n this.audio.autoplay = true;\n }\n }\n };\n\n onDownloadInit();\n\n if(!preloader) {\n if(doc.supportsStreaming) {\n this.classList.add('corner-download');\n\n let pauseListener: Listener;\n const onPlay = () => {\n const preloader = constructDownloadPreloader(false);\n const deferred = deferredPromise();\n deferred.notifyAll({done: 75, total: 100});\n deferred.catch(() => {\n this.audio.pause();\n appMediaPlaybackController.willBePlayed(undefined);\n });\n deferred.cancel = () => {\n deferred.cancel = noop;\n const err = new Error();\n (err as any).type = 'CANCELED';\n deferred.reject(err);\n };\n preloader.attach(downloadDiv, false, deferred);\n\n pauseListener = this.addAudioListener('pause', () => {\n deferred.cancel();\n }, {once: true}) as any;\n\n onDownloadInit();\n };\n\n /* if(!this.audio.paused) {\n onPlay();\n } */\n\n const playListener: any = this.addAudioListener('play', onPlay);\n this.readyPromise.then(() => {\n this.listenerSetter.remove(playListener);\n this.listenerSetter.remove(pauseListener);\n });\n } else {\n preloader = constructDownloadPreloader();\n\n if(!shouldPlay) {\n this.readyPromise = deferredPromise();\n }\n\n const load = () => {\n onDownloadInit();\n\n const download = appDocsManager.downloadDoc(doc);\n \n if(!shouldPlay) {\n download.then(() => {\n this.readyPromise.resolve();\n });\n }\n\n preloader.attach(downloadDiv, false, download);\n return {download};\n };\n\n preloader.setDownloadFunction(load);\n load();\n }\n }\n\n this.append(downloadDiv);\n\n this.classList.add('downloading');\n\n this.readyPromise.then(() => {\n this.classList.remove('downloading');\n downloadDiv.classList.add('downloaded');\n setTimeout(() => {\n downloadDiv.remove();\n }, 200);\n \n //setTimeout(() => {\n // release loaded audio\n if(appMediaPlaybackController.willBePlayedMedia === this.audio) {\n this.audio.play();\n appMediaPlaybackController.willBePlayed(undefined);\n }\n //}, 10e3);\n });\n };\n\n if(!this.audio?.src) {\n if(doc.type !== 'audio' && !this.noAutoDownload) {\n r(false);\n } else {\n attachClickEvent(toggle, () => {\n r(true);\n }, {once: true, capture: true, passive: false, listenerSetter: this.listenerSetter});\n }\n }\n } else if(uploading) {\n this.dataset.isOutgoing = '1';\n this.preloader.attach(downloadDiv, false);\n //onLoad();\n }\n }\n\n get addAudioListener() {\n return this.listenerSetter.add(this.audio);\n }\n\n disconnectedCallback() {\n if(this.isConnected) {\n return;\n }\n \n if(this.onTypeDisconnect) {\n this.onTypeDisconnect();\n this.onTypeDisconnect = null;\n }\n\n if(this.readyPromise) {\n this.readyPromise.reject();\n }\n\n this.listenerSetter.removeAll();\n this.listenerSetter = null;\n\n this.preloader = null;\n }\n}\n\ncustomElements.define(\"audio-element\", AudioElement);\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default class DivAndCaption {\r\n public container: HTMLElement;\r\n public border: HTMLElement;\r\n public content: HTMLElement;\r\n public title: HTMLElement;\r\n public subtitle: HTMLElement;\r\n\r\n constructor(protected className: string, public fill?: T) {\r\n this.container = document.createElement('div');\r\n this.container.className = className;\r\n\r\n this.border = document.createElement('div');\r\n this.border.classList.add(className + '-border');\r\n \r\n this.content = document.createElement('div');\r\n this.content.classList.add(className + '-content');\r\n\r\n this.title = document.createElement('div');\r\n this.title.classList.add(className + '-title');\r\n this.title.setAttribute('dir', 'auto');\r\n\r\n this.subtitle = document.createElement('div');\r\n this.subtitle.classList.add(className + '-subtitle');\r\n this.subtitle.setAttribute('dir', 'auto');\r\n\r\n this.content.append(this.title, this.subtitle);\r\n this.container.append(this.border, this.content);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport replaceContent from \"../../helpers/dom/replaceContent\";\r\nimport { limitSymbols } from \"../../helpers/string\";\r\nimport appImManager, { CHAT_ANIMATION_GROUP } from \"../../lib/appManagers/appImManager\";\r\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\r\nimport appPhotosManager from \"../../lib/appManagers/appPhotosManager\";\r\nimport { RichTextProcessor } from \"../../lib/richtextprocessor\";\r\nimport DivAndCaption from \"../divAndCaption\";\r\nimport { wrapPhoto, wrapSticker } from \"../wrappers\";\r\n\r\nconst MEDIA_SIZE = 32;\r\n\r\nexport function wrapReplyDivAndCaption(options: {\r\n title: string | HTMLElement | DocumentFragment,\r\n titleEl: HTMLElement,\r\n subtitle: string | HTMLElement | DocumentFragment,\r\n subtitleEl: HTMLElement,\r\n message: any,\r\n mediaEl: HTMLElement,\r\n loadPromises?: Promise[]\r\n}) {\r\n let {title, titleEl, subtitle, subtitleEl, mediaEl, message, loadPromises} = options;\r\n if(title !== undefined) {\r\n if(typeof(title) === 'string') {\r\n title = limitSymbols(title, 140);\r\n title = RichTextProcessor.wrapEmojiText(title);\r\n }\r\n\r\n replaceContent(titleEl, title);\r\n }\r\n\r\n if(!loadPromises) {\r\n loadPromises = [];\r\n }\r\n\r\n let media = message && message.media;\r\n let setMedia = false, isRound = false;\r\n const mediaChildren = mediaEl ? Array.from(mediaEl.children).slice() : [];\r\n let middleware: () => boolean;\r\n if(media && mediaEl) {\r\n subtitleEl.textContent = '';\r\n subtitleEl.append(appMessagesManager.wrapMessageForReply(message));\r\n\r\n //console.log('wrap reply', media);\r\n\r\n if(media.webpage) {\r\n media = media.webpage;\r\n }\r\n \r\n if(media.photo || (media.document && ['video', 'sticker', 'gif', 'round', 'photo'].indexOf(media.document.type) !== -1)) {\r\n middleware = appImManager.chat.bubbles.getMiddleware();\r\n const lazyLoadQueue = appImManager.chat.bubbles.lazyLoadQueue;\r\n\r\n if(media.document?.type === 'sticker') {\r\n setMedia = true;\r\n wrapSticker({\r\n doc: media.document,\r\n div: mediaEl,\r\n lazyLoadQueue,\r\n group: CHAT_ANIMATION_GROUP,\r\n //onlyThumb: media.document.sticker === 2,\r\n width: MEDIA_SIZE,\r\n height: MEDIA_SIZE,\r\n middleware,\r\n loadPromises\r\n });\r\n } else {\r\n const photo = media.photo || media.document;\r\n\r\n isRound = photo.type === 'round';\r\n\r\n try {\r\n wrapPhoto({\r\n photo,\r\n container: mediaEl,\r\n boxWidth: MEDIA_SIZE,\r\n boxHeight: MEDIA_SIZE,\r\n size: appPhotosManager.choosePhotoSize(photo, MEDIA_SIZE, MEDIA_SIZE),\r\n middleware,\r\n lazyLoadQueue,\r\n noBlur: true,\r\n withoutPreloader: true,\r\n loadPromises\r\n });\r\n setMedia = true;\r\n } catch(err) {\r\n\r\n }\r\n }\r\n }\r\n } else {\r\n if(message) {\r\n subtitleEl.textContent = '';\r\n subtitleEl.append(appMessagesManager.wrapMessageForReply(message, message.message && limitSymbols(message.message, 140)));\r\n } else {\r\n if(typeof(subtitle) === 'string') {\r\n subtitle = limitSymbols(subtitle, 140);\r\n subtitle = RichTextProcessor.wrapEmojiText(subtitle);\r\n }\r\n\r\n replaceContent(subtitleEl, subtitle || '');\r\n }\r\n }\r\n\r\n Promise.all(loadPromises).then(() => {\r\n if(middleware && !middleware()) return;\r\n mediaChildren.forEach(child => child.remove());\r\n\r\n if(mediaEl) {\r\n mediaEl.classList.toggle('is-round', isRound);\r\n }\r\n });\r\n\r\n return setMedia;\r\n}\r\n\r\nexport default class ReplyContainer extends DivAndCaption<(title: string | HTMLElement | DocumentFragment, subtitle: string | HTMLElement | DocumentFragment, message?: any) => void> {\r\n private mediaEl: HTMLElement;\r\n\r\n constructor(protected className: string) {\r\n super(className, (title, subtitle = '', message?) => {\r\n if(!this.mediaEl) {\r\n this.mediaEl = document.createElement('div');\r\n this.mediaEl.classList.add(this.className + '-media');\r\n }\r\n\r\n const isMediaSet = wrapReplyDivAndCaption({\r\n title,\r\n titleEl: this.title,\r\n subtitle,\r\n subtitleEl: this.subtitle,\r\n mediaEl: this.mediaEl,\r\n message\r\n });\r\n \r\n this.container.classList.toggle('is-media', isMediaSet);\r\n if(isMediaSet) {\r\n this.content.prepend(this.mediaEl);\r\n } else {\r\n this.mediaEl.remove();\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\nThis file is part of Telegram Desktop,\r\nthe official desktop application for the Telegram messaging service.\r\nFor license and copyright information please follow this link:\r\nhttps://github.com/telegramdesktop/tdesktop/blob/master/LEGAL\r\n*/\r\n\r\nimport { accumulate } from \"../helpers/array\";\r\nimport { clamp } from \"../helpers/number\";\r\n\r\ntype Size = {w: number, h: number};\r\nexport type GroupMediaLayout = {\r\n geometry: {\r\n x: number,\r\n y: number,\r\n width: number,\r\n height: number\r\n },\r\n sides: number\r\n};\r\ntype Attempt = {\r\n lineCounts: number[],\r\n heights: number[]\r\n};\r\nexport const RectPart = {\r\n None: 0,\r\n Top: 1,\r\n Right: 2,\r\n Bottom: 4,\r\n Left: 8\r\n};\r\n\r\n// https://github.com/telegramdesktop/tdesktop/blob/4669c07dc5335cbf4795bbbe5b0ab7c007b9aee2/Telegram/SourceFiles/ui/grouped_layout.cpp\r\nexport class Layouter {\r\n private count: number;\r\n private ratios: number[];\r\n private proportions: string;\r\n private averageRatio: number;\r\n private maxSizeRatio: number;\r\n\r\n constructor(private sizes: Size[], private maxWidth: number, private minWidth: number, private spacing: number, private maxHeight = maxWidth) {\r\n this.count = sizes.length;\r\n this.ratios = Layouter.countRatios(sizes);\r\n this.proportions = Layouter.countProportions(this.ratios);\r\n this.averageRatio = accumulate(this.ratios, 1) / this.count; // warn\r\n this.maxSizeRatio = maxWidth / this.maxHeight;\r\n }\r\n\r\n public layout(): GroupMediaLayout[] {\r\n if(!this.count) return [];\r\n //else if(this.count === 1) return this.layoutOne();\r\n\r\n if(this.count >= 5 || this.ratios.find(r => r > 2)) {\r\n return new ComplexLayouter(this.ratios, this.averageRatio, this.maxWidth, this.minWidth, this.spacing).layout();\r\n }\r\n\r\n if(this.count === 2) return this.layoutTwo();\r\n else if(this.count === 3) return this.layoutThree();\r\n return this.layoutFour();\r\n }\r\n\r\n private layoutTwo(): ReturnType {\r\n if((this.proportions === \"ww\")\r\n && (this.averageRatio > 1.4 * this.maxSizeRatio)\r\n && (this.ratios[1] - this.ratios[0] < 0.2)) {\r\n return this.layoutTwoTopBottom();\r\n } else if(this.proportions === \"ww\" || this.proportions === \"qq\") {\r\n return this.layoutTwoLeftRightEqual();\r\n }\r\n return this.layoutTwoLeftRight();\r\n }\r\n\r\n private layoutThree(): ReturnType {\r\n //console.log('layoutThree:', this);\r\n if(this.proportions[0] === 'n') {\r\n return this.layoutThreeLeftAndOther();\r\n }\r\n return this.layoutThreeTopAndOther();\r\n }\r\n\r\n private layoutFour(): ReturnType {\r\n if(this.proportions[0] === 'w') {\r\n return this.layoutFourTopAndOther();\r\n }\r\n return this.layoutFourLeftAndOther();\r\n }\r\n\r\n private layoutTwoTopBottom(): ReturnType {\r\n const width = this.maxWidth;\r\n const height = Math.round(Math.min(\r\n width / this.ratios[0],\r\n Math.min(\r\n width / this.ratios[1],\r\n (this.maxHeight - this.spacing) / 2)));\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width, height},\r\n sides: RectPart.Left | RectPart.Top | RectPart.Right\r\n },\r\n {\r\n geometry: {x: 0, y: height + this.spacing, width, height},\r\n sides: RectPart.Left | RectPart.Bottom | RectPart.Right\r\n },\r\n ];\r\n }\r\n\r\n private layoutTwoLeftRightEqual(): ReturnType {\r\n const width = (this.maxWidth - this.spacing) / 2;\r\n const height = Math.round(Math.min(\r\n width / this.ratios[0],\r\n Math.min(width / this.ratios[1], this.maxHeight * 1)));\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width, height},\r\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\r\n },\r\n {\r\n geometry: {x: width + this.spacing, y: 0, width, height},\r\n sides: RectPart.Top | RectPart.Right | RectPart.Bottom\r\n },\r\n ];\r\n }\r\n\r\n private layoutTwoLeftRight(): ReturnType {\r\n const minimalWidth = Math.round(this.minWidth * 1.5);\r\n const secondWidth = Math.min(\r\n Math.round(Math.max(\r\n 0.4 * (this.maxWidth - this.spacing),\r\n (this.maxWidth - this.spacing) / this.ratios[0]\r\n / (1 / this.ratios[0] + 1 / this.ratios[1]))),\r\n this.maxWidth - this.spacing - minimalWidth);\r\n const firstWidth = this.maxWidth\r\n - secondWidth\r\n - this.spacing;\r\n const height = Math.min(\r\n this.maxHeight,\r\n Math.round(Math.min(\r\n firstWidth / this.ratios[0],\r\n secondWidth / this.ratios[1])));\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width: firstWidth, height},\r\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\r\n },\r\n {\r\n geometry: {x: firstWidth + this.spacing, y: 0, width: secondWidth, height},\r\n sides: RectPart.Top | RectPart.Right | RectPart.Bottom\r\n },\r\n ];\r\n }\r\n\r\n private layoutThreeLeftAndOther(): ReturnType {\r\n const firstHeight = this.maxHeight;\r\n const thirdHeight = Math.round(Math.min(\r\n (this.maxHeight - this.spacing) / 2.,\r\n (this.ratios[1] * (this.maxWidth - this.spacing)\r\n / (this.ratios[2] + this.ratios[1]))));\r\n const secondHeight = firstHeight\r\n - thirdHeight\r\n - this.spacing;\r\n const rightWidth = Math.max(\r\n this.minWidth,\r\n Math.round(Math.min(\r\n (this.maxWidth - this.spacing) / 2.,\r\n Math.min(\r\n thirdHeight * this.ratios[2],\r\n secondHeight * this.ratios[1]))));\r\n const leftWidth = Math.min(\r\n Math.round(firstHeight * this.ratios[0]),\r\n this.maxWidth - this.spacing - rightWidth);\r\n\r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width: leftWidth, height: firstHeight},\r\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\r\n },\r\n {\r\n geometry: {x: leftWidth + this.spacing, y: 0, width: rightWidth, height: secondHeight},\r\n sides: RectPart.Top | RectPart.Right\r\n },\r\n {\r\n geometry: {x: leftWidth + this.spacing, y: secondHeight + this.spacing, width: rightWidth, height: thirdHeight},\r\n sides: RectPart.Bottom | RectPart.Right\r\n },\r\n ];\r\n }\r\n \r\n private layoutThreeTopAndOther(): ReturnType {\r\n const firstWidth = this.maxWidth;\r\n const firstHeight = Math.round(Math.min(\r\n firstWidth / this.ratios[0],\r\n (this.maxHeight - this.spacing) * 0.66));\r\n const secondWidth = (this.maxWidth - this.spacing) / 2;\r\n const secondHeight = Math.min(\r\n this.maxHeight - firstHeight - this.spacing,\r\n Math.round(Math.min(\r\n secondWidth / this.ratios[1],\r\n secondWidth / this.ratios[2])));\r\n const thirdWidth = firstWidth - secondWidth - this.spacing;\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width: firstWidth, height: firstHeight},\r\n sides: RectPart.Left | RectPart.Top | RectPart.Right\r\n },\r\n {\r\n geometry: {x: 0, y: firstHeight + this.spacing, width: secondWidth, height: secondHeight},\r\n sides: RectPart.Bottom | RectPart.Left\r\n },\r\n {\r\n geometry: {x: secondWidth + this.spacing, y: firstHeight + this.spacing, width: thirdWidth, height: secondHeight},\r\n sides: RectPart.Bottom | RectPart.Right\r\n },\r\n ];\r\n }\r\n\r\n private layoutFourTopAndOther(): ReturnType {\r\n const w = this.maxWidth;\r\n const h0 = Math.round(Math.min(\r\n w / this.ratios[0],\r\n (this.maxHeight - this.spacing) * 0.66));\r\n const h = Math.round(\r\n (this.maxWidth - 2 * this.spacing)\r\n / (this.ratios[1] + this.ratios[2] + this.ratios[3]));\r\n const w0 = Math.max(\r\n this.minWidth,\r\n Math.round(Math.min(\r\n (this.maxWidth - 2 * this.spacing) * 0.4,\r\n h * this.ratios[1])));\r\n const w2 = Math.round(Math.max(\r\n Math.max(\r\n this.minWidth * 1.,\r\n (this.maxWidth - 2 * this.spacing) * 0.33),\r\n h * this.ratios[3]));\r\n const w1 = w - w0 - w2 - 2 * this.spacing;\r\n const h1 = Math.min(\r\n this.maxHeight - h0 - this.spacing,\r\n h);\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width: w, height: h0},\r\n sides: RectPart.Left | RectPart.Top | RectPart.Right\r\n },\r\n {\r\n geometry: {x: 0, y: h0 + this.spacing, width: w0, height: h1},\r\n sides: RectPart.Bottom | RectPart.Left\r\n },\r\n {\r\n geometry: {x: w0 + this.spacing, y: h0 + this.spacing, width: w1, height: h1},\r\n sides: RectPart.Bottom,\r\n },\r\n {\r\n geometry: {x: w0 + this.spacing + w1 + this.spacing, y: h0 + this.spacing, width: w2, height: h1},\r\n sides: RectPart.Right | RectPart.Bottom\r\n },\r\n ];\r\n }\r\n\r\n private layoutFourLeftAndOther(): ReturnType {\r\n const h = this.maxHeight;\r\n const w0 = Math.round(Math.min(\r\n h * this.ratios[0],\r\n (this.maxWidth - this.spacing) * 0.6));\r\n \r\n const w = Math.round(\r\n (this.maxHeight - 2 * this.spacing)\r\n / (1. / this.ratios[1] + 1. / this.ratios[2] + 1. / this.ratios[3])\r\n );\r\n const h0 = Math.round(w / this.ratios[1]);\r\n const h1 = Math.round(w / this.ratios[2]);\r\n const h2 = h - h0 - h1 - 2 * this.spacing;\r\n const w1 = Math.max(\r\n this.minWidth,\r\n Math.min(this.maxWidth - w0 - this.spacing, w));\r\n \r\n return [\r\n {\r\n geometry: {x: 0, y: 0, width: w0, height: h},\r\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\r\n },\r\n {\r\n geometry: {x: w0 + this.spacing, y: 0, width: w1, height: h0},\r\n sides: RectPart.Top | RectPart.Right\r\n },\r\n {\r\n geometry: {x: w0 + this.spacing, y: h0 + this.spacing, width: w1, height: h1},\r\n sides: RectPart.Right\r\n },\r\n {\r\n geometry: {x: w0 + this.spacing, y: h0 + h1 + 2 * this.spacing, width: w1, height: h2},\r\n sides: RectPart.Bottom | RectPart.Right\r\n },\r\n ];\r\n }\r\n\r\n private static countRatios(sizes: Size[]) {\r\n return sizes.map(size => size.w / size.h);\r\n }\r\n\r\n private static countProportions(ratios: number[]) {\r\n return ratios.map(ratio => (ratio > 1.2) ? 'w' : (ratio < 0.8) ? 'n' : 'q').join('');\r\n }\r\n}\r\n\r\nclass ComplexLayouter {\r\n private ratios: number[];\r\n private count: number;\r\n\r\n constructor(ratios: number[], private averageRatio: number, private maxWidth: number, private minWidth: number, private spacing: number, private maxHeight = maxWidth * 4 / 3) {\r\n this.ratios = ComplexLayouter.cropRatios(ratios, averageRatio);\r\n this.count = ratios.length;\r\n }\r\n\r\n private static cropRatios(ratios: number[], averageRatio: number) {\r\n const kMaxRatio = 2.75;\r\n const kMinRatio = 0.6667;\r\n return ratios.map(ratio => {\r\n return averageRatio > 1.1\r\n\t\t\t ? clamp(ratio, 1., kMaxRatio)\r\n\t\t\t : clamp(ratio, kMinRatio, 1.);\r\n });\r\n }\r\n\r\n public layout(): GroupMediaLayout[] {\r\n let result = new Array(this.count);\r\n\r\n let attempts: Attempt[] = [];\r\n const multiHeight = (offset: number, count: number) => {\r\n const ratios = this.ratios.slice(offset, offset + count); // warn\r\n const sum = accumulate(ratios, 0);\r\n return (this.maxWidth - (count - 1) * this.spacing) / sum;\r\n };\r\n const pushAttempt = (lineCounts: number[]) => {\r\n let heights: number[] = [];\r\n let offset = 0;\r\n for(let count of lineCounts) {\r\n heights.push(multiHeight(offset, count));\r\n offset += count;\r\n }\r\n attempts.push({lineCounts, heights}); // warn\r\n };\r\n\r\n for(let first = 1; first !== this.count; ++first) {\r\n const second = this.count - first;\r\n if(first > 3 || second > 3) {\r\n continue;\r\n }\r\n pushAttempt([first, second]);\r\n }\r\n for(let first = 1; first !== this.count - 1; ++first) {\r\n for(let second = 1; second !== this.count - first; ++second) {\r\n const third = this.count - first - second;\r\n if((first > 3)\r\n || (second > ((this.averageRatio < 0.85) ? 4 : 3))\r\n || (third > 3)) {\r\n continue;\r\n }\r\n pushAttempt([first, second, third]);\r\n }\r\n }\r\n for(let first = 1; first !== this.count - 1; ++first) {\r\n for(let second = 1; second !== this.count - first; ++second) {\r\n for(let third = 1; third !== this.count - first - second; ++third) {\r\n const fourth = this.count - first - second - third;\r\n if(first > 3 || second > 3 || third > 3 || fourth > 3) {\r\n continue;\r\n }\r\n pushAttempt([first, second, third, fourth]);\r\n }\r\n }\r\n }\r\n\r\n let optimalAttempt: Attempt = null;\r\n let optimalDiff = 0;\r\n for(const attempt of attempts) {\r\n const {heights, lineCounts: counts} = attempt;\r\n const lineCount = counts.length;\r\n const totalHeight = accumulate(heights, 0) \r\n + this.spacing * (lineCount - 1);\r\n const minLineHeight = Math.min(...heights);\r\n const maxLineHeight = Math.max(...heights);\r\n const bad1 = (minLineHeight < this.minWidth) ? 1.5 : 1;\r\n const bad2 = (() => {\r\n for(let line = 1; line !== lineCount; ++line) {\r\n if(counts[line - 1] > counts[line]) {\r\n return 1.5;\r\n }\r\n }\r\n return 1.;\r\n })();\r\n const diff = Math.abs(totalHeight - this.maxHeight) * bad1 * bad2;\r\n if(!optimalAttempt || diff < optimalDiff) {\r\n optimalAttempt = attempt;\r\n optimalDiff = diff;\r\n }\r\n }\r\n\r\n const optimalCounts = optimalAttempt.lineCounts;\r\n\t const optimalHeights = optimalAttempt.heights;\r\n const rowCount = optimalCounts.length;\r\n \r\n let index = 0;\r\n let y = 0;\r\n for(let row = 0; row !== rowCount; ++row) {\r\n const colCount = optimalCounts[row];\r\n const lineHeight = optimalHeights[row];\r\n const height = Math.round(lineHeight);\r\n\r\n let x = 0;\r\n for(let col = 0; col !== colCount; ++col) {\r\n const sides = RectPart.None\r\n | (row === 0 ? RectPart.Top : RectPart.None)\r\n | (row === rowCount - 1 ? RectPart.Bottom : RectPart.None)\r\n | (col === 0 ? RectPart.Left : RectPart.None)\r\n | (col === colCount - 1 ? RectPart.Right : RectPart.None);\r\n\r\n const ratio = this.ratios[index];\r\n const width = (col === colCount - 1)\r\n ? (this.maxWidth - x)\r\n : Math.round(ratio * lineHeight);\r\n result[index] = {\r\n geometry: {x, y, width, height},\r\n sides\r\n };\r\n\r\n x += width + this.spacing;\r\n ++index;\r\n }\r\n y += height + this.spacing;\r\n }\r\n\r\n return result;\r\n }\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { InputFile } from \"../layer\";\r\nimport AvatarEdit from \"./avatarEdit\";\r\nimport AvatarElement from \"./avatar\";\r\nimport InputField from \"./inputField\";\r\nimport ListenerSetter from \"../helpers/listenerSetter\";\r\nimport { safeAssign } from \"../helpers/object\";\r\nimport ButtonCorner from \"./buttonCorner\";\r\n\r\nexport default class EditPeer {\r\n public nextBtn: HTMLButtonElement;\r\n\r\n public uploadAvatar: () => Promise;\r\n public avatarEdit: AvatarEdit;\r\n public avatarElem: AvatarElement;\r\n\r\n private inputFields: InputField[];\r\n private listenerSetter: ListenerSetter;\r\n\r\n private peerId: number;\r\n\r\n private _disabled = false;\r\n private avatarSize = 120;\r\n\r\n constructor(options: {\r\n peerId?: number,\r\n inputFields: EditPeer['inputFields'],\r\n listenerSetter: ListenerSetter,\r\n doNotEditAvatar?: boolean,\r\n withoutAvatar?: boolean,\r\n nextBtn?: HTMLButtonElement,\r\n avatarSize?: number\r\n }) {\r\n safeAssign(this, options);\r\n\r\n if(!this.nextBtn) {\r\n this.nextBtn = ButtonCorner({icon: 'check'});\r\n } else if(!this.nextBtn.classList.contains('btn-corner')) {\r\n this.handleChange = () => {\r\n this.nextBtn.toggleAttribute('disabled', !this.isChanged() || this.disabled);\r\n };\r\n }\r\n\r\n if(!options.withoutAvatar) {\r\n this.avatarElem = document.createElement('avatar-element') as AvatarElement;\r\n this.avatarElem.classList.add('avatar-placeholder', 'avatar-' + this.avatarSize);\r\n this.avatarElem.setAttribute('peer', '' + this.peerId);\r\n \r\n if(!options.doNotEditAvatar) {\r\n this.avatarEdit = new AvatarEdit((_upload) => {\r\n this.uploadAvatar = _upload;\r\n this.handleChange();\r\n this.avatarElem.remove();\r\n });\r\n \r\n this.avatarEdit.container.append(this.avatarElem);\r\n }\r\n }\r\n\r\n this.inputFields.forEach(inputField => {\r\n this.listenerSetter.add(inputField.input)('input', this.handleChange);\r\n });\r\n\r\n this.handleChange();\r\n }\r\n\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value) {\r\n this._disabled = value;\r\n this.inputFields.forEach(inputField => inputField.input.toggleAttribute('disabled', value));\r\n this.handleChange();\r\n }\r\n\r\n public lockWithPromise(promise: Promise, unlockOnSuccess = false) {\r\n this.disabled = true;\r\n promise.then(() => {\r\n if(unlockOnSuccess) {\r\n this.disabled = false;\r\n }\r\n }, () => {\r\n this.disabled = false;\r\n });\r\n }\r\n\r\n public isChanged = () => {\r\n if(this.uploadAvatar) {\r\n return true;\r\n }\r\n\r\n let validLength = 0, requiredLength = 0, requiredValidLength = 0;\r\n this.inputFields.forEach(inputField => {\r\n const isValid = inputField.isValid();\r\n if(isValid) {\r\n ++validLength;\r\n\r\n if(inputField.required) {\r\n ++requiredValidLength;\r\n }\r\n }\r\n\r\n if(inputField.required) {\r\n ++requiredLength;\r\n }\r\n });\r\n\r\n return requiredLength === requiredValidLength && validLength > 0;\r\n };\r\n\r\n public handleChange = () => {\r\n this.nextBtn.classList.toggle('is-visible', this.isChanged());\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport CheckboxField from \"./checkboxField\";\r\nimport RadioField from \"./radioField\";\r\nimport { ripple } from \"./ripple\";\r\nimport { SliderSuperTab } from \"./slider\";\r\nimport RadioForm from \"./radioForm\";\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport setInnerHTML from \"../helpers/dom/setInnerHTML\";\r\n\r\nexport default class Row {\r\n public container: HTMLElement;\r\n public title: HTMLDivElement;\r\n public subtitle: HTMLElement;\r\n\r\n public checkboxField: CheckboxField;\r\n public radioField: RadioField;\r\n\r\n public freezed = false;\r\n\r\n constructor(options: Partial<{\r\n icon: string,\r\n subtitle: string | HTMLElement | DocumentFragment,\r\n subtitleLangKey: LangPackKey,\r\n subtitleLangArgs: any[],\r\n radioField: Row['radioField'],\r\n checkboxField: Row['checkboxField'],\r\n noCheckboxSubtitle: boolean,\r\n title: string,\r\n titleLangKey: LangPackKey,\r\n titleRight: string | HTMLElement,\r\n clickable: boolean | ((e: Event) => void),\r\n navigationTab: SliderSuperTab,\r\n havePadding: boolean,\r\n noRipple: boolean\r\n }> = {}) {\r\n this.container = document.createElement(options.radioField || options.checkboxField ? 'label' : 'div');\r\n this.container.classList.add('row');\r\n\r\n this.subtitle = document.createElement('div');\r\n this.subtitle.classList.add('row-subtitle');\r\n this.subtitle.setAttribute('dir', 'auto');\r\n if(options.subtitle) {\r\n if(typeof(options.subtitle) === 'string') {\r\n setInnerHTML(this.subtitle, options.subtitle);\r\n } else {\r\n this.subtitle.append(options.subtitle);\r\n }\r\n } else if(options.subtitleLangKey) {\r\n this.subtitle.append(i18n(options.subtitleLangKey, options.subtitleLangArgs));\r\n }\r\n this.container.append(this.subtitle);\r\n\r\n let havePadding = !!options.havePadding;\r\n if(options.radioField || options.checkboxField) {\r\n havePadding = true;\r\n if(options.radioField) {\r\n this.radioField = options.radioField;\r\n this.container.append(this.radioField.label);\r\n }\r\n\r\n if(options.checkboxField) {\r\n this.checkboxField = options.checkboxField;\r\n \r\n const isToggle = options.checkboxField.label.classList.contains('checkbox-field-toggle');\r\n if(isToggle) {\r\n this.container.classList.add('row-with-toggle');\r\n options.titleRight = this.checkboxField.label;\r\n } else {\r\n this.container.append(this.checkboxField.label);\r\n }\r\n\r\n if(!options.noCheckboxSubtitle && !isToggle) {\r\n this.checkboxField.input.addEventListener('change', () => {\r\n replaceContent(this.subtitle, i18n(this.checkboxField.input.checked ? 'Checkbox.Enabled' : 'Checkbox.Disabled'));\r\n });\r\n }\r\n }\r\n\r\n const i = options.radioField || options.checkboxField;\r\n i.label.classList.add('disable-hover');\r\n } \r\n \r\n if(options.title || options.titleLangKey) {\r\n let c: HTMLElement;\r\n if(options.titleRight) {\r\n c = document.createElement('div');\r\n c.classList.add('row-title-row');\r\n this.container.append(c);\r\n } else {\r\n c = this.container;\r\n }\r\n\r\n this.title = document.createElement('div');\r\n this.title.classList.add('row-title');\r\n this.title.setAttribute('dir', 'auto');\r\n if(options.title) {\r\n this.title.innerHTML = options.title;\r\n } else {\r\n this.title.append(i18n(options.titleLangKey));\r\n }\r\n c.append(this.title);\r\n\r\n if(options.titleRight) {\r\n const titleRight = document.createElement('div');\r\n titleRight.classList.add('row-title', 'row-title-right');\r\n\r\n if(typeof(options.titleRight) === 'string') {\r\n titleRight.innerHTML = options.titleRight;\r\n } else {\r\n titleRight.append(options.titleRight);\r\n }\r\n\r\n c.append(titleRight);\r\n }\r\n }\r\n\r\n if(options.icon) {\r\n havePadding = true;\r\n this.title.classList.add('tgico', 'tgico-' + options.icon);\r\n this.container.classList.add('row-with-icon');\r\n }\r\n\r\n if(havePadding) {\r\n this.container.classList.add('row-with-padding');\r\n }\r\n\r\n if(options.navigationTab) {\r\n options.clickable = () => options.navigationTab.open();\r\n }\r\n\r\n if(options.clickable || options.radioField || options.checkboxField) {\r\n if(typeof(options.clickable) === 'function') {\r\n this.container.addEventListener('click', (e) => {\r\n if(this.freezed) return;\r\n (options.clickable as any)(e);\r\n });\r\n }\r\n\r\n this.container.classList.add('row-clickable', 'hover-effect');\r\n\r\n if(!options.noRipple) {\r\n ripple(this.container, undefined, undefined, true);\r\n }\r\n\r\n /* if(options.radioField || options.checkboxField) {\r\n this.container.prepend(this.container.lastElementChild);\r\n } */\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\nexport const RadioFormFromRows = (rows: Row[], onChange: (value: string) => void) => {\r\n return RadioForm(rows.map(r => ({container: r.container, input: r.radioField.input})), onChange);\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function RadioForm(radios: {container: HTMLElement, input: HTMLInputElement}[], onChange: (value: string) => void) {\r\n const form = document.createElement('form');\r\n\r\n radios.forEach(r => {\r\n const {container, input} = r;\r\n form.append(container);\r\n input.addEventListener('change', () => {\r\n if(input.checked) {\r\n onChange(input.value);\r\n }\r\n });\r\n });\r\n\r\n return form;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// https://stackoverflow.com/a/30810322\r\nfunction fallbackCopyTextToClipboard(text: string) {\r\n var textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n \r\n // Avoid scrolling to bottom\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n textArea.style.position = \"fixed\";\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n document.execCommand('copy');\r\n //const successful = document.execCommand('copy');\r\n //const msg = successful ? 'successful' : 'unsuccessful';\r\n //console.log('Fallback: Copying text command was ' + msg);\r\n } catch(err) {\r\n //console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n}\r\n\r\nexport function copyTextToClipboard(text: string) {\r\n if(!navigator.clipboard) {\r\n fallbackCopyTextToClipboard(text);\r\n return;\r\n }\r\n \r\n navigator.clipboard.writeText(text);/* .then(function() {\r\n console.log('Async: Copying to clipboard was successful!');\r\n }, function(err) {\r\n console.error('Async: Could not copy text: ', err);\r\n }); */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appStateManager from \"../lib/appManagers/appStateManager\";\r\nimport { getDeepProperty } from \"../helpers/object\";\r\nimport { LangPackKey, _i18n } from \"../lib/langPack\";\r\n\r\nexport default class RadioField {\r\n public input: HTMLInputElement;\r\n public label: HTMLLabelElement;\r\n public main: HTMLElement;\r\n\r\n constructor(options: {\r\n text?: string, \r\n langKey?: LangPackKey,\r\n name: string, \r\n value?: string, \r\n stateKey?: string\r\n }) {\r\n const label = this.label = document.createElement('label');\r\n label.classList.add('radio-field');\r\n \r\n const input = this.input = document.createElement('input');\r\n input.type = 'radio';\r\n /* input.id = */input.name = 'input-radio-' + options.name;\r\n \r\n if(options.value) {\r\n input.value = options.value;\r\n \r\n if(options.stateKey) {\r\n appStateManager.getState().then(state => {\r\n input.checked = getDeepProperty(state, options.stateKey) === options.value;\r\n });\r\n \r\n input.addEventListener('change', () => {\r\n appStateManager.setByKey(options.stateKey, options.value);\r\n });\r\n }\r\n }\r\n \r\n const main = this.main = document.createElement('div');\r\n main.classList.add('radio-field-main');\r\n \r\n if(options.text) {\r\n main.innerHTML = options.text;\r\n /* const caption = document.createElement('div');\r\n caption.classList.add('radio-field-main-caption');\r\n caption.innerHTML = text;\r\n \r\n if(subtitle) {\r\n label.classList.add('radio-field-with-subtitle');\r\n caption.insertAdjacentHTML('beforeend', `
${subtitle}
`);\r\n }\r\n \r\n main.append(caption); */\r\n } else if(options.langKey) {\r\n _i18n(main, options.langKey);\r\n }\r\n \r\n label.append(input, main);\r\n }\r\n\r\n get checked() {\r\n return this.input.checked;\r\n }\r\n\r\n set checked(checked: boolean) {\r\n this.setValueSilently(checked);\r\n\r\n const event = new Event('change', {bubbles: true, cancelable: true});\r\n this.input.dispatchEvent(event);\r\n }\r\n\r\n public setValueSilently(checked: boolean) {\r\n this.input.checked = checked;\r\n }\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\n\r\nconst toastEl = document.createElement('div');\r\ntoastEl.classList.add('toast');\r\nexport function toast(content: string | Node) {\r\n replaceContent(toastEl, content);\r\n document.body.append(toastEl);\r\n\r\n if(toastEl.dataset.timeout) clearTimeout(+toastEl.dataset.timeout);\r\n toastEl.dataset.timeout = '' + setTimeout(() => {\r\n toastEl.remove();\r\n delete toastEl.dataset.timeout;\r\n }, 3000);\r\n}\r\n\r\nexport function toastNew(options: Partial<{\r\n langPackKey: LangPackKey\r\n}>) {\r\n toast(i18n(options.langPackKey));\r\n}\r\n","// * Jolly Cobra's schedulers\r\n\r\nimport { AnyFunction, Awaited } from \"../../types\";\r\n\r\nexport default function debounce(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n shouldRunLast = true,\r\n) {\r\n let waitingTimeout: number;\r\n let waitingPromise: Promise>>, resolve: (result: any) => void, reject: () => void;\r\n let hadNewCall = false;\r\n\r\n return (...args: Parameters): typeof waitingPromise => {\r\n if(!waitingPromise) waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\r\n\r\n if(waitingTimeout) {\r\n clearTimeout(waitingTimeout);\r\n hadNewCall = true;\r\n reject();\r\n waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\r\n } else if(shouldRunFirst) {\r\n // @ts-ignore\r\n resolve(fn(...args));\r\n hadNewCall = false;\r\n }\r\n\r\n waitingTimeout = setTimeout(() => {\r\n // will run if should run last or first but with new call\r\n if(shouldRunLast && (!shouldRunFirst || hadNewCall)) {\r\n // @ts-ignore\r\n resolve(fn(...args));\r\n }\r\n\r\n waitingTimeout = waitingPromise = resolve = reject = undefined;\r\n hadNewCall = false;\r\n }, ms) as any;\r\n\r\n waitingPromise.catch(() => {});\r\n return waitingPromise;\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport ListenerSetter from \"../helpers/listenerSetter\";\r\nimport debounce from \"../helpers/schedulers/debounce\";\r\nimport appChatsManager from \"../lib/appManagers/appChatsManager\";\r\nimport { LangPackKey } from \"../lib/langPack\";\r\nimport apiManager from \"../lib/mtproto/mtprotoworker\";\r\nimport RichTextProcessor from \"../lib/richtextprocessor\";\r\nimport InputField, { InputFieldOptions, InputState } from \"./inputField\";\r\n\r\nexport class UsernameInputField extends InputField {\r\n private checkUsernamePromise: Promise;\r\n private checkUsernameDebounced: (username: string) => void;\r\n public options: InputFieldOptions & {\r\n peerId: number,\r\n listenerSetter: ListenerSetter,\r\n onChange?: () => void,\r\n invalidText: LangPackKey,\r\n takenText: LangPackKey,\r\n availableText: LangPackKey,\r\n head?: string\r\n };\r\n\r\n constructor(options: UsernameInputField['options']) {\r\n super(options);\r\n\r\n this.checkUsernameDebounced = debounce(this.checkUsername.bind(this), 150, false, true);\r\n\r\n options.listenerSetter.add(this.input)('input', () => {\r\n const value = this.getValue();\r\n\r\n //console.log('userNameInput:', value);\r\n if(value === this.originalValue || !value.length) {\r\n this.setState(InputState.Neutral, this.options.label);\r\n this.options.onChange && this.options.onChange();\r\n return;\r\n } else if(!RichTextProcessor.isUsernameValid(value)) { // does not check the last underscore\r\n this.setError(this.options.invalidText);\r\n } else {\r\n this.setState(InputState.Neutral);\r\n }\r\n\r\n if(this.input.classList.contains('error')) {\r\n this.options.onChange && this.options.onChange();\r\n return;\r\n }\r\n\r\n this.checkUsernameDebounced(value);\r\n });\r\n }\r\n\r\n public getValue() {\r\n let value = this.value;\r\n if(this.options.head) {\r\n value = value.slice(this.options.head.length);\r\n this.setValueSilently(this.options.head + value);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private checkUsername(username: string) {\r\n if(this.checkUsernamePromise) return;\r\n\r\n if(this.options.peerId) {\r\n this.checkUsernamePromise = apiManager.invokeApi('channels.checkUsername', {\r\n channel: appChatsManager.getChannelInput(-this.options.peerId),\r\n username\r\n });\r\n } else {\r\n this.checkUsernamePromise = apiManager.invokeApi('account.checkUsername', {username});\r\n }\r\n\r\n this.checkUsernamePromise.then(available => {\r\n if(this.getValue() !== username) return;\r\n\r\n if(available) {\r\n this.setState(InputState.Valid, this.options.availableText);\r\n } else {\r\n this.setError(this.options.takenText);\r\n }\r\n }, (err) => {\r\n if(this.getValue() !== username) return;\r\n\r\n switch(err.type) {\r\n case 'USERNAME_INVALID': {\r\n this.setError(this.options.invalidText);\r\n break;\r\n }\r\n }\r\n }).then(() => {\r\n this.checkUsernamePromise = undefined;\r\n this.options.onChange && this.options.onChange();\r\n\r\n const value = this.getValue();\r\n if(value !== username && this.isValid() && RichTextProcessor.isUsernameValid(value)) {\r\n this.checkUsername(value);\r\n }\r\n });\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport AvatarElement from \"../avatar\";\nimport PopupElement, { addCancelButton, PopupButton, PopupOptions } from \".\";\nimport { i18n, LangPackKey } from \"../../lib/langPack\";\nimport CheckboxField, { CheckboxFieldOptions } from \"../checkboxField\";\n\nexport type PopupPeerButtonCallbackCheckboxes = Set;\nexport type PopupPeerButtonCallback = (checkboxes?: PopupPeerButtonCallbackCheckboxes) => void;\nexport type PopupPeerCheckboxOptions = CheckboxFieldOptions & {checkboxField?: CheckboxField};\n\nexport type PopupPeerOptions = PopupOptions & Partial<{\n peerId: number,\n title: string,\n titleLangKey?: LangPackKey,\n titleLangArgs?: any[],\n noTitle?: boolean,\n description: string,\n descriptionLangKey?: LangPackKey,\n descriptionLangArgs?: any[],\n buttons?: Array & Partial<{callback: PopupPeerButtonCallback}>>,\n checkboxes: Array\n}>;\nexport default class PopupPeer extends PopupElement {\n constructor(private className: string, options: PopupPeerOptions = {}) {\n super('popup-peer' + (className ? ' ' + className : ''), options.buttons && addCancelButton(options.buttons), {overlayClosable: true, ...options});\n\n if(options.peerId) {\n let avatarEl = new AvatarElement();\n avatarEl.setAttribute('dialog', '1');\n avatarEl.setAttribute('peer', '' + options.peerId);\n avatarEl.classList.add('avatar-32');\n this.header.prepend(avatarEl);\n }\n\n if(!options.noTitle) {\n if(options.titleLangKey || !options.title) this.title.append(i18n(options.titleLangKey || 'AppName', options.titleLangArgs));\n else this.title.innerText = options.title || '';\n }\n\n const fragment = document.createDocumentFragment();\n\n if(options.descriptionLangKey || options.description) {\n const p = document.createElement('p');\n p.classList.add('popup-description');\n if(options.descriptionLangKey) p.append(i18n(options.descriptionLangKey, options.descriptionLangArgs));\n else if(options.description) p.innerHTML = options.description;\n \n fragment.append(p);\n }\n\n if(options.checkboxes) {\n this.container.classList.add('have-checkbox');\n \n options.checkboxes.forEach(o => {\n o.withRipple = false;\n const checkboxField = new CheckboxField(o);\n o.checkboxField = checkboxField;\n fragment.append(checkboxField.label);\n });\n\n options.buttons.forEach(button => {\n if(button.callback) {\n const original = button.callback;\n button.callback = () => {\n const c: Set = new Set();\n options.checkboxes.forEach(o => {\n if(o.checkboxField.checked) {\n c.add(o.text);\n }\n });\n original(c);\n };\n }\n });\n }\n\n this.container.insertBefore(fragment, this.header.nextElementSibling);\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { copyTextToClipboard } from \"../../../helpers/clipboard\";\r\nimport { randomLong } from \"../../../helpers/random\";\r\nimport { Chat, ChatFull, ExportedChatInvite } from \"../../../layer\";\r\nimport appChatsManager from \"../../../lib/appManagers/appChatsManager\";\r\nimport appProfileManager from \"../../../lib/appManagers/appProfileManager\";\r\nimport Button from \"../../button\";\r\nimport { setButtonLoader } from \"../../misc\";\r\nimport RadioField from \"../../radioField\";\r\nimport Row, { RadioFormFromRows } from \"../../row\";\r\nimport { SettingSection } from \"../../sidebarLeft\";\r\nimport { toast } from \"../../toast\";\r\nimport { UsernameInputField } from \"../../usernameInputField\";\r\nimport { SliderSuperTabEventable } from \"../../sliderTab\";\r\nimport I18n from \"../../../lib/langPack\";\r\nimport PopupPeer from \"../../popups/peer\";\r\nimport ButtonCorner from \"../../buttonCorner\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\r\n\r\nexport default class AppChatTypeTab extends SliderSuperTabEventable {\r\n public chatId: number;\r\n public chatFull: ChatFull;\r\n\r\n protected init() {\r\n this.container.classList.add('edit-peer-container', 'group-type-container');\r\n\r\n const isBroadcast = appChatsManager.isBroadcast(this.chatId);\r\n\r\n this.setTitle(isBroadcast ? 'ChannelType' : 'GroupType');\r\n\r\n const section = new SettingSection({\r\n name: isBroadcast ? 'ChannelType' : 'GroupType'\r\n });\r\n\r\n const random = randomLong();\r\n const privateRow = new Row({\r\n radioField: new RadioField({\r\n langKey: isBroadcast ? 'ChannelPrivate' : 'MegaPrivate', \r\n name: random, \r\n value: 'private'\r\n }),\r\n subtitleLangKey: isBroadcast ? 'ChannelPrivateInfo' : 'MegaPrivateInfo'\r\n });\r\n const publicRow = new Row({\r\n radioField: new RadioField({\r\n langKey: isBroadcast ? 'ChannelPublic' : 'MegaPublic', \r\n name: random, \r\n value: 'public'\r\n }),\r\n subtitleLangKey: isBroadcast ? 'ChannelPublicInfo' : 'MegaPublicInfo'\r\n });\r\n const form = RadioFormFromRows([privateRow, publicRow], (value) => {\r\n const a = [privateSection, publicSection];\r\n if(value === 'public') a.reverse();\r\n\r\n a[0].container.classList.remove('hide');\r\n a[1].container.classList.add('hide');\r\n\r\n onChange();\r\n });\r\n\r\n const chat: Chat = appChatsManager.getChat(this.chatId);\r\n\r\n section.content.append(form);\r\n\r\n const privateSection = new SettingSection({});\r\n\r\n //let revoked = false;\r\n const linkRow = new Row({\r\n title: (this.chatFull.exported_invite as ExportedChatInvite.chatInviteExported).link,\r\n subtitleLangKey: isBroadcast ? 'ChannelPrivateLinkHelp' : 'MegaPrivateLinkHelp',\r\n clickable: () => {\r\n copyTextToClipboard((this.chatFull.exported_invite as ExportedChatInvite.chatInviteExported).link);\r\n toast(I18n.format('LinkCopied', true));\r\n }\r\n });\r\n\r\n const btnRevoke = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'RevokeLink'});\r\n\r\n attachClickEvent(btnRevoke, () => {\r\n new PopupPeer('revoke-link', {\r\n buttons: [{\r\n langKey: 'RevokeButton',\r\n callback: () => {\r\n const toggle = toggleDisability([btnRevoke], true);\r\n \r\n appProfileManager.getChatInviteLink(this.chatId, true).then(link => {\r\n toggle();\r\n linkRow.title.innerHTML = link;\r\n //revoked = true;\r\n //onChange();\r\n });\r\n }\r\n }],\r\n titleLangKey: 'RevokeLink',\r\n descriptionLangKey: 'RevokeAlert'\r\n }).show();\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n privateSection.content.append(linkRow.container, btnRevoke);\r\n\r\n const publicSection = new SettingSection({\r\n caption: isBroadcast ? 'Channel.UsernameAboutChannel' : 'Channel.UsernameAboutGroup',\r\n noDelimiter: true\r\n });\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const placeholder = 't.me/';\r\n\r\n const onChange = () => {\r\n const changed = (privateRow.radioField.checked && (originalValue !== placeholder/* || revoked */)) \r\n || (linkInputField.isValid() && linkInputField.input.classList.contains('valid'));\r\n applyBtn.classList.toggle('is-visible', changed);\r\n };\r\n\r\n const linkInputField = new UsernameInputField({\r\n label: 'SetUrlPlaceholder',\r\n name: 'group-public-link',\r\n plainText: true,\r\n listenerSetter: this.listenerSetter,\r\n availableText: 'Link.Available',\r\n invalidText: 'Link.Invalid',\r\n takenText: 'Link.Taken',\r\n onChange: onChange,\r\n peerId: -this.chatId,\r\n head: placeholder\r\n });\r\n\r\n const originalValue = placeholder + ((chat as Chat.channel).username || '');\r\n\r\n inputWrapper.append(linkInputField.container)\r\n publicSection.content.append(inputWrapper);\r\n\r\n const applyBtn = ButtonCorner({icon: 'check', className: 'is-visible'});\r\n this.content.append(applyBtn);\r\n\r\n attachClickEvent(applyBtn, () => {\r\n /* const unsetLoader = */setButtonLoader(applyBtn);\r\n const username = publicRow.radioField.checked ? linkInputField.getValue() : '';\r\n appChatsManager.migrateChat(this.chatId).then(channelId => {\r\n return appChatsManager.updateUsername(channelId, username);\r\n }).then(() => {\r\n //unsetLoader();\r\n this.close();\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n (originalValue !== placeholder ? publicRow : privateRow).radioField.checked = true;\r\n linkInputField.setOriginalValue(originalValue);\r\n\r\n this.scrollable.append(section.container, privateSection.container, publicSection.container);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Scrollable from \"../components/scrollable\";\r\nimport { safeAssign } from \"./object\";\r\n\r\nexport default class ScrollableLoader {\r\n public loading = false;\r\n private scrollable: Scrollable;\r\n private getPromise: () => Promise;\r\n private promise: Promise;\r\n private loaded = false;\r\n\r\n constructor(options: {\r\n scrollable: ScrollableLoader['scrollable'],\r\n getPromise: ScrollableLoader['getPromise']\r\n }) {\r\n safeAssign(this, options);\r\n\r\n options.scrollable.onScrolledBottom = () => {\r\n this.load();\r\n };\r\n }\r\n \r\n public load() {\r\n if(this.loaded) {\r\n return Promise.resolve();\r\n }\r\n \r\n if(this.loading) {\r\n return this.promise;\r\n }\r\n\r\n this.loading = true;\r\n this.promise = this.getPromise().then(done => {\r\n this.loading = false;\r\n this.promise = undefined;\r\n\r\n if(done) {\r\n this.loaded = true;\r\n this.scrollable.onScrolledBottom = null;\r\n } else {\r\n this.scrollable.checkForTriggers();\r\n }\r\n }, () => {\r\n this.promise = undefined;\r\n this.loading = false;\r\n });\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appChatsManager, { ChatRights } from \"../lib/appManagers/appChatsManager\";\nimport appDialogsManager from \"../lib/appManagers/appDialogsManager\";\nimport appMessagesManager, { Dialog } from \"../lib/appManagers/appMessagesManager\";\nimport appUsersManager from \"../lib/appManagers/appUsersManager\";\nimport rootScope from \"../lib/rootScope\";\nimport Scrollable from \"./scrollable\";\nimport { FocusDirection } from \"../helpers/fastSmoothScroll\";\nimport CheckboxField from \"./checkboxField\";\nimport appProfileManager from \"../lib/appManagers/appProfileManager\";\nimport { safeAssign } from \"../helpers/object\";\nimport { i18n, LangPackKey, _i18n } from \"../lib/langPack\";\nimport findUpAttribute from \"../helpers/dom/findUpAttribute\";\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\nimport PeerTitle from \"./peerTitle\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport replaceContent from \"../helpers/dom/replaceContent\";\nimport { filterUnique } from \"../helpers/array\";\nimport debounce from \"../helpers/schedulers/debounce\";\nimport windowSize from \"../helpers/windowSize\";\n\ntype PeerType = 'contacts' | 'dialogs' | 'channelParticipants';\n\n// TODO: правильная сортировка для addMembers, т.е. для peerType: 'contacts', потому что там идут сначала контакты - потом неконтакты, а должно всё сортироваться по имени\n\nlet loadedAllDialogs = false, loadAllDialogsPromise: Promise;\nexport default class AppSelectPeers {\n public container = document.createElement('div');\n public list = appDialogsManager.createChatList(/* {\n handheldsSize: 66,\n avatarSize: 48\n } */);\n public chatsContainer = document.createElement('div');\n public scrollable: Scrollable;\n public selectedScrollable: Scrollable;\n \n public selectedContainer: HTMLElement;\n public input: HTMLInputElement;\n \n //public selected: {[peerId: number]: HTMLElement} = {};\n public selected = new Set();\n\n public freezed = false;\n\n private folderId = 0;\n private offsetIndex = 0;\n private promise: Promise;\n\n private query = '';\n private cachedContacts: number[];\n\n private loadedWhat: Partial<{[k in 'dialogs' | 'archived' | 'contacts' | 'channelParticipants']: true}> = {};\n\n private renderedPeerIds: Set = new Set();\n\n private appendTo: HTMLElement;\n private onChange: (length: number) => void;\n private peerType: PeerType[] = ['dialogs'];\n private renderResultsFunc: (peerIds: number[]) => void;\n private chatRightsAction: ChatRights;\n private multiSelect = true;\n private rippleEnabled = true;\n private avatarSize = 48;\n\n private tempIds: {[k in keyof AppSelectPeers['loadedWhat']]: number} = {};\n private peerId = 0;\n\n private placeholder: LangPackKey;\n\n private selfPresence: LangPackKey = 'Presence.YourChat';\n \n private needSwitchList = false;\n \n constructor(options: {\n appendTo: AppSelectPeers['appendTo'], \n onChange?: AppSelectPeers['onChange'], \n peerType?: AppSelectPeers['peerType'], \n peerId?: number,\n onFirstRender?: () => void, \n renderResultsFunc?: AppSelectPeers['renderResultsFunc'], \n chatRightsAction?: AppSelectPeers['chatRightsAction'], \n multiSelect?: AppSelectPeers['multiSelect'],\n rippleEnabled?: boolean,\n avatarSize?: AppSelectPeers['avatarSize'],\n placeholder?: LangPackKey,\n selfPresence?: LangPackKey\n }) {\n safeAssign(this, options);\n\n this.container.classList.add('selector');\n\n const f = (this.renderResultsFunc || this.renderResults).bind(this);\n this.renderResultsFunc = (peerIds: number[]) => {\n if(this.needSwitchList) {\n this.scrollable.splitUp.replaceWith(this.list);\n this.scrollable.setVirtualContainer(this.list);\n this.needSwitchList = false;\n }\n \n peerIds = peerIds.filter(peerId => {\n const notRendered = !this.renderedPeerIds.has(peerId);\n if(notRendered) this.renderedPeerIds.add(peerId);\n return notRendered;\n });\n\n return f(peerIds);\n };\n\n this.input = document.createElement('input');\n this.input.classList.add('selector-search-input');\n if(this.placeholder) {\n _i18n(this.input, this.placeholder, undefined, 'placeholder');\n } else {\n _i18n(this.input, 'SendMessageTo', undefined, 'placeholder');\n }\n\n this.input.type = 'text';\n\n if(this.multiSelect) {\n let topContainer = document.createElement('div');\n topContainer.classList.add('selector-search-container');\n \n this.selectedContainer = document.createElement('div');\n this.selectedContainer.classList.add('selector-search');\n \n this.selectedContainer.append(this.input);\n topContainer.append(this.selectedContainer);\n this.selectedScrollable = new Scrollable(topContainer);\n \n let delimiter = document.createElement('hr');\n\n this.selectedContainer.addEventListener('click', (e) => {\n if(this.freezed) return;\n let target = e.target as HTMLElement;\n target = findUpClassName(target, 'selector-user');\n \n if(!target) return;\n \n const peerId = target.dataset.key;\n const li = this.chatsContainer.querySelector('[data-peer-id=\"' + peerId + '\"]') as HTMLElement;\n if(!li) {\n this.remove(+peerId || peerId);\n } else {\n li.click();\n }\n });\n\n this.container.append(topContainer, delimiter);\n }\n\n this.chatsContainer.classList.add('chatlist-container');\n this.chatsContainer.append(this.list);\n this.scrollable = new Scrollable(this.chatsContainer);\n this.scrollable.setVirtualContainer(this.list);\n\n this.chatsContainer.addEventListener('click', (e) => {\n const target = findUpAttribute(e.target, 'data-peer-id') as HTMLElement;\n cancelEvent(e);\n\n if(!target) return;\n if(this.freezed) return;\n\n let key: any = target.dataset.peerId;\n key = +key || key;\n\n if(!this.multiSelect) {\n this.add(key);\n return;\n }\n\n //target.classList.toggle('active');\n if(this.selected.has(key)) {\n this.remove(key);\n } else {\n this.add(key);\n }\n\n const checkbox = target.querySelector('input') as HTMLInputElement;\n checkbox.checked = !checkbox.checked;\n });\n\n const debouncedInput = debounce(this.onInput, 200, false, true);\n this.input.addEventListener('input', debouncedInput);\n\n this.scrollable.onScrolledBottom = () => {\n this.getMoreResults();\n };\n\n this.container.append(this.chatsContainer);\n this.appendTo.append(this.container);\n\n // WARNING TIMEOUT\n setTimeout(() => {\n let getResultsPromise = this.getMoreResults() as Promise;\n if(options.onFirstRender) {\n getResultsPromise.then(() => {\n options.onFirstRender();\n });\n }\n }, 0);\n }\n\n private onInput = () => {\n const value = this.input.value;\n if(this.query !== value) {\n if(this.peerType.includes('contacts')) {\n this.cachedContacts = null;\n }\n \n if(this.peerType.includes('dialogs')) {\n this.folderId = 0;\n this.offsetIndex = 0;\n }\n\n for(let i in this.tempIds) {\n // @ts-ignore\n ++this.tempIds[i];\n }\n\n this.list = appDialogsManager.createChatList();\n\n this.promise = null;\n this.loadedWhat = {};\n this.query = value;\n this.renderedPeerIds.clear();\n this.needSwitchList = true;\n \n //console.log('selectPeers input:', this.query);\n this.getMoreResults();\n }\n };\n\n private renderSaved() {\n if(!this.offsetIndex && this.folderId === 0 && this.peerType.includes('dialogs') && (!this.query || appUsersManager.testSelfSearch(this.query))) {\n this.renderResultsFunc([rootScope.myId]);\n }\n }\n\n private getTempId(type: keyof AppSelectPeers['tempIds']) {\n if(this.tempIds[type] === undefined) {\n this.tempIds[type] = 0;\n }\n\n return ++this.tempIds[type];\n }\n\n private async getMoreDialogs(): Promise {\n if(this.promise) return this.promise;\n\n if(this.loadedWhat.dialogs && this.loadedWhat.archived) {\n return;\n }\n \n // в десктопе - сначала без группы, потом архивные, потом контакты без сообщений\n const pageCount = windowSize.windowH / 72 * 1.25 | 0;\n\n const tempId = this.getTempId('dialogs');\n const promise = appMessagesManager.getConversations(this.query, this.offsetIndex, pageCount, this.folderId, true).promise;\n this.promise = promise;\n const value = await promise;\n if(this.tempIds.dialogs !== tempId) {\n return;\n }\n\n this.promise = null;\n\n let dialogs = value.dialogs as Dialog[];\n if(dialogs.length) {\n const newOffsetIndex = dialogs[dialogs.length - 1].index || 0;\n\n dialogs = dialogs.slice();\n dialogs.findAndSplice(d => d.peerId === rootScope.myId); // no my account\n\n if(this.chatRightsAction) {\n dialogs = dialogs.filter(d => this.filterByRights(d.peerId));\n }\n\n this.renderSaved();\n\n this.offsetIndex = newOffsetIndex;\n\n this.renderResultsFunc(dialogs.map(dialog => dialog.peerId));\n }\n \n if(value.isEnd) {\n if(!this.loadedWhat.dialogs) {\n this.renderSaved();\n\n this.loadedWhat.dialogs = true;\n this.offsetIndex = 0;\n this.folderId = 1;\n\n return this.getMoreDialogs();\n } else {\n this.loadedWhat.archived = true;\n\n if(!this.loadedWhat.contacts && this.peerType.includes('contacts')) {\n return this.getMoreContacts();\n }\n }\n }\n }\n\n private filterByRights(peerId: number) {\n return (\n peerId > 0 && \n (this.chatRightsAction !== 'send_messages' || appUsersManager.canSendToUser(peerId))\n ) || appChatsManager.hasRights(-peerId, this.chatRightsAction);\n }\n\n private async getMoreContacts() {\n if(this.promise) return this.promise;\n\n if(this.loadedWhat.contacts) {\n return;\n }\n\n if(!this.cachedContacts) {\n /* const promises: Promise[] = [appUsersManager.getContacts(this.query)];\n if(!this.peerType.includes('dialogs')) {\n promises.push(appMessagesManager.getConversationsAll());\n }\n\n this.promise = Promise.all(promises);\n this.cachedContacts = (await this.promise)[0].slice(); */\n const tempId = this.getTempId('contacts');\n const promise = Promise.all([\n appUsersManager.getContacts(this.query),\n this.query ? appUsersManager.searchContacts(this.query) : undefined\n ]);\n\n this.promise = promise;\n const [cachedContacts, searchResult] = await promise;\n if(this.tempIds.contacts !== tempId) {\n return;\n }\n\n if(searchResult) {\n let resultPeerIds = searchResult.my_results.concat(searchResult.results);\n\n if(this.chatRightsAction) {\n resultPeerIds = resultPeerIds.filter(peerId => this.filterByRights(peerId));\n }\n\n if(!this.peerType.includes('dialogs')) {\n resultPeerIds = resultPeerIds.filter(peerId => peerId > 0);\n }\n\n this.cachedContacts = filterUnique(cachedContacts.concat(resultPeerIds));\n } else this.cachedContacts = cachedContacts.slice();\n\n this.cachedContacts.findAndSplice(userId => userId === rootScope.myId); // no my account\n this.promise = null;\n }\n\n if(this.cachedContacts.length) {\n const pageCount = windowSize.windowH / 72 * 1.25 | 0;\n const arr = this.cachedContacts.splice(0, pageCount);\n this.renderResultsFunc(arr);\n }\n \n if(!this.cachedContacts.length) {\n this.loadedWhat.contacts = true;\n\n // need to load non-contacts\n /* if(!this.peerType.includes('dialogs')) {\n return this.getMoreDialogs();\n } */\n }\n }\n\n private async getMoreChannelParticipants() {\n if(this.promise) return this.promise;\n\n if(this.loadedWhat.channelParticipants) {\n return;\n }\n\n const pageCount = 50; // same as in group permissions to use cache\n\n const tempId = this.getTempId('channelParticipants');\n const promise = appProfileManager.getChannelParticipants(-this.peerId, {_: 'channelParticipantsSearch', q: this.query}, pageCount, this.list.childElementCount);\n const participants = await promise;\n if(this.tempIds.channelParticipants !== tempId) {\n return;\n }\n \n const peerIds = participants.participants.map(participant => {\n return appChatsManager.getParticipantPeerId(participant);\n });\n peerIds.findAndSplice(u => u === rootScope.myId);\n this.renderResultsFunc(peerIds);\n\n if(this.list.childElementCount >= participants.count || participants.participants.length < pageCount) {\n this.loadedWhat.channelParticipants = true;\n }\n }\n\n checkForTriggers = () => {\n this.scrollable.checkForTriggers();\n };\n\n private getMoreResults() {\n const get = () => {\n const promises: Promise[] = [];\n\n if(!loadedAllDialogs && (this.peerType.includes('dialogs')/* || this.peerType.includes('contacts') */)) {\n if(!loadAllDialogsPromise) {\n loadAllDialogsPromise = appMessagesManager.getConversationsAll()\n .then(() => {\n loadedAllDialogs = true;\n }).finally(() => {\n loadAllDialogsPromise = null;\n });\n }\n\n promises.push(loadAllDialogsPromise);\n }\n \n if((this.peerType.includes('dialogs')/* || this.loadedWhat.contacts */) && !this.loadedWhat.archived) { // to load non-contacts\n promises.push(this.getMoreDialogs());\n \n if(!this.loadedWhat.archived) {\n return promises;\n }\n }\n \n if(this.peerType.includes('contacts') && !this.loadedWhat.contacts) {\n promises.push(this.getMoreContacts());\n }\n\n if(this.peerType.includes('channelParticipants') && !this.loadedWhat.channelParticipants) {\n promises.push(this.getMoreChannelParticipants());\n }\n \n return promises;\n };\n \n const promises = get();\n const promise = Promise.all(promises);\n if(promises.length) {\n promise.then(this.checkForTriggers);\n }\n\n return promise;\n }\n\n private renderResults(peerIds: number[]) {\n //console.log('will renderResults:', peerIds);\n\n // оставим только неконтакты с диалогов\n if(!this.peerType.includes('dialogs') && this.loadedWhat.contacts) {\n peerIds = peerIds.filter(peerId => {\n return appUsersManager.isNonContactUser(peerId);\n });\n }\n\n peerIds.forEach(peerId => {\n const {dom} = appDialogsManager.addDialogNew({\n dialog: peerId,\n container: this.scrollable,\n drawStatus: false,\n rippleEnabled: this.rippleEnabled,\n avatarSize: this.avatarSize\n });\n\n if(this.multiSelect) {\n const selected = this.selected.has(peerId);\n const checkboxField = new CheckboxField();\n\n if(selected) {\n //dom.listEl.classList.add('active');\n checkboxField.input.checked = true;\n }\n\n dom.containerEl.prepend(checkboxField.label);\n }\n\n let subtitleEl: HTMLElement;\n if(peerId < 0) {\n subtitleEl = appProfileManager.getChatMembersString(-peerId);\n } else if(peerId === rootScope.myId) {\n subtitleEl = i18n(this.selfPresence);\n } else {\n subtitleEl = appUsersManager.getUserStatusString(peerId);\n }\n\n dom.lastMessageSpan.append(subtitleEl);\n });\n }\n\n public add(peerId: any, title?: string | HTMLElement, scroll = true) {\n //console.trace('add');\n this.selected.add(peerId);\n\n if(!this.multiSelect) {\n this.onChange(this.selected.size);\n return;\n }\n\n if(this.query.trim()) {\n this.input.value = '';\n this.onInput();\n }\n\n const div = document.createElement('div');\n div.classList.add('selector-user', 'scale-in');\n\n const avatarEl = document.createElement('avatar-element');\n avatarEl.classList.add('selector-user-avatar', 'tgico');\n avatarEl.setAttribute('dialog', '1');\n avatarEl.classList.add('avatar-32');\n\n div.dataset.key = '' + peerId;\n if(typeof(peerId) === 'number') {\n if(title === undefined) {\n title = new PeerTitle({peerId, dialog: true}).element;\n }\n\n avatarEl.setAttribute('peer', '' + peerId);\n }\n\n if(title) {\n if(typeof(title) === 'string') {\n div.innerHTML = title;\n } else {\n replaceContent(div, title);\n div.append(title);\n }\n }\n\n div.insertAdjacentElement('afterbegin', avatarEl);\n\n this.selectedContainer.insertBefore(div, this.input);\n //this.selectedScrollable.scrollTop = this.selectedScrollable.scrollHeight;\n this.onChange && this.onChange(this.selected.size);\n \n if(scroll) {\n this.selectedScrollable.scrollIntoViewNew(this.input, 'center');\n }\n \n return div;\n }\n\n public remove(key: any) {\n if(!this.multiSelect) return;\n //const div = this.selected[peerId];\n const div = this.selectedContainer.querySelector(`[data-key=\"${key}\"]`) as HTMLElement;\n div.classList.remove('scale-in');\n void div.offsetWidth;\n div.classList.add('scale-out');\n\n const onAnimationEnd = () => {\n this.selected.delete(key);\n div.remove();\n this.onChange && this.onChange(this.selected.size);\n };\n\n if(rootScope.settings.animationsEnabled) {\n div.addEventListener('animationend', onAnimationEnd, {once: true});\n } else {\n onAnimationEnd();\n }\n }\n\n public getSelected() {\n return [...this.selected];\n }\n\n public addInitial(values: any[]) {\n values.forEach(value => {\n this.add(value, undefined, false);\n });\n\n window.requestAnimationFrame(() => { // ! not the best place for this raf though it works\n this.selectedScrollable.scrollIntoViewNew(this.input, 'center', undefined, undefined, FocusDirection.Static);\n });\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport AppSelectPeers from \"../appSelectPeers\";\r\nimport PopupElement from \".\";\r\nimport { LangPackKey, _i18n } from \"../../lib/langPack\";\r\n\r\nexport default class PopupPickUser extends PopupElement {\r\n protected selector: AppSelectPeers;\r\n \r\n constructor(options: {\r\n peerTypes: AppSelectPeers['peerType'], \r\n onSelect?: (peerId: number) => Promise | void, \r\n onClose?: () => void,\r\n placeholder: LangPackKey,\r\n chatRightsAction?: AppSelectPeers['chatRightsAction'],\r\n peerId?: number,\r\n selfPresence?: LangPackKey\r\n }) {\r\n super('popup-forward', null, {closable: true, overlayClosable: true, body: true});\r\n\r\n if(options.onClose) this.onClose = options.onClose;\r\n\r\n this.selector = new AppSelectPeers({\r\n appendTo: this.body, \r\n onChange: async() => {\r\n const selected = this.selector.getSelected();\r\n const peerId = selected[selected.length - 1];\r\n \r\n if(options.onSelect) {\r\n const res = options.onSelect(peerId);\r\n if(res instanceof Promise) {\r\n try {\r\n await res;\r\n } catch(err) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.selector = null;\r\n this.hide();\r\n }, \r\n peerType: options.peerTypes, \r\n onFirstRender: () => {\r\n this.show();\r\n this.selector.checkForTriggers(); // ! due to zero height before mounting\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n this.selector.input.focus();\r\n }\r\n }, \r\n chatRightsAction: options.chatRightsAction, \r\n multiSelect: false,\r\n rippleEnabled: false,\r\n avatarSize: 46,\r\n peerId: options.peerId,\r\n placeholder: options.placeholder,\r\n selfPresence: options.selfPresence\r\n });\r\n\r\n //this.scrollable = new Scrollable(this.body);\r\n\r\n this.title.append(this.selector.input);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\nimport { deepEqual } from \"../../../helpers/object\";\nimport { ChannelParticipant } from \"../../../layer\";\nimport appChatsManager from \"../../../lib/appManagers/appChatsManager\";\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\nimport Button from \"../../button\";\nimport { SettingSection } from \"../../sidebarLeft\";\nimport { SliderSuperTabEventable } from \"../../sliderTab\";\nimport { ChatPermissions } from \"./groupPermissions\";\n\nexport default class AppUserPermissionsTab extends SliderSuperTabEventable {\n public participant: ChannelParticipant;\n public chatId: number;\n public userId: number;\n\n protected init() {\n this.container.classList.add('edit-peer-container', 'user-permissions-container');\n this.setTitle('UserRestrictions');\n\n let destroyListener: () => void;\n\n {\n const section = new SettingSection({\n name: 'UserRestrictionsCanDo',\n });\n \n const div = document.createElement('div');\n div.classList.add('chatlist-container');\n section.content.insertBefore(div, section.title);\n\n const list = appDialogsManager.createChatList({new: true});\n div.append(list);\n\n const {dom} = appDialogsManager.addDialogNew({\n dialog: this.userId,\n container: list,\n drawStatus: false,\n rippleEnabled: true,\n avatarSize: 48\n });\n\n dom.lastMessageSpan.append(appUsersManager.getUserStatusString(this.userId));\n\n const p = new ChatPermissions({\n chatId: this.chatId,\n listenerSetter: this.listenerSetter,\n appendTo: section.content,\n participant: this.participant._ === 'channelParticipantBanned' ? this.participant : undefined\n });\n\n destroyListener = () => {\n //appChatsManager.editChatDefaultBannedRights(this.chatId, p.takeOut());\n const rights = p.takeOut();\n if(this.participant._ === 'channelParticipantBanned' && deepEqual(this.participant.banned_rights.pFlags, rights.pFlags)) {\n return;\n }\n\n appChatsManager.editBanned(this.chatId, this.participant, rights);\n };\n\n this.eventListener.addEventListener('destroy', destroyListener, {once: true});\n\n this.scrollable.append(section.container);\n }\n \n {\n const section = new SettingSection({});\n\n if(this.participant._ === 'channelParticipantBanned') {\n const btnDeleteException = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'GroupPermission.Delete'});\n\n attachClickEvent(btnDeleteException, () => {\n const toggle = toggleDisability([btnDeleteException], true);\n appChatsManager.clearChannelParticipantBannedRights(this.chatId, this.participant).then(() => {\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n }, () => {\n toggle();\n });\n }, {listenerSetter: this.listenerSetter});\n \n section.content.append(btnDeleteException);\n }\n\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'deleteuser', text: 'UserRestrictionsBlock'});\n\n attachClickEvent(btnDelete, () => {\n const toggle = toggleDisability([btnDelete], true);\n appChatsManager.kickFromChannel(this.chatId, this.participant).then(() => {\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n });\n /* new PopupPeer('popup-group-kick-user', {\n peerId: -this.chatId,\n title: 'Ban User?',\n description: `Are you sure you want to ban ${appPeersManager.getPeerTitle(this.userId)}`,\n buttons: addCancelButton([{\n text: 'BAN',\n callback: () => {\n const toggle = toggleDisability([btnDelete], true);\n\n appChatsManager.kickFromChannel(this.chatId, this.participant).then(() => {\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n }, () => {\n toggle();\n });\n },\n isDanger: true\n }])\n }).show(); */\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnDelete);\n\n this.scrollable.append(section.container);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\nimport findUpTag from \"../../../helpers/dom/findUpTag\";\nimport replaceContent from \"../../../helpers/dom/replaceContent\";\nimport ListenerSetter from \"../../../helpers/listenerSetter\";\nimport ScrollableLoader from \"../../../helpers/scrollableLoader\";\nimport { ChannelParticipant, Chat, ChatBannedRights, Update } from \"../../../layer\";\nimport appChatsManager, { ChatRights } from \"../../../lib/appManagers/appChatsManager\";\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\nimport appPeersManager from \"../../../lib/appManagers/appPeersManager\";\nimport appProfileManager from \"../../../lib/appManagers/appProfileManager\";\nimport I18n, { i18n, join, LangPackKey } from \"../../../lib/langPack\";\nimport rootScope from \"../../../lib/rootScope\";\nimport CheckboxField from \"../../checkboxField\";\nimport PopupPickUser from \"../../popups/pickUser\";\nimport Row from \"../../row\";\nimport { SettingSection } from \"../../sidebarLeft\";\nimport { SliderSuperTabEventable } from \"../../sliderTab\";\nimport { toast } from \"../../toast\";\nimport AppUserPermissionsTab from \"./userPermissions\";\n\nexport class ChatPermissions {\n public v: Array<{\n flags: ChatRights[],\n text: LangPackKey,\n exceptionText: LangPackKey,\n checkboxField?: CheckboxField,\n }>;\n private toggleWith: Partial<{[chatRight in ChatRights]: ChatRights[]}>;\n\n constructor(options: {\n chatId: number,\n listenerSetter: ListenerSetter,\n appendTo: HTMLElement,\n participant?: ChannelParticipant.channelParticipantBanned\n }) {\n this.v = [\n {flags: ['send_messages'], text: 'UserRestrictionsSend', exceptionText: 'UserRestrictionsNoSend'},\n {flags: ['send_media'], text: 'UserRestrictionsSendMedia', exceptionText: 'UserRestrictionsNoSendMedia'},\n {flags: ['send_stickers', 'send_gifs'], text: 'UserRestrictionsSendStickers', exceptionText: 'UserRestrictionsNoSendStickers'},\n {flags: ['send_polls'], text: 'UserRestrictionsSendPolls', exceptionText: 'UserRestrictionsNoSendPolls'},\n {flags: ['embed_links'], text: 'UserRestrictionsEmbedLinks', exceptionText: 'UserRestrictionsNoEmbedLinks'},\n {flags: ['invite_users'], text: 'UserRestrictionsInviteUsers', exceptionText: 'UserRestrictionsNoInviteUsers'},\n {flags: ['pin_messages'], text: 'UserRestrictionsPinMessages', exceptionText: 'UserRestrictionsNoPinMessages'},\n {flags: ['change_info'], text: 'UserRestrictionsChangeInfo', exceptionText: 'UserRestrictionsNoChangeInfo'}\n ];\n\n this.toggleWith = {\n 'send_messages': ['send_media', 'send_stickers', 'send_polls', 'embed_links']\n };\n\n const chat: Chat.chat = appChatsManager.getChat(options.chatId);\n const defaultBannedRights = chat.default_banned_rights;\n const rights = options.participant ? appChatsManager.combineParticipantBannedRights(options.chatId, options.participant.banned_rights) : defaultBannedRights;\n \n for(const info of this.v) {\n const mainFlag = info.flags[0];\n info.checkboxField = new CheckboxField({\n text: info.text,\n checked: appChatsManager.hasRights(options.chatId, mainFlag, rights),\n restriction: true,\n withRipple: true\n });\n\n // @ts-ignore\n if(options.participant && defaultBannedRights.pFlags[mainFlag]) {\n info.checkboxField.input.disabled = true;\n \n /* options.listenerSetter.add(info.checkboxField.input)('change', (e) => {\n if(!e.isTrusted) {\n return;\n }\n\n cancelEvent(e);\n toast('This option is disabled for all members in Group Permissions.');\n info.checkboxField.checked = false;\n }); */\n\n attachClickEvent(info.checkboxField.label, (e) => {\n toast(I18n.format('UserRestrictionsDisabled', true));\n }, {listenerSetter: options.listenerSetter});\n }\n\n if(this.toggleWith[mainFlag]) {\n options.listenerSetter.add(info.checkboxField.input)('change', () => {\n if(!info.checkboxField.checked) {\n const other = this.v.filter(i => this.toggleWith[mainFlag].includes(i.flags[0]));\n other.forEach(info => {\n info.checkboxField.checked = false;\n });\n }\n });\n }\n\n options.appendTo.append(info.checkboxField.label);\n }\n }\n\n public takeOut() {\n const rights: ChatBannedRights = {\n _: 'chatBannedRights',\n until_date: 0x7FFFFFFF,\n pFlags: {}\n };\n\n for(const info of this.v) {\n const banned = !info.checkboxField.checked;\n if(banned) {\n info.flags.forEach(flag => {\n // @ts-ignore\n rights.pFlags[flag] = true;\n });\n }\n }\n\n return rights;\n }\n}\n\nexport default class AppGroupPermissionsTab extends SliderSuperTabEventable {\n public chatId: number;\n\n protected async init() {\n this.container.classList.add('edit-peer-container', 'group-permissions-container');\n this.setTitle('ChannelPermissions');\n\n let chatPermissions: ChatPermissions;\n {\n const section = new SettingSection({\n name: 'ChannelPermissionsHeader',\n });\n\n chatPermissions = new ChatPermissions({\n chatId: this.chatId,\n listenerSetter: this.listenerSetter,\n appendTo: section.content,\n });\n\n this.eventListener.addEventListener('destroy', () => {\n appChatsManager.editChatDefaultBannedRights(this.chatId, chatPermissions.takeOut());\n }, {once: true});\n\n this.scrollable.append(section.container);\n }\n \n {\n const section = new SettingSection({\n name: 'PrivacyExceptions'\n });\n\n const addExceptionRow = new Row({\n titleLangKey: 'ChannelAddException',\n subtitleLangKey: 'Loading',\n icon: 'adduser',\n clickable: () => {\n new PopupPickUser({\n peerTypes: ['channelParticipants'],\n onSelect: (peerId) => {\n setTimeout(() => {\n openPermissions(peerId);\n }, 0);\n },\n placeholder: 'ExceptionModal.Search.Placeholder',\n peerId: -this.chatId,\n });\n }\n });\n\n const openPermissions = async(peerId: number) => {\n let participant: AppUserPermissionsTab['participant'];\n try {\n participant = await appProfileManager.getChannelParticipant(this.chatId, peerId) as any;\n } catch(err) {\n toast('User is no longer participant');\n return;\n }\n\n const tab = new AppUserPermissionsTab(this.slider);\n tab.participant = participant;\n tab.chatId = this.chatId;\n tab.userId = peerId;\n tab.open();\n };\n\n section.content.append(addExceptionRow.container);\n\n /* const removedUsersRow = new Row({\n titleLangKey: 'ChannelBlockedUsers',\n subtitleLangKey: 'NoBlockedUsers',\n icon: 'deleteuser',\n clickable: true\n });\n\n section.content.append(removedUsersRow.container); */\n\n const c = section.generateContentElement();\n c.classList.add('chatlist-container');\n \n const list = appDialogsManager.createChatList({new: true});\n c.append(list);\n\n attachClickEvent(list, (e) => {\n const target = findUpTag(e.target, 'LI');\n if(!target) return;\n\n const peerId = +target.dataset.peerId;\n openPermissions(peerId);\n }, {listenerSetter: this.listenerSetter});\n\n const setSubtitle = (li: Element, participant: ChannelParticipant.channelParticipantBanned) => {\n const bannedRights = participant.banned_rights;//appChatsManager.combineParticipantBannedRights(this.chatId, participant.banned_rights);\n const defaultBannedRights = (appChatsManager.getChat(this.chatId) as Chat.channel).default_banned_rights;\n //const combinedRights = appChatsManager.combineParticipantBannedRights(this.chatId, bannedRights);\n\n const cantWhat: LangPackKey[] = []/* , canWhat: LangPackKey[] = [] */;\n chatPermissions.v.forEach(info => {\n const mainFlag = info.flags[0];\n // @ts-ignore\n if(bannedRights.pFlags[mainFlag] && !defaultBannedRights.pFlags[mainFlag]) {\n cantWhat.push(info.exceptionText);\n // @ts-ignore\n }/* else if(!combinedRights.pFlags[mainFlag]) {\n canWhat.push(info.exceptionText);\n } */\n });\n\n const el = li.querySelector('.user-last-message') as HTMLElement;\n\n if(cantWhat.length) {\n el.innerHTML = '';\n el.append(...join(cantWhat.map(t => i18n(t)), false));\n }/* else if(canWhat.length) {\n str = 'Can ' + canWhat.join(canWhat.length === 2 ? ' and ' : ', ');\n } */\n \n el.classList.toggle('hide', !cantWhat.length);\n };\n\n const add = (participant: ChannelParticipant.channelParticipantBanned, append: boolean) => {\n const {dom} = appDialogsManager.addDialogNew({\n dialog: appPeersManager.getPeerId(participant.peer),\n container: list,\n drawStatus: false,\n rippleEnabled: true,\n avatarSize: 48,\n append\n });\n\n setSubtitle(dom.listEl, participant);\n\n //dom.titleSpan.innerHTML = 'Chinaza Akachi';\n //dom.lastMessageSpan.innerHTML = 'Can Add Users and Pin Messages';\n };\n\n this.listenerSetter.add(rootScope)('updateChannelParticipant', (update: Update.updateChannelParticipant) => {\n const needAdd = update.new_participant?._ === 'channelParticipantBanned' && !update.new_participant.banned_rights.pFlags.view_messages;\n const li = list.querySelector(`[data-peer-id=\"${update.user_id}\"]`);\n if(needAdd) {\n if(!li) {\n add(update.new_participant as ChannelParticipant.channelParticipantBanned, false);\n } else {\n setSubtitle(li, update.new_participant as ChannelParticipant.channelParticipantBanned);\n }\n\n if(update.prev_participant?._ !== 'channelParticipantBanned') {\n ++exceptionsCount;\n }\n } else {\n if(li) {\n li.remove();\n }\n\n if(update.prev_participant?._ === 'channelParticipantBanned') {\n --exceptionsCount;\n }\n }\n\n setLength();\n });\n\n const setLength = () => {\n replaceContent(addExceptionRow.subtitle, i18n(exceptionsCount ? 'Permissions.ExceptionsCount' : 'Permissions.NoExceptions', [exceptionsCount]));\n };\n\n let exceptionsCount = 0;\n let loader: ScrollableLoader;\n const setLoader = () => {\n const LOAD_COUNT = 50;\n loader = new ScrollableLoader({\n scrollable: this.scrollable,\n getPromise: () => {\n return appProfileManager.getChannelParticipants(this.chatId, {_: 'channelParticipantsBanned', q: ''}, LOAD_COUNT, list.childElementCount).then(res => {\n for(const participant of res.participants) {\n add(participant as ChannelParticipant.channelParticipantBanned, true);\n }\n \n exceptionsCount = res.count;\n setLength();\n \n return res.participants.length < LOAD_COUNT || res.count === list.childElementCount;\n });\n }\n });\n\n return loader.load();\n };\n\n this.scrollable.append(section.container);\n\n if(appChatsManager.isChannel(this.chatId)) {\n await setLoader();\n } else {\n setLength();\n \n this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\n if(this.chatId === migrateFrom) {\n this.chatId = migrateTo;\n setLoader();\n }\n });\n }\n }\n }\n\n onOpenAfterTimeout() {\n this.scrollable.onScroll();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appChatsManager from \"../../lib/appManagers/appChatsManager\";\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport appPeersManager, { PeerType } from \"../../lib/appManagers/appPeersManager\";\nimport { LangPackKey } from \"../../lib/langPack\";\nimport PeerTitle from \"../peerTitle\";\nimport PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerOptions } from \"./peer\";\n\nexport default class PopupDeleteDialog {\n constructor(\n peerId: number, \n // actionType: 'leave' | 'delete', \n peerType: PeerType = appPeersManager.getDialogType(peerId), \n onSelect?: (promise: Promise) => void\n ) {\n const peerTitleElement = new PeerTitle({peerId}).element;\n\n /* const callbackFlush = (checked: PopupPeerButtonCallbackCheckboxes) => {\n const promise = appMessagesManager.flushHistory(peerId, checkboxes ? !checked[checkboxes[0].text] : undefined);\n onSelect && onSelect(promise);\n }; */\n\n const callbackLeave = (checked: PopupPeerButtonCallbackCheckboxes, flush = checkboxes && !!checked.size) => {\n let promise = appChatsManager.leave(-peerId);\n \n if(flush) {\n promise = promise.finally(() => {\n return appMessagesManager.flushHistory(peerId);\n }) as any;\n }\n \n onSelect && onSelect(promise);\n };\n\n const callbackDelete = (checked: PopupPeerButtonCallbackCheckboxes) => {\n let promise: Promise;\n\n if(peerId > 0) {\n promise = appMessagesManager.flushHistory(peerId, false, checkboxes ? !!checked.size : undefined);\n } else {\n if(checked.size) {\n promise = appChatsManager.delete(-peerId);\n } else {\n return callbackLeave(checked);\n }\n }\n \n onSelect && onSelect(promise);\n };\n\n let title: LangPackKey, description: LangPackKey, descriptionArgs: any[], buttons: PopupPeerOptions['buttons'], checkboxes: PopupPeerOptions['checkboxes'];\n switch(peerType) {\n case 'channel': {\n if(/* actionType === 'delete' && */appChatsManager.hasRights(-peerId, 'delete_chat')) {\n appChatsManager.deleteChannel\n title = 'ChannelDeleteMenu';\n description = 'AreYouSureDeleteAndExitChannel';\n buttons = [{\n langKey: 'ChannelDeleteMenu',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteChannelForAll'\n }];\n } else {\n title = 'LeaveChannelMenu';\n description = 'ChannelLeaveAlertWithName';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'LeaveChannel',\n isDanger: true,\n callback: callbackLeave\n }];\n }\n\n break;\n }\n\n /* case 'megagroup': {\n title = 'Leave Group?';\n description = `Are you sure you want to leave this group?`;\n buttons = [{\n text: 'LEAVE ' + peerTitleElement,\n isDanger: true,\n callback: callbackLeave\n }];\n\n break;\n } */\n\n case 'chat': {\n title = 'DeleteChatUser';\n description = 'AreYouSureDeleteThisChatWithUser';\n descriptionArgs = [peerTitleElement];\n\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteMessagesOptionAlso',\n textArgs: [\n new PeerTitle({peerId}).element\n ]\n }];\n\n break;\n }\n\n case 'saved': {\n title = 'DeleteChatUser';\n description = 'AreYouSureDeleteThisChatSavedMessages';\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: callbackDelete\n }];\n\n break;\n }\n\n case 'megagroup':\n case 'group': {\n if(/* actionType === 'delete' && */appChatsManager.hasRights(-peerId, 'delete_chat')) {\n title = 'DeleteMegaMenu';\n description = 'AreYouSureDeleteAndExit';\n buttons = [{\n langKey: 'DeleteMegaMenu',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteChat.DeleteGroupForAll'\n }];\n } else {\n title = 'LeaveMegaMenu';\n description = 'AreYouSureDeleteAndExitName';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: (checkboxes) => callbackLeave(checkboxes, true)\n }];\n }\n\n break;\n }\n }\n\n new PopupPeer('popup-delete-chat', {\n peerId,\n titleLangKey: title,\n descriptionLangKey: description,\n descriptionLangArgs: descriptionArgs,\n buttons,\n checkboxes\n }).show();\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\"\r\nimport InputField from \"../../inputField\";\r\nimport EditPeer from \"../../editPeer\";\r\nimport { SettingSection } from \"../../sidebarLeft\";\r\nimport Row from \"../../row\";\r\nimport Button from \"../../button\";\r\nimport appChatsManager, { ChatRights } from \"../../../lib/appManagers/appChatsManager\";\r\nimport appProfileManager from \"../../../lib/appManagers/appProfileManager\";\r\nimport { Chat, ChatFull } from \"../../../layer\";\r\nimport AppChatTypeTab from \"./chatType\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport AppGroupPermissionsTab from \"./groupPermissions\";\r\nimport { i18n, LangPackKey } from \"../../../lib/langPack\";\r\nimport PopupDeleteDialog from \"../../popups/deleteDialog\";\r\nimport PopupPeer from \"../../popups/peer\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\r\nimport CheckboxField from \"../../checkboxField\";\r\n\r\nexport default class AppEditChatTab extends SliderSuperTab {\r\n private chatNameInputField: InputField;\r\n private descriptionInputField: InputField;\r\n private editPeer: EditPeer;\r\n public chatId: number;\r\n\r\n protected async _init() {\r\n // * cleanup prev\r\n this.listenerSetter.removeAll();\r\n this.scrollable.container.innerHTML = '';\r\n\r\n this.container.classList.add('edit-peer-container', 'edit-group-container');\r\n this.setTitle('Edit');\r\n \r\n const chatFull = await appProfileManager.getChatFull(this.chatId, true);\r\n\r\n const chat: Chat.chat | Chat.channel = appChatsManager.getChat(this.chatId);\r\n const isBroadcast = appChatsManager.isBroadcast(this.chatId);\r\n const isChannel = appChatsManager.isChannel(this.chatId);\r\n\r\n const chatUpdateListeners: (() => void)[] = [];\r\n const addChatUpdateListener = (callback: () => void) => {\r\n chatUpdateListeners.push(callback);\r\n };\r\n\r\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\r\n if(this.chatId === chatId) {\r\n chatUpdateListeners.forEach(callback => callback());\r\n }\r\n });\r\n\r\n {\r\n const section = new SettingSection({noDelimiter: true});\r\n const inputFields: InputField[] = [];\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n \r\n this.chatNameInputField = new InputField({\r\n label: isBroadcast ? 'EnterChannelName' : 'CreateGroup.NameHolder',\r\n name: 'chat-name',\r\n maxLength: 255,\r\n required: true\r\n });\r\n this.descriptionInputField = new InputField({\r\n label: 'DescriptionPlaceholder',\r\n name: 'chat-description',\r\n maxLength: 255\r\n });\r\n \r\n this.chatNameInputField.setOriginalValue(chat.title);\r\n this.descriptionInputField.setOriginalValue(chatFull.about);\r\n\r\n inputWrapper.append(this.chatNameInputField.container, this.descriptionInputField.container);\r\n \r\n inputFields.push(this.chatNameInputField, this.descriptionInputField);\r\n\r\n this.editPeer = new EditPeer({\r\n peerId: -this.chatId,\r\n inputFields,\r\n listenerSetter: this.listenerSetter\r\n });\r\n this.content.append(this.editPeer.nextBtn);\r\n\r\n section.content.append(this.editPeer.avatarEdit.container, inputWrapper);\r\n\r\n if(appChatsManager.hasRights(this.chatId, 'change_type')) {\r\n const chatTypeRow = new Row({\r\n titleLangKey: isBroadcast ? 'ChannelType' : 'GroupType',\r\n clickable: () => {\r\n const tab = new AppChatTypeTab(this.slider);\r\n tab.chatId = this.chatId;\r\n tab.chatFull = chatFull;\r\n tab.open();\r\n\r\n this.listenerSetter.add(tab.eventListener)('destroy', setChatTypeSubtitle);\r\n },\r\n icon: 'lock'\r\n });\r\n\r\n const setChatTypeSubtitle = () => {\r\n chatTypeRow.subtitle.textContent = '';\r\n\r\n let key: LangPackKey;\r\n if(isBroadcast) {\r\n key = (chat as Chat.channel).username ? 'TypePublic' : 'TypePrivate';\r\n } else {\r\n key = (chat as Chat.channel).username ? 'TypePublicGroup' : 'TypePrivateGroup';\r\n }\r\n\r\n chatTypeRow.subtitle.append(i18n(key));\r\n };\r\n\r\n setChatTypeSubtitle();\r\n section.content.append(chatTypeRow.container);\r\n }\r\n\r\n if(appChatsManager.hasRights(this.chatId, 'change_permissions') && !isBroadcast) {\r\n const flags = [\r\n 'send_messages',\r\n 'send_media',\r\n 'send_stickers',\r\n 'send_polls',\r\n 'embed_links',\r\n 'invite_users',\r\n 'pin_messages',\r\n 'change_info'\r\n ] as ChatRights[];\r\n\r\n const permissionsRow = new Row({\r\n titleLangKey: 'ChannelPermissions',\r\n clickable: () => {\r\n const tab = new AppGroupPermissionsTab(this.slider);\r\n tab.chatId = this.chatId;\r\n tab.open();\r\n },\r\n icon: 'permissions',\r\n });\r\n\r\n const setPermissionsLength = () => {\r\n permissionsRow.subtitle.innerHTML = flags.reduce((acc, f) => acc + +appChatsManager.hasRights(this.chatId, f, chat.default_banned_rights), 0) + '/' + flags.length;\r\n };\r\n\r\n setPermissionsLength(); \r\n section.content.append(permissionsRow.container);\r\n\r\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\r\n if(this.chatId === chatId) {\r\n setPermissionsLength();\r\n }\r\n });\r\n }\r\n\r\n /* const administratorsRow = new Row({\r\n titleLangKey: 'PeerInfo.Administrators',\r\n subtitle: '' + ((chatFull as ChatFull.channelFull).admins_count || 1),\r\n icon: 'admin',\r\n clickable: true\r\n });\r\n\r\n section.content.append(administratorsRow.container); */\r\n\r\n this.scrollable.append(section.container);\r\n\r\n attachClickEvent(this.editPeer.nextBtn, () => {\r\n this.editPeer.nextBtn.disabled = true;\r\n \r\n let promises: Promise[] = [];\r\n\r\n const id = this.chatId;\r\n if(this.chatNameInputField.isValid()) {\r\n promises.push(appChatsManager.editTitle(id, this.chatNameInputField.value));\r\n }\r\n\r\n if(this.descriptionInputField.isValid()) {\r\n promises.push(appChatsManager.editAbout(id, this.descriptionInputField.value));\r\n }\r\n\r\n if(this.editPeer.uploadAvatar) {\r\n promises.push(this.editPeer.uploadAvatar().then(inputFile => {\r\n return appChatsManager.editPhoto(id, inputFile);\r\n }));\r\n }\r\n \r\n Promise.race(promises).finally(() => {\r\n this.editPeer.nextBtn.removeAttribute('disabled');\r\n this.close();\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n \r\n /* if(appChatsManager.hasRights(-this.peerId, 'change_info')) {\r\n const discussionRow = new Row({\r\n titleLangKey: 'PeerInfo.Discussion',\r\n subtitleLangKey: 'PeerInfo.Discussion.Add',\r\n clickable: true,\r\n icon: 'message'\r\n });\r\n\r\n section.content.append(discussionRow.container);\r\n }\r\n\r\n const administratorsRow = new Row({\r\n titleLangKey: 'PeerInfo.Administrators',\r\n subtitle: '' + chatFull.admins_count,\r\n icon: 'admin',\r\n clickable: true\r\n });\r\n\r\n section.content.append(administratorsRow.container); */\r\n\r\n if(isBroadcast && appChatsManager.hasRights(this.chatId, 'change_info')) {\r\n const signMessagesCheckboxField = new CheckboxField({\r\n text: 'PeerInfo.SignMessages',\r\n checked: !!(chat as Chat.channel).pFlags.signatures,\r\n withRipple: true\r\n });\r\n\r\n this.listenerSetter.add(signMessagesCheckboxField.input)('change', () => {\r\n const toggle = signMessagesCheckboxField.toggleDisability(true);\r\n appChatsManager.toggleSignatures(this.chatId, signMessagesCheckboxField.checked).then(() => {\r\n toggle();\r\n });\r\n });\r\n\r\n addChatUpdateListener(() => {\r\n signMessagesCheckboxField.setValueSilently(!!(chat as Chat.channel).pFlags.signatures);\r\n });\r\n\r\n section.content.append(signMessagesCheckboxField.label);\r\n }\r\n }\r\n\r\n if(!isBroadcast) {\r\n const section = new SettingSection({\r\n\r\n });\r\n\r\n /* const membersRow = new Row({\r\n titleLangKey: isBroadcast ? 'PeerInfo.Subscribers' : 'GroupMembers',\r\n icon: 'newgroup',\r\n clickable: true\r\n });\r\n\r\n membersRow.subtitle.append(i18n('Subscribers', [numberThousandSplitter(335356)]));\r\n\r\n section.content.append(membersRow.container); */\r\n\r\n if(!isBroadcast && appChatsManager.hasRights(this.chatId, 'change_permissions')) {\r\n const showChatHistoryCheckboxField = new CheckboxField({\r\n text: 'ChatHistory',\r\n withRipple: true\r\n });\r\n\r\n this.listenerSetter.add(showChatHistoryCheckboxField.input)('change', () => {\r\n const toggle = showChatHistoryCheckboxField.toggleDisability(true);\r\n appChatsManager.togglePreHistoryHidden(this.chatId, !showChatHistoryCheckboxField.checked).then(() => {\r\n toggle();\r\n });\r\n });\r\n\r\n const onChatUpdate = () => {\r\n showChatHistoryCheckboxField.setValueSilently(isChannel && !(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory);\r\n };\r\n\r\n onChatUpdate();\r\n addChatUpdateListener(onChatUpdate);\r\n \r\n section.content.append(showChatHistoryCheckboxField.label);\r\n }\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n if(appChatsManager.hasRights(this.chatId, 'delete_chat')) {\r\n const section = new SettingSection({});\r\n\r\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: isBroadcast ? 'PeerInfo.DeleteChannel' : 'DeleteAndExitButton'});\r\n\r\n attachClickEvent(btnDelete, () => {\r\n new PopupDeleteDialog(-this.chatId/* , 'delete' */, undefined, (promise) => {\r\n const toggle = toggleDisability([btnDelete], true);\r\n promise.then(() => {\r\n this.close();\r\n }, () => {\r\n toggle();\r\n });\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n section.content.append(btnDelete);\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n if(!isChannel) {\r\n // ! this one will fire earlier than tab's closeAfterTimeout (destroy) event and listeners will be erased, so destroy won't fire\r\n this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\r\n if(-this.chatId === migrateFrom) {\r\n this.chatId = -migrateTo;\r\n this._init();\r\n }\r\n });\r\n }\r\n }\r\n\r\n protected init() {\r\n return this._init();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\"\r\nimport InputField from \"../../inputField\";\r\nimport EditPeer from \"../../editPeer\";\r\nimport { SettingSection } from \"../../sidebarLeft\";\r\nimport Row from \"../../row\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport Button from \"../../button\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport appNotificationsManager from \"../../../lib/appManagers/appNotificationsManager\";\r\nimport PeerTitle from \"../../peerTitle\";\r\nimport appMessagesManager from \"../../../lib/appManagers/appMessagesManager\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport appPeersManager from \"../../../lib/appManagers/appPeersManager\";\r\nimport PopupPeer from \"../../popups/peer\";\r\nimport { addCancelButton } from \"../../popups\";\r\nimport { i18n } from \"../../../lib/langPack\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\r\n\r\nexport default class AppEditContactTab extends SliderSuperTab {\r\n private nameInputField: InputField;\r\n private lastNameInputField: InputField;\r\n private editPeer: EditPeer;\r\n public peerId: number;\r\n\r\n protected init() {\r\n this.container.classList.add('edit-peer-container', 'edit-contact-container');\r\n const isNew = !appUsersManager.isContact(this.peerId);\r\n this.setTitle(isNew ? 'AddContactTitle' : 'Edit');\r\n\r\n {\r\n const section = new SettingSection({noDelimiter: true});\r\n const inputFields: InputField[] = [];\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n \r\n this.nameInputField = new InputField({\r\n label: 'FirstName',\r\n name: 'contact-name',\r\n maxLength: 70,\r\n required: true\r\n });\r\n this.lastNameInputField = new InputField({\r\n label: 'LastName',\r\n name: 'contact-lastname',\r\n maxLength: 70\r\n });\r\n\r\n if(this.peerId) {\r\n const user = appUsersManager.getUser(this.peerId);\r\n\r\n if(isNew) {\r\n this.nameInputField.setDraftValue(user.first_name);\r\n this.lastNameInputField.setDraftValue(user.last_name);\r\n } else {\r\n this.nameInputField.setOriginalValue(user.first_name);\r\n this.lastNameInputField.setOriginalValue(user.last_name);\r\n }\r\n }\r\n \r\n inputWrapper.append(this.nameInputField.container, this.lastNameInputField.container);\r\n inputFields.push(this.nameInputField, this.lastNameInputField);\r\n\r\n this.editPeer = new EditPeer({\r\n peerId: this.peerId,\r\n inputFields,\r\n listenerSetter: this.listenerSetter,\r\n doNotEditAvatar: true\r\n });\r\n this.content.append(this.editPeer.nextBtn);\r\n\r\n if(this.peerId) {\r\n const div = document.createElement('div');\r\n div.classList.add('avatar-edit');\r\n div.append(this.editPeer.avatarElem);\r\n \r\n const notificationsCheckboxField = new CheckboxField({\r\n text: 'Notifications'\r\n });\r\n \r\n notificationsCheckboxField.input.addEventListener('change', (e) => {\r\n if(!e.isTrusted) {\r\n return;\r\n }\r\n \r\n appMessagesManager.mutePeer(this.peerId);\r\n });\r\n \r\n this.listenerSetter.add(rootScope)('notify_settings', (update) => {\r\n if(update.peer._ !== 'notifyPeer') return;\r\n const peerId = appPeersManager.getPeerId(update.peer.peer);\r\n if(this.peerId === peerId) {\r\n const enabled = !appNotificationsManager.isMuted(update.notify_settings);\r\n if(enabled !== notificationsCheckboxField.checked) {\r\n notificationsCheckboxField.checked = enabled;\r\n }\r\n }\r\n });\r\n \r\n const profileNameDiv = document.createElement('div');\r\n profileNameDiv.classList.add('profile-name');\r\n profileNameDiv.append(new PeerTitle({\r\n peerId: this.peerId\r\n }).element);\r\n //profileNameDiv.innerHTML = 'Karen Stanford';\r\n \r\n const profileSubtitleDiv = document.createElement('div');\r\n profileSubtitleDiv.classList.add('profile-subtitle');\r\n profileSubtitleDiv.append(i18n('EditContact.OriginalName'));\r\n\r\n section.content.append(div, profileNameDiv, profileSubtitleDiv, inputWrapper);\r\n\r\n if(!isNew) {\r\n const notificationsRow = new Row({\r\n checkboxField: notificationsCheckboxField\r\n });\r\n \r\n const enabled = !appNotificationsManager.isPeerLocalMuted(this.peerId, false);\r\n notificationsCheckboxField.checked = enabled;\r\n\r\n section.content.append(notificationsRow.container);\r\n } else {\r\n const user = appUsersManager.getUser(this.peerId);\r\n\r\n const phoneRow = new Row({\r\n icon: 'phone',\r\n titleLangKey: user.phone ? undefined : 'MobileHidden',\r\n title: user.phone ? appUsersManager.formatUserPhone(user.phone) : undefined,\r\n subtitleLangKey: user.phone ? 'Phone' : 'MobileHiddenExceptionInfo',\r\n subtitleLangArgs: user.phone ? undefined : [new PeerTitle({peerId: this.peerId}).element]\r\n });\r\n\r\n section.content.append(phoneRow.container);\r\n }\r\n } else {\r\n section.content.append(inputWrapper);\r\n }\r\n\r\n this.scrollable.append(section.container);\r\n\r\n attachClickEvent(this.editPeer.nextBtn, () => {\r\n this.editPeer.nextBtn.disabled = true;\r\n\r\n appUsersManager.addContact(this.peerId, this.nameInputField.value, this.lastNameInputField.value, appUsersManager.getUser(this.peerId).phone)\r\n .finally(() => {\r\n this.editPeer.nextBtn.removeAttribute('disabled');\r\n this.close();\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n }\r\n\r\n if(!isNew) {\r\n const section = new SettingSection({\r\n \r\n });\r\n\r\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'PeerInfo.DeleteContact'});\r\n\r\n attachClickEvent(btnDelete, () => {\r\n new PopupPeer('popup-delete-contact', {\r\n peerId: this.peerId,\r\n titleLangKey: 'DeleteContact',\r\n descriptionLangKey: 'AreYouSureDeleteContact',\r\n buttons: addCancelButton([{\r\n langKey: 'Delete',\r\n callback: () => {\r\n const toggle = toggleDisability([btnDelete], true);\r\n\r\n appUsersManager.deleteContacts([this.peerId]).then(() => {\r\n this.close();\r\n }, () => {\r\n toggle();\r\n });\r\n },\r\n isDanger: true\r\n }])\r\n }).show();\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n section.content.append(btnDelete);\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport AppSelectPeers from \"../../appSelectPeers\";\r\nimport { putPreloader, setButtonLoader } from \"../../misc\";\r\nimport { LangPackKey, _i18n } from \"../../../lib/langPack\";\r\nimport ButtonCorner from \"../../buttonCorner\";\r\n\r\nexport default class AppAddMembersTab extends SliderSuperTab {\r\n private nextBtn: HTMLButtonElement;\r\n private selector: AppSelectPeers;\r\n private peerType: 'channel' | 'chat' | 'privacy';\r\n private takeOut: (peerIds: number[]) => Promise | false | void;\r\n private skippable: boolean;\r\n\r\n protected init() {\r\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\r\n this.content.append(this.nextBtn);\r\n this.scrollable.container.remove();\r\n \r\n this.nextBtn.addEventListener('click', () => {\r\n const peerIds = this.selector.getSelected();\r\n\r\n if(this.skippable) {\r\n this.takeOut(peerIds);\r\n this.close();\r\n } else {\r\n const promise = this.takeOut(peerIds);\r\n\r\n if(promise instanceof Promise) {\r\n this.attachToPromise(promise);\r\n } else if(promise === undefined) {\r\n this.close();\r\n }\r\n }\r\n });\r\n }\r\n\r\n public attachToPromise(promise: Promise) {\r\n const removeLoader = setButtonLoader(this.nextBtn, 'arrow_next');\r\n\r\n promise.then(() => {\r\n this.close();\r\n }, () => {\r\n removeLoader();\r\n });\r\n }\r\n\r\n public open(options: {\r\n title: LangPackKey,\r\n placeholder: LangPackKey,\r\n peerId?: number, \r\n type: AppAddMembersTab['peerType'], \r\n takeOut?: AppAddMembersTab['takeOut'],\r\n skippable: boolean,\r\n selectedPeerIds?: number[]\r\n }) {\r\n const ret = super.open();\r\n\r\n this.setTitle(options.title);\r\n this.peerType = options.type;\r\n this.takeOut = options.takeOut;\r\n this.skippable = options.skippable;\r\n\r\n this.selector = new AppSelectPeers({\r\n appendTo: this.content, \r\n onChange: this.skippable ? null : (length) => {\r\n this.nextBtn.classList.toggle('is-visible', !!length);\r\n }, \r\n peerType: ['contacts'],\r\n placeholder: options.placeholder\r\n });\r\n\r\n if(options.selectedPeerIds) {\r\n this.selector.addInitial(options.selectedPeerIds);\r\n }\r\n\r\n this.nextBtn.classList.add('tgico-arrow_next');\r\n this.nextBtn.innerHTML = '';\r\n this.nextBtn.disabled = false;\r\n this.nextBtn.classList.toggle('is-visible', this.skippable);\r\n\r\n return ret;\r\n }\r\n}","import { IS_FIREFOX } from \"./userAgent\";\n\nconst PARALLAX_SUPPORTED = !IS_FIREFOX && false;\n\nexport default PARALLAX_SUPPORTED;","export default function generateVerifiedIcon() {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS(null, 'viewBox', '0 0 24 24');\n svg.setAttributeNS(null, 'width', '24');\n svg.setAttributeNS(null, 'height', '24');\n svg.classList.add('verified-icon');\n\n const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n use.setAttributeNS(null, 'href', '#verified-background');\n use.classList.add('verified-background');\n\n const use2 = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n use2.setAttributeNS(null, 'href', '#verified-check');\n use2.classList.add('verified-check');\n\n svg.append(use, use2);\n\n return svg;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport { safeAssign } from \"../helpers/object\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport rootScope from \"../lib/rootScope\";\r\n\r\nconst getEvent = (e: TouchEvent | MouseEvent) => {\r\n return (e as TouchEvent).touches ? (e as TouchEvent).touches[0] : e as MouseEvent;\r\n};\r\n\r\nconst attachGlobalListenerTo = window;\r\n\r\nlet RESET_GLOBAL = false;\r\nrootScope.addEventListener('context_menu_toggle', (visible) => {\r\n RESET_GLOBAL = visible;\r\n});\r\n\r\nexport default class SwipeHandler {\r\n private element: HTMLElement;\r\n private onSwipe: (xDiff: number, yDiff: number, e: TouchEvent | MouseEvent) => boolean | void;\r\n private verifyTouchTarget: (evt: TouchEvent | MouseEvent) => boolean;\r\n private onFirstSwipe: () => void;\r\n private onReset: () => void;\r\n private cursor: 'grabbing' | 'move' = 'grabbing';\r\n private cancelEvent = true;\r\n\r\n private hadMove = false;\r\n private xDown: number = null;\r\n private yDown: number = null;\r\n\r\n constructor(options: {\r\n element: SwipeHandler['element'],\r\n onSwipe: SwipeHandler['onSwipe'],\r\n verifyTouchTarget?: SwipeHandler['verifyTouchTarget'],\r\n onFirstSwipe?: SwipeHandler['onFirstSwipe'],\r\n onReset?: SwipeHandler['onReset'],\r\n cursor?: SwipeHandler['cursor'],\r\n cancelEvent?: SwipeHandler['cancelEvent']\r\n }) {\r\n safeAssign(this, options);\r\n\r\n this.setListeners();\r\n }\r\n\r\n public setListeners() {\r\n if(!IS_TOUCH_SUPPORTED) {\r\n this.element.addEventListener('mousedown', this.handleStart, false);\r\n attachGlobalListenerTo.addEventListener('mouseup', this.reset);\r\n } else {\r\n this.element.addEventListener('touchstart', this.handleStart, false);\r\n attachGlobalListenerTo.addEventListener('touchend', this.reset);\r\n }\r\n }\r\n\r\n public removeListeners() {\r\n if(!IS_TOUCH_SUPPORTED) {\r\n this.element.removeEventListener('mousedown', this.handleStart, false);\r\n attachGlobalListenerTo.removeEventListener('mouseup', this.reset);\r\n } else {\r\n this.element.removeEventListener('touchstart', this.handleStart, false);\r\n attachGlobalListenerTo.removeEventListener('touchend', this.reset);\r\n }\r\n }\r\n\r\n reset = (e?: Event) => {\r\n /* if(e) {\r\n cancelEvent(e);\r\n } */\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n attachGlobalListenerTo.removeEventListener('touchmove', this.handleMove, {capture: true});\r\n } else {\r\n attachGlobalListenerTo.removeEventListener('mousemove', this.handleMove);\r\n this.element.style.cursor = '';\r\n }\r\n\r\n if(this.onReset && this.hadMove) {\r\n this.onReset();\r\n }\r\n\r\n this.xDown = this.yDown = null;\r\n this.hadMove = false;\r\n };\r\n\r\n handleStart = (_e: TouchEvent | MouseEvent) => {\r\n const e = getEvent(_e);\r\n if(this.verifyTouchTarget && !this.verifyTouchTarget(_e)) {\r\n return this.reset();\r\n }\r\n\r\n this.xDown = e.clientX;\r\n this.yDown = e.clientY;\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n attachGlobalListenerTo.addEventListener('touchmove', this.handleMove, {passive: false, capture: true});\r\n } else {\r\n attachGlobalListenerTo.addEventListener('mousemove', this.handleMove, false);\r\n }\r\n };\r\n\r\n handleMove = (_e: TouchEvent | MouseEvent) => {\r\n if(this.xDown === null || this.yDown === null || RESET_GLOBAL) {\r\n this.reset();\r\n return;\r\n }\r\n\r\n if(this.cancelEvent) {\r\n cancelEvent(_e);\r\n }\r\n\r\n const e = getEvent(_e);\r\n const xUp = e.clientX;\r\n const yUp = e.clientY;\r\n\r\n const xDiff = this.xDown - xUp;\r\n const yDiff = this.yDown - yUp;\r\n\r\n if(!this.hadMove) {\r\n if(!xDiff && !yDiff) {\r\n return;\r\n }\r\n\r\n this.hadMove = true;\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n this.element.style.setProperty('cursor', this.cursor, 'important');\r\n }\r\n\r\n if(this.onFirstSwipe) {\r\n this.onFirstSwipe();\r\n }\r\n }\r\n\r\n // if(Math.abs(xDiff) > Math.abs(yDiff)) { /*most significant*/\r\n // if(xDiff > 0) { /* left swipe */ \r\n\r\n // } else { /* right swipe */\r\n\r\n // } \r\n // } else {\r\n // if(yDiff > 0) { /* up swipe */ \r\n \r\n // } else { /* down swipe */\r\n \r\n // }\r\n // }\r\n\r\n /* reset values */\r\n const onSwipeResult = this.onSwipe(xDiff, yDiff, _e);\r\n if(onSwipeResult !== undefined && onSwipeResult) {\r\n this.reset();\r\n }\r\n };\r\n}\r\n","import PARALLAX_SUPPORTED from \"../environment/parallaxSupport\";\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\nimport renderImageFromUrl from \"../helpers/dom/renderImageFromUrl\";\nimport filterChatPhotosMessages from \"../helpers/filterChatPhotosMessages\";\nimport ListLoader from \"../helpers/listLoader\";\nimport { fastRaf } from \"../helpers/schedulers\";\nimport { Message, ChatFull, MessageAction, Photo } from \"../layer\";\nimport appAvatarsManager from \"../lib/appManagers/appAvatarsManager\";\nimport appDownloadManager from \"../lib/appManagers/appDownloadManager\";\nimport appMessagesManager, { AppMessagesManager } from \"../lib/appManagers/appMessagesManager\";\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\nimport appProfileManager from \"../lib/appManagers/appProfileManager\";\nimport { openAvatarViewer } from \"./avatar\";\nimport Scrollable from \"./scrollable\";\nimport SwipeHandler from \"./swipeHandler\";\n\nexport default class PeerProfileAvatars {\n private static BASE_CLASS = 'profile-avatars';\n private static SCALE = PARALLAX_SUPPORTED ? 2 : 1;\n private static TRANSLATE_TEMPLATE = PARALLAX_SUPPORTED ? `translate3d({x}, 0, -1px) scale(${PeerProfileAvatars.SCALE})` : 'translate({x}, 0)';\n public container: HTMLElement;\n public avatars: HTMLElement;\n public gradient: HTMLElement;\n public info: HTMLElement;\n public arrowPrevious: HTMLElement;\n public arrowNext: HTMLElement;\n private tabs: HTMLDivElement;\n private listLoader: ListLoader;\n private peerId: number;\n\n constructor(public scrollable: Scrollable) {\n this.container = document.createElement('div');\n this.container.classList.add(PeerProfileAvatars.BASE_CLASS + '-container');\n\n this.avatars = document.createElement('div');\n this.avatars.classList.add(PeerProfileAvatars.BASE_CLASS + '-avatars');\n\n this.gradient = document.createElement('div');\n this.gradient.classList.add(PeerProfileAvatars.BASE_CLASS + '-gradient');\n\n this.info = document.createElement('div');\n this.info.classList.add(PeerProfileAvatars.BASE_CLASS + '-info');\n\n this.tabs = document.createElement('div');\n this.tabs.classList.add(PeerProfileAvatars.BASE_CLASS + '-tabs');\n\n this.arrowPrevious = document.createElement('div');\n this.arrowPrevious.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow');\n\n /* const previousIcon = document.createElement('i');\n previousIcon.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow-icon', 'tgico-previous');\n this.arrowBack.append(previousIcon); */\n \n this.arrowNext = document.createElement('div');\n this.arrowNext.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow', PeerProfileAvatars.BASE_CLASS + '-arrow-next');\n\n /* const nextIcon = document.createElement('i');\n nextIcon.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow-icon', 'tgico-next');\n this.arrowNext.append(nextIcon); */\n\n this.container.append(this.avatars, this.gradient, this.info, this.tabs, this.arrowPrevious, this.arrowNext);\n\n const checkScrollTop = () => {\n if(this.scrollable.scrollTop !== 0) {\n this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild as HTMLElement, 'start');\n return false;\n }\n\n return true;\n };\n\n const SWITCH_ZONE = 1 / 3;\n let cancel = false;\n let freeze = false;\n attachClickEvent(this.container, async(_e) => {\n if(freeze) {\n cancelEvent(_e);\n return;\n }\n\n if(cancel) {\n cancel = false;\n return;\n }\n\n if(!checkScrollTop()) {\n return;\n }\n\n const rect = this.container.getBoundingClientRect();\n\n // const e = (_e as TouchEvent).touches ? (_e as TouchEvent).touches[0] : _e as MouseEvent;\n const e = _e;\n const x = e.pageX;\n\n const clickX = x - rect.left;\n if((!this.listLoader.previous.length && !this.listLoader.next.length) \n || (clickX > (rect.width * SWITCH_ZONE) && clickX < (rect.width - rect.width * SWITCH_ZONE))) {\n const peerId = this.peerId;\n\n const targets: {element: HTMLElement, item: string | Message.messageService}[] = [];\n this.listLoader.previous.concat(this.listLoader.current, this.listLoader.next).forEach((item, idx) => {\n targets.push({\n element: /* null */this.avatars.children[idx] as HTMLElement,\n item\n });\n });\n\n const prevTargets = targets.slice(0, this.listLoader.previous.length);\n const nextTargets = targets.slice(this.listLoader.previous.length + 1);\n\n const target = this.avatars.children[this.listLoader.previous.length] as HTMLElement;\n freeze = true;\n openAvatarViewer(target, peerId, () => peerId === this.peerId, this.listLoader.current, prevTargets, nextTargets);\n freeze = false;\n } else {\n const centerX = rect.right - (rect.width / 2);\n const toRight = x > centerX;\n \n // this.avatars.classList.remove('no-transition');\n // fastRaf(() => {\n this.avatars.classList.add('no-transition');\n void this.avatars.offsetLeft; // reflow\n\n let distance: number;\n if(this.listLoader.index === 0 && !toRight) distance = this.listLoader.count - 1;\n else if(this.listLoader.index === (this.listLoader.count - 1) && toRight) distance = -(this.listLoader.count - 1);\n else distance = toRight ? 1 : -1;\n this.listLoader.go(distance);\n\n fastRaf(() => {\n this.avatars.classList.remove('no-transition');\n });\n // });\n }\n });\n\n const cancelNextClick = () => {\n cancel = true;\n document.body.addEventListener(IS_TOUCH_SUPPORTED ? 'touchend' : 'click', (e) => {\n cancel = false;\n }, {once: true});\n };\n\n let width = 0, x = 0, lastDiffX = 0, lastIndex = 0, minX = 0;\n const swipeHandler = new SwipeHandler({\n element: this.avatars, \n onSwipe: (xDiff, yDiff) => {\n lastDiffX = xDiff;\n let lastX = x + xDiff * -PeerProfileAvatars.SCALE;\n if(lastX > 0) lastX = 0;\n else if(lastX < minX) lastX = minX;\n\n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', lastX + 'px');\n //console.log(xDiff, yDiff);\n return false;\n }, \n verifyTouchTarget: (e) => {\n if(!checkScrollTop()) {\n cancelNextClick();\n cancelEvent(e);\n return false;\n } else if(this.container.classList.contains('is-single') || freeze) {\n return false;\n }\n\n return true;\n }, \n onFirstSwipe: () => {\n const rect = this.avatars.getBoundingClientRect();\n width = rect.width;\n minX = -width * (this.tabs.childElementCount - 1);\n\n /* lastIndex = whichChild(this.tabs.querySelector('.active'));\n x = -width * lastIndex; */\n x = rect.left - this.container.getBoundingClientRect().left;\n \n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', x + 'px');\n\n this.container.classList.add('is-swiping');\n this.avatars.classList.add('no-transition');\n void this.avatars.offsetLeft; // reflow\n },\n onReset: () => {\n const addIndex = Math.ceil(Math.abs(lastDiffX) / (width / PeerProfileAvatars.SCALE)) * (lastDiffX >= 0 ? 1 : -1);\n cancelNextClick();\n \n //console.log(addIndex);\n\n this.avatars.classList.remove('no-transition');\n fastRaf(() => {\n this.listLoader.go(addIndex);\n this.container.classList.remove('is-swiping');\n });\n }\n });\n }\n\n public setPeer(peerId: number) {\n this.peerId = peerId;\n\n const photo = appPeersManager.getPeerPhoto(peerId);\n if(!photo) {\n return;\n }\n\n const listLoader: PeerProfileAvatars['listLoader'] = this.listLoader = new ListLoader({\n loadCount: 50,\n loadMore: (anchor, older, loadCount) => {\n if(!older) return Promise.resolve({count: undefined, items: []});\n\n if(peerId > 0) {\n const maxId: string = (anchor || listLoader.current) as any;\n return appPhotosManager.getUserPhotos(peerId, maxId, loadCount).then(value => {\n return {\n count: value.count,\n items: value.photos\n };\n });\n } else {\n const promises: [Promise, ReturnType] = [] as any;\n if(!listLoader.current) {\n promises.push(appProfileManager.getChatFull(-peerId));\n }\n \n promises.push(appMessagesManager.getSearch({\n peerId,\n maxId: Number.MAX_SAFE_INTEGER,\n inputFilter: {\n _: 'inputMessagesFilterChatPhotos'\n },\n limit: loadCount,\n backLimit: 0\n }));\n\n return Promise.all(promises).then((result) => {\n const value = result.pop() as typeof result[1];\n\n filterChatPhotosMessages(value);\n\n if(!listLoader.current) {\n const chatFull = result[0];\n const message = value.history.findAndSplice(m => {\n return ((m as Message.messageService).action as MessageAction.messageActionChannelEditPhoto).photo.id === chatFull.chat_photo.id;\n }) as Message.messageService;\n \n listLoader.current = message || appMessagesManager.generateFakeAvatarMessage(this.peerId, chatFull.chat_photo);\n }\n\n //console.log('avatars loaded:', value);\n return {\n count: value.count,\n items: value.history\n };\n });\n }\n },\n processItem: this.processItem,\n onJump: (item, older) => {\n const id = this.listLoader.index;\n //const nextId = Math.max(0, id);\n const x = 100 * PeerProfileAvatars.SCALE * id;\n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', `-${x}%`);\n\n const activeTab = this.tabs.querySelector('.active');\n if(activeTab) activeTab.classList.remove('active');\n\n const tab = this.tabs.children[id] as HTMLElement;\n tab.classList.add('active');\n }\n });\n\n if(photo._ === 'userProfilePhoto') {\n listLoader.current = photo.photo_id;\n }\n\n this.processItem(listLoader.current);\n\n // listLoader.loaded\n listLoader.load(true);\n }\n\n public addTab() {\n const tab = document.createElement('div');\n tab.classList.add(PeerProfileAvatars.BASE_CLASS + '-tab');\n this.tabs.append(tab);\n\n if(this.tabs.childElementCount === 1) {\n tab.classList.add('active');\n }\n\n this.container.classList.toggle('is-single', this.tabs.childElementCount <= 1);\n }\n\n public processItem = (photoId: string | Message.messageService) => {\n const avatar = document.createElement('div');\n avatar.classList.add(PeerProfileAvatars.BASE_CLASS + '-avatar');\n\n let photo: Photo.photo;\n if(photoId) {\n photo = typeof(photoId) === 'string' ? \n appPhotosManager.getPhoto(photoId) : \n (photoId.action as MessageAction.messageActionChannelEditPhoto).photo as Photo.photo;\n }\n\n const img = new Image();\n img.classList.add(PeerProfileAvatars.BASE_CLASS + '-avatar-image');\n img.draggable = false;\n\n if(photo) {\n const size = appPhotosManager.choosePhotoSize(photo, 420, 420, false);\n appPhotosManager.preloadPhoto(photo, size).then(() => {\n const cacheContext = appDownloadManager.getCacheContext(photo, size.type);\n renderImageFromUrl(img, cacheContext.url, () => {\n avatar.append(img);\n });\n });\n } else {\n const photo = appPeersManager.getPeerPhoto(this.peerId);\n appAvatarsManager.putAvatar(avatar, this.peerId, photo, 'photo_big', img);\n }\n\n this.avatars.append(avatar);\n\n this.addTab();\n\n return photoId;\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PARALLAX_SUPPORTED from \"../environment/parallaxSupport\";\nimport { copyTextToClipboard } from \"../helpers/clipboard\";\nimport replaceContent from \"../helpers/dom/replaceContent\";\nimport { fastRaf } from \"../helpers/schedulers\";\nimport { User } from \"../layer\";\nimport { Channel } from \"../lib/appManagers/appChatsManager\";\nimport appImManager from \"../lib/appManagers/appImManager\";\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\nimport appNotificationsManager from \"../lib/appManagers/appNotificationsManager\";\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\nimport appProfileManager from \"../lib/appManagers/appProfileManager\";\nimport appUsersManager from \"../lib/appManagers/appUsersManager\";\nimport I18n from \"../lib/langPack\";\nimport RichTextProcessor from \"../lib/richtextprocessor\";\nimport rootScope from \"../lib/rootScope\";\nimport AvatarElement from \"./avatar\";\nimport CheckboxField from \"./checkboxField\";\nimport generateVerifiedIcon from \"./generateVerifiedIcon\";\nimport PeerProfileAvatars from \"./peerProfileAvatars\";\nimport PeerTitle from \"./peerTitle\";\nimport Row from \"./row\";\nimport Scrollable from \"./scrollable\";\nimport { SettingSection, generateDelimiter } from \"./sidebarLeft\";\nimport { toast } from \"./toast\";\n\nlet setText = (text: string, row: Row) => {\n //fastRaf(() => {\n row.title.innerHTML = text;\n row.container.style.display = '';\n //});\n};\n\nexport default class PeerProfile {\n public element: HTMLElement;\n public avatars: PeerProfileAvatars;\n private avatar: AvatarElement;\n private section: SettingSection;\n private name: HTMLDivElement;\n private subtitle: HTMLDivElement;\n private bio: Row;\n private username: Row;\n private phone: Row;\n private notifications: Row;\n \n private cleaned: boolean;\n private setBioTimeout: number;\n private setPeerStatusInterval: number;\n\n private peerId = 0;\n private threadId: number;\n\n constructor(public scrollable: Scrollable) {\n if(!PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.add('no-parallax');\n }\n }\n\n public init() {\n this.init = null;\n\n this.element = document.createElement('div');\n this.element.classList.add('profile-content');\n\n this.section = new SettingSection({\n noDelimiter: true\n });\n\n this.avatar = new AvatarElement();\n this.avatar.classList.add('profile-avatar', 'avatar-120');\n this.avatar.setAttribute('dialog', '1');\n this.avatar.setAttribute('clickable', '');\n\n this.name = document.createElement('div');\n this.name.classList.add('profile-name');\n\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add('profile-subtitle');\n\n this.bio = new Row({\n title: ' ',\n subtitleLangKey: 'UserBio',\n icon: 'info',\n clickable: (e) => {\n if((e.target as HTMLElement).tagName === 'A') {\n return;\n }\n \n appProfileManager.getProfileByPeerId(this.peerId).then(full => {\n copyTextToClipboard(full.about);\n toast(I18n.format('BioCopied', true));\n });\n }\n });\n\n this.bio.title.classList.add('pre-wrap');\n\n this.username = new Row({\n title: ' ',\n subtitleLangKey: 'Username',\n icon: 'username',\n clickable: () => {\n const peer: Channel | User.user = appPeersManager.getPeer(this.peerId);\n copyTextToClipboard('@' + peer.username);\n toast(I18n.format('UsernameCopied', true));\n }\n });\n\n this.phone = new Row({\n title: ' ',\n subtitleLangKey: 'Phone',\n icon: 'phone',\n clickable: () => {\n const peer: User = appUsersManager.getUser(this.peerId);\n copyTextToClipboard('+' + peer.phone);\n toast(I18n.format('PhoneCopied', true));\n }\n });\n\n this.notifications = new Row({\n checkboxField: new CheckboxField({toggle: true}),\n titleLangKey: 'Notifications',\n icon: 'unmute'\n });\n \n this.section.content.append(this.phone.container, this.username.container, this.bio.container, this.notifications.container);\n\n this.element.append(this.section.container, generateDelimiter());\n\n this.notifications.checkboxField.input.addEventListener('change', (e) => {\n if(!e.isTrusted) {\n return;\n }\n\n //let checked = this.notificationsCheckbox.checked;\n appMessagesManager.mutePeer(this.peerId);\n });\n\n rootScope.addEventListener('dialog_notify_settings', (dialog) => {\n if(this.peerId === dialog.peerId) {\n const muted = appNotificationsManager.isPeerLocalMuted(this.peerId, false);\n this.notifications.checkboxField.checked = !muted;\n }\n });\n\n rootScope.addEventListener('peer_typings', ({peerId}) => {\n if(this.peerId === peerId) {\n this.setPeerStatus();\n }\n });\n\n rootScope.addEventListener('peer_bio_edit', (peerId) => {\n if(peerId === this.peerId) {\n this.setBio(true);\n }\n });\n\n rootScope.addEventListener('user_update', (userId) => {\n if(this.peerId === userId) {\n this.setPeerStatus();\n }\n });\n\n rootScope.addEventListener('contacts_update', (userId) => {\n if(this.peerId === userId) {\n const user = appUsersManager.getUser(userId);\n if(!user.pFlags.self) {\n if(user.phone) {\n setText(appUsersManager.formatUserPhone(user.phone), this.phone);\n } else {\n this.phone.container.style.display = 'none';\n }\n }\n }\n });\n\n this.setPeerStatusInterval = window.setInterval(this.setPeerStatus, 60e3);\n }\n\n public setPeerStatus = (needClear = false) => {\n if(!this.peerId) return;\n\n const peerId = this.peerId;\n appImManager.setPeerStatus(this.peerId, this.subtitle, needClear, true, () => peerId === this.peerId);\n };\n\n public cleanupHTML() {\n this.bio.container.style.display = 'none';\n this.phone.container.style.display = 'none';\n this.username.container.style.display = 'none';\n this.notifications.container.style.display = '';\n this.notifications.checkboxField.checked = true;\n if(this.setBioTimeout) {\n window.clearTimeout(this.setBioTimeout);\n this.setBioTimeout = 0;\n }\n }\n\n public setAvatar() {\n if(this.peerId !== rootScope.myId) {\n const photo = appPeersManager.getPeerPhoto(this.peerId);\n\n if(photo) {\n const oldAvatars = this.avatars;\n this.avatars = new PeerProfileAvatars(this.scrollable);\n this.avatars.setPeer(this.peerId);\n this.avatars.info.append(this.name, this.subtitle);\n \n this.avatar.remove();\n \n if(oldAvatars) oldAvatars.container.replaceWith(this.avatars.container);\n else this.element.prepend(this.avatars.container);\n\n if(PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.add('parallax');\n }\n\n return;\n }\n }\n\n if(PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.remove('parallax');\n }\n\n if(this.avatars) {\n this.avatars.container.remove();\n this.avatars = undefined;\n }\n\n this.avatar.setAttribute('peer', '' + this.peerId);\n\n this.section.content.prepend(this.avatar, this.name, this.subtitle);\n }\n\n public fillProfileElements() {\n if(!this.cleaned) return;\n this.cleaned = false;\n \n const peerId = this.peerId;\n\n this.cleanupHTML();\n\n this.setAvatar();\n\n // username\n if(peerId !== rootScope.myId) {\n let username = appPeersManager.getPeerUsername(peerId);\n if(username) {\n setText(appPeersManager.getPeerUsername(peerId), this.username);\n }\n \n const muted = appNotificationsManager.isPeerLocalMuted(peerId, false);\n this.notifications.checkboxField.checked = !muted;\n } else {\n fastRaf(() => {\n this.notifications.container.style.display = 'none';\n });\n }\n \n //let membersLi = this.profileTabs.firstElementChild.children[0] as HTMLLIElement;\n if(peerId > 0) {\n //membersLi.style.display = 'none';\n\n let user = appUsersManager.getUser(peerId);\n if(user.phone && peerId !== rootScope.myId) {\n setText(appUsersManager.formatUserPhone(user.phone), this.phone);\n }\n }/* else {\n //membersLi.style.display = appPeersManager.isBroadcast(peerId) ? 'none' : '';\n } */\n\n this.setBio();\n\n replaceContent(this.name, new PeerTitle({\n peerId,\n dialog: true,\n }).element);\n\n const peer = appPeersManager.getPeer(peerId);\n if(peer?.pFlags?.verified) {\n this.name.append(generateVerifiedIcon());\n }\n\n this.setPeerStatus(true);\n }\n\n public setBio(override?: true) {\n if(this.setBioTimeout) {\n window.clearTimeout(this.setBioTimeout);\n this.setBioTimeout = 0;\n }\n\n const peerId = this.peerId;\n const threadId = this.threadId;\n\n if(!peerId) {\n return;\n }\n\n let promise: Promise;\n if(peerId > 0) {\n promise = appProfileManager.getProfile(peerId, override).then(userFull => {\n if(this.peerId !== peerId || this.threadId !== threadId) {\n //this.log.warn('peer changed');\n return false;\n }\n \n if(userFull.rAbout && peerId !== rootScope.myId) {\n setText(userFull.rAbout, this.bio);\n }\n \n //this.log('userFull', userFull);\n return true;\n });\n } else {\n promise = appProfileManager.getChatFull(-peerId, override).then((chatFull) => {\n if(this.peerId !== peerId || this.threadId !== threadId) {\n //this.log.warn('peer changed');\n return false;\n }\n \n //this.log('chatInfo res 2:', chatFull);\n \n if(chatFull.about) {\n setText(RichTextProcessor.wrapRichText(chatFull.about), this.bio);\n }\n\n return true;\n });\n }\n\n promise.then((canSetNext) => {\n if(canSetNext) {\n this.setBioTimeout = window.setTimeout(() => this.setBio(true), 60e3);\n }\n });\n }\n\n public setPeer(peerId: number, threadId = 0) {\n if(this.peerId === peerId && this.threadId === peerId) return;\n\n if(this.init) {\n this.init();\n }\n\n this.peerId = peerId;\n this.threadId = threadId;\n \n this.cleaned = true;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appMessagesManager from \"../../../lib/appManagers/appMessagesManager\";\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\nimport rootScope from \"../../../lib/rootScope\";\nimport AppSearchSuper, { SearchSuperType } from \"../../appSearchSuper.\";\nimport SidebarSlider, { SliderSuperTab } from \"../../slider\";\nimport { TransitionSlider } from \"../../transition\";\nimport AppEditChatTab from \"./editChat\";\nimport PeerTitle from \"../../peerTitle\";\nimport AppEditContactTab from \"./editContact\";\nimport appChatsManager from \"../../../lib/appManagers/appChatsManager\";\nimport Button from \"../../button\";\nimport ButtonIcon from \"../../buttonIcon\";\nimport { i18n, LangPackKey } from \"../../../lib/langPack\";\nimport { toastNew } from \"../../toast\";\nimport AppAddMembersTab from \"../../sidebarLeft/tabs/addMembers\";\nimport PopupPickUser from \"../../popups/pickUser\";\nimport PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerCheckboxOptions } from \"../../popups/peer\";\nimport ButtonCorner from \"../../buttonCorner\";\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\nimport PeerProfile from \"../../peerProfile\";\n\n// TODO: отредактированное сообщение не изменится\nexport default class AppSharedMediaTab extends SliderSuperTab {\n private editBtn: HTMLElement;\n\n private peerId = 0;\n private threadId = 0;\n\n private historiesStorage: {\n [peerId: number]: Partial<{\n [type in SearchSuperType]: {mid: number, peerId: number}[]\n }>\n } = {};\n\n private searchSuper: AppSearchSuper;\n\n private profile: PeerProfile;\n private peerChanged: boolean;\n\n constructor(slider: SidebarSlider) {\n super(slider, false);\n }\n\n public init() {\n //const perf = performance.now();\n\n this.container.classList.add('shared-media-container', 'profile-container');\n\n // * header\n const newCloseBtn = Button('btn-icon sidebar-close-button', {noRipple: true});\n this.closeBtn.replaceWith(newCloseBtn);\n this.closeBtn = newCloseBtn;\n\n const animatedCloseIcon = document.createElement('div');\n animatedCloseIcon.classList.add('animated-close-icon');\n newCloseBtn.append(animatedCloseIcon);\n\n const transitionContainer = document.createElement('div');\n transitionContainer.className = 'transition slide-fade';\n \n const transitionFirstItem = document.createElement('div');\n transitionFirstItem.classList.add('transition-item');\n\n this.title.append(i18n('Profile'));\n this.editBtn = ButtonIcon('edit');\n //const moreBtn = ButtonIcon('more');\n\n transitionFirstItem.append(this.title, this.editBtn/* , moreBtn */);\n\n const transitionLastItem = document.createElement('div');\n transitionLastItem.classList.add('transition-item');\n\n const secondTitle: HTMLElement = this.title.cloneNode() as any;\n secondTitle.append(i18n('PeerInfo.SharedMedia'));\n\n transitionLastItem.append(secondTitle);\n\n transitionContainer.append(transitionFirstItem, transitionLastItem);\n\n this.header.append(transitionContainer);\n\n // * body\n\n this.profile = new PeerProfile(this.scrollable);\n this.profile.init();\n \n this.scrollable.append(this.profile.element);\n\n const HEADER_HEIGHT = 56;\n this.scrollable.onAdditionalScroll = () => {\n const rect = this.searchSuper.nav.getBoundingClientRect(); \n if(!rect.width) return;\n\n const top = rect.top - 1;\n const isSharedMedia = top <= HEADER_HEIGHT;\n animatedCloseIcon.classList.toggle('state-back', isSharedMedia);\n this.searchSuper.container.classList.toggle('is-full-viewport', isSharedMedia);\n transition(+isSharedMedia);\n\n if(!isSharedMedia) {\n this.searchSuper.cleanScrollPositions();\n }\n };\n\n const transition = TransitionSlider(transitionContainer, 'slide-fade', 400, null, false);\n\n transition(0);\n\n attachClickEvent(this.closeBtn, (e) => {\n if(this.closeBtn.firstElementChild.classList.contains('state-back')) {\n this.scrollable.scrollIntoViewNew(this.scrollable.container.firstElementChild as HTMLElement, 'start');\n transition(0);\n animatedCloseIcon.classList.remove('state-back');\n } else if(!this.scrollable.isHeavyAnimationInProgress) {\n this.slider.onCloseBtnClick();\n }\n });\n\n attachClickEvent(this.editBtn, (e) => {\n let tab: AppEditChatTab | AppEditContactTab;\n if(this.peerId < 0) {\n tab = new AppEditChatTab(this.slider);\n } else {\n tab = new AppEditContactTab(this.slider);\n }\n\n if(tab) {\n if(tab instanceof AppEditChatTab) {\n tab.chatId = -this.peerId;\n } else {\n tab.peerId = this.peerId;\n }\n \n tab.open();\n }\n });\n\n rootScope.addEventListener('contacts_update', (userId) => {\n if(this.peerId === userId) {\n this.toggleEditBtn();\n }\n });\n\n rootScope.addEventListener('chat_update', (chatId) => {\n if(this.peerId === -chatId) {\n this.toggleEditBtn();\n }\n });\n\n rootScope.addEventListener('history_multiappend', (msgIdsByPeer) => {\n for(const peerId in msgIdsByPeer) {\n this.renderNewMessages(+peerId, Array.from(msgIdsByPeer[peerId]));\n }\n });\n \n rootScope.addEventListener('history_delete', ({peerId, msgs}) => {\n this.deleteDeletedMessages(peerId, Array.from(msgs));\n });\n\n // Calls when message successfully sent and we have an id\n rootScope.addEventListener('message_sent', ({message}) => {\n this.renderNewMessages(message.peerId, [message.mid]);\n });\n\n //this.container.prepend(this.closeBtn.parentElement);\n\n this.searchSuper = new AppSearchSuper({\n mediaTabs: [{\n inputFilter: 'inputMessagesFilterEmpty',\n name: 'PeerMedia.Members',\n type: 'members'\n }, {\n inputFilter: 'inputMessagesFilterPhotoVideo',\n name: 'SharedMediaTab2',\n type: 'media'\n }, {\n inputFilter: 'inputMessagesFilterDocument',\n name: 'SharedFilesTab2',\n type: 'files'\n }, {\n inputFilter: 'inputMessagesFilterUrl',\n name: 'SharedLinksTab2',\n type: 'links'\n }, {\n inputFilter: 'inputMessagesFilterMusic',\n name: 'SharedMusicTab2',\n type: 'music'\n }, {\n inputFilter: 'inputMessagesFilterRoundVoice',\n name: 'SharedVoiceTab2',\n type: 'voice'\n }], \n scrollable: this.scrollable,\n onChangeTab: (mediaTab) => {\n let timeout = mediaTab.type === 'members' && rootScope.settings.animationsEnabled ? 250 : 0;\n setTimeout(() => {\n btnAddMembers.classList.toggle('is-hidden', mediaTab.type !== 'members');\n }, timeout);\n }\n });\n\n this.profile.element.append(this.searchSuper.container);\n\n const btnAddMembers = ButtonCorner({icon: 'addmember_filled'});\n this.content.append(btnAddMembers);\n\n btnAddMembers.addEventListener('click', () => {\n const id = -this.peerId;\n const isChannel = appChatsManager.isChannel(id);\n\n const showConfirmation = (peerIds: number[], callback: (checked: PopupPeerButtonCallbackCheckboxes) => void) => {\n let titleLangKey: LangPackKey, titleLangArgs: any[],\n descriptionLangKey: LangPackKey, descriptionLangArgs: any[],\n checkboxes: PopupPeerCheckboxOptions[];\n\n if(peerIds.length > 1) {\n titleLangKey = 'AddMembersAlertTitle';\n titleLangArgs = [i18n('Members', [peerIds.length])];\n descriptionLangKey = 'AddMembersAlertCountText';\n descriptionLangArgs = peerIds.map(peerId => {\n const b = document.createElement('b');\n b.append(new PeerTitle({peerId}).element);\n return b;\n });\n\n if(!isChannel) {\n checkboxes = [{\n text: 'AddMembersForwardMessages',\n checked: true\n }];\n }\n } else {\n titleLangKey = 'AddOneMemberAlertTitle';\n descriptionLangKey = 'AddMembersAlertNamesText';\n const b = document.createElement('b');\n b.append(new PeerTitle({\n peerId: peerIds[0]\n }).element);\n descriptionLangArgs = [b];\n\n if(!isChannel) {\n checkboxes = [{\n text: 'AddOneMemberForwardMessages',\n textArgs: [new PeerTitle({peerId: peerIds[0]}).element],\n checked: true\n }];\n }\n }\n\n descriptionLangArgs.push(new PeerTitle({\n peerId: -id\n }).element);\n\n new PopupPeer('popup-add-members', {\n peerId: -id,\n titleLangKey,\n descriptionLangKey,\n descriptionLangArgs,\n buttons: [{\n langKey: 'Add',\n callback\n }],\n checkboxes\n }).show();\n };\n\n const onError = (err: any) => {\n if(err.type === 'USER_PRIVACY_RESTRICTED') {\n toastNew({langPackKey: 'InviteToGroupError'});\n }\n };\n \n if(isChannel) {\n const tab = new AppAddMembersTab(this.slider);\n tab.open({\n peerId: this.peerId,\n type: 'channel',\n skippable: false,\n takeOut: (peerIds) => {\n showConfirmation(peerIds, () => {\n const promise = appChatsManager.inviteToChannel(id, peerIds);\n promise.catch(onError);\n tab.attachToPromise(promise);\n });\n\n return false;\n },\n title: 'GroupAddMembers',\n placeholder: 'SendMessageTo'\n });\n } else {\n new PopupPickUser({\n peerTypes: ['contacts'],\n placeholder: 'Search',\n onSelect: (peerId) => {\n setTimeout(() => {\n showConfirmation([peerId], (checked) => {\n appChatsManager.addChatUser(id, peerId, checked.size ? undefined : 0)\n .catch(onError);\n });\n }, 0);\n },\n });\n }\n });\n\n //console.log('construct shared media time:', performance.now() - perf);\n }\n\n public renderNewMessages(peerId: number, mids: number[]) {\n if(this.init) return; // * not inited yet\n\n if(!this.historiesStorage[peerId]) return;\n \n mids = mids.slice().reverse(); // ! because it will be ascend sorted array\n for(const mediaTab of this.searchSuper.mediaTabs) {\n const inputFilter = mediaTab.inputFilter;\n const filtered = this.searchSuper.filterMessagesByType(mids.map(mid => appMessagesManager.getMessageByPeer(peerId, mid)), inputFilter);\n if(filtered.length) {\n const history = this.historiesStorage[peerId][inputFilter];\n if(history) {\n history.unshift(...filtered.map(message => ({mid: message.mid, peerId: message.peerId})));\n }\n\n if(this.peerId === peerId && this.searchSuper.usedFromHistory[inputFilter] !== -1) {\n this.searchSuper.usedFromHistory[inputFilter] += filtered.length;\n this.searchSuper.performSearchResult(filtered, mediaTab, false);\n }\n }\n }\n }\n\n public deleteDeletedMessages(peerId: number, mids: number[]) {\n if(this.init) return; // * not inited yet\n\n if(!this.historiesStorage[peerId]) return;\n\n for(const mid of mids) {\n for(const type of this.searchSuper.mediaTabs) {\n const inputFilter = type.inputFilter;\n\n const history = this.historiesStorage[peerId][inputFilter];\n if(!history) continue;\n\n const idx = history.findIndex(m => m.mid === mid);\n if(idx !== -1) {\n history.splice(idx, 1);\n\n if(this.peerId === peerId) {\n const container = this.searchSuper.tabs[inputFilter];\n const div = container.querySelector(`div[data-mid=\"${mid}\"][data-peer-id=\"${peerId}\"]`) as HTMLElement;\n if(div) {\n if(this.searchSuper.selection.isSelecting) {\n this.searchSuper.selection.toggleByElement(div);\n }\n\n div.remove();\n }\n \n if(this.searchSuper.usedFromHistory[inputFilter] >= (idx + 1)) {\n this.searchSuper.usedFromHistory[inputFilter]--;\n }\n }\n\n break;\n }\n }\n }\n\n this.scrollable.onScroll();\n }\n\n public cleanupHTML() {\n // const perf = performance.now();\n this.profile.cleanupHTML();\n \n this.editBtn.classList.add('hide');\n\n this.searchSuper.cleanupHTML(true);\n\n this.container.classList.toggle('can-add-members', this.searchSuper.canViewMembers() && appChatsManager.hasRights(-this.peerId, 'invite_users'));\n\n // console.log('cleanupHTML shared media time:', performance.now() - perf);\n }\n\n public setLoadMutex(promise: Promise) {\n this.searchSuper.loadMutex = promise;\n }\n\n public setPeer(peerId: number, threadId = 0) {\n if(this.peerId === peerId && this.threadId === threadId) return false;\n\n this.peerId = peerId;\n this.threadId = threadId;\n this.peerChanged = true;\n\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.searchSuper.setQuery({\n peerId, \n //threadId, \n historyStorage: this.historiesStorage[peerId] ?? (this.historiesStorage[peerId] = {})\n });\n\n this.profile.setPeer(peerId, threadId);\n \n return true;\n }\n\n public fillProfileElements() {\n if(!this.peerChanged) {\n return;\n }\n\n this.peerChanged = false;\n\n this.cleanupHTML();\n\n this.profile.fillProfileElements();\n\n this.toggleEditBtn();\n }\n\n private toggleEditBtn() {\n let show: boolean;\n if(this.peerId > 0) {\n show = this.peerId !== rootScope.myId && appUsersManager.isContact(this.peerId);\n } else {\n show = appChatsManager.hasRights(-this.peerId, 'change_info');\n }\n\n this.editBtn.classList.toggle('hide', !show);\n }\n\n public loadSidebarMedia(single: boolean, justLoad = false) {\n this.searchSuper.load(single, justLoad);\n }\n\n onOpenAfterTimeout() {\n this.scrollable.onScroll();\n }\n}\n\n// MOUNT_CLASS_TO && (MOUNT_CLASS_TO.AppSharedMediaTab = AppSharedMediaTab);\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appImManager from \"../../lib/appManagers/appImManager\";\r\nimport SidebarSlider from \"../slider\";\r\nimport mediaSizes, { ScreenSize } from \"../../helpers/mediaSizes\";\r\nimport AppSharedMediaTab from \"./tabs/sharedMedia\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nexport const RIGHT_COLUMN_ACTIVE_CLASSNAME = 'is-right-column-shown';\r\n\r\nexport class AppSidebarRight extends SidebarSlider {\r\n public sharedMediaTab: AppSharedMediaTab;\r\n private isColumnProportionSet = false;\r\n\r\n constructor() {\r\n super({\r\n sidebarEl: document.getElementById('column-right') as HTMLElement,\r\n canHideFirst: true,\r\n navigationType: 'right'\r\n });\r\n\r\n mediaSizes.addEventListener('changeScreen', (from, to) => {\r\n if(to === ScreenSize.medium && from !== ScreenSize.mobile) {\r\n this.toggleSidebar(false);\r\n }\r\n });\r\n\r\n mediaSizes.addEventListener('resize', () => {\r\n this.setColumnProportion();\r\n });\r\n\r\n this.sharedMediaTab = new AppSharedMediaTab(this);\r\n }\r\n\r\n public onCloseTab(id: number, animate: boolean, isNavigation?: boolean) {\r\n if(!this.historyTabIds.length) {\r\n this.toggleSidebar(false, animate);\r\n }\r\n\r\n super.onCloseTab(id, animate, isNavigation);\r\n }\r\n\r\n /* public selectTab(id: number) {\r\n const res = super.selectTab(id);\r\n\r\n if(id !== -1) {\r\n this.toggleSidebar(true);\r\n }\r\n\r\n return res;\r\n } */\r\n\r\n private setColumnProportion() {\r\n const proportion = this.sidebarEl.scrollWidth / this.sidebarEl.previousElementSibling.scrollWidth;\r\n document.documentElement.style.setProperty('--right-column-proportion', '' + proportion);\r\n }\r\n\r\n public toggleSidebar(enable?: boolean, animate?: boolean) {\r\n /////this.log('sidebarEl', this.sidebarEl, enable, isElementInViewport(this.sidebarEl));\r\n\r\n const active = document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME);\r\n let willChange: boolean;\r\n if(enable !== undefined) {\r\n if(enable) {\r\n if(!active) {\r\n willChange = true;\r\n }\r\n } else if(active) {\r\n willChange = true;\r\n }\r\n } else {\r\n willChange = true;\r\n }\r\n\r\n if(!willChange) return Promise.resolve();\r\n\r\n if(!active && !this.historyTabIds.length) {\r\n this.sharedMediaTab.open();\r\n //this.selectTab(this.sharedMediaTab);\r\n }\r\n\r\n if(!this.isColumnProportionSet) {\r\n this.setColumnProportion();\r\n this.isColumnProportionSet = true;\r\n }\r\n\r\n const animationPromise = appImManager.selectTab(active ? 1 : 2, animate);\r\n document.body.classList.toggle(RIGHT_COLUMN_ACTIVE_CLASSNAME, enable);\r\n return animationPromise;\r\n\r\n /* return new Promise((resolve, reject) => {\r\n const hidden: {element: HTMLDivElement, height: number}[] = [];\r\n const observer = new IntersectionObserver((entries) => {\r\n for(const entry of entries) {\r\n const bubble = entry.target as HTMLDivElement;\r\n if(!entry.isIntersecting) {\r\n hidden.push({element: bubble, height: bubble.scrollHeight});\r\n }\r\n }\r\n \r\n for(const item of hidden) {\r\n item.element.style.minHeight = item.height + 'px';\r\n (item.element.firstElementChild as HTMLElement).style.display = 'none';\r\n item.element.style.width = '1px';\r\n }\r\n \r\n //console.log('hidden', hidden);\r\n observer.disconnect();\r\n \r\n set();\r\n \r\n setTimeout(() => {\r\n for(const item of hidden) {\r\n item.element.style.minHeight = '';\r\n item.element.style.width = '';\r\n (item.element.firstElementChild as HTMLElement).style.display = '';\r\n }\r\n\r\n resolve();\r\n }, 200);\r\n });\r\n \r\n const length = Object.keys(appImManager.bubbles).length;\r\n if(length) {\r\n for(const i in appImManager.bubbles) {\r\n observer.observe(appImManager.bubbles[i]);\r\n }\r\n } else {\r\n set();\r\n setTimeout(resolve, 200);\r\n }\r\n }); */\r\n }\r\n}\r\n\r\nconst appSidebarRight = new AppSidebarRight();\r\nMOUNT_CLASS_TO.appSidebarRight = appSidebarRight;\r\nexport default appSidebarRight;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport appSidebarRight from \"..\";\r\nimport appPollsManager from \"../../../lib/appManagers/appPollsManager\";\r\nimport { roundPercents } from \"../../poll\";\r\nimport { RichTextProcessor } from \"../../../lib/richtextprocessor\";\r\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\r\nimport { ripple } from \"../../ripple\";\r\nimport { i18n } from \"../../../lib/langPack\";\r\n\r\nexport default class AppPollResultsTab extends SliderSuperTab {\r\n private resultsDiv: HTMLElement;\r\n\r\n protected init() {\r\n this.container.id = 'poll-results-container';\r\n this.container.classList.add('chatlist-container');\r\n\r\n this.resultsDiv = document.createElement('div');\r\n this.resultsDiv.classList.add('poll-results');\r\n this.scrollable.append(this.resultsDiv);\r\n }\r\n\r\n public open(message: any) {\r\n const ret = super.open();\r\n const poll = appPollsManager.getPoll(message.media.poll.id);\r\n\r\n this.setTitle(poll.poll.pFlags.quiz ? 'PollResults.Title.Quiz' : 'PollResults.Title.Poll');\r\n\r\n const title = document.createElement('h3');\r\n title.innerHTML = poll.poll.rQuestion;\r\n\r\n const percents = poll.results.results.map(v => v.voters / poll.results.total_voters * 100);\r\n roundPercents(percents);\r\n\r\n const fragment = document.createDocumentFragment();\r\n poll.results.results.forEach((result, idx) => {\r\n if(!result.voters) return;\r\n\r\n const hr = document.createElement('hr');\r\n\r\n const answer = poll.poll.answers[idx];\r\n\r\n // Head\r\n const answerEl = document.createElement('div');\r\n answerEl.classList.add('poll-results-answer');\r\n\r\n const answerTitle = document.createElement('div');\r\n answerTitle.innerHTML = RichTextProcessor.wrapEmojiText(answer.text);\r\n\r\n const answerPercents = document.createElement('div');\r\n answerPercents.innerText = Math.round(percents[idx]) + '%';\r\n\r\n answerEl.append(answerTitle, answerPercents);\r\n\r\n // Humans\r\n const list = appDialogsManager.createChatList();\r\n list.classList.add('poll-results-voters');\r\n\r\n appDialogsManager.setListClickListener(list, () => {\r\n appSidebarRight.onCloseBtnClick();\r\n }, undefined, true);\r\n\r\n list.style.minHeight = Math.min(result.voters, 4) * 50 + 'px';\r\n\r\n fragment.append(hr, answerEl, list);\r\n\r\n let offset: string, limit = 4, loading = false, left = result.voters - 4;\r\n const load = () => {\r\n if(loading) return;\r\n loading = true;\r\n\r\n appPollsManager.getVotes(message, answer.option, offset, limit).then(votesList => {\r\n votesList.votes.forEach(vote => {\r\n const {dom} = appDialogsManager.addDialogNew({\r\n dialog: vote.user_id,\r\n container: list,\r\n drawStatus: false,\r\n rippleEnabled: false, \r\n meAsSaved: false,\r\n avatarSize: 32\r\n });\r\n dom.lastMessageSpan.parentElement.remove();\r\n });\r\n\r\n if(offset) {\r\n left -= votesList.votes.length;\r\n (showMore.lastElementChild as HTMLElement).replaceWith(i18n('PollResults.LoadMore', [Math.min(20, left)]));\r\n }\r\n \r\n offset = votesList.next_offset;\r\n limit = 20;\r\n\r\n if(!left || !votesList.votes.length) {\r\n showMore.remove();\r\n }\r\n }).finally(() => {\r\n loading = false;\r\n });\r\n };\r\n\r\n load();\r\n\r\n if(left <= 0) return;\r\n\r\n const showMore = document.createElement('div');\r\n showMore.classList.add('poll-results-more', 'show-more', 'rp-overflow');\r\n showMore.addEventListener('click', load);\r\n ripple(showMore);\r\n const down = document.createElement('div');\r\n down.classList.add('tgico-down');\r\n showMore.append(down, i18n('PollResults.LoadMore', [Math.min(20, left)]));\r\n\r\n fragment.append(showMore);\r\n });\r\n\r\n this.resultsDiv.append(title, fragment);\r\n\r\n appSidebarRight.toggleSidebar(true).then(() => {\r\n /* appPollsManager.getVotes(mid).then(votes => {\r\n console.log('gOt VotEs', votes);\r\n }); */\r\n });\r\n\r\n return ret;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport mediaSizes from \"../helpers/mediaSizes\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport appImManager from \"../lib/appManagers/appImManager\";\r\nimport appPollsManager, { Poll, PollResults } from \"../lib/appManagers/appPollsManager\";\r\nimport serverTimeManager from \"../lib/mtproto/serverTimeManager\";\r\nimport { RichTextProcessor } from \"../lib/richtextprocessor\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport { ripple } from \"./ripple\";\r\nimport appSidebarRight from \"./sidebarRight\";\r\nimport AppPollResultsTab from \"./sidebarRight/tabs/pollResults\";\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\nimport { fastRaf } from \"../helpers/schedulers\";\r\nimport SetTransition from \"./singleTransition\";\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent, detachClickEvent } from \"../helpers/dom/clickEvent\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport windowSize from \"../helpers/windowSize\";\r\n\r\nlet lineTotalLength = 0;\r\nconst tailLength = 9;\r\nconst times = 10;\r\nconst fullTime = 340;\r\nconst oneTime = fullTime / times;\r\n\r\nexport const roundPercents = (percents: number[]) => {\r\n //console.log('roundPercents before percents:', percents);\r\n\r\n const sum = percents.reduce((acc, p) => acc + Math.round(p), 0);\r\n if(sum > 100) {\r\n const diff = sum - 100;\r\n const length = percents.length;\r\n for(let i = 0; i < diff; ++i) {\r\n let minIndex = -1, minRemainder = 1;\r\n for(let k = 0; k < length; ++k) {\r\n let remainder = percents[k] % 1;\r\n if(remainder >= 0.5 && remainder < minRemainder) {\r\n minRemainder = remainder;\r\n minIndex = k;\r\n }\r\n }\r\n\r\n if(minIndex === -1) {\r\n //throw new Error('lol chto');\r\n return;\r\n }\r\n\r\n percents[minIndex] -= minRemainder;\r\n }\r\n } else if(sum < 100) {\r\n const diff = 100 - sum;\r\n const length = percents.length;\r\n for(let i = 0; i < diff; ++i) {\r\n let minIndex = -1, maxRemainder = 0;\r\n for(let k = 0; k < length; ++k) {\r\n let remainder = percents[k] % 1;\r\n if(remainder < 0.5 && remainder > maxRemainder) {\r\n maxRemainder = remainder;\r\n minIndex = k;\r\n }\r\n }\r\n\r\n if(minIndex === -1) {\r\n //throw new Error('lol chto');\r\n return;\r\n }\r\n\r\n percents[minIndex] += 1 - maxRemainder;\r\n }\r\n }\r\n\r\n //console.log('roundPercents after percents:', percents);\r\n};\r\n\r\n/* const connectedPolls: {id: string, element: PollElement}[] = [];\r\nrootScope.on('poll_update', (e) => {\r\n const {poll, results} = e as {poll: Poll, results: PollResults};\r\n\r\n //console.log('poll_update', poll, results);\r\n for(const connected of connectedPolls) {\r\n if(connected.id === poll.id) {\r\n const pollElement = connected.element;\r\n pollElement.isClosed = !!poll.pFlags.closed;\r\n pollElement.performResults(results, poll.chosenIndexes);\r\n }\r\n }\r\n}); */\r\n\r\nrootScope.addEventListener('poll_update', (e) => {\r\n const {poll, results} = e as {poll: Poll, results: PollResults};\r\n\r\n const pollElements = Array.from(document.querySelectorAll(`poll-element[poll-id=\"${poll.id}\"]`)) as PollElement[];\r\n pollElements.forEach(pollElement => {\r\n //console.log('poll_update', poll, results);\r\n pollElement.isClosed = !!poll.pFlags.closed;\r\n pollElement.performResults(results, poll.chosenIndexes);\r\n });\r\n});\r\n\r\nrootScope.addEventListener('peer_changed', () => {\r\n if(prevQuizHint) {\r\n hideQuizHint(prevQuizHint, prevQuizHintOnHide, prevQuizHintTimeout);\r\n }\r\n});\r\n\r\nmediaSizes.addEventListener('resize', () => {\r\n PollElement.setMaxLength();\r\n PollElement.resizePolls();\r\n});\r\n\r\nmediaSizes.addEventListener('changeScreen', () => {\r\n PollElement.setMaxLength();\r\n});\r\n\r\nconst hideQuizHint = (element: HTMLElement, onHide: () => void, timeout: number) => {\r\n element.classList.remove('active');\r\n\r\n clearTimeout(timeout);\r\n setTimeout(() => {\r\n onHide();\r\n element.remove();\r\n\r\n if(prevQuizHint === element && prevQuizHintOnHide === onHide && prevQuizHintTimeout === timeout) {\r\n prevQuizHint = prevQuizHintOnHide = null;\r\n prevQuizHintTimeout = 0;\r\n }\r\n }, 200);\r\n};\r\n\r\nlet prevQuizHint: HTMLElement, prevQuizHintOnHide: () => void, prevQuizHintTimeout: number;\r\nconst setQuizHint = (solution: string, solution_entities: any[], onHide: () => void) => {\r\n if(prevQuizHint) {\r\n hideQuizHint(prevQuizHint, prevQuizHintOnHide, prevQuizHintTimeout);\r\n }\r\n\r\n const element = document.createElement('div');\r\n element.classList.add('quiz-hint');\r\n\r\n const container = document.createElement('div');\r\n container.classList.add('container', 'tgico');\r\n\r\n const textEl = document.createElement('div');\r\n textEl.classList.add('text');\r\n\r\n container.append(textEl);\r\n element.append(container);\r\n\r\n textEl.innerHTML = RichTextProcessor.wrapRichText(solution, {entities: solution_entities});\r\n appImManager.chat.bubbles.bubblesContainer.append(element);\r\n\r\n void element.offsetLeft; // reflow\r\n element.classList.add('active');\r\n\r\n prevQuizHint = element;\r\n prevQuizHintOnHide = onHide;\r\n prevQuizHintTimeout = window.setTimeout(() => {\r\n hideQuizHint(element, onHide, prevQuizHintTimeout);\r\n }, IS_TOUCH_SUPPORTED ? 5000 : 7000);\r\n};\r\n\r\nexport default class PollElement extends HTMLElement {\r\n public static MAX_OFFSET = -46.5;\r\n public static MAX_LENGTH = 0;\r\n public svgLines: SVGSVGElement[];\r\n private numberDivs: HTMLDivElement[];\r\n private answerDivs: HTMLDivElement[];\r\n private descDiv: HTMLElement;\r\n private typeDiv: HTMLElement;\r\n private avatarsDiv: HTMLElement;\r\n private viewResults: HTMLElement;\r\n private votersCountDiv: HTMLDivElement;\r\n\r\n // private maxLength: number;\r\n // private maxLengths: number[];\r\n private maxPercents: number[];\r\n\r\n public isClosed = false;\r\n private isQuiz = false;\r\n private isRetracted = false;\r\n private isPublic = false;\r\n private isMultiple = false;\r\n private chosenIndexes: number[] = [];\r\n private percents: number[];\r\n\r\n public message: any;\r\n\r\n private quizInterval: number;\r\n private quizTimer: SVGSVGElement;\r\n\r\n private sendVoteBtn: HTMLElement;\r\n private chosingIndexes: number[] = [];\r\n\r\n private sendVotePromise: Promise;\r\n private sentVote = false;\r\n\r\n constructor() {\r\n super();\r\n // элемент создан\r\n }\r\n\r\n public static setMaxLength() {\r\n const width = windowSize.windowW <= 360 ? windowSize.windowW - 120 : mediaSizes.active.poll.width;\r\n this.MAX_LENGTH = width + tailLength + this.MAX_OFFSET + -13.7; // 13 - position left\r\n }\r\n\r\n public static resizePolls() {\r\n if(!this.MAX_LENGTH) return;\r\n const pollElements = Array.from(document.querySelectorAll('poll-element.is-voted')) as PollElement[];\r\n pollElements.forEach(pollElement => {\r\n pollElement.svgLines.forEach((svg, idx) => {\r\n //void svg.getBoundingClientRect(); // reflow\r\n pollElement.setLineProgress(idx, 1);\r\n });\r\n });\r\n }\r\n\r\n public render() {\r\n // браузер вызывает этот метод при добавлении элемента в документ\r\n // (может вызываться много раз, если элемент многократно добавляется/удаляется)\r\n\r\n if(!lineTotalLength) {\r\n lineTotalLength = (document.getElementById('poll-line') as any as SVGPathElement).getTotalLength();\r\n //console.log('line total length:', lineTotalLength);\r\n PollElement.setMaxLength();\r\n }\r\n\r\n const pollId = this.message.media.poll.id;\r\n const {poll, results} = appPollsManager.getPoll(pollId);\r\n\r\n /* const timestamp = Date.now() / 1000 | 0;\r\n if(timestamp < this.message.date) { */\r\n if(this.message.pFlags.is_scheduled) {\r\n this.classList.add('disable-hover');\r\n }\r\n\r\n //console.log('pollElement poll:', poll, results);\r\n\r\n let descKey: LangPackKey;\r\n if(poll.pFlags) {\r\n this.isPublic = !!poll.pFlags.public_voters;\r\n this.isQuiz = !!poll.pFlags.quiz;\r\n this.isClosed = !!poll.pFlags.closed;\r\n this.isMultiple = !!poll.pFlags.multiple_choice;\r\n\r\n if(this.isClosed) {\r\n descKey = 'Chat.Poll.Type.Closed';\r\n this.classList.add('is-closed');\r\n } else if(this.isQuiz) {\r\n descKey = this.isPublic ? 'Chat.Poll.Type.Quiz' : 'Chat.Poll.Type.AnonymousQuiz';\r\n } else {\r\n descKey = this.isPublic ? 'Chat.Poll.Type.Public' : 'Chat.Poll.Type.Anonymous';\r\n }\r\n }\r\n\r\n this.classList.toggle('is-multiple', this.isMultiple);\r\n\r\n const multipleSelect = this.isMultiple ? '' : '';\r\n const votes = poll.answers.map((answer, idx) => {\r\n return `\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n ${multipleSelect}\r\n
\r\n
\r\n
${RichTextProcessor.wrapEmojiText(answer.text)}
\r\n \r\n \r\n \r\n \r\n
\r\n `;\r\n }).join('');\r\n\r\n this.innerHTML = `\r\n
${poll.rQuestion}
\r\n
\r\n
\r\n
\r\n
\r\n ${votes}`;\r\n\r\n this.descDiv = this.firstElementChild.nextElementSibling as HTMLElement;\r\n this.typeDiv = this.descDiv.firstElementChild as HTMLElement;\r\n this.avatarsDiv = this.descDiv.lastElementChild as HTMLElement;\r\n\r\n if(descKey) {\r\n this.typeDiv.append(i18n(descKey));\r\n }\r\n\r\n if(this.isQuiz) {\r\n this.classList.add('is-quiz');\r\n\r\n if(poll.close_period && poll.close_date) {\r\n const timeLeftDiv = document.createElement('div');\r\n timeLeftDiv.classList.add('poll-time');\r\n this.descDiv.append(timeLeftDiv);\r\n\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n //svg.setAttributeNS(null, 'viewBox', '0 0 15 15');\r\n svg.classList.add('poll-quiz-timer');\r\n\r\n this.quizTimer = svg;\r\n\r\n const strokeWidth = 2;\r\n const radius = 7;\r\n const circumference = 2 * Math.PI * radius;\r\n\r\n const circle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\r\n circle.classList.add('poll-quiz-timer-circle');\r\n circle.setAttributeNS(null, 'cx', '16');\r\n circle.setAttributeNS(null, 'cy', '16');\r\n circle.setAttributeNS(null, 'r', '' + radius);\r\n circle.setAttributeNS(null, 'stroke-width', '' + strokeWidth);\r\n\r\n svg.append(circle);\r\n this.descDiv.append(svg);\r\n \r\n const period = poll.close_period * 1000;\r\n const closeTime = (poll.close_date - serverTimeManager.serverTimeOffset) * 1000;\r\n\r\n //console.log('closeTime:', poll.close_date, serverTimeManager.serverTimeOffset, Date.now() / 1000 | 0);\r\n\r\n // let time = Date.now();\r\n // let percents = (closeTime - time) / period;\r\n\r\n // timeLeftDiv.innerHTML = String((closeTime - time) / 1000 + 1 | 0).toHHMMSS();\r\n\r\n // // @ts-ignore\r\n // circle.style.strokeDashoffset = circumference + percents * circumference;\r\n // circle.style.strokeDasharray = ${circumference} ${circumference};\r\n\r\n this.quizInterval = window.setInterval(() => {\r\n const time = Date.now();\r\n const percents = (closeTime - time) / period;\r\n const timeLeft = (closeTime - time) / 1000 + 1 | 0;\r\n timeLeftDiv.innerHTML = String(timeLeft).toHHMMSS();\r\n \r\n if (timeLeft <= 5) {\r\n timeLeftDiv.style.color = '#ee545c';\r\n circle.style.stroke = '#ee545c';\r\n }\r\n //timeLeftDiv.style.visibility = 'visible';\r\n\r\n // @ts-ignore\r\n circle.style.strokeDashoffset = circumference + percents * circumference;\r\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\r\n\r\n if(time >= closeTime) {\r\n clearInterval(this.quizInterval);\r\n timeLeftDiv.innerHTML = '';\r\n // @ts-ignore\r\n circle.style.strokeDashoffset = circumference;\r\n this.quizInterval = 0;\r\n\r\n setTimeout(() => {\r\n // нужно запросить апдейт чтобы опрос обновился\r\n appPollsManager.getResults(this.message);\r\n }, 3e3);\r\n }\r\n }, 1e3);\r\n }\r\n }\r\n \r\n this.answerDivs = Array.from(this.querySelectorAll('.poll-answer')) as HTMLDivElement[];\r\n this.svgLines = Array.from(this.querySelectorAll('.poll-line')) as SVGSVGElement[];\r\n this.numberDivs = Array.from(this.querySelectorAll('.poll-answer-percents')) as HTMLDivElement[];\r\n\r\n const footerDiv = document.createElement('div');\r\n footerDiv.classList.add('poll-footer');\r\n\r\n this.viewResults = document.createElement('div');\r\n this.viewResults.className = 'poll-footer-button poll-view-results hide';\r\n this.viewResults.append(i18n('Chat.Poll.ViewResults'));\r\n\r\n this.votersCountDiv = document.createElement('div');\r\n this.votersCountDiv.className = 'poll-votes-count';\r\n\r\n footerDiv.append(this.viewResults, this.votersCountDiv);\r\n this.append(footerDiv);\r\n\r\n this.viewResults.addEventListener('click', (e) => {\r\n cancelEvent(e);\r\n\r\n if(!appSidebarRight.isTabExists(AppPollResultsTab)) {\r\n new AppPollResultsTab(appSidebarRight).open(this.message);\r\n }\r\n });\r\n ripple(this.viewResults);\r\n\r\n if(this.isMultiple) {\r\n this.sendVoteBtn = document.createElement('div');\r\n this.sendVoteBtn.classList.add('poll-footer-button', 'poll-send-vote');\r\n this.sendVoteBtn.append(i18n('Chat.Poll.SubmitVote'));\r\n ripple(this.sendVoteBtn);\r\n\r\n if(!poll.chosenIndexes.length) {\r\n this.votersCountDiv.classList.add('hide');\r\n }\r\n\r\n attachClickEvent(this.sendVoteBtn, (e) => {\r\n cancelEvent(e);\r\n /* const indexes = this.answerDivs.filter(el => el.classList.contains('is-chosing')).map(el => +el.dataset.index);\r\n if(indexes.length) {\r\n \r\n } */\r\n if(this.chosingIndexes.length) {\r\n this.sendVotes(this.chosingIndexes).then(() => {\r\n this.chosingIndexes.length = 0;\r\n this.answerDivs.forEach(el => {\r\n el.classList.remove('is-chosing');\r\n });\r\n });\r\n }\r\n });\r\n\r\n footerDiv.append(this.sendVoteBtn);\r\n }\r\n\r\n // const width = this.getBoundingClientRect().width;\r\n // const width = mediaSizes.active.poll.width;\r\n // this.maxLength = width + tailLength + this.maxOffset + -13.7; // 13 - position left\r\n\r\n const canVote = !(poll.chosenIndexes.length || this.isClosed);\r\n if(!canVote || this.isPublic) {\r\n this.performResults(results, poll.chosenIndexes, false);\r\n }\r\n\r\n if(canVote) {\r\n this.setVotersCount(results);\r\n attachClickEvent(this, this.clickHandler);\r\n }\r\n }\r\n\r\n initQuizHint(results: PollResults) {\r\n if(results.solution && results.solution_entities) {\r\n const toggleHint = document.createElement('div');\r\n toggleHint.classList.add('tgico-tip', 'poll-hint');\r\n this.descDiv.append(toggleHint);\r\n\r\n //let active = false;\r\n attachClickEvent(toggleHint, (e) => {\r\n cancelEvent(e);\r\n\r\n //active = true;\r\n toggleHint.classList.add('active');\r\n setQuizHint(results.solution, results.solution_entities, () => {\r\n //active = false;\r\n toggleHint.classList.remove('active');\r\n });\r\n });\r\n\r\n if(this.sentVote) {\r\n const correctResult = results.results.find(r => r.pFlags.correct);\r\n if(correctResult && !correctResult.pFlags.chosen) {\r\n toggleHint.click();\r\n }\r\n }\r\n }\r\n }\r\n\r\n clickHandler(e: Event) {\r\n const target = findUpClassName(e.target, 'poll-answer') as HTMLElement;\r\n if(!target) {\r\n return;\r\n }\r\n \r\n cancelEvent(e);\r\n const answerIndex = +target.dataset.index;\r\n if(this.isMultiple) {\r\n target.classList.toggle('is-chosing');\r\n\r\n const foundIndex = this.chosingIndexes.indexOf(answerIndex);\r\n if(foundIndex !== -1) {\r\n this.chosingIndexes.splice(foundIndex, 1);\r\n } else {\r\n this.chosingIndexes.push(answerIndex);\r\n }\r\n } else {\r\n this.sendVotes([answerIndex]);\r\n }\r\n \r\n /* target.classList.add('is-voting');\r\n setTimeout(() => { // simulate\r\n this.setResults([100, 0], answerIndex);\r\n target.classList.remove('is-voting');\r\n }, 1000); */\r\n }\r\n\r\n sendVotes(indexes: number[]) {\r\n if(this.sendVotePromise) return this.sendVotePromise;\r\n\r\n const targets = this.answerDivs.filter((_, idx) => indexes.includes(idx));\r\n targets.forEach(target => {\r\n target.classList.add('is-voting');\r\n });\r\n \r\n this.classList.add('disable-hover');\r\n this.sentVote = true;\r\n return this.sendVotePromise = appPollsManager.sendVote(this.message, indexes).then(() => {\r\n targets.forEach(target => {\r\n target.classList.remove('is-voting');\r\n });\r\n\r\n this.classList.remove('disable-hover');\r\n }).catch(() => {\r\n this.sentVote = false;\r\n }).finally(() => {\r\n this.sendVotePromise = null;\r\n });\r\n }\r\n\r\n performResults(results: PollResults, chosenIndexes: number[], animate = true) {\r\n if(!rootScope.settings.animationsEnabled) {\r\n animate = false;\r\n }\r\n\r\n if(this.isQuiz && (results.results?.length || this.isClosed)) {\r\n this.answerDivs.forEach((el, idx) => {\r\n el.classList.toggle('is-correct', !!results.results[idx].pFlags.correct);\r\n });\r\n\r\n if(this.initQuizHint) {\r\n this.initQuizHint(results);\r\n this.initQuizHint = null;\r\n }\r\n\r\n if(this.quizInterval) {\r\n clearInterval(this.quizInterval);\r\n this.quizInterval = 0;\r\n }\r\n\r\n if(this.quizTimer?.parentElement) {\r\n this.quizTimer.remove();\r\n }\r\n\r\n const timeEl = this.descDiv.querySelector('.poll-time');\r\n if(timeEl) {\r\n timeEl.remove();\r\n }\r\n }\r\n\r\n if(this.isClosed) {\r\n this.classList.add('is-closed');\r\n replaceContent(this.typeDiv, i18n('Chat.Poll.Type.Closed'));\r\n }\r\n\r\n // set chosen\r\n if(this.chosenIndexes.length !== chosenIndexes.length || this.isClosed) { // if we voted\r\n this.isRetracted = this.chosenIndexes.length && !chosenIndexes.length;\r\n this.chosenIndexes = chosenIndexes.slice();\r\n\r\n if(this.isRetracted) {\r\n attachClickEvent(this, this.clickHandler);\r\n } else {\r\n detachClickEvent(this, this.clickHandler);\r\n }\r\n }\r\n \r\n // is need update\r\n if(this.chosenIndexes.length || this.isRetracted || this.isClosed) {\r\n const percents = results.results.map(v => results.total_voters ? v.voters / results.total_voters * 100 : 0);\r\n\r\n this.classList.toggle('no-transition', !animate);\r\n if(animate) {\r\n SetTransition(this, '', !this.isRetracted, 340);\r\n }\r\n\r\n fastRaf(() => {\r\n this.setResults(this.isRetracted ? this.percents : percents, this.chosenIndexes, animate);\r\n this.percents = percents;\r\n this.isRetracted = false;\r\n });\r\n }\r\n \r\n this.setVotersCount(results);\r\n\r\n if(this.isPublic) {\r\n if(!this.isMultiple) {\r\n this.viewResults.classList.toggle('hide', !results.total_voters || !this.chosenIndexes.length);\r\n this.votersCountDiv.classList.toggle('hide', !!this.chosenIndexes.length);\r\n }\r\n\r\n let html = '';\r\n /**\r\n * MACOS, ANDROID - без реверса\r\n * WINDOWS DESKTOP - реверс\r\n * все приложения накладывают аватарку первую на вторую, а в макете зато вторая на первую, ЛОЛ!\r\n */\r\n results.recent_voters/* .slice().reverse() */.forEach((userId, idx) => {\r\n const style = idx === 0 ? '' : `style=\"transform: translateX(-${idx * 3}px);\"`;\r\n html += ``;\r\n });\r\n this.avatarsDiv.innerHTML = html;\r\n }\r\n\r\n if(this.isMultiple) {\r\n const isVoted = !!this.chosenIndexes.length;\r\n\r\n const hideSendVoteBtn = this.isClosed || isVoted;\r\n const hideViewResultsBtn = !this.isPublic || !results.total_voters || (!isVoted && !this.isClosed);\r\n this.sendVoteBtn.classList.toggle('hide', hideSendVoteBtn);\r\n this.viewResults.classList.toggle('hide', hideViewResultsBtn);\r\n this.votersCountDiv.classList.toggle('hide', !hideSendVoteBtn || !hideViewResultsBtn);\r\n }\r\n }\r\n\r\n setResults(percents: number[], chosenIndexes: number[], animate: boolean) {\r\n this.svgLines.forEach(svg => svg.style.display = '');\r\n\r\n this.answerDivs.forEach((el, idx) => {\r\n el.classList.toggle('is-chosen', chosenIndexes.includes(idx));\r\n });\r\n\r\n const maxValue = Math.max(...percents);\r\n // this.maxLengths = percents.map(p => p / maxValue * this.maxLength);\r\n this.maxPercents = percents.map(p => p / maxValue);\r\n\r\n // line\r\n if(this.isRetracted) {\r\n this.svgLines.forEach((svg, idx) => {\r\n this.setLineProgress(idx, -1);\r\n });\r\n } else {\r\n const cb = () => {\r\n this.svgLines.forEach((svg, idx) => {\r\n //void svg.getBoundingClientRect(); // reflow\r\n this.setLineProgress(idx, 1);\r\n });\r\n };\r\n \r\n animate ? fastRaf(cb) : cb();\r\n }\r\n\r\n percents = percents.slice();\r\n roundPercents(percents);\r\n let getPercentValue: (percents: number, index: number) => number;\r\n const iterate = (i: number) => {\r\n percents.forEach((percents, idx) => {\r\n const value = getPercentValue(percents, i);\r\n this.numberDivs[idx].innerText = value + '%';\r\n });\r\n };\r\n // numbers\r\n if(this.isRetracted) {\r\n getPercentValue = (percents, index) => Math.round(percents / times * index);\r\n\r\n if(animate) {\r\n for(let i = (times - 1), k = 0; i >= 0; --i, ++k) {\r\n setTimeout(() => {\r\n iterate(i);\r\n }, oneTime * k);\r\n }\r\n } else {\r\n iterate(0);\r\n }\r\n } else {\r\n getPercentValue = (percents, index) => Math.round(percents / times * (index + 1));\r\n\r\n if(animate) {\r\n for(let i = 0; i < times; ++i) {\r\n setTimeout(() => {\r\n iterate(i);\r\n }, oneTime * i);\r\n }\r\n } else {\r\n iterate(times - 1);\r\n }\r\n }\r\n\r\n if(this.isRetracted) {\r\n if(animate) {\r\n this.classList.add('is-retracting');\r\n }\r\n\r\n this.classList.remove('is-voted');\r\n const cb = () => {\r\n this.svgLines.forEach(svg => svg.style.display = 'none');\r\n };\r\n\r\n if(animate) {\r\n setTimeout(() => {\r\n this.classList.remove('is-retracting');\r\n cb();\r\n }, fullTime);\r\n } else {\r\n cb();\r\n }\r\n } else {\r\n this.classList.add('is-voted');\r\n }\r\n }\r\n\r\n setVotersCount(results: PollResults) {\r\n const votersCount = results.total_voters || 0;\r\n let key: LangPackKey, args = [votersCount];\r\n if(this.isClosed) {\r\n if(this.isQuiz) key = votersCount ? 'Chat.Quiz.TotalVotes' : 'Chat.Quiz.TotalVotesResultEmpty';\r\n else key = votersCount ? 'Chat.Poll.TotalVotes1' : 'Chat.Poll.TotalVotesResultEmpty';\r\n } else {\r\n if(this.isQuiz) key = votersCount ? 'Chat.Quiz.TotalVotes' : 'Chat.Quiz.TotalVotesEmpty';\r\n else key = votersCount ? 'Chat.Poll.TotalVotes1' : 'Chat.Poll.TotalVotesEmpty';\r\n }\r\n \r\n replaceContent(this.votersCountDiv, i18n(key, args));\r\n }\r\n\r\n setLineProgress(index: number, multiplier: number) {\r\n const svg = this.svgLines[index];\r\n\r\n if(multiplier === -1) {\r\n svg.style.strokeDasharray = '';\r\n svg.style.strokeDashoffset = '';\r\n } else {\r\n // svg.style.strokeDasharray = (multiplier * this.maxLengths[index]) + ', 485.9';\r\n svg.style.strokeDasharray = (multiplier * this.maxPercents[index] * PollElement.MAX_LENGTH) + ', 485.9';\r\n // svg.style.strokeDasharray = (multiplier * this.maxPercents[index] * 100) + '%, 485.9';\r\n svg.style.strokeDashoffset = '' + multiplier * PollElement.MAX_OFFSET;\r\n }\r\n }\r\n\r\n // у элемента могут быть ещё другие методы и свойства\r\n}\r\n\r\ncustomElements.define(\"poll-element\", PollElement);\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { Document, InputFileLocation, InputStickerSet, MessagesAllStickers, MessagesFeaturedStickers, MessagesFoundStickerSets, MessagesRecentStickers, MessagesStickers, MessagesStickerSet, PhotoSize, StickerPack, StickerSet, StickerSetCovered } from '../../layer';\nimport { Modify } from '../../types';\nimport apiManager from '../mtproto/mtprotoworker';\nimport rootScope from '../rootScope';\nimport appDocsManager from './appDocsManager';\nimport AppStorage from '../storage';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { forEachReverse } from '../../helpers/array';\nimport DATABASE_STATE from '../../config/databases/state';\n\nconst CACHE_TIME = 3600e3;\n\nexport type MyStickerSetInput = {\n id: string,\n access_hash?: string\n};\n\nexport class AppStickersManager {\n private storage = new AppStorage, typeof DATABASE_STATE>(DATABASE_STATE, 'stickerSets');\n\n private getStickerSetPromises: {[setId: string]: Promise} = {};\n private getStickersByEmoticonsPromises: {[emoticon: string]: Promise} = {};\n\n private greetingStickers: Document.document[];\n private getGreetingStickersTimeout: number;\n private getGreetingStickersPromise: Promise;\n \n constructor() {\n this.getAnimatedEmojiStickerSet();\n\n rootScope.addMultipleEventsListeners({\n updateNewStickerSet: (update) => {\n this.saveStickerSet(update.stickerset, update.stickerset.set.id);\n rootScope.dispatchEvent('stickers_installed', update.stickerset.set);\n }\n });\n\n this.getGreetingStickersTimeout = window.setTimeout(() => {\n this.getGreetingStickersTimeout = undefined;\n this.getGreetingSticker(true);\n }, 5000);\n }\n\n public getGreetingSticker(justPreload = false) {\n if(this.getGreetingStickersTimeout) {\n clearTimeout(this.getGreetingStickersTimeout);\n this.getGreetingStickersTimeout = undefined;\n }\n\n if(!this.getGreetingStickersPromise) {\n this.getGreetingStickersPromise = this.getStickersByEmoticon('👋⭐️', false).then(docs => {\n if(!docs.length) throw 'NO_STICKERS';\n this.greetingStickers = docs.slice() as Document.document[];\n this.greetingStickers.sort((a, b) => Math.random() - Math.random());\n });\n }\n \n return this.getGreetingStickersPromise.then(() => {\n let doc: Document.document;\n if(!justPreload) {\n doc = this.greetingStickers.shift();\n this.greetingStickers.push(doc);\n }\n\n appDocsManager.downloadDoc(this.greetingStickers[0]); // preload next sticker\n\n return doc;\n });\n }\n\n public saveStickers(docs: Document[]) {\n forEachReverse(docs, (doc, idx) => {\n doc = appDocsManager.saveDoc(doc);\n\n if(!doc) docs.splice(idx, 1);\n else docs[idx] = doc;\n });\n }\n\n public async getStickerSet(set: MyStickerSetInput, params: Partial<{\n overwrite: boolean,\n useCache: boolean,\n saveById: boolean\n }> = {}): Promise {\n const id = set.id;\n if(this.getStickerSetPromises[id]) {\n return this.getStickerSetPromises[id];\n }\n\n return this.getStickerSetPromises[id] = new Promise(async(resolve) => {\n if(!params.overwrite) {\n const cachedSet = await this.storage.get(id);\n if(cachedSet && cachedSet.documents?.length && ((Date.now() - cachedSet.refreshTime) < CACHE_TIME || params.useCache)) {\n this.saveStickers(cachedSet.documents);\n resolve(cachedSet);\n delete this.getStickerSetPromises[id];\n return;\n }\n }\n\n try {\n const stickerSet = await apiManager.invokeApi('messages.getStickerSet', {\n stickerset: this.getStickerSetInput(set)\n });\n \n const saveById = params.saveById ? id : stickerSet.set.id;\n this.saveStickerSet(stickerSet, saveById);\n \n resolve(stickerSet);\n } catch(err) {\n resolve(null);\n }\n \n delete this.getStickerSetPromises[id];\n });\n }\n\n public getAnimatedEmojiStickerSet() {\n return this.getStickerSet({id: 'emoji'}, {saveById: true});\n }\n\n public async getRecentStickers(): Promise> {\n const res = await apiManager.invokeApiHashable('messages.getRecentStickers') as MessagesRecentStickers.messagesRecentStickers;\n\n this.saveStickers(res.stickers);\n\n return res;\n }\n\n public getAnimatedEmojiSticker(emoji: string) {\n const stickerSet = this.storage.getFromCache('emoji');\n if(!stickerSet || !stickerSet.documents) return undefined;\n\n emoji = emoji.replace(/\\ufe0f/g, '').replace(/🏻|🏼|🏽|🏾|🏿/g, '');\n const pack = stickerSet.packs.find(p => p.emoticon === emoji);\n return pack ? appDocsManager.getDoc(pack.documents[0]) : undefined;\n }\n\n public preloadAnimatedEmojiSticker(emoji: string) {\n return this.getAnimatedEmojiStickerSet().then(() => {\n const doc = this.getAnimatedEmojiSticker(emoji);\n if(doc) {\n return appDocsManager.downloadDoc(doc);\n }\n });\n }\n \n public saveStickerSet(res: Omit, id: string) {\n //console.log('stickers save set', res);w\n\n const newSet: MessagesStickerSet = {\n _: 'messages.stickerSet',\n set: res.set,\n packs: res.packs,\n documents: res.documents as Document[]\n };\n \n let stickerSet = this.storage.getFromCache(id);\n if(stickerSet) {\n Object.assign(stickerSet, newSet);\n } else {\n stickerSet = this.storage.setToCache(id, newSet);\n }\n\n this.saveStickers(res.documents);\n \n //console.log('stickers wrote', this.stickerSets);\n const needSave = stickerSet.set.installed_date || id === 'emoji';\n stickerSet.refreshTime = Date.now();\n this.storage.set({[id]: stickerSet}, !needSave);\n }\n\n public getStickerSetThumbDownloadOptions(stickerSet: StickerSet.stickerSet) {\n const thumb = stickerSet.thumbs.find(thumb => thumb._ === 'photoSize') as PhotoSize.photoSize;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: InputFileLocation.inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n thumb_version: stickerSet.thumb_version\n };\n\n return {dcId, location: input, size: thumb.size, mimeType: isAnimated ? 'application/x-tgsticker' : 'image/webp'};\n }\n\n /* public getStickerSetThumbURL(stickerSet: MTStickerSet) {\n const thumb = stickerSet.thumb;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n volume_id: thumb.location.volume_id,\n local_id: thumb.location.local_id\n };\n\n const url = getFileURL('document', this.getStickerSetThumbDownloadOptions(stickerSet));\n return url;\n\n //return promise;\n } */\n\n public getStickerSetInput(set: MyStickerSetInput): InputStickerSet {\n if(set.id === 'emoji') {\n return {\n _: 'inputStickerSetAnimatedEmoji'\n };\n } else if(!set.access_hash) {\n return {\n _: 'inputStickerSetShortName',\n short_name: set.id\n };\n } else {\n return {\n _: 'inputStickerSetID',\n id: set.id,\n access_hash: set.access_hash\n };\n }\n }\n\n public async getFeaturedStickers() {\n const res = await apiManager.invokeApiHashable('messages.getFeaturedStickers') as MessagesFeaturedStickers.messagesFeaturedStickers;\n \n res.sets.forEach(covered => {\n this.saveStickerSet({set: covered.set, documents: [], packs: []}, covered.set.id);\n });\n\n return res.sets;\n }\n\n public async toggleStickerSet(set: StickerSet.stickerSet) {\n if(set.installed_date) {\n const res = await apiManager.invokeApi('messages.uninstallStickerSet', {\n stickerset: this.getStickerSetInput(set)\n });\n\n if(res) {\n delete set.installed_date;\n rootScope.dispatchEvent('stickers_deleted', set);\n this.storage.delete(set.id, true);\n return true;\n }\n } else {\n const res = await apiManager.invokeApi('messages.installStickerSet', {\n stickerset: this.getStickerSetInput(set),\n archived: false\n });\n\n if(res) {\n set.installed_date = Date.now() / 1000 | 0;\n rootScope.dispatchEvent('stickers_installed', set);\n return true;\n }\n }\n\n return false;\n }\n\n public async searchStickerSets(query: string, excludeFeatured = true) {\n const flags = excludeFeatured ? 1 : 0;\n const res = await apiManager.invokeApiHashable('messages.searchStickerSets', {\n flags,\n exclude_featured: excludeFeatured || undefined,\n q: query\n }) as MessagesFoundStickerSets.messagesFoundStickerSets;\n\n res.sets.forEach(covered => {\n this.saveStickerSet({set: covered.set, documents: [], packs: []}, covered.set.id);\n });\n\n const foundSaved: StickerSetCovered[] = [];\n const cache = this.storage.getCache();\n for(let id in cache) {\n const {set} = cache[id];\n\n if(set.title.toLowerCase().includes(query.toLowerCase()) && !res.sets.find(c => c.set.id === set.id)) {\n foundSaved.push({_: 'stickerSetCovered', set, cover: null});\n }\n }\n\n return res.sets.concat(foundSaved);\n }\n\n public getAllStickers() {\n return apiManager.invokeApiHashable('messages.getAllStickers');\n }\n\n public preloadStickerSets() {\n return this.getAllStickers().then(allStickers => {\n return Promise.all((allStickers as MessagesAllStickers.messagesAllStickers).sets.map(set => this.getStickerSet(set, {useCache: true})));\n });\n }\n\n public getStickersByEmoticon(emoticon: string, includeOurStickers = true) {\n if(this.getStickersByEmoticonsPromises[emoticon]) return this.getStickersByEmoticonsPromises[emoticon];\n\n return this.getStickersByEmoticonsPromises[emoticon] = Promise.all([\n apiManager.invokeApiHashable('messages.getStickers', {\n emoticon\n }),\n includeOurStickers ? this.preloadStickerSets() : [],\n includeOurStickers ? this.getRecentStickers().then(res => res.packs) : []\n ]).then(([messagesStickers, installedSets, recentStickers]) => {\n const foundStickers = (messagesStickers as MessagesStickers.messagesStickers).stickers.map(sticker => appDocsManager.saveDoc(sticker));\n const cachedStickersAnimated: Document.document[] = [], cachedStickersStatic: Document.document[] = [];\n\n //console.log('getStickersByEmoticon', messagesStickers, installedSets, recentStickers);\n\n const iteratePacks = (packs: StickerPack.stickerPack[]) => {\n for(const pack of packs) {\n if(pack.emoticon.includes(emoticon)) {\n for(const docId of pack.documents) {\n const doc = appDocsManager.getDoc(docId);\n (doc.animated ? cachedStickersAnimated : cachedStickersStatic).push(doc);\n }\n }\n }\n };\n\n iteratePacks(recentStickers);\n\n for(const set of installedSets) {\n iteratePacks(set.packs);\n }\n\n const stickers = [...new Set(cachedStickersAnimated.concat(cachedStickersStatic, foundStickers))]/* .filter(doc => !doc.animated) */;\n\n return stickers;\n });\n }\n}\n\nconst appStickersManager = new AppStickersManager();\nMOUNT_CLASS_TO.appStickersManager = appStickersManager;\nexport default appStickersManager;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type Chat from './chat/chat';\r\nimport { getEmojiToneIndex } from '../vendor/emoji';\r\nimport { readBlobAsText } from '../helpers/blob';\r\nimport { deferredPromise } from '../helpers/cancellablePromise';\r\nimport { formatFullSentTime } from '../helpers/date';\r\nimport mediaSizes, { ScreenSize } from '../helpers/mediaSizes';\r\nimport { formatBytes } from '../helpers/number';\r\nimport { IS_SAFARI } from '../environment/userAgent';\r\nimport { Message, PhotoSize, StickerSet } from '../layer';\r\nimport appDocsManager, { MyDocument } from \"../lib/appManagers/appDocsManager\";\r\nimport appMessagesManager from '../lib/appManagers/appMessagesManager';\r\nimport appPhotosManager, { MyPhoto } from '../lib/appManagers/appPhotosManager';\r\nimport LottieLoader from '../lib/lottieLoader';\r\nimport webpWorkerController from '../lib/webp/webpWorkerController';\r\nimport animationIntersector from './animationIntersector';\r\nimport appMediaPlaybackController, { MediaSearchContext } from './appMediaPlaybackController';\r\nimport AudioElement, { findAudioTargets as findMediaTargets } from './audio';\r\nimport ReplyContainer from './chat/replyContainer';\r\nimport { Layouter, RectPart } from './groupedLayout';\r\nimport LazyLoadQueue from './lazyLoadQueue';\r\nimport PollElement from './poll';\r\nimport ProgressivePreloader from './preloader';\r\nimport './middleEllipsis';\r\nimport RichTextProcessor from '../lib/richtextprocessor';\r\nimport appImManager from '../lib/appManagers/appImManager';\r\nimport { SearchSuperContext } from './appSearchSuper.';\r\nimport rootScope from '../lib/rootScope';\r\nimport { onMediaLoad } from '../helpers/files';\r\nimport { animateSingle } from '../helpers/animation';\r\nimport renderImageFromUrl from '../helpers/dom/renderImageFromUrl';\r\nimport sequentialDom from '../helpers/sequentialDom';\r\nimport { fastRaf } from '../helpers/schedulers';\r\nimport appDownloadManager, { DownloadBlob, ThumbCache } from '../lib/appManagers/appDownloadManager';\r\nimport appStickersManager from '../lib/appManagers/appStickersManager';\r\nimport { cancelEvent } from '../helpers/dom/cancelEvent';\r\nimport { attachClickEvent, simulateClickEvent } from '../helpers/dom/clickEvent';\r\nimport isInDOM from '../helpers/dom/isInDOM';\r\nimport lottieLoader from '../lib/lottieLoader';\r\nimport { clearBadCharsAndTrim } from '../helpers/cleanSearchText';\r\nimport blur from '../helpers/blur';\r\nimport IS_WEBP_SUPPORTED from '../environment/webpSupport';\r\nimport MEDIA_MIME_TYPES_SUPPORTED from '../environment/mediaMimeTypesSupport';\r\nimport { MiddleEllipsisElement } from './middleEllipsis';\r\nimport { joinElementsWith } from '../lib/langPack';\r\nimport throttleWithRaf from '../helpers/schedulers/throttleWithRaf';\r\n\r\nconst MAX_VIDEO_AUTOPLAY_SIZE = 50 * 1024 * 1024; // 50 MB\r\n\r\nlet roundVideoCircumference = 0;\r\nmediaSizes.addEventListener('changeScreen', (from, to) => {\r\n if(to === ScreenSize.mobile || from === ScreenSize.mobile) {\r\n const elements = Array.from(document.querySelectorAll('.media-round .progress-ring')) as SVGSVGElement[];\r\n const width = mediaSizes.active.round.width;\r\n const halfSize = width / 2;\r\n const radius = halfSize - 7;\r\n roundVideoCircumference = 2 * Math.PI * radius;\r\n elements.forEach(element => {\r\n element.setAttributeNS(null, 'width', '' + width);\r\n element.setAttributeNS(null, 'height', '' + width);\r\n\r\n const circle = element.firstElementChild as SVGCircleElement;\r\n circle.setAttributeNS(null, 'cx', '' + halfSize);\r\n circle.setAttributeNS(null, 'cy', '' + halfSize);\r\n circle.setAttributeNS(null, 'r', '' + radius);\r\n\r\n circle.style.strokeDasharray = roundVideoCircumference + ' ' + roundVideoCircumference;\r\n circle.style.strokeDashoffset = '' + roundVideoCircumference;\r\n });\r\n }\r\n});\r\n\r\nexport function wrapVideo({doc, container, message, boxWidth, boxHeight, withTail, isOut, middleware, lazyLoadQueue, noInfo, group, onlyPreview, withoutPreloader, loadPromises, noPlayButton, noAutoDownload, size, searchContext}: {\r\n doc: MyDocument, \r\n container?: HTMLElement, \r\n message?: Message.message, \r\n boxWidth?: number, \r\n boxHeight?: number, \r\n withTail?: boolean, \r\n isOut?: boolean,\r\n middleware?: () => boolean,\r\n lazyLoadQueue?: LazyLoadQueue,\r\n noInfo?: true,\r\n noPlayButton?: boolean,\r\n group?: string,\r\n onlyPreview?: boolean,\r\n withoutPreloader?: boolean,\r\n loadPromises?: Promise[],\r\n noAutoDownload?: boolean,\r\n size?: PhotoSize,\r\n searchContext?: MediaSearchContext,\r\n}) {\r\n const isAlbumItem = !(boxWidth && boxHeight);\r\n const canAutoplay = (doc.type !== 'video' || (doc.size <= MAX_VIDEO_AUTOPLAY_SIZE && !isAlbumItem)) \r\n && (doc.type === 'gif' ? rootScope.settings.autoPlay.gifs : rootScope.settings.autoPlay.videos);\r\n let spanTime: HTMLElement, spanPlay: HTMLElement;\r\n\r\n if(!noInfo) {\r\n spanTime = document.createElement('span');\r\n spanTime.classList.add('video-time');\r\n container.append(spanTime);\r\n \r\n let needPlayButton = false;\r\n if(doc.type !== 'gif') {\r\n spanTime.innerText = (doc.duration + '').toHHMMSS(false);\r\n\r\n if(!noPlayButton && doc.type !== 'round') {\r\n if(canAutoplay && !noAutoDownload) {\r\n spanTime.classList.add('tgico', 'can-autoplay');\r\n } else {\r\n needPlayButton = true;\r\n }\r\n }\r\n } else {\r\n spanTime.innerText = 'GIF';\r\n\r\n if(!canAutoplay && !noPlayButton) {\r\n needPlayButton = true;\r\n noAutoDownload = undefined;\r\n }\r\n }\r\n\r\n if(needPlayButton) {\r\n spanPlay = document.createElement('span');\r\n spanPlay.classList.add('video-play', 'tgico-largeplay', 'btn-circle', 'position-center');\r\n container.append(spanPlay);\r\n }\r\n }\r\n\r\n let res: {\r\n thumb?: typeof photoRes,\r\n loadPromise: Promise\r\n } = {} as any;\r\n\r\n if(doc.mime_type === 'image/gif') {\r\n const photoRes = wrapPhoto({\r\n photo: doc, \r\n message, \r\n container, \r\n boxWidth, \r\n boxHeight, \r\n withTail, \r\n isOut, \r\n lazyLoadQueue, \r\n middleware,\r\n withoutPreloader,\r\n loadPromises,\r\n noAutoDownload,\r\n size\r\n });\r\n\r\n res.thumb = photoRes;\r\n res.loadPromise = photoRes.loadPromises.full;\r\n return res;\r\n }\r\n\r\n /* const video = doc.type === 'round' ? appMediaPlaybackController.addMedia(doc, message.mid) as HTMLVideoElement : document.createElement('video');\r\n if(video.parentElement) {\r\n video.remove();\r\n } */\r\n\r\n const video = document.createElement('video');\r\n video.classList.add('media-video');\r\n video.setAttribute('playsinline', 'true');\r\n video.muted = true;\r\n if(doc.type === 'round') {\r\n const divRound = document.createElement('div');\r\n divRound.classList.add('media-round', 'z-depth-1');\r\n divRound.dataset.mid = '' + message.mid;\r\n divRound.dataset.peerId = '' + message.peerId;\r\n (divRound as any).message = message;\r\n\r\n const size = mediaSizes.active.round;\r\n const halfSize = size.width / 2;\r\n const strokeWidth = 3.5;\r\n const radius = halfSize - (strokeWidth * 2);\r\n divRound.innerHTML = `\r\n \r\n `;\r\n\r\n const circle = divRound.firstElementChild.firstElementChild as SVGCircleElement;\r\n if(!roundVideoCircumference) {\r\n roundVideoCircumference = 2 * Math.PI * radius;\r\n }\r\n circle.style.strokeDasharray = roundVideoCircumference + ' ' + roundVideoCircumference;\r\n circle.style.strokeDashoffset = '' + roundVideoCircumference;\r\n \r\n spanTime.classList.add('tgico');\r\n\r\n const isUnread = message.pFlags.media_unread;\r\n if(isUnread) {\r\n divRound.classList.add('is-unread');\r\n }\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = canvas.height = doc.w/* * window.devicePixelRatio */;\r\n\r\n divRound.prepend(canvas, spanTime);\r\n divRound.append(video);\r\n container.append(divRound);\r\n\r\n const ctx = canvas.getContext('2d');\r\n /* ctx.beginPath();\r\n ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2);\r\n ctx.clip(); */\r\n\r\n const onLoad = () => {\r\n const message: Message.message = (divRound as any).message;\r\n const globalVideo = appMediaPlaybackController.addMedia(message, !noAutoDownload) as HTMLVideoElement;\r\n const clear = () => {\r\n (appImManager.chat.setPeerPromise || Promise.resolve()).finally(() => {\r\n if(isInDOM(globalVideo)) {\r\n return;\r\n }\r\n \r\n globalVideo.removeEventListener('play', onPlay);\r\n globalVideo.removeEventListener('timeupdate', throttledTimeUpdate);\r\n globalVideo.removeEventListener('pause', onPaused);\r\n globalVideo.removeEventListener('ended', onEnded);\r\n });\r\n };\r\n \r\n const onFrame = () => {\r\n ctx.drawImage(globalVideo, 0, 0);\r\n \r\n const offset = roundVideoCircumference - globalVideo.currentTime / globalVideo.duration * roundVideoCircumference;\r\n circle.style.strokeDashoffset = '' + offset;\r\n \r\n return !globalVideo.paused;\r\n };\r\n\r\n const onTimeUpdate = () => {\r\n if(!globalVideo.duration) {\r\n return;\r\n }\r\n \r\n if(!isInDOM(globalVideo)) {\r\n clear();\r\n return;\r\n }\r\n\r\n if(globalVideo.paused) {\r\n onFrame();\r\n }\r\n \r\n spanTime.innerText = (globalVideo.duration - globalVideo.currentTime + '').toHHMMSS(false);\r\n };\r\n\r\n const throttledTimeUpdate = throttleWithRaf(onTimeUpdate);\r\n \r\n const onPlay = () => {\r\n video.classList.add('hide');\r\n divRound.classList.remove('is-paused');\r\n animateSingle(onFrame, canvas);\r\n \r\n if(preloader && preloader.preloader && preloader.preloader.classList.contains('manual')) {\r\n preloader.onClick();\r\n }\r\n };\r\n \r\n const onPaused = () => {\r\n if(!isInDOM(globalVideo)) {\r\n clear();\r\n return;\r\n }\r\n \r\n divRound.classList.add('is-paused');\r\n };\r\n \r\n const onEnded = () => {\r\n video.classList.remove('hide');\r\n divRound.classList.add('is-paused');\r\n \r\n video.currentTime = 0;\r\n spanTime.innerText = ('' + globalVideo.duration).toHHMMSS(false);\r\n \r\n if(globalVideo.currentTime) {\r\n globalVideo.currentTime = 0;\r\n }\r\n };\r\n \r\n globalVideo.addEventListener('play', onPlay);\r\n globalVideo.addEventListener('timeupdate', throttledTimeUpdate);\r\n globalVideo.addEventListener('pause', onPaused);\r\n globalVideo.addEventListener('ended', onEnded);\r\n \r\n attachClickEvent(canvas, (e) => {\r\n cancelEvent(e);\r\n \r\n // ! костыль\r\n if(preloader && !preloader.detached) {\r\n preloader.onClick();\r\n }\r\n \r\n // ! can't use it here. on Safari iOS video won't start.\r\n /* if(globalVideo.readyState < 2) {\r\n return;\r\n } */\r\n \r\n if(globalVideo.paused) {\r\n if(appMediaPlaybackController.setSearchContext(searchContext)) {\r\n const [prev, next] = findMediaTargets(divRound, searchContext.useSearch);\r\n appMediaPlaybackController.setTargets({peerId: message.peerId, mid: message.mid}, prev, next);\r\n }\r\n \r\n globalVideo.play();\r\n } else {\r\n globalVideo.pause();\r\n }\r\n });\r\n \r\n if(globalVideo.paused) {\r\n if(globalVideo.duration && globalVideo.currentTime !== globalVideo.duration && globalVideo.currentTime > 0) {\r\n onFrame();\r\n onTimeUpdate();\r\n video.classList.add('hide');\r\n } else {\r\n onPaused();\r\n }\r\n } else {\r\n onPlay();\r\n }\r\n };\r\n\r\n if(message.pFlags.is_outgoing) {\r\n (divRound as any).onLoad = onLoad;\r\n divRound.dataset.isOutgoing = '1';\r\n } else {\r\n onLoad();\r\n }\r\n } else {\r\n video.autoplay = true; // для safari\r\n }\r\n\r\n let photoRes: ReturnType;\r\n if(message) {\r\n photoRes = wrapPhoto({\r\n photo: doc, \r\n message, \r\n container, \r\n boxWidth, \r\n boxHeight, \r\n withTail, \r\n isOut, \r\n lazyLoadQueue, \r\n middleware,\r\n withoutPreloader: true,\r\n loadPromises,\r\n noAutoDownload,\r\n size\r\n });\r\n\r\n res.thumb = photoRes;\r\n\r\n if((!canAutoplay && doc.type !== 'gif') || onlyPreview) {\r\n res.loadPromise = photoRes.loadPromises.full;\r\n return res;\r\n }\r\n\r\n if(withTail) {\r\n const foreignObject = (photoRes.images.thumb || photoRes.images.full).parentElement;\r\n video.width = +foreignObject.getAttributeNS(null, 'width');\r\n video.height = +foreignObject.getAttributeNS(null, 'height');\r\n foreignObject.append(video);\r\n }\r\n } else { // * gifs masonry\r\n const gotThumb = appDocsManager.getThumb(doc, false);\r\n if(gotThumb) {\r\n gotThumb.promise.then(() => {\r\n video.poster = gotThumb.cacheContext.url;\r\n });\r\n }\r\n }\r\n\r\n if(!video.parentElement && container) {\r\n (photoRes?.aspecter || container).append(video);\r\n }\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n\r\n const isUpload = !!(message?.media as any)?.preloader;\r\n let preloader: ProgressivePreloader;\r\n if(isUpload) { // means upload\r\n preloader = (message.media as any).preloader as ProgressivePreloader;\r\n preloader.attach(container, false);\r\n noAutoDownload = undefined;\r\n } else if(!cacheContext.downloaded && !doc.supportsStreaming) {\r\n preloader = new ProgressivePreloader({\r\n attachMethod: 'prepend'\r\n });\r\n } else if(doc.supportsStreaming) {\r\n preloader = new ProgressivePreloader({\r\n cancelable: false,\r\n attachMethod: 'prepend'\r\n });\r\n }\r\n\r\n const renderDeferred = deferredPromise();\r\n video.addEventListener('error', (e) => {\r\n if(video.error.code !== 4) {\r\n console.error(\"Error \" + video.error.code + \"; details: \" + video.error.message);\r\n }\r\n \r\n if(preloader && !isUpload) {\r\n preloader.detach();\r\n }\r\n\r\n if(!renderDeferred.isFulfilled) {\r\n renderDeferred.resolve();\r\n }\r\n }, {once: true});\r\n\r\n onMediaLoad(video).then(() => {\r\n if(group) {\r\n animationIntersector.addAnimation(video, group);\r\n }\r\n\r\n if(preloader && !isUpload) {\r\n preloader.detach();\r\n }\r\n\r\n renderDeferred.resolve();\r\n });\r\n\r\n if(doc.type === 'video') {\r\n video.addEventListener('timeupdate', () => {\r\n spanTime.innerText = (video.duration - video.currentTime + '').toHHMMSS(false);\r\n });\r\n }\r\n\r\n video.muted = true;\r\n video.loop = true;\r\n //video.play();\r\n video.autoplay = true;\r\n\r\n let loadPhotoThumbFunc = noAutoDownload && photoRes?.preloader?.loadFunc;\r\n const load = () => {\r\n if(preloader && noAutoDownload && !withoutPreloader) {\r\n preloader.construct();\r\n preloader.setManual();\r\n }\r\n\r\n let loadPromise: Promise = Promise.resolve();\r\n if(preloader && !isUpload) {\r\n if(!cacheContext.downloaded && !doc.supportsStreaming) {\r\n const promise = loadPromise = appDocsManager.downloadDoc(doc, lazyLoadQueue?.queueId, noAutoDownload);\r\n preloader.attach(container, false, promise);\r\n } else if(doc.supportsStreaming) {\r\n if(noAutoDownload) {\r\n loadPromise = Promise.reject();\r\n } else if(!cacheContext.downloaded) { // * check for uploading video\r\n preloader.attach(container, false, null);\r\n video.addEventListener(IS_SAFARI ? 'timeupdate' : 'canplay', () => {\r\n preloader.detach();\r\n }, {once: true});\r\n }\r\n }\r\n }\r\n\r\n if(!noAutoDownload && loadPhotoThumbFunc) {\r\n loadPhotoThumbFunc();\r\n loadPhotoThumbFunc = null;\r\n }\r\n\r\n noAutoDownload = undefined;\r\n\r\n loadPromise.then(() => {\r\n if(middleware && !middleware()) {\r\n renderDeferred.resolve();\r\n return;\r\n }\r\n\r\n if(doc.type === 'round') {\r\n appMediaPlaybackController.resolveWaitingForLoadMedia(message.peerId, message.mid, message.pFlags.is_scheduled);\r\n }\r\n\r\n renderImageFromUrl(video, cacheContext.url);\r\n }, () => {});\r\n\r\n return {download: loadPromise, render: renderDeferred};\r\n };\r\n\r\n if(preloader && !isUpload) {\r\n preloader.setDownloadFunction(load);\r\n }\r\n\r\n /* if(doc.size >= 20e6 && !doc.downloaded) {\r\n let downloadDiv = document.createElement('div');\r\n downloadDiv.classList.add('download');\r\n\r\n let span = document.createElement('span');\r\n span.classList.add('btn-circle', 'tgico-download');\r\n downloadDiv.append(span);\r\n\r\n downloadDiv.addEventListener('click', () => {\r\n downloadDiv.remove();\r\n loadVideo();\r\n });\r\n\r\n container.prepend(downloadDiv);\r\n\r\n return;\r\n } */\r\n\r\n if(doc.type === 'gif' && !canAutoplay) {\r\n attachClickEvent(container, (e) => {\r\n cancelEvent(e);\r\n spanPlay.remove();\r\n load();\r\n }, {capture: true, once: true});\r\n } else {\r\n res.loadPromise = !lazyLoadQueue ? load().render : (lazyLoadQueue.push({div: container, load: () => load().render}), Promise.resolve());\r\n }\r\n\r\n return res;\r\n}\r\n\r\nrootScope.addEventListener('download_start', (docId) => {\r\n const elements = Array.from(document.querySelectorAll(`.document[data-doc-id=\"${docId}\"]`)) as HTMLElement[];\r\n elements.forEach(element => {\r\n if(element.querySelector('.preloader-container.manual')) {\r\n simulateClickEvent(element);\r\n }\r\n });\r\n});\r\n\r\nexport function wrapDocument({message, withTime, fontWeight, voiceAsMusic, showSender, searchContext, loadPromises, noAutoDownload, lazyLoadQueue}: {\r\n message: any, \r\n withTime?: boolean,\r\n fontWeight?: number,\r\n voiceAsMusic?: boolean,\r\n showSender?: boolean,\r\n searchContext?: MediaSearchContext,\r\n loadPromises?: Promise[],\r\n noAutoDownload?: boolean,\r\n lazyLoadQueue?: LazyLoadQueue\r\n}): HTMLElement {\r\n if(!fontWeight) fontWeight = 500;\r\n\r\n const doc = (message.media.document || message.media.webpage.document) as MyDocument;\r\n const uploading = message.pFlags.is_outgoing && message.media?.preloader;\r\n if(doc.type === 'audio' || doc.type === 'voice' || doc.type === 'round') {\r\n const audioElement = new AudioElement();\r\n audioElement.withTime = withTime;\r\n audioElement.message = message;\r\n audioElement.noAutoDownload = noAutoDownload;\r\n audioElement.lazyLoadQueue = lazyLoadQueue;\r\n audioElement.loadPromises = loadPromises;\r\n \r\n if(voiceAsMusic) audioElement.voiceAsMusic = voiceAsMusic;\r\n if(searchContext) audioElement.searchContext = searchContext;\r\n if(showSender) audioElement.showSender = showSender;\r\n if(uploading) audioElement.preloader = message.media.preloader;\r\n\r\n audioElement.dataset.fontWeight = '' + fontWeight;\r\n audioElement.render();\r\n return audioElement;\r\n }\r\n\r\n let extSplitted = doc.file_name ? doc.file_name.split('.') : '';\r\n let ext = '';\r\n ext = extSplitted.length > 1 && Array.isArray(extSplitted) ? \r\n clearBadCharsAndTrim(extSplitted.pop().split(' ', 1)[0].toLowerCase()) : \r\n 'file';\r\n\r\n let docDiv = document.createElement('div');\r\n docDiv.classList.add('document', `ext-${ext}`);\r\n docDiv.dataset.docId = doc.id;\r\n\r\n const icoDiv = document.createElement('div');\r\n icoDiv.classList.add('document-ico');\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n if((doc.thumbs?.length || (message.pFlags.is_outgoing && cacheContext.url && doc.type === 'photo')) && doc.mime_type !== 'image/gif') {\r\n docDiv.classList.add('document-with-thumb');\r\n\r\n let imgs: HTMLImageElement[] = [];\r\n if(message.pFlags.is_outgoing) {\r\n icoDiv.innerHTML = ``;\r\n imgs.push(icoDiv.firstElementChild as HTMLImageElement);\r\n } else {\r\n const wrapped = wrapPhoto({\r\n photo: doc, \r\n message: null, \r\n container: icoDiv, \r\n boxWidth: 54, \r\n boxHeight: 54,\r\n loadPromises,\r\n withoutPreloader: true,\r\n lazyLoadQueue\r\n });\r\n icoDiv.style.width = icoDiv.style.height = '';\r\n if(wrapped.images.thumb) imgs.push(wrapped.images.thumb);\r\n if(wrapped.images.full) imgs.push(wrapped.images.full);\r\n }\r\n\r\n imgs.forEach(img => img.classList.add('document-thumb'));\r\n } else {\r\n icoDiv.innerText = ext;\r\n }\r\n\r\n //let fileName = stringMiddleOverflow(doc.file_name || 'Unknown.file', 26);\r\n let fileName = doc.fileName || 'Unknown.file';\r\n const descriptionEl = document.createElement('div');\r\n descriptionEl.classList.add('document-description');\r\n const descriptionParts: (HTMLElement | string | DocumentFragment)[] = [formatBytes(doc.size)];\r\n \r\n if(withTime) {\r\n descriptionParts.push(formatFullSentTime(message.date));\r\n }\r\n\r\n if(showSender) {\r\n descriptionParts.push(appMessagesManager.wrapSenderToPeer(message));\r\n }\r\n\r\n docDiv.innerHTML = `\r\n ${cacheContext.downloaded && !uploading ? '' : `
`}\r\n
\r\n
\r\n `;\r\n\r\n const nameDiv = docDiv.querySelector('.document-name') as HTMLElement;\r\n const middleEllipsisEl = new MiddleEllipsisElement();\r\n middleEllipsisEl.dataset.fontWeight = '' + fontWeight;\r\n middleEllipsisEl.innerHTML = fileName;\r\n\r\n nameDiv.append(middleEllipsisEl);\r\n\r\n if(showSender) {\r\n nameDiv.append(appMessagesManager.wrapSentTime(message));\r\n }\r\n\r\n const sizeDiv = docDiv.querySelector('.document-size') as HTMLElement;\r\n sizeDiv.append(...joinElementsWith(descriptionParts, ' · '));\r\n\r\n docDiv.prepend(icoDiv);\r\n\r\n if(!uploading && message.pFlags.is_outgoing) {\r\n return docDiv;\r\n }\r\n\r\n let downloadDiv: HTMLElement, preloader: ProgressivePreloader = null;\r\n const onLoad = () => {\r\n if(downloadDiv) {\r\n downloadDiv.classList.add('downloaded');\r\n const _downloadDiv = downloadDiv;\r\n setTimeout(() => {\r\n _downloadDiv.remove();\r\n }, 200);\r\n downloadDiv = null;\r\n }\r\n\r\n if(preloader) {\r\n preloader = null;\r\n }\r\n };\r\n\r\n const load = (e: Event) => {\r\n const save = !e || e.isTrusted;\r\n const doc = appDocsManager.getDoc(docDiv.dataset.docId);\r\n let download: DownloadBlob;\r\n const queueId = appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : undefined;\r\n if(!save) {\r\n download = appDocsManager.downloadDoc(doc, queueId);\r\n } else if(doc.type === 'pdf') {\r\n download = appDocsManager.downloadDoc(doc, queueId);\r\n download.then(() => {\r\n setTimeout(() => { // wait for preloader animation end\r\n const url = appDownloadManager.getCacheContext(doc).url;\r\n window.open(url);\r\n }, rootScope.settings.animationsEnabled ? 250 : 0);\r\n });\r\n } else if(MEDIA_MIME_TYPES_SUPPORTED.has(doc.mime_type) && doc.thumbs?.length) {\r\n download = appDocsManager.downloadDoc(doc, queueId);\r\n } else {\r\n download = appDocsManager.saveDocFile(doc, queueId);\r\n }\r\n\r\n if(downloadDiv) {\r\n download.then(onLoad);\r\n preloader.attach(downloadDiv, true, download);\r\n }\r\n\r\n return {download};\r\n };\r\n\r\n if(appDocsManager.downloading.has(doc.id)) {\r\n downloadDiv = docDiv.querySelector('.document-download');\r\n preloader = new ProgressivePreloader();\r\n preloader.attach(downloadDiv, false, appDocsManager.downloading.get(doc.id));\r\n } else if(!(cacheContext.downloaded && !uploading)) {\r\n downloadDiv = docDiv.querySelector('.document-download');\r\n preloader = message.media.preloader as ProgressivePreloader;\r\n\r\n if(!preloader) {\r\n preloader = new ProgressivePreloader();\r\n\r\n preloader.construct();\r\n preloader.setManual();\r\n preloader.attach(downloadDiv);\r\n preloader.setDownloadFunction(load);\r\n } else {\r\n preloader.attach(downloadDiv);\r\n message.media.promise.then(onLoad);\r\n }\r\n }\r\n\r\n attachClickEvent(docDiv, (e) => {\r\n if(preloader) {\r\n preloader.onClick(e);\r\n } else {\r\n load(e);\r\n }\r\n });\r\n \r\n return docDiv;\r\n}\r\n\r\n/* function wrapMediaWithTail(photo: MyPhoto | MyDocument, message: {mid: number, message: string}, container: HTMLElement, boxWidth: number, boxHeight: number, isOut: boolean) {\r\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svg.classList.add('bubble__media-container', isOut ? 'is-out' : 'is-in');\r\n \r\n const foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", 'foreignObject');\r\n\r\n const gotThumb = appPhotosManager.getStrippedThumbIfNeeded(photo, true);\r\n if(gotThumb) {\r\n foreignObject.append(gotThumb.image);\r\n }\r\n appPhotosManager.setAttachmentSize(photo, foreignObject, boxWidth, boxHeight);\r\n \r\n const width = +foreignObject.getAttributeNS(null, 'width');\r\n const height = +foreignObject.getAttributeNS(null, 'height');\r\n\r\n svg.setAttributeNS(null, 'width', '' + width);\r\n svg.setAttributeNS(null, 'height', '' + height);\r\n\r\n svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height);\r\n svg.setAttributeNS(null, 'preserveAspectRatio', 'none');\r\n\r\n const clipId = 'clip' + message.mid + '_' + nextRandomInt(9999);\r\n svg.dataset.clipId = clipId;\r\n \r\n const defs = document.createElementNS(\"http://www.w3.org/2000/svg\", 'defs');\r\n let clipPathHTML: string = '';\r\n \r\n if(message.message) {\r\n //clipPathHTML += ``;\r\n } else {\r\n if(isOut) {\r\n clipPathHTML += `\r\n \r\n \r\n `;\r\n } else {\r\n clipPathHTML += `\r\n \r\n \r\n `;\r\n }\r\n }\r\n\r\n defs.innerHTML = `${clipPathHTML}`;\r\n \r\n container.style.width = parseInt(container.style.width) - 9 + 'px';\r\n container.classList.add('with-tail');\r\n\r\n svg.append(defs, foreignObject);\r\n container.append(svg);\r\n\r\n let img = foreignObject.firstElementChild as HTMLImageElement;\r\n if(!img) {\r\n foreignObject.append(img = new Image());\r\n }\r\n\r\n return img;\r\n} */\r\n\r\nexport function wrapPhoto({photo, message, container, boxWidth, boxHeight, withTail, isOut, lazyLoadQueue, middleware, size, withoutPreloader, loadPromises, noAutoDownload, noBlur, noThumb, noFadeIn, blurAfter}: {\r\n photo: MyPhoto | MyDocument, \r\n message?: any, \r\n container: HTMLElement, \r\n boxWidth?: number, \r\n boxHeight?: number, \r\n withTail?: boolean, \r\n isOut?: boolean, \r\n lazyLoadQueue?: LazyLoadQueue, \r\n middleware?: () => boolean, \r\n size?: PhotoSize,\r\n withoutPreloader?: boolean,\r\n loadPromises?: Promise[],\r\n noAutoDownload?: boolean,\r\n noBlur?: boolean,\r\n noThumb?: boolean,\r\n noFadeIn?: boolean,\r\n blurAfter?: boolean,\r\n}) {\r\n if(!((photo as MyPhoto).sizes || (photo as MyDocument).thumbs)) {\r\n if(boxWidth && boxHeight && !size && photo._ === 'document') {\r\n appPhotosManager.setAttachmentSize(photo, container, boxWidth, boxHeight, undefined, message);\r\n }\r\n\r\n return {\r\n loadPromises: {\r\n thumb: Promise.resolve(),\r\n full: Promise.resolve()\r\n },\r\n images: {\r\n thumb: null,\r\n full: null\r\n },\r\n preloader: null,\r\n aspecter: null\r\n };\r\n }\r\n\r\n if(!size) {\r\n if(boxWidth === undefined) boxWidth = mediaSizes.active.regular.width;\r\n if(boxHeight === undefined) boxHeight = mediaSizes.active.regular.height;\r\n }\r\n\r\n container.classList.add('media-container');\r\n let aspecter = container;\r\n\r\n let isFit = true;\r\n let loadThumbPromise: Promise = Promise.resolve();\r\n let thumbImage: HTMLImageElement;\r\n let image: HTMLImageElement;\r\n let cacheContext: ThumbCache;\r\n // if(withTail) {\r\n // image = wrapMediaWithTail(photo, message, container, boxWidth, boxHeight, isOut);\r\n // } else {\r\n image = new Image();\r\n\r\n if(boxWidth && boxHeight && !size) { // !album\r\n const set = appPhotosManager.setAttachmentSize(photo, container, boxWidth, boxHeight, undefined, message);\r\n size = set.photoSize;\r\n isFit = set.isFit;\r\n cacheContext = appDownloadManager.getCacheContext(photo, size.type);\r\n\r\n if(!isFit) {\r\n aspecter = document.createElement('div');\r\n aspecter.classList.add('media-container-aspecter');\r\n aspecter.style.width = set.size.width + 'px';\r\n aspecter.style.height = set.size.height + 'px';\r\n\r\n const gotThumb = appPhotosManager.getStrippedThumbIfNeeded(photo, cacheContext, !noBlur, true);\r\n if(gotThumb) {\r\n loadThumbPromise = gotThumb.loadPromise;\r\n const thumbImage = gotThumb.image; // local scope\r\n thumbImage.classList.add('media-photo');\r\n container.append(thumbImage);\r\n } else {\r\n const res = wrapPhoto({\r\n container,\r\n message,\r\n photo,\r\n boxWidth: 0,\r\n boxHeight: 0,\r\n size,\r\n lazyLoadQueue,\r\n isOut,\r\n loadPromises,\r\n middleware,\r\n withoutPreloader,\r\n withTail,\r\n noAutoDownload,\r\n noBlur,\r\n noThumb: true,\r\n blurAfter: true\r\n //noFadeIn: true\r\n });\r\n const thumbImage = res.images.full;\r\n thumbImage.classList.add('media-photo', 'thumbnail');\r\n //container.append(thumbImage);\r\n }\r\n\r\n container.classList.add('media-container-fitted');\r\n container.append(aspecter);\r\n }\r\n } else {\r\n if(!size) {\r\n size = appPhotosManager.choosePhotoSize(photo, boxWidth, boxHeight, true);\r\n }\r\n \r\n cacheContext = appDownloadManager.getCacheContext(photo, size?.type);\r\n }\r\n\r\n if(!noThumb) {\r\n const gotThumb = appPhotosManager.getStrippedThumbIfNeeded(photo, cacheContext, !noBlur);\r\n if(gotThumb) {\r\n loadThumbPromise = Promise.all([loadThumbPromise, gotThumb.loadPromise]);\r\n thumbImage = gotThumb.image;\r\n thumbImage.classList.add('media-photo');\r\n aspecter.append(thumbImage);\r\n }\r\n }\r\n // }\r\n\r\n image.classList.add('media-photo');\r\n \r\n //console.log('wrapPhoto downloaded:', photo, photo.downloaded, container);\r\n\r\n const needFadeIn = (thumbImage || !cacheContext.downloaded) && rootScope.settings.animationsEnabled && !noFadeIn;\r\n\r\n let preloader: ProgressivePreloader;\r\n if(message?.media?.preloader && !withoutPreloader) { // means upload\r\n preloader = message.media.preloader;\r\n preloader.attach(container);\r\n noAutoDownload = undefined;\r\n } else if(!cacheContext.downloaded) {\r\n preloader = new ProgressivePreloader({\r\n attachMethod: 'prepend'\r\n });\r\n }\r\n\r\n const getDownloadPromise = () => {\r\n const promise = photo._ === 'document' && photo.mime_type === 'image/gif' ? \r\n appDocsManager.downloadDoc(photo, /* undefined, */lazyLoadQueue?.queueId) : \r\n appPhotosManager.preloadPhoto(photo, size, lazyLoadQueue?.queueId, noAutoDownload);\r\n\r\n return promise;\r\n };\r\n\r\n const renderOnLoad = (url: string) => {\r\n return renderImageWithFadeIn(container, image, url, needFadeIn, aspecter, thumbImage);\r\n };\r\n\r\n const onLoad = (): Promise => {\r\n if(middleware && !middleware()) return Promise.resolve();\r\n\r\n if(blurAfter) {\r\n return blur(cacheContext.url, 12).then(url => {\r\n return renderOnLoad(url);\r\n });\r\n }\r\n\r\n return renderOnLoad(cacheContext.url);\r\n };\r\n\r\n let loadPromise: Promise;\r\n const canAttachPreloader = (\r\n (size as PhotoSize.photoSize).w >= 150 && \r\n (size as PhotoSize.photoSize).h >= 150\r\n ) || noAutoDownload;\r\n const load = () => {\r\n if(noAutoDownload && !withoutPreloader && preloader) {\r\n preloader.construct();\r\n preloader.setManual();\r\n }\r\n\r\n const promise = getDownloadPromise();\r\n\r\n if(preloader && \r\n !cacheContext.downloaded && \r\n !withoutPreloader && \r\n canAttachPreloader\r\n ) {\r\n preloader.attach(container, false, promise);\r\n }\r\n\r\n noAutoDownload = undefined;\r\n\r\n const renderPromise = promise.then(onLoad);\r\n renderPromise.catch(() => {});\r\n return {download: promise, render: renderPromise};\r\n };\r\n\r\n if(preloader) {\r\n preloader.setDownloadFunction(load);\r\n }\r\n \r\n if(cacheContext.downloaded) {\r\n loadThumbPromise = loadPromise = load().render;\r\n } else {\r\n if(!lazyLoadQueue) loadPromise = load().render;\r\n /* else if(noAutoDownload) {\r\n preloader.construct();\r\n preloader.setManual();\r\n preloader.attach(container);\r\n } */ else lazyLoadQueue.push({div: container, load: () => load().download});\r\n }\r\n\r\n if(loadPromises && loadThumbPromise) {\r\n loadPromises.push(loadThumbPromise);\r\n }\r\n\r\n return {\r\n loadPromises: {\r\n thumb: loadThumbPromise,\r\n full: loadPromise || Promise.resolve()\r\n },\r\n images: {\r\n thumb: thumbImage,\r\n full: image\r\n },\r\n preloader,\r\n aspecter\r\n };\r\n}\r\n\r\nexport function renderImageWithFadeIn(container: HTMLElement, \r\n image: HTMLImageElement, \r\n url: string, \r\n needFadeIn: boolean, \r\n aspecter = container,\r\n thumbImage?: HTMLImageElement\r\n) {\r\n if(needFadeIn) {\r\n image.classList.add('fade-in');\r\n }\r\n\r\n return new Promise((resolve) => {\r\n /* if(photo._ === 'document') {\r\n console.error('wrapPhoto: will render document', photo, size, cacheContext);\r\n return resolve();\r\n } */\r\n\r\n renderImageFromUrl(image, url, () => {\r\n sequentialDom.mutateElement(container, () => {\r\n aspecter.append(image);\r\n\r\n fastRaf(() => {\r\n resolve();\r\n });\r\n\r\n if(needFadeIn) {\r\n image.addEventListener('animationend', () => {\r\n sequentialDom.mutate(() => {\r\n image.classList.remove('fade-in');\r\n \r\n if(thumbImage) {\r\n thumbImage.remove();\r\n }\r\n });\r\n }, {once: true});\r\n }\r\n });\r\n });\r\n });\r\n}\r\n\r\n// export function renderImageWithFadeIn(container: HTMLElement, \r\n// image: HTMLImageElement, \r\n// url: string, \r\n// needFadeIn: boolean, \r\n// aspecter = container,\r\n// thumbImage?: HTMLImageElement\r\n// ) {\r\n// if(needFadeIn) {\r\n// // image.classList.add('fade-in-new', 'not-yet');\r\n// image.classList.add('fade-in');\r\n// }\r\n\r\n// return new Promise((resolve) => {\r\n// /* if(photo._ === 'document') {\r\n// console.error('wrapPhoto: will render document', photo, size, cacheContext);\r\n// return resolve();\r\n// } */\r\n\r\n// renderImageFromUrl(image, url, () => {\r\n// sequentialDom.mutateElement(container, () => {\r\n// aspecter.append(image);\r\n// // (needFadeIn ? getHeavyAnimationPromise() : Promise.resolve()).then(() => {\r\n\r\n// // fastRaf(() => {\r\n// resolve();\r\n// // });\r\n\r\n// if(needFadeIn) {\r\n// fastRaf(() => {\r\n// /* if(!image.isConnected) {\r\n// alert('aaaa');\r\n// } */\r\n// // fastRaf(() => {\r\n// image.classList.remove('not-yet');\r\n// // });\r\n// });\r\n\r\n// image.addEventListener('transitionend', () => {\r\n// sequentialDom.mutate(() => {\r\n// image.classList.remove('fade-in-new');\r\n \r\n// if(thumbImage) {\r\n// thumbImage.remove();\r\n// }\r\n// });\r\n// }, {once: true});\r\n// }\r\n// // });\r\n// });\r\n// });\r\n// });\r\n// }\r\n\r\nexport function wrapSticker({doc, div, middleware, lazyLoadQueue, group, play, onlyThumb, emoji, width, height, withThumb, loop, loadPromises, needFadeIn}: {\r\n doc: MyDocument, \r\n div: HTMLElement, \r\n middleware?: () => boolean, \r\n lazyLoadQueue?: LazyLoadQueue, \r\n group?: string, \r\n play?: boolean, \r\n onlyThumb?: boolean,\r\n emoji?: string,\r\n width?: number,\r\n height?: number,\r\n withThumb?: boolean,\r\n loop?: boolean,\r\n loadPromises?: Promise[],\r\n needFadeIn?: boolean,\r\n}) {\r\n const stickerType = doc.sticker;\r\n\r\n if(!width) {\r\n width = !emoji ? 200 : undefined;\r\n }\r\n\r\n if(!height) {\r\n height = !emoji ? 200 : undefined;\r\n }\r\n\r\n if(stickerType === 2 && !LottieLoader.loaded) {\r\n //LottieLoader.loadLottie();\r\n LottieLoader.loadLottieWorkers();\r\n }\r\n \r\n if(!stickerType) {\r\n console.error('wrong doc for wrapSticker!', doc);\r\n throw new Error('wrong doc for wrapSticker!');\r\n }\r\n\r\n div.dataset.docId = doc.id;\r\n div.classList.add('media-sticker-wrapper');\r\n \r\n //console.log('wrap sticker', doc, div, onlyThumb);\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n\r\n const toneIndex = emoji ? getEmojiToneIndex(emoji) : -1;\r\n const downloaded = cacheContext.downloaded && !needFadeIn;\r\n \r\n let loadThumbPromise = deferredPromise();\r\n let haveThumbCached = false;\r\n if((doc.thumbs?.length || doc.stickerCachedThumbs) && !div.firstElementChild && (!downloaded || stickerType === 2 || onlyThumb)/* && doc.thumbs[0]._ !== 'photoSizeEmpty' */) {\r\n let thumb = doc.stickerCachedThumbs && doc.stickerCachedThumbs[toneIndex] || doc.thumbs[0];\r\n \r\n //console.log('wrap sticker', thumb, div);\r\n\r\n let thumbImage: HTMLImageElement;\r\n const afterRender = () => {\r\n if(!div.childElementCount) {\r\n thumbImage.classList.add('media-sticker', 'thumbnail');\r\n \r\n sequentialDom.mutateElement(div, () => {\r\n div.append(thumbImage);\r\n loadThumbPromise.resolve();\r\n });\r\n }\r\n };\r\n\r\n if('url' in thumb) {\r\n thumbImage = new Image();\r\n renderImageFromUrl(thumbImage, thumb.url, afterRender);\r\n haveThumbCached = true;\r\n } else if('bytes' in thumb) {\r\n if(thumb._ === 'photoPathSize') {\r\n if(thumb.bytes.length) {\r\n const d = appPhotosManager.getPathFromPhotoPathSize(thumb);\r\n div.innerHTML = `\r\n \r\n `;\r\n } else {\r\n thumb = doc.thumbs.find(t => (t as PhotoSize.photoStrippedSize).bytes?.length) || thumb;\r\n }\r\n } \r\n \r\n if(thumb && thumb._ !== 'photoPathSize' && toneIndex <= 0) {\r\n thumbImage = new Image();\r\n\r\n if((IS_WEBP_SUPPORTED || doc.pFlags.stickerThumbConverted || cacheContext.url)/* && false */) {\r\n renderImageFromUrl(thumbImage, appPhotosManager.getPreviewURLFromThumb(doc, thumb as PhotoSize.photoStrippedSize, true), afterRender);\r\n haveThumbCached = true;\r\n } else {\r\n webpWorkerController.convert(doc.id, (thumb as PhotoSize.photoStrippedSize).bytes as Uint8Array).then(bytes => {\r\n (thumb as PhotoSize.photoStrippedSize).bytes = bytes;\r\n doc.pFlags.stickerThumbConverted = true;\r\n \r\n if(middleware && !middleware()) return;\r\n \r\n if(!div.childElementCount) {\r\n renderImageFromUrl(thumbImage, appPhotosManager.getPreviewURLFromThumb(doc, thumb as PhotoSize.photoStrippedSize, true), afterRender);\r\n }\r\n }).catch(() => {});\r\n }\r\n }\r\n } else if(stickerType === 2 && (withThumb || onlyThumb) && toneIndex <= 0) {\r\n thumbImage = new Image();\r\n\r\n const load = () => {\r\n if(div.childElementCount || (middleware && !middleware())) return;\r\n\r\n const r = () => {\r\n if(div.childElementCount || (middleware && !middleware())) return;\r\n renderImageFromUrl(thumbImage, cacheContext.url, afterRender);\r\n };\r\n \r\n if(cacheContext.url) {\r\n r();\r\n return Promise.resolve();\r\n } else {\r\n return appDocsManager.getThumbURL(doc, thumb as PhotoSize.photoStrippedSize).promise.then(r);\r\n }\r\n };\r\n \r\n if(lazyLoadQueue && onlyThumb) {\r\n lazyLoadQueue.push({div, load});\r\n return Promise.resolve();\r\n } else {\r\n load();\r\n\r\n if((thumb as any).url) {\r\n haveThumbCached = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if(loadPromises && haveThumbCached) {\r\n loadPromises.push(loadThumbPromise);\r\n }\r\n\r\n if(onlyThumb) { // for sticker panel\r\n return Promise.resolve();\r\n }\r\n \r\n const load = async() => {\r\n if(middleware && !middleware()) return;\r\n\r\n if(stickerType === 2) {\r\n /* if(doc.id === '1860749763008266301') {\r\n console.log('loaded sticker:', doc, div);\r\n } */\r\n\r\n //await new Promise((resolve) => setTimeout(resolve, 500));\r\n //return;\r\n\r\n //console.time('download sticker' + doc.id);\r\n\r\n //appDocsManager.downloadDocNew(doc.id).promise.then(res => res.json()).then(async(json) => {\r\n //fetch(doc.url).then(res => res.json()).then(async(json) => {\r\n /* return */ await appDocsManager.downloadDoc(doc, /* undefined, */lazyLoadQueue?.queueId)\r\n .then(readBlobAsText)\r\n //.then(JSON.parse)\r\n .then(async(json) => {\r\n //console.timeEnd('download sticker' + doc.id);\r\n //console.log('loaded sticker:', doc, div/* , blob */);\r\n if(middleware && !middleware()) return;\r\n\r\n let animation = await LottieLoader.loadAnimationWorker({\r\n container: div,\r\n loop: loop && !emoji,\r\n autoplay: play,\r\n animationData: json,\r\n width,\r\n height\r\n }, group, toneIndex);\r\n\r\n //const deferred = deferredPromise();\r\n \r\n animation.addEventListener('firstFrame', () => {\r\n const element = div.firstElementChild;\r\n needFadeIn = (needFadeIn || !element || element.tagName === 'svg') && rootScope.settings.animationsEnabled;\r\n\r\n const cb = () => {\r\n if(element && element !== animation.canvas) {\r\n element.remove();\r\n }\r\n };\r\n\r\n if(!needFadeIn) {\r\n if(element) {\r\n sequentialDom.mutate(cb);\r\n }\r\n } else {\r\n sequentialDom.mutate(() => {\r\n animation.canvas.classList.add('fade-in');\r\n if(element) {\r\n element.classList.add('fade-out');\r\n }\r\n \r\n animation.canvas.addEventListener('animationend', () => {\r\n sequentialDom.mutate(() => {\r\n animation.canvas.classList.remove('fade-in');\r\n cb();\r\n });\r\n }, {once: true});\r\n });\r\n }\r\n\r\n appDocsManager.saveLottiePreview(doc, animation.canvas, toneIndex);\r\n\r\n //deferred.resolve();\r\n }, {once: true});\r\n \r\n if(emoji) {\r\n attachClickEvent(div, (e) => {\r\n cancelEvent(e);\r\n let animation = LottieLoader.getAnimation(div);\r\n \r\n if(animation.paused) {\r\n animation.autoplay = true;\r\n animation.restart();\r\n }\r\n });\r\n }\r\n\r\n //return deferred;\r\n //await new Promise((resolve) => setTimeout(resolve, 5e3));\r\n });\r\n\r\n //console.timeEnd('render sticker' + doc.id);\r\n } else if(stickerType === 1) {\r\n const image = new Image();\r\n const thumbImage = div.firstElementChild !== image && div.firstElementChild;\r\n needFadeIn = (needFadeIn || !downloaded || thumbImage) && rootScope.settings.animationsEnabled;\r\n\r\n image.classList.add('media-sticker');\r\n\r\n if(needFadeIn) {\r\n image.classList.add('fade-in');\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const r = () => {\r\n if(middleware && !middleware()) return resolve();\r\n \r\n renderImageFromUrl(image, cacheContext.url, () => {\r\n sequentialDom.mutateElement(div, () => {\r\n div.append(image);\r\n if(thumbImage) {\r\n thumbImage.classList.add('fade-out');\r\n }\r\n\r\n resolve();\r\n\r\n if(needFadeIn) {\r\n image.addEventListener('animationend', () => {\r\n image.classList.remove('fade-in');\r\n if(thumbImage) {\r\n thumbImage.remove();\r\n }\r\n }, {once: true});\r\n }\r\n });\r\n });\r\n };\r\n \r\n if(cacheContext.url) r();\r\n else {\r\n appDocsManager.downloadDoc(doc, /* undefined, */lazyLoadQueue?.queueId).then(r, resolve);\r\n }\r\n });\r\n }\r\n };\r\n\r\n const loadPromise: Promise = lazyLoadQueue && (!downloaded || stickerType === 2) ? \r\n (lazyLoadQueue.push({div, load}), Promise.resolve()) : \r\n load();\r\n\r\n if(downloaded && stickerType === 1) {\r\n loadThumbPromise = loadPromise;\r\n if(loadPromises) {\r\n loadPromises.push(loadThumbPromise);\r\n }\r\n }\r\n\r\n return loadPromise;\r\n}\r\n\r\nexport async function wrapStickerSetThumb({set, lazyLoadQueue, container, group, autoplay, width, height}: {\r\n set: StickerSet.stickerSet,\r\n lazyLoadQueue: LazyLoadQueue,\r\n container: HTMLElement,\r\n group: string,\r\n autoplay: boolean,\r\n width: number,\r\n height: number\r\n}) {\r\n if(set.thumbs?.length) {\r\n container.classList.add('media-sticker-wrapper');\r\n lazyLoadQueue.push({\r\n div: container,\r\n load: () => {\r\n const downloadOptions = appStickersManager.getStickerSetThumbDownloadOptions(set);\r\n const promise = appDownloadManager.download(downloadOptions);\r\n\r\n if(set.pFlags.animated) {\r\n return promise\r\n .then(readBlobAsText)\r\n //.then(JSON.parse)\r\n .then(json => {\r\n lottieLoader.loadAnimationWorker({\r\n container,\r\n loop: true,\r\n autoplay,\r\n animationData: json,\r\n width,\r\n height,\r\n needUpscale: true\r\n }, group);\r\n });\r\n } else {\r\n const image = new Image();\r\n image.classList.add('media-sticker');\r\n \r\n return promise.then(blob => {\r\n renderImageFromUrl(image, URL.createObjectURL(blob), () => {\r\n container.append(image);\r\n });\r\n });\r\n }\r\n }\r\n });\r\n\r\n return;\r\n }\r\n\r\n const promise = appStickersManager.getStickerSet(set);\r\n const stickerSet = await promise;\r\n if(stickerSet.documents[0]._ !== 'documentEmpty') { // as thumb will be used first sticker\r\n wrapSticker({\r\n doc: stickerSet.documents[0],\r\n div: container, \r\n group: group,\r\n lazyLoadQueue\r\n }); // kostil\r\n }\r\n}\r\n\r\nexport function wrapLocalSticker({emoji, width, height}: {\r\n doc?: MyDocument,\r\n url?: string,\r\n emoji?: string,\r\n width: number,\r\n height: number,\r\n}) {\r\n const container = document.createElement('div');\r\n\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: container,\r\n loop: false,\r\n play: true,\r\n width,\r\n height,\r\n emoji\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n container.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n return {container};\r\n}\r\n\r\nexport function wrapReply(title: Parameters[0], subtitle: Parameters[1], message?: any) {\r\n const replyContainer = new ReplyContainer('reply');\r\n replyContainer.fill(title, subtitle, message);\r\n /////////console.log('wrapReply', title, subtitle, media);\r\n return replyContainer.container;\r\n}\r\n\r\nexport function prepareAlbum(options: {\r\n container: HTMLElement,\r\n items: {w: number, h: number}[],\r\n maxWidth: number,\r\n minWidth: number,\r\n spacing: number,\r\n maxHeight?: number,\r\n forMedia?: true\r\n}) {\r\n const layouter = new Layouter(options.items, options.maxWidth, options.minWidth, options.spacing, options.maxHeight);\r\n const layout = layouter.layout();\r\n\r\n const widthItem = layout.find(item => item.sides & RectPart.Right);\r\n const width = widthItem.geometry.width + widthItem.geometry.x;\r\n\r\n const heightItem = layout.find(item => item.sides & RectPart.Bottom);\r\n const height = heightItem.geometry.height + heightItem.geometry.y;\r\n\r\n const container = options.container;\r\n container.style.width = width + 'px';\r\n container.style.height = height + 'px';\r\n const children = container.children;\r\n\r\n layout.forEach(({geometry, sides}, idx) => {\r\n let div: HTMLElement;\r\n div = children[idx] as HTMLElement;\r\n if(!div) {\r\n div = document.createElement('div');\r\n container.append(div);\r\n }\r\n\r\n div.classList.add('album-item', 'grouped-item');\r\n\r\n div.style.width = (geometry.width / width * 100) + '%';\r\n div.style.height = (geometry.height / height * 100) + '%';\r\n div.style.top = (geometry.y / height * 100) + '%';\r\n div.style.left = (geometry.x / width * 100) + '%';\r\n\r\n if(sides & RectPart.Left && sides & RectPart.Top) {\r\n div.style.borderTopLeftRadius = 'inherit';\r\n }\r\n\r\n if(sides & RectPart.Left && sides & RectPart.Bottom) {\r\n div.style.borderBottomLeftRadius = 'inherit';\r\n }\r\n\r\n if(sides & RectPart.Right && sides & RectPart.Top) {\r\n div.style.borderTopRightRadius = 'inherit';\r\n }\r\n\r\n if(sides & RectPart.Right && sides & RectPart.Bottom) {\r\n div.style.borderBottomRightRadius = 'inherit';\r\n }\r\n\r\n if(options.forMedia) {\r\n const mediaDiv = document.createElement('div');\r\n mediaDiv.classList.add('album-item-media');\r\n \r\n div.append(mediaDiv);\r\n }\r\n\r\n // @ts-ignore\r\n //div.style.backgroundColor = '#' + Math.floor(Math.random() * (2 ** 24 - 1)).toString(16).padStart(6, '0');\r\n });\r\n\r\n /* if(options.forMedia) {\r\n layout.forEach((_, i) => {\r\n const mediaDiv = document.createElement('div');\r\n mediaDiv.classList.add('album-item-media');\r\n \r\n options.container.children[i].append(mediaDiv);\r\n });\r\n } */\r\n}\r\n\r\nexport function wrapAlbum({groupId, attachmentDiv, middleware, uploading, lazyLoadQueue, isOut, chat, loadPromises, noAutoDownload}: {\r\n groupId: string, \r\n attachmentDiv: HTMLElement,\r\n middleware?: () => boolean,\r\n lazyLoadQueue?: LazyLoadQueue,\r\n uploading?: boolean,\r\n isOut: boolean,\r\n chat: Chat,\r\n loadPromises?: Promise[],\r\n noAutoDownload?: boolean,\r\n}) {\r\n const items: {size: PhotoSize.photoSize, media: any, message: any}[] = [];\r\n\r\n // !lowest msgID will be the FIRST in album\r\n const storage = appMessagesManager.getMidsByAlbum(groupId);\r\n for(const mid of storage) {\r\n const m = chat.getMessage(mid);\r\n const media = m.media.photo || m.media.document;\r\n\r\n const size: any = media._ === 'photo' ? appPhotosManager.choosePhotoSize(media, 480, 480) : {w: media.w, h: media.h};\r\n items.push({size, media, message: m});\r\n }\r\n\r\n /* // * pending\r\n if(storage[0] < 0) {\r\n items.reverse();\r\n } */\r\n\r\n prepareAlbum({\r\n container: attachmentDiv,\r\n items: items.map(i => ({w: i.size.w, h: i.size.h})),\r\n maxWidth: mediaSizes.active.album.width,\r\n minWidth: 100,\r\n spacing: 2,\r\n forMedia: true\r\n });\r\n\r\n items.forEach((item, idx) => {\r\n const {size, media, message} = item;\r\n\r\n const div = attachmentDiv.children[idx] as HTMLElement;\r\n div.dataset.mid = '' + message.mid;\r\n const mediaDiv = div.firstElementChild as HTMLElement;\r\n if(media._ === 'photo') {\r\n wrapPhoto({\r\n photo: media,\r\n message,\r\n container: mediaDiv,\r\n boxWidth: 0,\r\n boxHeight: 0,\r\n isOut,\r\n lazyLoadQueue,\r\n middleware,\r\n size,\r\n loadPromises,\r\n noAutoDownload\r\n });\r\n } else {\r\n wrapVideo({\r\n doc: message.media.document,\r\n container: mediaDiv,\r\n message,\r\n boxWidth: 0,\r\n boxHeight: 0,\r\n withTail: false,\r\n isOut,\r\n lazyLoadQueue,\r\n middleware,\r\n loadPromises,\r\n noAutoDownload\r\n });\r\n }\r\n });\r\n}\r\n\r\nexport function wrapGroupedDocuments({albumMustBeRenderedFull, message, bubble, messageDiv, chat, loadPromises, noAutoDownload, lazyLoadQueue, searchContext, useSearch}: {\r\n albumMustBeRenderedFull: boolean,\r\n message: any,\r\n messageDiv: HTMLElement,\r\n bubble: HTMLElement,\r\n uploading?: boolean,\r\n chat: Chat,\r\n loadPromises?: Promise[],\r\n noAutoDownload?: boolean,\r\n lazyLoadQueue?: LazyLoadQueue,\r\n searchContext?: MediaSearchContext,\r\n useSearch?: boolean,\r\n}) {\r\n let nameContainer: HTMLElement;\r\n const mids = albumMustBeRenderedFull ? chat.getMidsByMid(message.mid) : [message.mid];\r\n /* if(isPending) {\r\n mids.reverse();\r\n } */\r\n\r\n mids.forEach((mid, idx) => {\r\n const message = chat.getMessage(mid);\r\n const div = wrapDocument({\r\n message,\r\n loadPromises,\r\n noAutoDownload,\r\n lazyLoadQueue,\r\n searchContext\r\n });\r\n\r\n const container = document.createElement('div');\r\n container.classList.add('document-container');\r\n container.dataset.mid = '' + mid;\r\n container.dataset.peerId = '' + message.peerId;\r\n\r\n const wrapper = document.createElement('div');\r\n wrapper.classList.add('document-wrapper');\r\n \r\n if(message.message) {\r\n const messageDiv = document.createElement('div');\r\n messageDiv.classList.add('document-message');\r\n\r\n const richText = RichTextProcessor.wrapRichText(message.message, {\r\n entities: message.totalEntities\r\n });\r\n\r\n messageDiv.innerHTML = richText;\r\n wrapper.append(messageDiv);\r\n }\r\n\r\n if(mids.length > 1) {\r\n const selection = document.createElement('div');\r\n selection.classList.add('document-selection');\r\n container.append(selection);\r\n \r\n container.classList.add('grouped-item');\r\n\r\n if(idx === 0) {\r\n nameContainer = wrapper;\r\n }\r\n }\r\n\r\n wrapper.append(div);\r\n container.append(wrapper);\r\n messageDiv.append(container);\r\n });\r\n\r\n if(mids.length > 1) {\r\n bubble.classList.add('is-multiple-documents', 'is-grouped');\r\n }\r\n\r\n return nameContainer;\r\n}\r\n\r\nexport function wrapPoll(message: any) {\r\n const elem = new PollElement();\r\n elem.message = message;\r\n elem.setAttribute('peer-id', '' + message.peerId);\r\n elem.setAttribute('poll-id', message.media.poll.id);\r\n elem.setAttribute('message-id', '' + message.mid);\r\n elem.render();\r\n return elem;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport whichChild from \"./whichChild\";\r\n\r\nexport default function positionElementByIndex(element: HTMLElement, container: HTMLElement, pos: number, prevPos?: number) {\r\n if(prevPos === undefined) {\r\n prevPos = element.parentElement === container ? whichChild(element) : -1;\r\n }\r\n\r\n if(prevPos === pos) {\r\n return false;\r\n } else if(prevPos !== -1 && prevPos < pos) { // was higher\r\n pos += 1;\r\n }\r\n\r\n if(!pos) {\r\n container.prepend(element);\r\n } else if(container.childElementCount > pos) {\r\n container.insertBefore(element, container.children[pos]);\r\n } else {\r\n container.append(element);\r\n }\r\n\r\n return true;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { insertInDescendSortedArray } from \"./array\";\nimport { getMiddleware } from \"./middleware\";\nimport { safeAssign } from \"./object\";\n\nexport type SortedElementBase = {\n id: number, \n index: number\n};\n\nexport default class SortedList {\n protected elements: Map;\n protected sorted: Array;\n\n protected getIndex: (id: number) => number;\n protected onDelete: (element: SortedElement) => void;\n protected onUpdate: (element: SortedElement) => void;\n protected onSort: (element: SortedElement, idx: number) => void;\n protected onElementCreate: (base: SortedElementBase, batch: boolean) => SortedElement;\n\n protected updateElementWith = (callback: () => void) => callback();\n protected updateListWith = (callback: (canUpdate: boolean | undefined) => void) => callback(true);\n\n protected middleware = getMiddleware();\n\n constructor(options: {\n getIndex: SortedList['getIndex'],\n onDelete?: SortedList['onDelete'],\n onUpdate?: SortedList['onUpdate'],\n onSort?: SortedList['onSort'],\n onElementCreate: SortedList['onElementCreate'],\n\n updateElementWith?: SortedList['updateElementWith'],\n updateListWith?: SortedList['updateListWith']\n }) {\n safeAssign(this, options);\n\n this.elements = new Map();\n this.sorted = [];\n }\n\n public clear() {\n this.middleware.clean();\n this.elements.clear();\n this.sorted.length = 0;\n }\n\n protected _updateList() {\n this.elements.forEach(element => {\n this.update(element.id, true);\n });\n\n if(this.onSort) {\n this.sorted.forEach((element, idx) => {\n this.onSort(element, idx);\n });\n }\n }\n\n public updateList(callback: (updated: boolean) => void) {\n const middleware = this.middleware.get();\n this.updateListWith((canUpdate) => {\n if(!middleware() || (canUpdate !== undefined && !canUpdate)) {\n return callback(false);\n }\n\n this._updateList();\n \n callback(true);\n });\n }\n\n public has(id: number) {\n return this.elements.has(id);\n }\n\n public get(id: number) {\n return this.elements.get(id);\n }\n\n public getAll() {\n return this.elements;\n }\n\n public add(id: number, batch = false, updateElementWith?: SortedList['updateElementWith'], updateBatch = batch) {\n let element = this.get(id);\n if(element) {\n return element;\n }\n\n const base: SortedElementBase = {\n id,\n index: 0\n };\n\n element = this.onElementCreate(base, batch);\n this.elements.set(id, element);\n this.update(id, updateBatch, element, updateElementWith);\n\n return element;\n }\n\n public delete(id: number, noScheduler?: boolean) {\n const element = this.elements.get(id);\n if(!element) {\n return false;\n }\n \n this.elements.delete(id);\n \n const idx = this.sorted.indexOf(element);\n if(idx !== -1) {\n this.sorted.splice(idx, 1);\n }\n\n if(this.onDelete) {\n if(noScheduler) {\n this.onDelete(element);\n } else {\n const middleware = this.middleware.get();\n this.updateElementWith(() => {\n if(!middleware()) {\n return;\n }\n\n this.onDelete(element);\n });\n }\n }\n\n return true;\n }\n\n public update(id: number, batch = false, element = this.get(id), updateElementWith?: SortedList['updateElementWith']) {\n if(!element) {\n return;\n }\n\n element.index = this.getIndex(id);\n this.onUpdate && this.onUpdate(element);\n\n const idx = insertInDescendSortedArray(this.sorted, element, 'index');\n if(!batch && this.onSort) {\n const middleware = this.middleware.get();\n (updateElementWith || this.updateElementWith)(() => {\n if(!middleware()) {\n return;\n }\n\n // * в случае пересортировки этого же элемента во время ожидания вызовется вторая такая же. нужно соблюдать последовательность событий\n this.onSort(element, idx);\n /* if(this.get(id) === element) {\n this.onSort(element, this.sorted.indexOf(element));\n } */\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { LazyLoadQueueIntersector } from \"./lazyLoadQueue\";\nimport appDialogsManager, { DialogDom } from \"../lib/appManagers/appDialogsManager\";\nimport { getHeavyAnimationPromise } from \"../hooks/useHeavyAnimationCheck\";\nimport appUsersManager from \"../lib/appManagers/appUsersManager\";\nimport isInDOM from \"../helpers/dom/isInDOM\";\nimport positionElementByIndex from \"../helpers/dom/positionElementByIndex\";\nimport replaceContent from \"../helpers/dom/replaceContent\";\nimport { safeAssign } from \"../helpers/object\";\nimport { fastRaf } from \"../helpers/schedulers\";\nimport SortedList, { SortedElementBase } from \"../helpers/sortedList\";\n\ninterface SortedUser extends SortedElementBase {\n dom: DialogDom\n}\n\nexport default class SortedUserList extends SortedList {\n protected static SORT_INTERVAL = 30e3;\n public list: HTMLUListElement;\n \n protected lazyLoadQueue: LazyLoadQueueIntersector;\n protected avatarSize = 48;\n protected rippleEnabled = true;\n\n constructor(options: Partial<{\n lazyLoadQueue: SortedUserList['lazyLoadQueue'],\n avatarSize: SortedUserList['avatarSize'],\n rippleEnabled: SortedUserList['rippleEnabled'],\n new: boolean\n }> = {}) {\n super({\n getIndex: (id) => appUsersManager.getUserStatusForSort(id),\n onDelete: (element) => element.dom.listEl.remove(),\n onUpdate: (element) => {\n const status = appUsersManager.getUserStatusString(element.id);\n replaceContent(element.dom.lastMessageSpan, status);\n },\n onSort: (element, idx) => positionElementByIndex(element.dom.listEl, this.list, idx),\n onElementCreate: (base) => {\n const {dom} = appDialogsManager.addDialogNew({\n dialog: base.id,\n container: false,\n drawStatus: false,\n avatarSize: this.avatarSize,\n autonomous: true,\n meAsSaved: false,\n rippleEnabled: this.rippleEnabled,\n lazyLoadQueue: this.lazyLoadQueue\n });\n\n (base as SortedUser).dom = dom;\n return base as SortedUser;\n },\n updateElementWith: fastRaf,\n updateListWith: async(callback) => {\n if(!isInDOM(this.list)) {\n return callback(false);\n }\n \n await getHeavyAnimationPromise();\n \n if(!isInDOM(this.list)) {\n return callback(false);\n }\n\n callback(true);\n }\n });\n\n safeAssign(this, options);\n\n this.list = appDialogsManager.createChatList({new: options.new});\n\n let timeout: number;\n const doTimeout = () => {\n timeout = window.setTimeout(() => {\n this.updateList((good) => {\n if(good) {\n doTimeout();\n }\n });\n }, SortedUserList.SORT_INTERVAL);\n };\n\n doTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { cancelContextMenuOpening } from \"../../components/misc\";\nimport SwipeHandler from \"../../components/swipeHandler\";\nimport { cancelEvent } from \"./cancelEvent\";\n\nexport default function handleTabSwipe(container: HTMLElement, onSwipe: (next: boolean) => void) {\n /* let hadScroll = false;\n const onScroll = () => {\n swipeHandler.reset();\n };\n let firstSwipeChecked = false; */\n return new SwipeHandler({\n element: container, \n /* onFirstSwipe: () => {\n this.scroll.container.addEventListener('scroll', onScroll, {passive: true});\n }, */\n onSwipe: (xDiff, yDiff, e) => {\n /* if(!firstSwipeChecked) {\n firstSwipeChecked = true;\n if(yDiff !== 0) {\n return true;\n }\n }\n\n cancelEvent(e); */\n\n if(Math.abs(yDiff) > 20) {\n return true;\n }\n\n if(Math.abs(xDiff) > Math.abs(yDiff)) {\n cancelEvent(e);\n } else if(Math.abs(yDiff) > Math.abs(xDiff)/* || Math.abs(yDiff) > 20 */) {\n return true;\n }\n\n if(Math.abs(xDiff) > 50) {\n onSwipe(xDiff > 0);\n cancelContextMenuOpening();\n\n return true;\n }\n },\n /* onReset: () => {\n hadScroll = false;\n firstSwipeChecked = false;\n this.scroll.container.removeEventListener('scroll', onScroll);\n }, */\n cancelEvent: false\n });\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appImManager from \"../../lib/appManagers/appImManager\";\r\nimport PopupPickUser from \"./pickUser\";\r\n\r\nexport default class PopupForward extends PopupPickUser {\r\n constructor(\r\n peerIdMids: {[fromPeerId: number]: number[]}, \r\n onSelect?: (peerId: number) => Promise | void, \r\n onClose?: () => void, \r\n overrideOnSelect = false\r\n ) {\r\n super({\r\n peerTypes: ['dialogs', 'contacts'],\r\n onSelect: overrideOnSelect ? onSelect : async(peerId) => {\r\n if(onSelect) {\r\n const res = onSelect(peerId);\r\n if(res instanceof Promise) {\r\n await res;\r\n }\r\n }\r\n\r\n appImManager.setInnerPeer(peerId);\r\n appImManager.chat.input.initMessagesForward(peerIdMids);\r\n },\r\n onClose,\r\n placeholder: 'ShareModal.Search.ForwardPlaceholder',\r\n chatRightsAction: 'send_messages',\r\n selfPresence: 'ChatYourSelf'\r\n });\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appChatsManager from \"../../lib/appManagers/appChatsManager\";\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport rootScope from \"../../lib/rootScope\";\nimport { addCancelButton } from \".\";\nimport PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerOptions } from \"./peer\";\nimport { ChatType } from \"../chat/chat\";\nimport { i18n, LangPackKey } from \"../../lib/langPack\";\nimport PeerTitle from \"../peerTitle\";\nimport appPeersManager from \"../../lib/appManagers/appPeersManager\";\n\nexport default class PopupDeleteMessages {\n constructor(peerId: number, mids: number[], type: ChatType, onConfirm?: () => void) {\n const peerTitleElement = new PeerTitle({peerId}).element;\n\n mids = mids.slice();\n const callback = (checked: PopupPeerButtonCallbackCheckboxes, revoke?: boolean) => {\n onConfirm && onConfirm();\n if(type === 'scheduled') {\n appMessagesManager.deleteScheduledMessages(peerId, mids);\n } else {\n appMessagesManager.deleteMessages(peerId, mids, !!checked.size || revoke);\n }\n };\n\n let title: LangPackKey, titleArgs: any[], description: LangPackKey, descriptionArgs: any[], buttons: PopupPeerOptions['buttons'], checkboxes: PopupPeerOptions['checkboxes'] = [];\n if(mids.length === 1) {\n title = 'DeleteSingleMessagesTitle';\n } else {\n title = 'DeleteMessagesTitle';\n titleArgs = [i18n('messages', [mids.length])];\n }\n \n if(appPeersManager.isMegagroup(peerId)) {\n description = mids.length === 1 ? 'AreYouSureDeleteSingleMessageMega' : 'AreYouSureDeleteFewMessagesMega';\n } else {\n description = mids.length === 1 ? 'AreYouSureDeleteSingleMessage' : 'AreYouSureDeleteFewMessages';\n }\n\n buttons = [{\n langKey: 'Delete',\n isDanger: true,\n callback\n }];\n\n if(peerId === rootScope.myId || type === 'scheduled') {\n \n } else {\n if(peerId > 0) {\n checkboxes.push({\n text: 'DeleteMessagesOptionAlso',\n textArgs: [peerTitleElement]\n });\n } else {\n const chat = appChatsManager.getChat(-peerId);\n\n const hasRights = appChatsManager.hasRights(-peerId, 'delete_messages');\n if(chat._ === 'chat') {\n const canRevoke = hasRights ? mids.slice() : mids.filter(mid => {\n const message = appMessagesManager.getMessageByPeer(peerId, mid);\n return message.fromId === rootScope.myId;\n });\n\n if(canRevoke.length) {\n if(canRevoke.length === mids.length) {\n checkboxes.push({\n text: 'DeleteForAll'\n });\n } else {\n checkboxes.push({\n text: 'DeleteMessagesOption'\n });\n\n description = 'DeleteMessagesTextGroup';\n descriptionArgs = [i18n('messages', [canRevoke.length])];\n //description = `You can also delete the ${canRevoke.length} message${canRevoke.length > 1 ? 's' : ''} you sent from the inboxes of other group members by pressing \"${buttonText}\".`;\n }\n }\n } else {\n buttons[0].callback = (checked) => callback(checked, true);\n }\n }\n }\n\n addCancelButton(buttons);\n\n const popup = new PopupPeer('popup-delete-chat', {\n peerId,\n titleLangKey: title,\n titleLangArgs: titleArgs,\n descriptionLangKey: description,\n descriptionLangArgs: descriptionArgs,\n buttons,\n checkboxes\n });\n\n popup.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport { PopupButton } from \".\";\nimport PopupPeer from \"./peer\";\n\nexport default class PopupSendNow {\n constructor(peerId: number, mids: number[], onConfirm?: () => void) {\n let title: string, description: string, buttons: PopupButton[] = [];\n\n title = `Send Message${mids.length > 1 ? 's' : ''} Now`;\n description = mids.length > 1 ? 'Send ' + mids.length + ' messages now?' : 'Send message now?';\n\n const callback = () => {\n onConfirm && onConfirm();\n appMessagesManager.sendScheduledMessages(peerId, mids);\n };\n\n buttons.push({\n langKey: 'Send',\n callback\n });\n\n const popup = new PopupPeer('popup-delete-chat', {\n peerId,\n title,\n description,\n buttons\n });\n\n popup.show();\n }\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function cancelSelection() {\r\n if(window.getSelection) {\r\n if(window.getSelection().empty) { // Chrome\r\n window.getSelection().empty();\r\n } else if(window.getSelection().removeAllRanges) { // Firefox\r\n window.getSelection().removeAllRanges();\r\n }\r\n // @ts-ignore\r\n } else if(document.selection) { // IE?\r\n // @ts-ignore\r\n document.selection.empty();\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { AppMessagesManager, MessagesStorage } from \"../../lib/appManagers/appMessagesManager\";\nimport type ChatBubbles from \"./bubbles\";\nimport type ChatInput from \"./input\";\nimport type Chat from \"./chat\";\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\nimport Button from \"../button\";\nimport ButtonIcon from \"../buttonIcon\";\nimport CheckboxField from \"../checkboxField\";\nimport PopupDeleteMessages from \"../popups/deleteMessages\";\nimport PopupForward from \"../popups/forward\";\nimport { toast } from \"../toast\";\nimport SetTransition from \"../singleTransition\";\nimport ListenerSetter from \"../../helpers/listenerSetter\";\nimport PopupSendNow from \"../popups/sendNow\";\nimport appNavigationController, { NavigationItem } from \"../appNavigationController\";\nimport { IS_MOBILE_SAFARI } from \"../../environment/userAgent\";\nimport I18n, { i18n, _i18n } from \"../../lib/langPack\";\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\nimport blurActiveElement from \"../../helpers/dom/blurActiveElement\";\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\nimport cancelSelection from \"../../helpers/dom/cancelSelection\";\nimport getSelectedText from \"../../helpers/dom/getSelectedText\";\nimport rootScope from \"../../lib/rootScope\";\nimport { safeAssign } from \"../../helpers/object\";\nimport { fastRaf } from \"../../helpers/schedulers\";\nimport replaceContent from \"../../helpers/dom/replaceContent\";\nimport AppSearchSuper from \"../appSearchSuper.\";\nimport isInDOM from \"../../helpers/dom/isInDOM\";\nimport { randomLong } from \"../../helpers/random\";\nimport { attachContextMenuListener } from \"../misc\";\nimport { attachClickEvent, AttachClickOptions } from \"../../helpers/dom/clickEvent\";\nimport findUpAsChild from \"../../helpers/dom/findUpAsChild\";\n\nconst accumulateMapSet = (map: Map>) => {\n return [...map.values()].reduce((acc, v) => acc + v.size, 0);\n};\n\n//const MIN_CLICK_MOVE = 32; // minimum bubble height\n\nclass AppSelection {\n public selectedMids: Map> = new Map();\n public isSelecting = false;\n\n public selectedText: string;\n\n protected listenerSetter: ListenerSetter;\n protected appMessagesManager: AppMessagesManager;\n protected isScheduled: boolean;\n protected listenElement: HTMLElement;\n\n protected onToggleSelection: (forwards: boolean) => void;\n protected onUpdateContainer: (cantForward: boolean, cantDelete: boolean, cantSend: boolean) => void;\n protected onCancelSelection: () => void;\n protected toggleByMid: (peerId: number, mid: number) => void;\n protected toggleByElement: (bubble: HTMLElement) => void;\n\n protected navigationType: NavigationItem['type'];\n\n protected getElementFromTarget: (target: HTMLElement) => HTMLElement;\n protected verifyTarget: (e: MouseEvent, target: HTMLElement) => boolean;\n protected verifyMouseMoveTarget: (e: MouseEvent, element: HTMLElement, selecting: boolean) => boolean;\n protected verifyTouchLongPress: () => boolean;\n protected targetLookupClassName: string;\n protected lookupBetweenParentClassName: string;\n protected lookupBetweenElementsQuery: string;\n\n constructor(options: {\n appMessagesManager: AppMessagesManager,\n listenElement: HTMLElement,\n listenerSetter: ListenerSetter,\n getElementFromTarget: AppSelection['getElementFromTarget'],\n verifyTarget?: AppSelection['verifyTarget'],\n verifyMouseMoveTarget?: AppSelection['verifyMouseMoveTarget'],\n verifyTouchLongPress?: AppSelection['verifyTouchLongPress'],\n targetLookupClassName: string,\n lookupBetweenParentClassName: string,\n lookupBetweenElementsQuery: string,\n isScheduled?: AppSelection['isScheduled']\n }) {\n safeAssign(this, options);\n\n this.navigationType = 'multiselect-' + randomLong() as any;\n\n if(IS_TOUCH_SUPPORTED) {\n this.listenerSetter.add(this.listenElement)('touchend', () => {\n if(!this.isSelecting) return;\n this.selectedText = getSelectedText();\n });\n\n attachContextMenuListener(this.listenElement, (e) => {\n if(this.isSelecting || (this.verifyTouchLongPress && !this.verifyTouchLongPress())) return;\n\n // * these two lines will fix instant text selection on iOS Safari\n document.body.classList.add('no-select'); // * need no-select on body because chat-input transforms in channels\n this.listenElement.addEventListener('touchend', (e) => {\n cancelEvent(e); // ! this one will fix propagation to document loader button, etc\n document.body.classList.remove('no-select');\n\n //this.chat.bubbles.onBubblesClick(e);\n }, {once: true, capture: true});\n\n cancelSelection();\n //cancelEvent(e as any);\n const element = this.getElementFromTarget(e.target as HTMLElement);\n if(element) {\n this.toggleByElement(element);\n }\n }, this.listenerSetter);\n\n return;\n }\n\n const getElementsBetween = (first: HTMLElement, last: HTMLElement) => { \n if(first === last) {\n return [];\n }\n\n const firstRect = first.getBoundingClientRect();\n const lastRect = last.getBoundingClientRect();\n const difference = (firstRect.top - lastRect.top) || (firstRect.left - lastRect.left);\n const isHigher = difference < 0;\n\n const parent = findUpClassName(first, this.lookupBetweenParentClassName);\n if(!parent) {\n return [];\n }\n\n const elements = Array.from(parent.querySelectorAll(this.lookupBetweenElementsQuery)) as HTMLElement[];\n let firstIndex = elements.indexOf(first);\n let lastIndex = elements.indexOf(last);\n\n if(!isHigher) {\n [lastIndex, firstIndex] = [firstIndex, lastIndex];\n }\n\n const slice = elements.slice(firstIndex + 1, lastIndex);\n\n // console.log('getElementsBetween', first, last, slice, firstIndex, lastIndex, isHigher);\n\n return slice;\n };\n\n this.listenerSetter.add(this.listenElement)('mousedown', (e) => {\n //console.log('selection mousedown', e);\n const element = findUpClassName(e.target, this.targetLookupClassName);\n if(e.button !== 0) {\n return;\n }\n\n if(this.verifyTarget && !this.verifyTarget(e, element)) {\n return;\n }\n \n const seen: Map> = new Map();\n let selecting: boolean;\n\n /* let good = false;\n const {x, y} = e; */\n\n /* const bubbles = appImManager.bubbles;\n for(const mid in bubbles) {\n const bubble = bubbles[mid];\n bubble.addEventListener('mouseover', () => {\n console.log('mouseover');\n }, {once: true});\n } */\n\n let firstTarget = element;\n\n const processElement = (element: HTMLElement, checkBetween = true) => {\n const mid = +element.dataset.mid;\n const peerId = +element.dataset.peerId;\n if(!mid || !peerId) return;\n\n if(!isInDOM(firstTarget)) {\n firstTarget = element;\n }\n\n let seenSet = seen.get(peerId);\n if(!seenSet) {\n seen.set(peerId, seenSet = new Set());\n }\n\n if(!seenSet.has(mid)) {\n const isSelected = this.isMidSelected(peerId, mid);\n if(selecting === undefined) {\n //bubblesContainer.classList.add('no-select');\n selecting = !isSelected;\n }\n\n seenSet.add(mid);\n\n if((selecting && !isSelected) || (!selecting && isSelected)) {\n const seenLength = accumulateMapSet(seen);\n if(this.toggleByElement && checkBetween) {\n if(seenLength < 2) {\n if(findUpAsChild(element, firstTarget)) {\n firstTarget = element;\n }\n }\n\n const elementsBetween = getElementsBetween(firstTarget, element);\n // console.log(elementsBetween);\n if(elementsBetween.length) {\n elementsBetween.forEach(element => {\n processElement(element, false);\n });\n }\n }\n\n if(!this.selectedMids.size) {\n if(seenLength === 2 && this.toggleByMid) {\n for(const [peerId, mids] of seen) {\n for(const mid of mids) {\n this.toggleByMid(peerId, mid);\n }\n }\n }\n } else if(this.toggleByElement) {\n this.toggleByElement(element);\n }\n }\n }\n };\n\n //const foundTargets: Map = new Map();\n let canceledSelection = false;\n const onMouseMove = (e: MouseEvent) => {\n if(!canceledSelection) {\n cancelSelection();\n canceledSelection = true;\n }\n /* if(!good) {\n if(Math.abs(e.x - x) > MIN_CLICK_MOVE || Math.abs(e.y - y) > MIN_CLICK_MOVE) {\n good = true;\n } else {\n return;\n }\n } */\n\n /* if(foundTargets.has(e.target as HTMLElement)) return;\n foundTargets.set(e.target as HTMLElement, true); */\n const element = this.getElementFromTarget(e.target as HTMLElement);\n if(!element) {\n //console.error('found no bubble', e);\n return;\n }\n\n if(this.verifyMouseMoveTarget && !this.verifyMouseMoveTarget(e, element, selecting)) {\n this.listenerSetter.removeManual(this.listenElement, 'mousemove', onMouseMove);\n this.listenerSetter.removeManual(document, 'mouseup', onMouseUp, documentListenerOptions);\n return;\n }\n\n processElement(element);\n };\n\n const onMouseUp = (e: MouseEvent) => {\n if(seen.size) {\n attachClickEvent(window, cancelEvent, {capture: true, once: true, passive: false});\n }\n\n this.listenerSetter.removeManual(this.listenElement, 'mousemove', onMouseMove);\n //bubblesContainer.classList.remove('no-select');\n\n // ! CANCEL USER SELECTION !\n cancelSelection();\n };\n\n const documentListenerOptions = {once: true};\n this.listenerSetter.add(this.listenElement)('mousemove', onMouseMove);\n this.listenerSetter.add(document)('mouseup', onMouseUp, documentListenerOptions);\n });\n }\n\n protected isElementShouldBeSelected(element: HTMLElement) {\n return this.isMidSelected(+element.dataset.peerId, +element.dataset.mid);\n }\n\n protected appendCheckbox(element: HTMLElement, checkboxField: CheckboxField) {\n element.prepend(checkboxField.label);\n }\n\n public toggleElementCheckbox(element: HTMLElement, show: boolean) {\n const hasCheckbox = !!this.getCheckboxInputFromElement(element);\n if(show) {\n if(hasCheckbox) {\n return false;\n }\n \n const checkboxField = new CheckboxField({\n name: element.dataset.mid, \n round: true\n });\n \n // * if it is a render of new message\n if(this.isSelecting) { // ! avoid breaking animation on start\n if(this.isElementShouldBeSelected(element)) {\n checkboxField.input.checked = true;\n element.classList.add('is-selected');\n }\n }\n \n this.appendCheckbox(element, checkboxField);\n } else if(hasCheckbox) {\n this.getCheckboxInputFromElement(element).parentElement.remove();\n }\n\n return true;\n }\n\n protected getCheckboxInputFromElement(element: HTMLElement): HTMLInputElement {\n return element.firstElementChild?.tagName === 'LABEL' && \n element.firstElementChild.firstElementChild as HTMLInputElement;\n }\n\n protected updateContainer(forceSelection = false) {\n const size = this.selectedMids.size;\n if(!size && !forceSelection) return;\n \n let cantForward = !size, \n cantDelete = !size, \n cantSend = !size;\n for(const [peerId, mids] of this.selectedMids) {\n const storage = this.isScheduled ? this.appMessagesManager.getScheduledMessagesStorage(peerId) : this.appMessagesManager.getMessagesStorage(peerId);\n for(const mid of mids) {\n const message = this.appMessagesManager.getMessageFromStorage(storage, mid);\n if(!cantForward) {\n if(message.action) {\n cantForward = true;\n }\n }\n \n if(!cantDelete) {\n const canDelete = this.appMessagesManager.canDeleteMessage(message);\n if(!canDelete) {\n cantDelete = true;\n }\n }\n\n if(cantForward && cantDelete) break;\n }\n\n if(cantForward && cantDelete) break;\n }\n \n this.onUpdateContainer && this.onUpdateContainer(cantForward, cantDelete, cantSend);\n }\n\n public toggleSelection(toggleCheckboxes = true, forceSelection = false) {\n const wasSelecting = this.isSelecting;\n const size = this.selectedMids.size;\n this.isSelecting = !!size || forceSelection;\n\n if(wasSelecting === this.isSelecting) return false;\n \n // const bubblesContainer = this.bubbles.bubblesContainer;\n //bubblesContainer.classList.toggle('is-selecting', !!size);\n\n /* if(bubblesContainer.classList.contains('is-chat-input-hidden')) {\n const scrollable = this.appImManager.scrollable;\n if(scrollable.isScrolledDown) {\n scrollable.scrollTo(scrollable.scrollHeight, 'top', true, true, 200);\n }\n } */\n\n if(!IS_TOUCH_SUPPORTED) {\n this.listenElement.classList.toggle('no-select', this.isSelecting);\n\n if(wasSelecting) {\n // ! CANCEL USER SELECTION !\n cancelSelection();\n }\n }/* else {\n if(!wasSelecting) {\n bubblesContainer.classList.add('no-select');\n setTimeout(() => {\n cancelSelection();\n bubblesContainer.classList.remove('no-select');\n cancelSelection();\n }, 100);\n }\n } */\n\n blurActiveElement();\n\n const forwards = !!size || forceSelection;\n this.onToggleSelection && this.onToggleSelection(forwards);\n\n if(!IS_MOBILE_SAFARI) {\n if(forwards) {\n appNavigationController.pushItem({\n type: this.navigationType,\n onPop: () => {\n this.cancelSelection();\n }\n });\n } else {\n appNavigationController.removeByType(this.navigationType);\n }\n }\n\n if(forceSelection) {\n this.updateContainer(forceSelection);\n }\n\n return true;\n }\n\n public cancelSelection = () => {\n this.onCancelSelection && this.onCancelSelection();\n this.selectedMids.clear();\n this.toggleSelection();\n cancelSelection();\n };\n\n public cleanup() {\n this.selectedMids.clear();\n this.toggleSelection(false);\n }\n\n protected updateElementSelection(element: HTMLElement, isSelected: boolean) {\n this.toggleElementCheckbox(element, true);\n const input = this.getCheckboxInputFromElement(element);\n input.checked = isSelected;\n\n this.toggleSelection();\n this.updateContainer();\n SetTransition(element, 'is-selected', isSelected, 200);\n }\n\n public isMidSelected(peerId: number, mid: number) {\n const set = this.selectedMids.get(peerId);\n return set?.has(mid);\n }\n\n public length() {\n return accumulateMapSet(this.selectedMids);\n }\n\n protected toggleMid(peerId: number, mid: number, unselect?: boolean) {\n let set = this.selectedMids.get(peerId);\n if(unselect || (unselect === undefined && set?.has(mid))) {\n if(set) {\n set.delete(mid);\n\n if(!set.size) {\n this.selectedMids.delete(peerId);\n }\n }\n } else {\n const diff = rootScope.config.forwarded_count_max - this.length() - 1;\n if(diff < 0) {\n toast(I18n.format('Chat.Selection.LimitToast', true));\n return false;\n /* const it = this.selectedMids.values();\n do {\n const mid = it.next().value;\n const mounted = this.appImManager.getMountedBubble(mid);\n if(mounted) {\n this.toggleByBubble(mounted.bubble);\n } else {\n const mids = this.appMessagesManager.getMidsByMid(mid);\n for(const mid of mids) {\n this.selectedMids.delete(mid);\n }\n }\n } while(this.selectedMids.size > MAX_SELECTION_LENGTH); */\n }\n\n if(!set) {\n set = new Set();\n this.selectedMids.set(peerId, set);\n }\n\n set.add(mid);\n }\n\n return true;\n }\n\n /**\n * ! Call this method only to handle deleted messages\n */\n public deleteSelectedMids(peerId: number, mids: number[]) {\n const set = this.selectedMids.get(peerId);\n if(!set) {\n return;\n }\n\n mids.forEach(mid => {\n set.delete(mid);\n });\n\n if(!set.size) {\n this.selectedMids.delete(peerId);\n }\n\n this.updateContainer();\n this.toggleSelection();\n }\n}\n\nexport class SearchSelection extends AppSelection {\n protected selectionContainer: HTMLElement;\n protected selectionCountEl: HTMLElement;\n public selectionForwardBtn: HTMLElement;\n public selectionDeleteBtn: HTMLElement;\n public selectionGotoBtn: HTMLElement;\n\n private isPrivate: boolean;\n\n constructor(private searchSuper: AppSearchSuper, appMessagesManager: AppMessagesManager) {\n super({\n appMessagesManager,\n listenElement: searchSuper.container,\n listenerSetter: new ListenerSetter(),\n verifyTarget: (e, target) => !!target && this.isSelecting,\n getElementFromTarget: (target) => findUpClassName(target, 'search-super-item'),\n targetLookupClassName: 'search-super-item',\n lookupBetweenParentClassName: 'tabs-tab',\n lookupBetweenElementsQuery: '.search-super-item'\n });\n\n this.isPrivate = !searchSuper.showSender;\n }\n\n /* public appendCheckbox(element: HTMLElement, checkboxField: CheckboxField) {\n checkboxField.label.classList.add('bubble-select-checkbox');\n\n if(element.classList.contains('document') || element.tagName === 'AUDIO-ELEMENT') {\n element.querySelector('.document, audio-element').append(checkboxField.label);\n } else {\n super.appendCheckbox(bubble, checkboxField);\n }\n } */\n\n public toggleSelection(toggleCheckboxes = true, forceSelection = false) {\n const ret = super.toggleSelection(toggleCheckboxes, forceSelection);\n\n if(ret && toggleCheckboxes) {\n const elements = Array.from(this.searchSuper.tabsContainer.querySelectorAll('.search-super-item')) as HTMLElement[];\n elements.forEach(element => {\n this.toggleElementCheckbox(element, this.isSelecting);\n });\n }\n\n return ret;\n }\n\n public toggleByElement = (element: HTMLElement) => {\n const mid = +element.dataset.mid;\n const peerId = +element.dataset.peerId;\n\n if(!this.toggleMid(peerId, mid)) {\n return;\n }\n\n this.updateElementSelection(element, this.isMidSelected(peerId, mid));\n };\n\n public toggleByMid = (peerId: number, mid: number) => {\n const element = this.searchSuper.mediaTab.contentTab.querySelector(`.search-super-item[data-peer-id=\"${peerId}\"][data-mid=\"${mid}\"]`) as HTMLElement;\n this.toggleByElement(element);\n };\n\n protected onUpdateContainer = (cantForward: boolean, cantDelete: boolean, cantSend: boolean) => {\n const length = this.length();\n replaceContent(this.selectionCountEl, i18n('messages', [length]));\n this.selectionGotoBtn.classList.toggle('hide', length !== 1);\n this.selectionForwardBtn.classList.toggle('hide', cantForward);\n this.selectionDeleteBtn && this.selectionDeleteBtn.classList.toggle('hide', cantDelete);\n };\n\n protected onToggleSelection = (forwards: boolean) => {\n SetTransition(this.searchSuper.navScrollableContainer, 'is-selecting', forwards, 200, () => {\n if(!this.isSelecting) {\n this.selectionContainer.remove();\n this.selectionContainer = \n this.selectionForwardBtn = \n this.selectionDeleteBtn = \n null;\n this.selectedText = undefined;\n }\n });\n\n SetTransition(this.searchSuper.container, 'is-selecting', forwards, 200);\n\n if(this.isSelecting) {\n if(!this.selectionContainer) {\n const BASE_CLASS = 'search-super-selection';\n this.selectionContainer = document.createElement('div');\n this.selectionContainer.classList.add(BASE_CLASS + '-container');\n\n const btnCancel = ButtonIcon(`close ${BASE_CLASS}-cancel`, {noRipple: true});\n this.listenerSetter.add(btnCancel)('click', this.cancelSelection, {once: true});\n\n this.selectionCountEl = document.createElement('div');\n this.selectionCountEl.classList.add(BASE_CLASS + '-count');\n\n this.selectionGotoBtn = ButtonIcon(`message ${BASE_CLASS}-goto`);\n\n const attachClickOptions: AttachClickOptions = {listenerSetter: this.listenerSetter};\n attachClickEvent(this.selectionGotoBtn, () => {\n const peerId = [...this.selectedMids.keys()][0];\n const mid = [...this.selectedMids.get(peerId)][0];\n this.cancelSelection();\n\n rootScope.dispatchEvent('history_focus', {\n peerId,\n mid\n });\n }, attachClickOptions);\n\n this.selectionForwardBtn = ButtonIcon(`forward ${BASE_CLASS}-forward`);\n attachClickEvent(this.selectionForwardBtn, () => {\n const obj: {[fromPeerId: number]: number[]} = {};\n for(const [fromPeerId, mids] of this.selectedMids) {\n obj[fromPeerId] = Array.from(mids);\n }\n\n new PopupForward(obj, () => {\n this.cancelSelection();\n });\n }, attachClickOptions);\n\n if(this.isPrivate) {\n this.selectionDeleteBtn = ButtonIcon(`delete danger ${BASE_CLASS}-delete`);\n attachClickEvent(this.selectionDeleteBtn, () => {\n const peerId = [...this.selectedMids.keys()][0];\n new PopupDeleteMessages(peerId, [...this.selectedMids.get(peerId)], 'chat', () => {\n this.cancelSelection();\n });\n }, attachClickOptions);\n }\n\n this.selectionContainer.append(...[\n btnCancel, \n this.selectionCountEl, \n this.selectionGotoBtn, \n this.selectionForwardBtn, \n this.selectionDeleteBtn\n ].filter(Boolean));\n\n const transitionElement = this.selectionContainer;\n transitionElement.style.opacity = '0';\n this.searchSuper.navScrollableContainer.append(transitionElement);\n\n void transitionElement.offsetLeft; // reflow\n transitionElement.style.opacity = '';\n }\n }\n };\n}\n\nexport default class ChatSelection extends AppSelection {\n protected selectionInputWrapper: HTMLElement;\n protected selectionContainer: HTMLElement;\n protected selectionCountEl: HTMLElement;\n public selectionSendNowBtn: HTMLElement;\n public selectionForwardBtn: HTMLElement;\n public selectionDeleteBtn: HTMLElement;\n\n constructor(private chat: Chat, private bubbles: ChatBubbles, private input: ChatInput, appMessagesManager: AppMessagesManager) {\n super({\n appMessagesManager,\n listenElement: bubbles.bubblesContainer,\n listenerSetter: bubbles.listenerSetter,\n getElementFromTarget: (target) => findUpClassName(target, 'grouped-item') || findUpClassName(target, 'bubble'),\n verifyTarget: (e, target) => {\n // LEFT BUTTON\n // проверка внизу нужна для того, чтобы не активировать селект если target потомок .bubble\n const bad = !this.selectedMids.size \n && !(e.target as HTMLElement).classList.contains('bubble')\n && !(e.target as HTMLElement).classList.contains('document-selection')\n && target;\n\n return !bad;\n },\n verifyMouseMoveTarget: (e, element, selecting) => {\n const bad = e.target !== element && \n !(e.target as HTMLElement).classList.contains('document-selection') && \n selecting === undefined && \n !this.selectedMids.size;\n return !bad;\n },\n verifyTouchLongPress: () => !this.chat.input.recording,\n targetLookupClassName: 'bubble',\n lookupBetweenParentClassName: 'bubbles-inner',\n lookupBetweenElementsQuery: '.bubble:not(.is-multiple-documents), .grouped-item',\n isScheduled: chat.type === 'scheduled'\n });\n }\n\n public appendCheckbox(bubble: HTMLElement, checkboxField: CheckboxField) {\n checkboxField.label.classList.add('bubble-select-checkbox');\n\n if(bubble.classList.contains('document-container')) {\n bubble.querySelector('.document, audio-element').append(checkboxField.label);\n } else {\n super.appendCheckbox(bubble, checkboxField);\n }\n }\n\n public toggleSelection(toggleCheckboxes = true, forceSelection = false) {\n const ret = super.toggleSelection(toggleCheckboxes, forceSelection);\n\n if(ret && toggleCheckboxes) {\n for(const mid in this.bubbles.bubbles) {\n const bubble = this.bubbles.bubbles[mid];\n this.toggleElementCheckbox(bubble, this.isSelecting);\n }\n }\n\n return ret;\n }\n\n public toggleElementCheckbox(bubble: HTMLElement, show: boolean) {\n if(!this.canSelectBubble(bubble)) return;\n\n const ret = super.toggleElementCheckbox(bubble, show);\n if(ret) {\n const isGrouped = bubble.classList.contains('is-grouped');\n if(isGrouped) {\n this.bubbles.getBubbleGroupedItems(bubble).forEach(item => this.toggleElementCheckbox(item, show));\n }\n }\n \n return ret;\n }\n\n public toggleByElement = (bubble: HTMLElement) => {\n if(!this.canSelectBubble(bubble)) return;\n\n const mid = +bubble.dataset.mid;\n\n const isGrouped = bubble.classList.contains('is-grouped');\n if(isGrouped) {\n if(!this.isGroupedBubbleSelected(bubble)) {\n const set = this.selectedMids.get(this.bubbles.peerId);\n if(set) {\n const mids = this.chat.getMidsByMid(mid);\n mids.forEach(mid => set.delete(mid));\n }\n }\n\n this.bubbles.getBubbleGroupedItems(bubble).forEach(this.toggleByElement);\n return;\n }\n\n if(!this.toggleMid(this.bubbles.peerId, mid)) {\n return;\n }\n\n const isGroupedItem = bubble.classList.contains('grouped-item');\n if(isGroupedItem) {\n const groupContainer = findUpClassName(bubble, 'bubble');\n const isGroupedSelected = this.isGroupedBubbleSelected(groupContainer);\n const isGroupedMidsSelected = this.isGroupedMidsSelected(mid);\n\n const willChange = isGroupedMidsSelected || isGroupedSelected;\n if(willChange) {\n this.updateElementSelection(groupContainer, isGroupedMidsSelected);\n }\n }\n\n this.updateElementSelection(bubble, this.isMidSelected(this.bubbles.peerId, mid));\n };\n\n protected toggleByMid = (peerId: number, mid: number) => {\n const mounted = this.bubbles.getMountedBubble(mid);\n if(mounted) {\n this.toggleByElement(mounted.bubble);\n }\n };\n\n public isElementShouldBeSelected(element: HTMLElement) {\n const isGrouped = element.classList.contains('is-grouped');\n return super.isElementShouldBeSelected(element) && (!isGrouped || this.isGroupedMidsSelected(+element.dataset.mid));\n }\n\n protected isGroupedBubbleSelected(bubble: HTMLElement) {\n const groupedCheckboxInput = this.getCheckboxInputFromElement(bubble);\n return groupedCheckboxInput?.checked;\n }\n\n protected isGroupedMidsSelected(mid: number) {\n const mids = this.chat.getMidsByMid(mid);\n const selectedMids = mids.filter(mid => this.isMidSelected(this.bubbles.peerId, mid));\n return mids.length === selectedMids.length;\n }\n\n protected getCheckboxInputFromElement(bubble: HTMLElement) {\n /* let perf = performance.now();\n let checkbox = bubble.firstElementChild.tagName === 'LABEL' && bubble.firstElementChild.firstElementChild as HTMLInputElement;\n console.log('getCheckboxInputFromBubble firstElementChild time:', performance.now() - perf);\n \n perf = performance.now();\n checkbox = bubble.querySelector('label input');\n console.log('getCheckboxInputFromBubble querySelector time:', performance.now() - perf); */\n /* let perf = performance.now();\n let contains = bubble.classList.contains('document-container');\n console.log('getCheckboxInputFromBubble classList time:', performance.now() - perf);\n \n perf = performance.now();\n contains = bubble.className.includes('document-container');\n console.log('getCheckboxInputFromBubble className time:', performance.now() - perf); */\n \n return bubble.classList.contains('document-container') ? \n bubble.querySelector('label input') as HTMLInputElement : \n super.getCheckboxInputFromElement(bubble);\n }\n\n public canSelectBubble(bubble: HTMLElement) {\n return !bubble.classList.contains('service') && !bubble.classList.contains('is-sending') && !bubble.classList.contains('bubble-first');\n }\n\n protected onToggleSelection = (forwards: boolean) => {\n let transform = '', borderRadius = '';\n if(forwards) {\n const p = this.input.rowsWrapper.parentElement;\n const fakeSelectionWrapper = p.querySelector('.fake-selection-wrapper');\n const fakeRowsWrapper = p.querySelector('.fake-rows-wrapper');\n const fakeSelectionRect = fakeSelectionWrapper.getBoundingClientRect();\n const fakeRowsRect = fakeRowsWrapper.getBoundingClientRect();\n const widthFrom = fakeRowsRect.width;\n const widthTo = fakeSelectionRect.width;\n\n if(widthFrom !== widthTo) {\n const scale = (widthTo/* - 8 */) / widthFrom;\n const initTranslateX = (widthFrom - widthTo) / 2;\n const needTranslateX = fakeSelectionRect.left - fakeRowsRect.left - initTranslateX;\n transform = `translateX(${needTranslateX}px) scaleX(${scale})`;\n\n if(scale < 1) {\n const br = 12;\n borderRadius = '' + (br + br * (1 - scale)) + 'px';\n }\n //scale = widthTo / widthFrom;\n }\n }\n\n SetTransition(this.input.rowsWrapper, 'is-centering', forwards, 200);\n this.input.rowsWrapper.style.transform = transform;\n this.input.rowsWrapper.style.borderRadius = borderRadius;\n SetTransition(this.listenElement, 'is-selecting', forwards, 200, () => {\n if(!this.isSelecting) {\n this.selectionInputWrapper.remove();\n this.selectionInputWrapper = \n this.selectionContainer = \n this.selectionSendNowBtn = \n this.selectionForwardBtn = \n this.selectionDeleteBtn = \n null;\n this.selectedText = undefined;\n }\n \n fastRaf(() => {\n this.bubbles.onScroll();\n });\n });\n\n //const chatInput = this.appImManager.chatInput;\n\n if(this.isSelecting) {\n if(!this.selectionContainer) {\n this.selectionInputWrapper = document.createElement('div');\n this.selectionInputWrapper.classList.add('chat-input-wrapper', 'selection-wrapper');\n\n this.selectionContainer = document.createElement('div');\n this.selectionContainer.classList.add('selection-container');\n\n const attachClickOptions: AttachClickOptions = {listenerSetter: this.listenerSetter};\n const btnCancel = ButtonIcon('close', {noRipple: true});\n attachClickEvent(btnCancel, this.cancelSelection, {once: true, listenerSetter: this.listenerSetter});\n\n this.selectionCountEl = document.createElement('div');\n this.selectionCountEl.classList.add('selection-container-count');\n\n if(this.chat.type === 'scheduled') {\n this.selectionSendNowBtn = Button('btn-primary btn-transparent btn-short text-bold selection-container-send', {icon: 'send2'});\n this.selectionSendNowBtn.append(i18n('MessageScheduleSend'));\n attachClickEvent(this.selectionSendNowBtn, () => {\n new PopupSendNow(this.bubbles.peerId, [...this.selectedMids.get(this.bubbles.peerId)], () => {\n this.cancelSelection();\n });\n }, attachClickOptions);\n } else {\n this.selectionForwardBtn = Button('btn-primary btn-transparent text-bold selection-container-forward', {icon: 'forward'});\n this.selectionForwardBtn.append(i18n('Forward'));\n attachClickEvent(this.selectionForwardBtn, () => {\n const obj: {[fromPeerId: number]: number[]} = {};\n for(const [fromPeerId, mids] of this.selectedMids) {\n obj[fromPeerId] = Array.from(mids);\n }\n\n new PopupForward(obj, () => {\n this.cancelSelection();\n });\n }, attachClickOptions);\n }\n\n this.selectionDeleteBtn = Button('btn-primary btn-transparent danger text-bold selection-container-delete', {icon: 'delete'});\n this.selectionDeleteBtn.append(i18n('Delete'));\n attachClickEvent(this.selectionDeleteBtn, () => {\n new PopupDeleteMessages(this.bubbles.peerId, [...this.selectedMids.get(this.bubbles.peerId)], this.chat.type, () => {\n this.cancelSelection();\n });\n }, attachClickOptions);\n\n this.selectionContainer.append(...[\n btnCancel, \n this.selectionCountEl, \n this.selectionSendNowBtn, \n this.selectionForwardBtn, \n this.selectionDeleteBtn\n ].filter(Boolean));\n\n this.selectionInputWrapper.style.opacity = '0';\n this.selectionInputWrapper.append(this.selectionContainer);\n this.input.rowsWrapper.parentElement.append(this.selectionInputWrapper);\n\n void this.selectionInputWrapper.offsetLeft; // reflow\n this.selectionInputWrapper.style.opacity = '';\n }\n }\n };\n\n protected onUpdateContainer = (cantForward: boolean, cantDelete: boolean, cantSend: boolean) => {\n replaceContent(this.selectionCountEl, i18n('messages', [this.length()]));\n this.selectionSendNowBtn && this.selectionSendNowBtn.toggleAttribute('disabled', cantSend);\n this.selectionForwardBtn && this.selectionForwardBtn.toggleAttribute('disabled', cantForward);\n this.selectionDeleteBtn.toggleAttribute('disabled', cantDelete);\n };\n\n protected onCancelSelection = () => {\n for(const [peerId, mids] of this.selectedMids) {\n for(const mid of mids) {\n const mounted = this.bubbles.getMountedBubble(mid);\n if(mounted) {\n //this.toggleByBubble(mounted.message.grouped_id ? mounted.bubble.querySelector(`.grouped-item[data-mid=\"${mid}\"]`) : mounted.bubble);\n this.toggleByElement(mounted.bubble);\n }\n /* const bubble = this.appImManager.bubbles[mid];\n if(bubble) {\n this.toggleByBubble(bubble);\n } */\n }\n }\n };\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function getSelectedText(): string {\r\n if(window.getSelection) {\r\n return window.getSelection().toString();\r\n // @ts-ignore\r\n } else if(document.selection) {\r\n // @ts-ignore\r\n return document.selection.createRange().text;\r\n }\r\n \r\n return '';\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { copy, getObjectKeysAndSort, safeAssign } from \"../helpers/object\";\nimport { escapeRegExp, limitSymbols } from \"../helpers/string\";\nimport appChatsManager from \"../lib/appManagers/appChatsManager\";\nimport appDialogsManager from \"../lib/appManagers/appDialogsManager\";\nimport appMessagesManager, { MyInputMessagesFilter, MyMessage } from \"../lib/appManagers/appMessagesManager\";\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\nimport appStateManager from \"../lib/appManagers/appStateManager\";\nimport appUsersManager from \"../lib/appManagers/appUsersManager\";\nimport { logger } from \"../lib/logger\";\nimport RichTextProcessor from \"../lib/richtextprocessor\";\nimport rootScope from \"../lib/rootScope\";\nimport { SearchGroup, SearchGroupType } from \"./appSearch\";\nimport { horizontalMenu } from \"./horizontalMenu\";\nimport LazyLoadQueue from \"./lazyLoadQueue\";\nimport { attachContextMenuListener, openBtnMenu, positionMenu, putPreloader } from \"./misc\";\nimport { ripple } from \"./ripple\";\nimport Scrollable, { ScrollableX } from \"./scrollable\";\nimport { wrapDocument, wrapPhoto, wrapVideo } from \"./wrappers\";\nimport useHeavyAnimationCheck, { getHeavyAnimationPromise } from \"../hooks/useHeavyAnimationCheck\";\nimport I18n, { LangPackKey, i18n } from \"../lib/langPack\";\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\nimport { getMiddleware } from \"../helpers/middleware\";\nimport appProfileManager from \"../lib/appManagers/appProfileManager\";\nimport { ChannelParticipant, ChatFull, ChatParticipant, ChatParticipants } from \"../layer\";\nimport SortedUserList from \"./sortedUserList\";\nimport findUpTag from \"../helpers/dom/findUpTag\";\nimport appSidebarRight from \"./sidebarRight\";\nimport mediaSizes from \"../helpers/mediaSizes\";\nimport appImManager from \"../lib/appManagers/appImManager\";\nimport positionElementByIndex from \"../helpers/dom/positionElementByIndex\";\nimport cleanSearchText from \"../helpers/cleanSearchText\";\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\nimport handleTabSwipe from \"../helpers/dom/handleTabSwipe\";\nimport windowSize from \"../helpers/windowSize\";\nimport { formatPhoneNumber } from \"../helpers/formatPhoneNumber\";\nimport ButtonMenu, { ButtonMenuItemOptions } from \"./buttonMenu\";\nimport PopupForward from \"./popups/forward\";\nimport PopupDeleteMessages from \"./popups/deleteMessages\";\nimport Row from \"./row\";\nimport htmlToDocumentFragment from \"../helpers/dom/htmlToDocumentFragment\";\nimport { SearchSelection } from \"./chat/selection\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport { attachClickEvent, simulateClickEvent } from \"../helpers/dom/clickEvent\";\nimport { MyDocument } from \"../lib/appManagers/appDocsManager\";\nimport AppMediaViewer from \"./appMediaViewer\";\n\n//const testScroll = false;\n\nexport type SearchSuperType = MyInputMessagesFilter/* | 'members' */;\nexport type SearchSuperContext = {\n peerId: number,\n inputFilter: {_: MyInputMessagesFilter},\n query?: string,\n maxId?: number,\n folderId?: number,\n threadId?: number,\n date?: number,\n nextRate?: number,\n minDate?: number,\n maxDate?: number\n};\n\nexport type SearchSuperMediaType = 'members' | 'media' | 'files' | 'links' | 'music' | 'chats' | 'voice';\nexport type SearchSuperMediaTab = {\n inputFilter: SearchSuperType,\n name: LangPackKey,\n type: SearchSuperMediaType,\n contentTab?: HTMLElement,\n menuTab?: HTMLElement,\n scroll?: {scrollTop: number, scrollHeight: number}\n};\n\nclass SearchContextMenu {\n private buttons: (ButtonMenuItemOptions & {verify?: () => boolean, withSelection?: true})[];\n private element: HTMLElement;\n private target: HTMLElement;\n private peerId: number;\n private mid: number;\n private isSelected: boolean;\n\n constructor(\n private attachTo: HTMLElement,\n private searchSuper: AppSearchSuper\n ) {\n const onContextMenu = (e: MouseEvent) => {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n let item: HTMLElement;\n try {\n item = findUpClassName(e.target, 'search-super-item');\n } catch(e) {}\n\n if(!item) return;\n\n if(e instanceof MouseEvent) e.preventDefault();\n if(this.element.classList.contains('active')) {\n return false;\n }\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n this.target = item;\n this.peerId = +item.dataset.peerId;\n this.mid = +item.dataset.mid;\n this.isSelected = searchSuper.selection.isMidSelected(this.peerId, this.mid);\n\n this.buttons.forEach(button => {\n let good: boolean;\n\n if(this.isSelected && !button.withSelection) {\n good = false;\n } else {\n good = button.verify ? button.verify() : true;\n }\n\n button.element.classList.toggle('hide', !good);\n });\n\n item.classList.add('menu-open');\n\n positionMenu(e, this.element);\n openBtnMenu(this.element, () => {\n item.classList.remove('menu-open');\n });\n };\n\n if(IS_TOUCH_SUPPORTED) {\n\n } else {\n attachContextMenuListener(attachTo, onContextMenu as any);\n }\n }\n\n private init() {\n this.buttons = [{\n icon: 'forward',\n text: 'Forward',\n onClick: this.onForwardClick\n }, {\n icon: 'forward',\n text: 'Message.Context.Selection.Forward',\n onClick: this.onForwardClick,\n verify: () => this.isSelected && \n !this.searchSuper.selection.selectionForwardBtn.classList.contains('hide'),\n withSelection: true\n }, {\n icon: 'message',\n text: 'Message.Context.Goto',\n onClick: this.onGotoClick,\n withSelection: true\n }, {\n icon: 'select',\n text: 'Message.Context.Select',\n onClick: this.onSelectClick\n }, {\n icon: 'select',\n text: 'Message.Context.Selection.Clear',\n onClick: this.onClearSelectionClick,\n verify: () => this.isSelected,\n withSelection: true\n }, {\n icon: 'delete danger',\n text: 'Delete',\n onClick: this.onDeleteClick,\n verify: () => appMessagesManager.canDeleteMessage(appMessagesManager.getMessageByPeer(this.peerId, this.mid))\n }, {\n icon: 'delete danger',\n text: 'Message.Context.Selection.Delete',\n onClick: this.onDeleteClick,\n verify: () => this.isSelected && !this.searchSuper.selection.selectionDeleteBtn.classList.contains('hide'),\n withSelection: true\n }];\n\n this.element = ButtonMenu(this.buttons);\n this.element.classList.add('search-contextmenu', 'contextmenu');\n document.getElementById('page-chats').append(this.element);\n }\n\n private onGotoClick = () => {\n rootScope.dispatchEvent('history_focus', {\n peerId: this.peerId,\n mid: this.mid,\n threadId: this.searchSuper.searchContext.threadId\n });\n };\n\n private onForwardClick = () => {\n if(this.searchSuper.selection.isSelecting) {\n simulateClickEvent(this.searchSuper.selection.selectionForwardBtn);\n } else {\n new PopupForward({\n [this.peerId]: [this.mid]\n });\n }\n };\n\n private onSelectClick = () => {\n this.searchSuper.selection.toggleByElement(this.target);\n };\n\n private onClearSelectionClick = () => {\n this.searchSuper.selection.cancelSelection();\n };\n\n private onDeleteClick = () => {\n if(this.searchSuper.selection.isSelecting) {\n simulateClickEvent(this.searchSuper.selection.selectionDeleteBtn);\n } else {\n new PopupDeleteMessages(this.peerId, [this.mid], 'chat');\n }\n };\n}\n\nexport default class AppSearchSuper {\n public tabs: {[t in SearchSuperType]: HTMLDivElement} = {} as any;\n\n public mediaTab: SearchSuperMediaTab;\n\n public container: HTMLElement;\n public nav: HTMLElement;\n public navScrollableContainer: HTMLDivElement;\n public tabsContainer: HTMLElement;\n public navScrollable: ScrollableX;\n private tabsMenu: HTMLElement;\n private prevTabId = -1;\n \n private lazyLoadQueue = new LazyLoadQueue();\n public middleware = getMiddleware();\n\n public historyStorage: Partial<{[type in SearchSuperType]: {mid: number, peerId: number}[]}> = {};\n public usedFromHistory: Partial<{[type in SearchSuperType]: number}> = {};\n public urlsToRevoke: string[] = [];\n\n public searchContext: SearchSuperContext;\n public loadMutex: Promise = Promise.resolve();\n\n private nextRates: Partial<{[type in SearchSuperType]: number}> = {};\n private loadPromises: Partial<{[type in SearchSuperType]: Promise}> = {};\n private loaded: Partial<{[type in SearchSuperType]: boolean}> = {};\n private loadedChats = false;\n private firstLoad = true;\n\n private log = logger('SEARCH-SUPER');\n public selectTab: ReturnType;\n \n private monthContainers: Partial<{\n [type in SearchSuperType]: {\n [timestamp: number]: {\n container: HTMLElement,\n items: HTMLElement\n }\n }\n }> = {};\n\n private searchGroupMedia: SearchGroup;\n\n public mediaTabsMap: Map = new Map();\n\n private membersList: SortedUserList;\n\n private skipScroll: boolean;\n\n // * arguments\n public mediaTabs: SearchSuperMediaTab[];\n public scrollable: Scrollable;\n public searchGroups?: {[group in SearchGroupType]: SearchGroup};\n public asChatList? = false;\n public groupByMonth? = true;\n public hideEmptyTabs? = true;\n public onChangeTab?: (mediaTab: SearchSuperMediaTab) => void;\n public showSender? = false;\n\n private searchContextMenu: SearchContextMenu;\n public selection: SearchSelection;\n\n constructor(options: Pick) {\n safeAssign(this, options);\n\n this.container = document.createElement('div');\n this.container.classList.add('search-super');\n\n this.searchContextMenu = new SearchContextMenu(this.container, this);\n this.selection = new SearchSelection(this, appMessagesManager);\n\n const navScrollableContainer = this.navScrollableContainer = document.createElement('div');\n navScrollableContainer.classList.add('search-super-tabs-scrollable', 'menu-horizontal-scrollable', 'sticky');\n\n const navScrollable = this.navScrollable = new ScrollableX(navScrollableContainer);\n navScrollable.container.classList.add('search-super-nav-scrollable');\n\n const nav = this.nav = document.createElement('nav');\n nav.classList.add('search-super-tabs', 'menu-horizontal-div');\n this.tabsMenu = nav;\n\n navScrollable.container.append(nav);\n\n for(const mediaTab of this.mediaTabs) {\n const menuTab = document.createElement('div');\n menuTab.classList.add('menu-horizontal-div-item');\n const span = document.createElement('span');\n const i = document.createElement('i');\n\n span.append(i18n(mediaTab.name));\n span.append(i);\n\n menuTab.append(span);\n\n ripple(menuTab);\n\n this.tabsMenu.append(menuTab);\n\n this.mediaTabsMap.set(mediaTab.type, mediaTab);\n\n mediaTab.menuTab = menuTab;\n }\n\n this.tabsContainer = document.createElement('div');\n this.tabsContainer.classList.add('search-super-tabs-container', 'tabs-container');\n\n if(IS_TOUCH_SUPPORTED) {\n handleTabSwipe(this.tabsContainer, (next) => {\n const prevId = this.selectTab.prevId();\n this.selectTab(next ? prevId + 1 : prevId - 1);\n });\n }\n\n for(const mediaTab of this.mediaTabs) {\n const container = document.createElement('div');\n container.classList.add('search-super-container-' + mediaTab.type, 'tabs-tab');\n\n const content = document.createElement('div');\n content.classList.add('search-super-content-' + mediaTab.type);\n\n container.append(content);\n\n this.tabsContainer.append(container);\n\n this.tabs[mediaTab.inputFilter] = content;\n\n mediaTab.contentTab = content;\n }\n\n this.container.append(navScrollableContainer, this.tabsContainer);\n\n // * construct end\n\n this.searchGroupMedia = new SearchGroup(false, 'messages', true);\n\n this.scrollable.onScrolledBottom = () => {\n if(this.mediaTab.contentTab && this.mediaTab.contentTab.childElementCount/* && false */) {\n //this.log('onScrolledBottom will load media');\n this.load(true);\n }\n };\n //this.scroll.attachSentinels(undefined, 400);\n\n this.selectTab = horizontalMenu(this.tabsMenu, this.tabsContainer, (id, tabContent, animate) => {\n if(this.prevTabId === id && !this.skipScroll) {\n this.scrollable.scrollIntoViewNew(this.container, 'start');\n return;\n }\n \n const newMediaTab = this.mediaTabs[id];\n if(this.onChangeTab) {\n this.onChangeTab(newMediaTab);\n }\n \n const fromMediaTab = this.mediaTab;\n this.mediaTab = newMediaTab;\n\n if(this.prevTabId !== -1 && animate) {\n this.onTransitionStart();\n }\n\n if(this.skipScroll) {\n this.skipScroll = false;\n } else {\n const offsetTop = this.container.offsetTop;\n let scrollTop = this.scrollable.scrollTop;\n if(scrollTop < offsetTop) {\n this.scrollable.scrollIntoViewNew(this.container, 'start');\n scrollTop = offsetTop;\n }\n \n fromMediaTab.scroll = {scrollTop: scrollTop, scrollHeight: this.scrollable.scrollHeight};\n \n if(newMediaTab.scroll === undefined) {\n const rect = this.container.getBoundingClientRect();\n const rect2 = this.container.parentElement.getBoundingClientRect();\n const diff = rect.y - rect2.y;\n \n if(scrollTop > diff) {\n newMediaTab.scroll = {scrollTop: diff, scrollHeight: 0};\n }\n }\n \n if(newMediaTab.scroll) {\n const diff = fromMediaTab.scroll.scrollTop - newMediaTab.scroll.scrollTop;\n //console.log('what you gonna do', this.goingHard, diff);\n \n //this.scrollable.scrollTop = scrollTop;\n if(diff/* && diff < 0 */) {\n /* if(diff > -(fromMediaTab.contentTab.scrollHeight + this.nav.scrollHeight)) {\n fromMediaTab.contentTab.style.transform = `translateY(${diff}px)`;\n this.scrollable.scrollTop = scrollTop - diff;\n } else { */\n newMediaTab.contentTab.style.transform = `translateY(${diff}px)`;\n //}\n }\n }\n }\n \n /* if(this.prevTabId !== -1 && nav.offsetTop) {\n this.scrollable.scrollTop -= nav.offsetTop;\n } */\n\n /* this.log('setVirtualContainer', id, this.sharedMediaSelected, this.sharedMediaSelected.childElementCount);\n this.scroll.setVirtualContainer(this.sharedMediaSelected); */\n\n if(this.prevTabId !== -1 && !newMediaTab.contentTab.childElementCount) { // quick brown fix\n //this.contentContainer.classList.remove('loaded');\n this.load(true);\n }\n\n this.prevTabId = id;\n }, () => {\n this.scrollable.onScroll();\n \n //console.log('what y', this.tabSelected.style.transform);\n if(this.mediaTab.scroll !== undefined) {\n this.mediaTab.contentTab.style.transform = '';\n this.scrollable.scrollTop = this.mediaTab.scroll.scrollTop;\n }\n\n this.onTransitionEnd();\n }, undefined, navScrollable);\n\n attachClickEvent(this.tabsContainer, (e) => {\n if(this.selection.isSelecting) {\n cancelEvent(e);\n this.selection.toggleByElement(findUpClassName(e.target, 'search-super-item'));\n }\n }, {capture: true, passive: false});\n \n const onMediaClick = (className: string, targetClassName: string, inputFilter: MyInputMessagesFilter, e: MouseEvent) => {\n const target = findUpClassName(e.target as HTMLDivElement, className);\n if(!target) return;\n \n const mid = +target.dataset.mid;\n if(!mid) {\n this.log.warn('no messageId by click on target:', target);\n return;\n }\n\n const peerId = +target.dataset.peerId;\n\n const targets = (Array.from(this.tabs[inputFilter].querySelectorAll('.' + targetClassName)) as HTMLElement[]).map(el => {\n const containerEl = findUpClassName(el, className);\n return {\n element: el, \n mid: +containerEl.dataset.mid, \n peerId: +containerEl.dataset.peerId\n };\n });\n\n //const ids = Object.keys(this.mediaDivsByIds).map(k => +k).sort((a, b) => a - b);\n const idx = targets.findIndex(item => item.mid === mid && item.peerId === peerId);\n \n const message = appMessagesManager.getMessageByPeer(peerId, mid);\n new AppMediaViewer()\n .setSearchContext(this.copySearchContext(inputFilter))\n .openMedia(message, targets[idx].element, 0, false, targets.slice(0, idx), targets.slice(idx + 1));\n };\n\n attachClickEvent(this.tabs.inputMessagesFilterPhotoVideo, onMediaClick.bind(null, 'grid-item', 'grid-item', 'inputMessagesFilterPhotoVideo'));\n attachClickEvent(this.tabs.inputMessagesFilterDocument, onMediaClick.bind(null, 'document-with-thumb', 'media-container', 'inputMessagesFilterDocument'));\n\n /* attachClickEvent(this.tabs.inputMessagesFilterUrl, (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'A') {\n return;\n }\n\n try {\n const a = findUpClassName(target, 'row').querySelector('.anchor-url:last-child') as HTMLAnchorElement;\n a.click();\n } catch(err) {}\n }); */\n\n this.mediaTab = this.mediaTabs[0];\n\n useHeavyAnimationCheck(() => {\n this.lazyLoadQueue.lock();\n }, () => {\n this.lazyLoadQueue.unlockAndRefresh(); // ! maybe not so efficient\n });\n }\n\n private onTransitionStart = () => {\n this.container.classList.add('sliding');\n };\n\n private onTransitionEnd = () => {\n this.container.classList.remove('sliding');\n };\n\n public filterMessagesByType(messages: any[], type: SearchSuperType): MyMessage[] {\n if(type === 'inputMessagesFilterEmpty') return messages;\n\n if(type !== 'inputMessagesFilterUrl') {\n messages = messages.filter(message => !!message.media);\n }\n\n /* if(!this.peerId) {\n messages = messages.filter(message => {\n if(message.peerId === rootScope.myId) {\n return true;\n }\n\n const dialog = appMessagesManager.getDialogByPeerId(message.fromId)[0];\n return dialog && dialog.folder_id === 0;\n });\n } */\n\n let filtered: any[] = [];\n\n switch(type) {\n case 'inputMessagesFilterPhotoVideo': {\n for(let message of messages) {\n let media = message.media.photo || message.media.document || (message.media.webpage && message.media.webpage.document);\n if(!media) {\n //this.log('no media!', message);\n continue;\n }\n \n if(media._ === 'document' && media.type !== 'video'/* && media.type !== 'gif' */) {\n //this.log('broken video', media);\n continue;\n }\n\n filtered.push(message);\n }\n \n break;\n }\n\n case 'inputMessagesFilterDocument': {\n for(let message of messages) {\n if(!message.media.document || ['voice', 'audio', 'gif', 'sticker', 'round'].includes(message.media.document.type)) {\n continue;\n }\n \n filtered.push(message);\n }\n break;\n }\n\n case 'inputMessagesFilterUrl': {\n //this.log('inputMessagesFilterUrl', messages);\n for(let message of messages) {\n //if((message.media.webpage && message.media.webpage._ !== 'webPageEmpty')) {\n filtered.push(message);\n //}\n }\n \n break;\n }\n\n case 'inputMessagesFilterMusic': {\n for(let message of messages) {\n if(!message.media.document || message.media.document.type !== 'audio') {\n continue;\n }\n\n filtered.push(message);\n }\n\n break;\n }\n\n case 'inputMessagesFilterVoice': {\n for(let message of messages) {\n if(!message.media.document || message.media.document.type !== 'voice') {\n continue;\n }\n\n filtered.push(message);\n }\n\n break;\n }\n\n case 'inputMessagesFilterRoundVoice': {\n for(let message of messages) {\n if(!message.media.document || !(['voice', 'round'] as MyDocument['type'][]).includes(message.media.document.type)) {\n continue;\n }\n\n filtered.push(message);\n }\n\n break;\n }\n\n default:\n break;\n }\n\n return filtered;\n }\n \n public async performSearchResult(messages: any[], mediaTab: SearchSuperMediaTab, append = true) {\n const elemsToAppend: {element: HTMLElement, message: any}[] = [];\n const sharedMediaDiv: HTMLElement = mediaTab.contentTab;\n const promises: Promise[] = [];\n const middleware = this.middleware.get();\n let inputFilter = mediaTab.inputFilter;\n\n await getHeavyAnimationPromise();\n \n let searchGroup: SearchGroup;\n if(inputFilter === 'inputMessagesFilterPhotoVideo' && !!this.searchContext.query.trim()) {\n inputFilter = 'inputMessagesFilterEmpty';\n searchGroup = this.searchGroupMedia;\n sharedMediaDiv.append(searchGroup.container);\n } else if(inputFilter === 'inputMessagesFilterEmpty') {\n searchGroup = this.searchGroups.messages;\n }\n\n // https://core.telegram.org/type/MessagesFilter\n switch(inputFilter) {\n case 'inputMessagesFilterEmpty': {\n for(const message of messages) {\n const {dialog, dom} = appDialogsManager.addDialogNew({\n dialog: message.peerId, \n container: searchGroup.list, \n drawStatus: false,\n avatarSize: 54\n });\n appDialogsManager.setLastMessage(dialog, message, dom, this.searchContext.query);\n }\n\n if(searchGroup.list.childElementCount) {\n searchGroup.setActive();\n }\n break;\n }\n\n case 'inputMessagesFilterPhotoVideo': {\n for(const message of messages) {\n const media = message.media.photo || message.media.document || (message.media.webpage && message.media.webpage.document);\n\n const div = document.createElement('div');\n div.classList.add('grid-item');\n //this.log(message, photo);\n\n let wrapped: ReturnType;\n const size = appPhotosManager.choosePhotoSize(media, 200, 200);\n if(media._ !== 'photo') {\n wrapped = wrapVideo({\n doc: media,\n message,\n container: div,\n boxWidth: 0,\n boxHeight: 0,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n onlyPreview: true,\n withoutPreloader: true,\n noPlayButton: true,\n size\n }).thumb;\n } else {\n wrapped = wrapPhoto({\n photo: media,\n message,\n container: div,\n boxWidth: 0,\n boxHeight: 0,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n withoutPreloader: true,\n noBlur: true,\n size\n });\n }\n\n [wrapped.images.thumb, wrapped.images.full].filter(Boolean).forEach(image => {\n image.classList.add('grid-item-media');\n });\n\n promises.push(wrapped.loadPromises.thumb);\n\n elemsToAppend.push({element: div, message});\n }\n \n break;\n }\n \n case 'inputMessagesFilterVoice':\n case 'inputMessagesFilterRoundVoice':\n case 'inputMessagesFilterMusic':\n case 'inputMessagesFilterDocument': {\n for(const message of messages) {\n const showSender = this.showSender || (['voice', 'round'] as MyDocument['type'][]).includes(message.media.document.type);\n const div = wrapDocument({\n message,\n withTime: !showSender,\n fontWeight: 400,\n voiceAsMusic: true,\n showSender,\n searchContext: this.copySearchContext(inputFilter),\n lazyLoadQueue: this.lazyLoadQueue,\n noAutoDownload: true\n });\n\n if((['audio', 'voice', 'round'] as MyDocument['type'][]).includes(message.media.document.type)) {\n div.classList.add('audio-48');\n }\n\n elemsToAppend.push({element: div, message});\n }\n break;\n }\n \n case 'inputMessagesFilterUrl': {\n for(let message of messages) {\n let webpage: any;\n\n if(message.media?.webpage && message.media.webpage._ !== 'webPageEmpty') {\n webpage = message.media.webpage;\n } else {\n const entity = message.totalEntities ? message.totalEntities.find((e: any) => e._ === 'messageEntityUrl' || e._ === 'messageEntityTextUrl') : null;\n let url: string, display_url: string, sliced: string;\n\n if(!entity) {\n //this.log.error('NO ENTITY:', message);\n const match = RichTextProcessor.matchUrl(message.message);\n if(!match) {\n //this.log.error('NO ENTITY AND NO MATCH:', message);\n continue;\n }\n\n url = match[0];\n } else {\n sliced = message.message.slice(entity.offset, entity.offset + entity.length);\n }\n\n if(entity?._ === 'messageEntityTextUrl') {\n url = entity.url;\n //display_url = sliced;\n } else {\n url = url || sliced;\n }\n\n display_url = url;\n\n const same = message.message === url;\n if(!url.match(/^(ftp|http|https):\\/\\//)) {\n display_url = 'https://' + url;\n url = url.includes('@') ? url : 'https://' + url;\n }\n\n display_url = new URL(display_url).hostname;\n\n webpage = {\n url,\n display_url\n };\n\n if(!same) {\n webpage.description = message.message;\n webpage.rDescription = RichTextProcessor.wrapRichText(limitSymbols(message.message, 150, 180));\n }\n }\n\n let div = document.createElement('div');\n \n let previewDiv = document.createElement('div');\n previewDiv.classList.add('preview', 'row-media');\n \n //this.log('wrapping webpage', webpage);\n \n if(webpage.photo) {\n const res = wrapPhoto({\n container: previewDiv,\n message: null,\n photo: webpage.photo,\n boxWidth: 0,\n boxHeight: 0,\n withoutPreloader: true,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n size: appPhotosManager.choosePhotoSize(webpage.photo, 60, 60, false),\n loadPromises: promises,\n noBlur: true\n });\n } else {\n previewDiv.classList.add('empty');\n previewDiv.innerHTML = RichTextProcessor.getAbbreviation(webpage.title || webpage.display_url || webpage.description || webpage.url, true);\n }\n \n let title = webpage.rTitle || '';\n let subtitle = webpage.rDescription || '';\n\n const subtitleFragment = htmlToDocumentFragment(subtitle);\n const aFragment = htmlToDocumentFragment(RichTextProcessor.wrapRichText(webpage.url || ''));\n const a = aFragment.firstElementChild;\n if(a instanceof HTMLAnchorElement) {\n a.innerText = decodeURIComponent(a.href);\n }\n\n if(subtitleFragment.firstChild) {\n subtitleFragment.append('\\n');\n }\n\n subtitleFragment.append(a);\n\n if(this.showSender) {\n subtitleFragment.append('\\n', appMessagesManager.wrapSenderToPeer(message));\n }\n \n if(!title) {\n //title = new URL(webpage.url).hostname;\n title = RichTextProcessor.wrapPlainText(webpage.display_url.split('/', 1)[0]);\n }\n\n const row = new Row({\n title,\n titleRight: appMessagesManager.wrapSentTime(message),\n subtitle: subtitleFragment,\n havePadding: true,\n clickable: true,\n noRipple: true\n });\n\n /* const mediaDiv = document.createElement('div');\n mediaDiv.classList.add('row-media'); */\n\n row.container.append(previewDiv);\n \n /* ripple(div);\n div.append(previewDiv);\n div.insertAdjacentHTML('beforeend', `\n
${title}${titleAdditionHTML}
\n
${subtitle}
\n
${url}
\n ${sender}\n `); */\n \n if(row.container.innerText.trim().length) {\n elemsToAppend.push({element: row.container, message});\n }\n }\n \n break;\n }\n\n default:\n //this.log.warn('death is my friend', messages);\n break;\n }\n\n if(this.loadMutex) {\n promises.push(this.loadMutex);\n }\n\n if(promises.length) {\n await Promise.all(promises);\n if(!middleware()) {\n //this.log.warn('peer changed');\n return;\n }\n }\n \n if(elemsToAppend.length) {\n const method = append ? 'append' : 'prepend';\n elemsToAppend.forEach(details => {\n const {element, message} = details;\n const monthContainer = this.getMonthContainerByTimestamp(this.groupByMonth ? message.date : 0, inputFilter);\n element.classList.add('search-super-item');\n element.dataset.mid = '' + message.mid;\n element.dataset.peerId = '' + message.peerId;\n monthContainer.items[method](element);\n\n if(this.selection.isSelecting) {\n this.selection.toggleElementCheckbox(element, true);\n }\n });\n }\n \n //if(type !== 'inputMessagesFilterEmpty') {\n this.afterPerforming(inputFilter === 'inputMessagesFilterEmpty' ? 1 : messages.length, sharedMediaDiv);\n //}\n }\n\n private afterPerforming(length: number, contentTab: HTMLElement) {\n if(contentTab) {\n const parent = contentTab.parentElement;\n Array.from(parent.children).slice(1).forEach(child => {\n child.remove();\n });\n\n //this.contentContainer.classList.add('loaded');\n\n if(!length && !contentTab.childElementCount) {\n const div = document.createElement('div');\n div.innerText = 'Nothing interesting here yet...';\n div.classList.add('position-center', 'text-center', 'content-empty', 'no-select');\n\n parent.append(div);\n }\n }\n }\n\n private loadChats() {\n const renderedPeerIds: Set = new Set();\n const middleware = this.middleware.get();\n\n for(let i in this.searchGroups) {\n const group = this.searchGroups[i as SearchGroupType];\n this.tabs.inputMessagesFilterEmpty.append(group.container);\n group.clear();\n }\n\n const query = this.searchContext.query;\n if(query) {\n const setResults = (results: number[], group: SearchGroup, showMembersCount = false) => {\n results.forEach((peerId) => {\n if(renderedPeerIds.has(peerId)) {\n return;\n }\n \n renderedPeerIds.add(peerId);\n \n const peer = appPeersManager.getPeer(peerId);\n \n //////////this.log('contacts peer', peer);\n \n const {dom} = appDialogsManager.addDialogNew({\n dialog: peerId, \n container: group.list, \n drawStatus: false,\n avatarSize: 48,\n autonomous: group.autonomous\n });\n \n if(showMembersCount && (peer.participants_count || peer.participants)) {\n const regExp = new RegExp(`(${escapeRegExp(query)}|${escapeRegExp(cleanSearchText(query))})`, 'gi');\n dom.titleSpan.innerHTML = dom.titleSpan.innerHTML.replace(regExp, '$1');\n dom.lastMessageSpan.append(appProfileManager.getChatMembersString(-peerId));\n } else if(peerId === rootScope.myId) {\n dom.lastMessageSpan.append(i18n('Presence.YourChat'));\n } else {\n let username = appPeersManager.getPeerUsername(peerId);\n if(!username) {\n const user = appUsersManager.getUser(peerId);\n if(user && user.phone) {\n username = '+' + formatPhoneNumber(user.phone).formatted;\n }\n } else {\n username = '@' + username;\n }\n \n dom.lastMessageSpan.innerHTML = '' + username + '';\n }\n });\n \n group.toggle();\n };\n \n const onLoad = (arg: T) => {\n if(!middleware()) {\n return;\n }\n \n //this.loadedContacts = true;\n \n return arg;\n };\n \n return Promise.all([\n appUsersManager.getContacts(query, true)\n .then(onLoad)\n .then((contacts) => {\n if(contacts) {\n setResults(contacts, this.searchGroups.contacts, true);\n }\n }),\n \n appUsersManager.searchContacts(query, 20)\n .then(onLoad)\n .then((contacts) => {\n if(contacts) {\n setResults(contacts.my_results, this.searchGroups.contacts, true);\n setResults(contacts.results/* .concat(contacts.results, contacts.results, contacts.results) */, this.searchGroups.globalContacts);\n\n if(this.searchGroups.globalContacts.nameEl.lastElementChild) {\n this.searchGroups.globalContacts.nameEl.lastElementChild.remove();\n }\n\n this.searchGroups.globalContacts.container.classList.add('is-short');\n \n if(this.searchGroups.globalContacts.list.childElementCount > 3) {\n const showMore = document.createElement('div');\n showMore.classList.add('search-group__show-more');\n showMore.innerText = 'Show more';\n this.searchGroups.globalContacts.nameEl.append(showMore);\n showMore.addEventListener('click', () => {\n const isShort = this.searchGroups.globalContacts.container.classList.toggle('is-short');\n showMore.innerText = isShort ? 'Show more' : 'Show less';\n });\n }\n }\n }),\n \n appMessagesManager.getConversations(query, 0, 20, 0).promise\n .then(onLoad)\n .then(value => {\n if(value) {\n setResults(value.dialogs.map(d => d.peerId), this.searchGroups.contacts, true);\n }\n })\n ]);\n } else if(!this.searchContext.peerId && !this.searchContext.minDate) {\n const renderRecentSearch = (setActive = true) => {\n return appStateManager.getState().then(state => {\n if(!middleware()) {\n return;\n }\n \n this.searchGroups.recent.list.innerHTML = '';\n \n state.recentSearch.slice(0, 20).forEach(peerId => {\n let {dialog, dom} = appDialogsManager.addDialogNew({\n dialog: peerId,\n container: this.searchGroups.recent.list,\n drawStatus: false,\n meAsSaved: true,\n avatarSize: 48,\n autonomous: true\n });\n \n dom.lastMessageSpan.append(peerId > 0 ? appUsersManager.getUserStatusString(peerId) : appProfileManager.getChatMembersString(-peerId));\n });\n \n if(!state.recentSearch.length) {\n this.searchGroups.recent.clear();\n } else if(setActive) {\n this.searchGroups.recent.setActive();\n }\n });\n };\n\n return Promise.all([\n appUsersManager.getTopPeers('correspondents').then(peers => {\n if(!middleware()) return;\n\n const idx = peers.findIndex(peer => peer.id === rootScope.myId);\n if(idx !== -1) {\n peers = peers.slice();\n peers.splice(idx, 1);\n }\n //console.log('got top categories:', categories);\n if(peers.length) {\n peers.forEach((peer) => {\n appDialogsManager.addDialogNew({\n dialog: peer.id, \n container: this.searchGroups.people.list, \n drawStatus: false,\n onlyFirstName: true,\n avatarSize: 54,\n autonomous: false\n });\n });\n }\n \n this.searchGroups.people.setActive();\n }),\n\n renderRecentSearch()\n ]);\n } else return Promise.resolve();\n }\n\n private loadMembers(mediaTab: SearchSuperMediaTab) {\n const id = -this.searchContext.peerId;\n const middleware = this.middleware.get();\n let promise: Promise;\n\n const renderParticipants = async(participants: (ChatParticipant | ChannelParticipant)[]) => {\n if(this.loadMutex) {\n await this.loadMutex;\n\n if(!middleware()) {\n return;\n }\n }\n \n if(!this.membersList) {\n this.membersList = new SortedUserList({lazyLoadQueue: this.lazyLoadQueue, rippleEnabled: false});\n this.membersList.list.addEventListener('click', (e) => {\n const li = findUpTag(e.target, 'LI');\n if(!li) {\n return;\n }\n\n const peerId = +li.dataset.peerId;\n let promise: Promise = Promise.resolve();\n if(mediaSizes.isMobile) {\n promise = appSidebarRight.toggleSidebar(false);\n }\n \n promise.then(() => {\n appImManager.setInnerPeer(peerId);\n });\n });\n mediaTab.contentTab.append(this.membersList.list);\n this.afterPerforming(1, mediaTab.contentTab);\n }\n\n participants.forEach(participant => {\n const peerId = appChatsManager.getParticipantPeerId(participant);\n if(peerId < 0) {\n return;\n }\n\n const user = appUsersManager.getUser(peerId);\n if(user.pFlags.deleted) {\n return;\n }\n\n this.membersList.add(peerId);\n });\n };\n\n if(appChatsManager.isChannel(id)) {\n const LOAD_COUNT = !this.membersList ? 50 : 200;\n promise = appProfileManager.getChannelParticipants(id, undefined, LOAD_COUNT, this.nextRates[mediaTab.inputFilter]).then(participants => {\n if(!middleware()) {\n return;\n }\n\n let list = mediaTab.contentTab.firstElementChild as HTMLUListElement;\n this.nextRates[mediaTab.inputFilter] = (list ? list.childElementCount : 0) + participants.participants.length;\n\n if(participants.participants.length < LOAD_COUNT) {\n this.loaded[mediaTab.inputFilter] = true;\n }\n\n return renderParticipants(participants.participants);\n });\n } else {\n promise = (appProfileManager.getChatFull(id) as Promise).then(chatFull => {\n if(!middleware()) {\n return;\n }\n\n //console.log('anymore', chatFull);\n this.loaded[mediaTab.inputFilter] = true;\n const participants = chatFull.participants;\n if(participants._ === 'chatParticipantsForbidden') {\n return;\n }\n \n return renderParticipants(participants.participants);\n });\n }\n\n return this.loadPromises[mediaTab.inputFilter] = promise.finally(() => { \n if(!middleware()) {\n return;\n }\n\n this.loadPromises[mediaTab.inputFilter] = null;\n });\n }\n\n private loadType(mediaTab: SearchSuperMediaTab, justLoad: boolean, loadCount: number, middleware: () => boolean) {\n const type = mediaTab.inputFilter;\n\n if(this.loadPromises[type]) {\n return this.loadPromises[type];\n }\n\n if(mediaTab.type === 'members') {\n return this.loadMembers(mediaTab);\n }\n\n const history = this.historyStorage[type] ?? (this.historyStorage[type] = []);\n\n if(type === 'inputMessagesFilterEmpty' && !history.length) {\n if(!this.loadedChats) {\n this.loadChats();\n this.loadedChats = true;\n }\n\n if(!this.searchContext.query.trim() && !this.searchContext.peerId && !this.searchContext.minDate) {\n this.loaded[type] = true;\n return Promise.resolve();\n }\n }\n\n const logStr = 'load [' + type + ']: ';\n\n // render from cache\n if(history.length && this.usedFromHistory[type] < history.length && !justLoad) {\n let messages: any[] = [];\n let used = Math.max(0, this.usedFromHistory[type]);\n let slicedLength = 0;\n\n do {\n let ids = history.slice(used, used + loadCount);\n //this.log(logStr + 'will render from cache', used, history, ids, loadCount);\n used += ids.length;\n slicedLength += ids.length;\n\n messages.push(...this.filterMessagesByType(ids.map(m => appMessagesManager.getMessageByPeer(m.peerId, m.mid)), type));\n } while(slicedLength < loadCount && used < history.length);\n \n // если перебор\n /* if(slicedLength > loadCount) {\n let diff = messages.length - loadCount;\n messages = messages.slice(0, messages.length - diff);\n used -= diff;\n } */\n\n this.usedFromHistory[type] = used;\n //if(messages.length) {\n return this.performSearchResult(messages, mediaTab).finally(() => {\n setTimeout(() => {\n this.scrollable.checkForTriggers();\n }, 0);\n });\n //}\n\n return Promise.resolve();\n }\n \n let maxId = history.length ? history[history.length - 1].mid : 0;\n \n //this.log(logStr + 'search house of glass pre', type, maxId);\n \n //let loadCount = history.length ? 50 : 15;\n return this.loadPromises[type] = appMessagesManager.getSearch({\n ...this.searchContext,\n inputFilter: {_: type},\n maxId, \n limit: loadCount,\n nextRate: this.nextRates[type] ?? (this.nextRates[type] = 0)\n }).then(value => {\n history.push(...value.history.map(m => ({mid: m.mid, peerId: m.peerId})));\n \n this.log(logStr + 'search house of glass', type, value);\n\n if(!middleware()) {\n //this.log.warn('peer changed');\n return;\n }\n\n // ! Фикс случая, когда не загружаются документы при открытой панели разработчиков (происходит из-за того, что не совпадают критерии отбора документов в getSearch)\n if(value.history.length < loadCount || (this.searchContext.folderId !== undefined && !value.next_rate) || value.history.length === value.count) {\n //if((value.count || history.length === value.count) && history.length >= value.count) {\n //this.log(logStr + 'loaded all media', value, loadCount);\n this.loaded[type] = true;\n }\n\n this.nextRates[type] = value.next_rate;\n\n if(justLoad) {\n return Promise.resolve();\n }\n\n this.usedFromHistory[type] = history.length;\n\n if(!this.loaded[type]) {\n (this.loadPromises[type] || Promise.resolve()).then(() => {\n setTimeout(() => {\n if(!middleware()) return;\n //this.log('will preload more');\n if(this.mediaTab === mediaTab) {\n const promise = this.load(true, true);\n if(promise) {\n promise.then(() => {\n if(!middleware()) return;\n //this.log('preloaded more');\n setTimeout(() => {\n this.scrollable.checkForTriggers();\n }, 0);\n });\n }\n }\n }, 0);\n });\n }\n\n //if(value.history.length) {\n return this.performSearchResult(this.filterMessagesByType(value.history, type), mediaTab);\n //}\n }).catch(err => {\n this.log.error('load error:', err);\n }).finally(() => {\n this.loadPromises[type] = null;\n });\n }\n \n public async load(single = false, justLoad = false) {\n // if(testScroll/* || 1 === 1 */) {\n // return;\n // }\n\n //return;\n \n const peerId = this.searchContext.peerId;\n this.log('load', single, peerId, this.loadPromises);\n const middleware = this.middleware.get();\n\n if(this.firstLoad) {\n if(this.hideEmptyTabs) {\n const mediaTabs = this.mediaTabs.filter(mediaTab => mediaTab.inputFilter !== 'inputMessagesFilterEmpty')\n const filters = mediaTabs.map(mediaTab => ({_: mediaTab.inputFilter}));\n\n const counters = await appMessagesManager.getSearchCounters(peerId, filters);\n if(!middleware()) {\n return;\n }\n\n if(this.loadMutex) {\n await this.loadMutex;\n\n if(!middleware()) {\n return;\n }\n }\n\n let firstMediaTab: SearchSuperMediaTab;\n let count = 0;\n mediaTabs.forEach(mediaTab => {\n const counter = counters.find(c => c.filter._ === mediaTab.inputFilter);\n\n mediaTab.menuTab.classList.toggle('hide', !counter.count);\n mediaTab.menuTab.classList.remove('active');\n //mediaTab.contentTab.classList.toggle('hide', !counter.count);\n\n if(counter.count && firstMediaTab === undefined) {\n firstMediaTab = mediaTab;\n }\n\n if(counter.count) ++count;\n });\n\n const membersTab = this.mediaTabsMap.get('members');\n const canViewMembers = this.canViewMembers();\n membersTab.menuTab.classList.toggle('hide', !canViewMembers);\n\n if(canViewMembers) {\n firstMediaTab = membersTab;\n }\n\n this.container.classList.toggle('hide', !firstMediaTab);\n this.container.parentElement.classList.toggle('search-empty', !firstMediaTab);\n if(firstMediaTab) {\n this.skipScroll = true;\n this.selectTab(this.mediaTabs.indexOf(firstMediaTab), false);\n firstMediaTab.menuTab.classList.add('active');\n\n this.navScrollableContainer.classList.toggle('hide', count <= 1);\n }\n }\n\n this.firstLoad = false;\n }\n \n let toLoad = single ? [this.mediaTab] : this.mediaTabs.filter(t => t !== this.mediaTab);\n toLoad = toLoad.filter(mediaTab => {\n const inputFilter = mediaTab.inputFilter;\n return !this.loaded[inputFilter] || (this.historyStorage[inputFilter] && this.usedFromHistory[inputFilter] < this.historyStorage[inputFilter].length);\n });\n\n if(peerId > 0) {\n toLoad.findAndSplice(mediaTab => mediaTab.type === 'members');\n }\n\n if(!toLoad.length) {\n return;\n }\n\n const loadCount = justLoad ? 50 : Math.round((windowSize.windowH / 130 | 0) * 3 * 1.25); // that's good for all types\n\n const promises: Promise[] = toLoad.map(mediaTab => {\n return this.loadType(mediaTab, justLoad, loadCount, middleware)\n });\n\n return Promise.all(promises).catch(err => {\n this.log.error('Load error all promises:', err);\n });\n }\n \n public getMonthContainerByTimestamp(timestamp: number, type: SearchSuperType) {\n const date = new Date(timestamp * 1000);\n date.setHours(0, 0, 0);\n date.setDate(1);\n const dateTimestamp = date.getTime();\n const containers = this.monthContainers[type] ?? (this.monthContainers[type] = {});\n if(!(dateTimestamp in containers)) {\n const container = document.createElement('div');\n container.className = 'search-super-month';\n\n const name = document.createElement('div');\n name.classList.add('search-super-month-name');\n\n const options: Intl.DateTimeFormatOptions = {\n month: 'long'\n };\n\n if(date.getFullYear() !== new Date().getFullYear()) {\n options.year = 'numeric';\n }\n\n const dateElement = new I18n.IntlDateElement({\n date,\n options\n }).element;\n name.append(dateElement);\n\n container.append(name);\n\n const items = document.createElement('div');\n items.classList.add('search-super-month-items');\n\n container.append(name, items);\n\n const haveTimestamps = getObjectKeysAndSort(containers, 'desc');\n let i = 0;\n for(; i < haveTimestamps.length; ++i) {\n const t = haveTimestamps[i];\n if(dateTimestamp > t) {\n break;\n }\n }\n \n containers[dateTimestamp] = {container, items};\n positionElementByIndex(container, this.tabs[type], i);\n }\n\n return containers[dateTimestamp];\n }\n\n public canViewMembers() {\n return this.searchContext.peerId < 0 && !appChatsManager.isBroadcast(-this.searchContext.peerId) && appChatsManager.hasRights(-this.searchContext.peerId, 'view_participants');\n }\n\n public cleanup() {\n this.loadPromises = {};\n this.loaded = {};\n this.loadedChats = false;\n this.nextRates = {};\n this.firstLoad = true;\n\n this.lazyLoadQueue.clear();\n\n this.mediaTabs.forEach(mediaTab => {\n this.usedFromHistory[mediaTab.inputFilter] = -1;\n });\n\n if(this.selection.isSelecting) {\n this.selection.cancelSelection();\n }\n\n // * must go to first tab (это костыль)\n /* const membersTab = this.mediaTabsMap.get('members');\n if(membersTab) {\n const tab = this.canViewMembers() ? membersTab : this.mediaTabs[this.mediaTabs.indexOf(membersTab) + 1];\n this.mediaTab = tab;\n } */\n\n this.middleware.clean();\n this.cleanScrollPositions();\n this.membersList = undefined;\n }\n\n public cleanScrollPositions() {\n this.mediaTabs.forEach(mediaTab => {\n mediaTab.scroll = undefined;\n });\n }\n\n public cleanupHTML(goFirst = false) {\n if(this.urlsToRevoke.length) {\n this.urlsToRevoke.forEach(url => {\n URL.revokeObjectURL(url);\n });\n this.urlsToRevoke.length = 0;\n }\n\n this.mediaTabs.forEach((tab) => {\n tab.contentTab.innerHTML = '';\n\n if(this.hideEmptyTabs) {\n //tab.menuTab.classList.add('hide');\n this.container.classList.add('hide');\n this.container.parentElement.classList.add('search-empty');\n }\n\n if(tab.type === 'chats') {\n return;\n }\n \n if(!this.historyStorage[tab.inputFilter]) {\n const parent = tab.contentTab.parentElement;\n //if(!testScroll) {\n if(!parent.querySelector('.preloader')) {\n putPreloader(parent, true);\n }\n //}\n\n const empty = parent.querySelector('.content-empty');\n if(empty) {\n empty.remove();\n }\n }\n });\n\n /* if(goFirst) {\n const membersTab = this.mediaTabsMap.get('members');\n if(membersTab) {\n let idx = this.canViewMembers() ? 0 : 1;\n membersTab.menuTab.classList.toggle('hide', idx !== 0);\n\n this.selectTab(idx, false);\n } else {\n this.selectTab(0, false);\n }\n } */\n\n this.monthContainers = {};\n this.searchGroupMedia.clear();\n this.scrollable.scrollTop = 0;\n\n /* if(testScroll) {\n for(let i = 0; i < 1500; ++i) {\n let div = document.createElement('div');\n div.insertAdjacentHTML('beforeend', ``);\n div.classList.add('grid-item');\n div.dataset.id = '' + (i / 3 | 0);\n //div.innerText = '' + (i / 3 | 0);\n this.tabs.inputMessagesFilterPhotoVideo.append(div);\n }\n } */\n }\n\n private copySearchContext(newInputFilter: MyInputMessagesFilter) {\n const context = copy(this.searchContext);\n context.inputFilter = {_: newInputFilter};\n context.nextRate = this.nextRates[newInputFilter];\n return context;\n }\n\n public setQuery({peerId, query, threadId, historyStorage, folderId, minDate, maxDate}: {\n peerId: number, \n query?: string, \n threadId?: number, \n historyStorage?: AppSearchSuper['historyStorage'], \n folderId?: number,\n minDate?: number,\n maxDate?: number\n }) {\n this.searchContext = {\n peerId: peerId || 0,\n query: query || '',\n inputFilter: {_: this.mediaTab.inputFilter},\n threadId,\n folderId,\n minDate,\n maxDate\n };\n \n this.historyStorage = historyStorage ?? {};\n\n this.cleanup();\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport { InputPrivacyKey, InputPrivacyRule, PrivacyRule, Update, PrivacyKey } from \"../../layer\";\r\nimport apiManager from \"../mtproto/mtprotoworker\";\r\nimport appChatsManager from \"./appChatsManager\";\r\nimport appUsersManager from \"./appUsersManager\";\r\nimport apiUpdatesManager from \"./apiUpdatesManager\";\r\nimport rootScope from \"../rootScope\";\r\nimport { convertInputKeyToKey } from \"../../helpers/string\";\r\n\r\nexport enum PrivacyType {\r\n Everybody = 2,\r\n Contacts = 1,\r\n Nobody = 0\r\n}\r\n\r\nexport class AppPrivacyManager {\r\n private privacy: Partial<{\r\n [key in PrivacyKey['_']]: PrivacyRule[] | Promise\r\n }> = {};\r\n\r\n constructor() {\r\n rootScope.addMultipleEventsListeners({\r\n updatePrivacy: (update) => {\r\n const key = update.key._;\r\n this.privacy[key] = update.rules;\r\n rootScope.dispatchEvent('privacy_update', update);\r\n }\r\n });\r\n }\r\n\r\n public setPrivacy(inputKey: InputPrivacyKey['_'], rules: InputPrivacyRule[]) {\r\n return apiManager.invokeApi('account.setPrivacy', {\r\n key: {\r\n _: inputKey\r\n },\r\n rules\r\n }).then(privacyRules => {\r\n appUsersManager.saveApiUsers(privacyRules.users);\r\n appChatsManager.saveApiChats(privacyRules.chats);\r\n\r\n apiUpdatesManager.processLocalUpdate({\r\n _: 'updatePrivacy',\r\n key: {\r\n _: convertInputKeyToKey(inputKey)\r\n },\r\n rules: rules.map(inputRule => {\r\n const rule: PrivacyRule = {} as any;\r\n Object.assign(rule, inputRule);\r\n rule._ = convertInputKeyToKey(rule._) as any;\r\n return rule;\r\n })\r\n });\r\n\r\n //console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\r\n\r\n return privacyRules.rules;\r\n });\r\n }\r\n\r\n public getPrivacy(inputKey: InputPrivacyKey['_']) {\r\n const privacyKey: PrivacyKey['_'] = convertInputKeyToKey(inputKey) as any;\r\n const rules = this.privacy[privacyKey];\r\n if(rules) {\r\n return Promise.resolve(rules);\r\n }\r\n \r\n return this.privacy[privacyKey] = apiManager.invokeApi('account.getPrivacy', {\r\n key: {\r\n _: inputKey\r\n }\r\n }).then(privacyRules => {\r\n appUsersManager.saveApiUsers(privacyRules.users);\r\n appChatsManager.saveApiChats(privacyRules.chats);\r\n\r\n //console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\r\n\r\n return this.privacy[privacyKey] = privacyRules.rules;\r\n });\r\n }\r\n\r\n public getPrivacyRulesDetails(rules: PrivacyRule[]) {\r\n const types: PrivacyType[] = [];\r\n\r\n type peers = {users: number[], chats: number[]};\r\n let allowPeers: peers = {users: [], chats: []}, disallowPeers: peers = {users: [], chats: []};\r\n rules.forEach(rule => {\r\n switch(rule._) {\r\n case 'privacyValueAllowAll':\r\n types.push(2);\r\n break;\r\n case 'privacyValueDisallowAll':\r\n types.push(0);\r\n break;\r\n case 'privacyValueAllowContacts': \r\n types.push(1);\r\n break;\r\n /* case 'privacyValueDisallowContacts':\r\n types.push('Except My Contacts');\r\n break; */\r\n case 'privacyValueAllowChatParticipants':\r\n allowPeers.chats.push(...rule.chats);\r\n break;\r\n case 'privacyValueAllowUsers':\r\n allowPeers.users.push(...rule.users);\r\n break;\r\n case 'privacyValueDisallowChatParticipants':\r\n disallowPeers.chats.push(...rule.chats);\r\n break;\r\n case 'privacyValueDisallowUsers':\r\n disallowPeers.users.push(...rule.users);\r\n break;\r\n }\r\n });\r\n\r\n return {type: types[0], disallowPeers, allowPeers};\r\n }\r\n}\r\n\r\nconst appPrivacyManager = new AppPrivacyManager();\r\nMOUNT_CLASS_TO.appPrivacyManager = appPrivacyManager;\r\nexport default appPrivacyManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { randomLong } from \"../helpers/random\";\r\nimport { InputPrivacyKey, InputPrivacyRule } from \"../layer\";\r\nimport appPrivacyManager, { PrivacyType } from \"../lib/appManagers/appPrivacyManager\";\r\nimport appUsersManager from \"../lib/appManagers/appUsersManager\";\r\nimport { i18n, join, LangPackKey, _i18n } from \"../lib/langPack\";\r\nimport RadioField from \"./radioField\";\r\nimport Row, { RadioFormFromRows } from \"./row\";\r\nimport Scrollable from \"./scrollable\";\r\nimport { SettingSection, generateSection } from \"./sidebarLeft\";\r\nimport AppAddMembersTab from \"./sidebarLeft/tabs/addMembers\";\r\nimport { SliderSuperTabEventable } from \"./sliderTab\";\r\n\r\ntype PrivacySectionStr = LangPackKey | '';\r\nexport default class PrivacySection {\r\n public radioRows: Map;\r\n public radioSection: SettingSection;\r\n public exceptions: Map;\r\n public peerIds: {\r\n disallow?: number[],\r\n allow?: number[]\r\n };\r\n public type: PrivacyType;\r\n\r\n constructor(public options: {\r\n tab: SliderSuperTabEventable,\r\n title: LangPackKey, \r\n inputKey: InputPrivacyKey['_'], \r\n captions?: [PrivacySectionStr, PrivacySectionStr, PrivacySectionStr],\r\n appendTo?: Scrollable,\r\n noExceptions?: boolean,\r\n onRadioChange?: (value: number) => any,\r\n skipTypes?: PrivacyType[],\r\n exceptionTexts?: [LangPackKey, LangPackKey]\r\n }) {\r\n if(options.captions) {\r\n options.captions.reverse();\r\n }\r\n\r\n this.radioSection = new SettingSection({name: options.title, caption: true});\r\n\r\n this.radioRows = new Map();\r\n\r\n let r: Array<{type: PrivacyType, langKey: LangPackKey}> = [{\r\n type: PrivacyType.Everybody,\r\n langKey: 'PrivacySettingsController.Everbody'\r\n }, {\r\n type: PrivacyType.Contacts,\r\n langKey: 'PrivacySettingsController.MyContacts'\r\n }, {\r\n type: PrivacyType.Nobody,\r\n langKey: 'PrivacySettingsController.Nobody'\r\n }];\r\n\r\n if(options.skipTypes) {\r\n r = r.filter(r => !options.skipTypes.includes(r.type));\r\n }\r\n \r\n const random = randomLong();\r\n r.forEach(({type, langKey}) => {\r\n const row = new Row({\r\n radioField: new RadioField({\r\n langKey, \r\n name: random, \r\n value: '' + type\r\n })\r\n });\r\n \r\n this.radioRows.set(type, row);\r\n });\r\n\r\n const form = RadioFormFromRows([...this.radioRows.values()], this.onRadioChange);\r\n\r\n this.radioSection.content.append(form);\r\n if(options.appendTo) {\r\n options.appendTo.append(this.radioSection.container);\r\n }\r\n\r\n if(!options.noExceptions) {\r\n const container = generateSection(options.appendTo, 'PrivacyExceptions', 'PrivacySettingsController.PeerInfo');\r\n\r\n this.exceptions = new Map([[\r\n 'disallow', \r\n {\r\n titleLangKey: options.exceptionTexts[0],\r\n key: 'disallow',\r\n row: null,\r\n icon: 'deleteuser',\r\n subtitleLangKey: 'PrivacySettingsController.AddUsers',\r\n clickable: true\r\n }\r\n ], [\r\n 'allow', \r\n {\r\n titleLangKey: options.exceptionTexts[1],\r\n key: 'allow',\r\n row: null,\r\n icon: 'adduser',\r\n subtitleLangKey: 'PrivacySettingsController.AddUsers',\r\n clickable: true\r\n }\r\n ]]);\r\n\r\n this.exceptions.forEach((exception) => {\r\n exception.row = new Row(exception);\r\n\r\n exception.row.container.addEventListener('click', () => {\r\n promise.then(() => {\r\n const _peerIds = this.peerIds[exception.key];\r\n new AppAddMembersTab(options.tab.slider).open({\r\n type: 'privacy',\r\n skippable: true,\r\n title: exception.titleLangKey,\r\n placeholder: 'PrivacyModal.Search.Placeholder',\r\n takeOut: (newPeerIds) => {\r\n _peerIds.length = 0;\r\n _peerIds.push(...newPeerIds);\r\n exception.row.subtitle.innerHTML = '';\r\n exception.row.subtitle.append(...this.generateStr(this.splitPeersByType(newPeerIds)));\r\n },\r\n selectedPeerIds: _peerIds\r\n });\r\n });\r\n });\r\n\r\n container.append(exception.row.container);\r\n });\r\n }\r\n\r\n /* setTimeout(() => {\r\n this.setRadio(PrivacyType.Contacts);\r\n }, 0); */\r\n\r\n const promise = appPrivacyManager.getPrivacy(options.inputKey).then(rules => {\r\n const details = appPrivacyManager.getPrivacyRulesDetails(rules);\r\n this.setRadio(details.type);\r\n\r\n if(this.exceptions) {\r\n this.peerIds = {};\r\n (['allow', 'disallow'] as ('allow' | 'disallow')[]).forEach(k => {\r\n const arr = [];\r\n const from = k === 'allow' ? details.allowPeers : details.disallowPeers;\r\n arr.push(...from.users);\r\n arr.push(...from.chats.map(id => -id));\r\n this.peerIds[k] = arr;\r\n const s = this.exceptions.get(k).row.subtitle;\r\n s.innerHTML = '';\r\n s.append(...this.generateStr(from));\r\n });\r\n }\r\n\r\n options.tab.eventListener.addEventListener('destroy', () => {\r\n const rules: InputPrivacyRule[] = [];\r\n\r\n switch(this.type) {\r\n case PrivacyType.Everybody:\r\n rules.push({_: 'inputPrivacyValueAllowAll'});\r\n break;\r\n case PrivacyType.Contacts:\r\n rules.push({_: 'inputPrivacyValueAllowContacts'});\r\n break;\r\n case PrivacyType.Nobody:\r\n rules.push({_: 'inputPrivacyValueDisallowAll'});\r\n break;\r\n }\r\n\r\n if(this.exceptions) {\r\n ([\r\n ['allow', 'inputPrivacyValueAllowChatParticipants', 'inputPrivacyValueAllowUsers'],\r\n ['disallow', 'inputPrivacyValueDisallowChatParticipants', 'inputPrivacyValueDisallowUsers']\r\n ] as Array<[\r\n 'allow' | 'disallow', \r\n 'inputPrivacyValueAllowChatParticipants' | 'inputPrivacyValueDisallowChatParticipants', \r\n 'inputPrivacyValueAllowUsers' | 'inputPrivacyValueDisallowUsers'\r\n ]>).forEach(([k, chatKey, usersKey], idx) => {\r\n if(this.exceptions.get(k).row.container.classList.contains('hide')) {\r\n return;\r\n }\r\n\r\n const _peerIds: number[] = this.peerIds[k];\r\n \r\n if(_peerIds) {\r\n const splitted = this.splitPeersByType(_peerIds);\r\n if(splitted.chats.length) {\r\n rules.push({_: chatKey, chats: splitted.chats.map(peerId => -peerId)});\r\n }\r\n \r\n if(splitted.users.length) {\r\n rules.push({_: usersKey, users: splitted.users.map(id => appUsersManager.getUserInput(id))});\r\n }\r\n }\r\n });\r\n }\r\n \r\n appPrivacyManager.setPrivacy(options.inputKey, rules);\r\n }, {once: true});\r\n });\r\n }\r\n\r\n private onRadioChange = (value: string | PrivacySection['type']) => {\r\n value = +value as PrivacySection['type'];\r\n this.type = value;\r\n\r\n const caption = this.options.captions[this.type];\r\n const captionElement = this.radioSection.caption;\r\n if(!caption) {\r\n captionElement.innerHTML = '';\r\n } else {\r\n _i18n(captionElement, caption);\r\n }\r\n captionElement.classList.toggle('hide', !caption);\r\n\r\n if(this.exceptions) {\r\n this.exceptions.get('allow').row.container.classList.toggle('hide', this.type === PrivacyType.Everybody);\r\n this.exceptions.get('disallow').row.container.classList.toggle('hide', this.type === PrivacyType.Nobody);\r\n }\r\n\r\n this.options.onRadioChange && this.options.onRadioChange(value);\r\n };\r\n\r\n public setRadio(type: PrivacySection['type']) {\r\n const row = this.radioRows.get(type);\r\n this.onRadioChange(type);\r\n row.radioField.input.checked = true;\r\n }\r\n \r\n private splitPeersByType(peerIds: number[]) {\r\n const peers = {users: [] as number[], chats: [] as number[]};\r\n peerIds.forEach(peerId => {\r\n peers[peerId < 0 ? 'chats' : 'users'].push(peerId < 0 ? -peerId : peerId);\r\n });\r\n\r\n return peers;\r\n }\r\n\r\n private generateStr(peers: {users: number[], chats: number[]}) {\r\n if(!peers.users.length && !peers.chats.length) {\r\n return [i18n('PrivacySettingsController.AddUsers')];\r\n }\r\n\r\n return join([\r\n peers.users.length ? i18n('Users', [peers.users.length]) : null, \r\n peers.chats.length ? i18n('Chats', [peers.chats.length]) : null\r\n ].filter(Boolean), false);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { PrivacyType } from \"../../../../lib/appManagers/appPrivacyManager\";\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\n\r\nexport default class AppPrivacyPhoneNumberTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-phone-number');\r\n this.setTitle('PrivacyPhone');\r\n\r\n const phoneCaption: LangPackKey = 'PrivacyPhoneInfo';\r\n const phoneSection = new PrivacySection({\r\n tab: this,\r\n title: 'PrivacyPhoneTitle',\r\n inputKey: 'inputPrivacyKeyPhoneNumber',\r\n captions: [phoneCaption, phoneCaption, ''],\r\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\r\n appendTo: this.scrollable,\r\n onRadioChange: (type) => {\r\n s.setRadio(PrivacyType.Everybody);\r\n s.radioSection.container.classList.toggle('hide', type !== PrivacyType.Nobody);\r\n }\r\n });\r\n\r\n const sCaption: LangPackKey = 'PrivacyPhoneInfo3';\r\n const s = new PrivacySection({\r\n tab: this,\r\n title: 'PrivacyPhoneTitle2',\r\n inputKey: 'inputPrivacyKeyAddedByPhone',\r\n captions: [sCaption, sCaption, ''],\r\n noExceptions: true,\r\n skipTypes: [PrivacyType.Nobody]\r\n });\r\n\r\n this.scrollable.container.insertBefore(s.radioSection.container, phoneSection.radioSection.container.nextSibling);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\nimport appStickersManager from \"../../../../lib/appManagers/appStickersManager\";\r\nimport Button from \"../../../button\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport { wrapSticker } from \"../../../wrappers\";\r\nimport AppSettingsTab from \"../settings\";\r\n\r\nexport default class AppTwoStepVerificationSetTab extends SliderSuperTab {\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-set');\r\n this.setTitle('TwoStepVerificationPasswordSet');\r\n\r\n const section = new SettingSection({\r\n caption: 'TwoStepVerificationPasswordSetInfo',\r\n noDelimiter: true\r\n });\r\n\r\n const emoji = '🥳';\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n const stickerContainer = document.createElement('div');\r\n\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: stickerContainer,\r\n loop: true,\r\n play: true,\r\n width: 160,\r\n height: 160\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n stickerContainer.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n section.content.append(stickerContainer);\r\n\r\n const inputContent = section.generateContentElement();\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const btnReturn = Button('btn-primary btn-color-primary', {text: 'TwoStepVerificationPasswordReturnSettings'});\r\n\r\n attachClickEvent(btnReturn, (e) => {\r\n this.close();\r\n });\r\n\r\n this.slider.sliceTabsUntilTab(AppSettingsTab, this);\r\n\r\n inputWrapper.append(btnReturn);\r\n\r\n inputContent.append(inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { IS_MOBILE_SAFARI } from \"../../environment/userAgent\";\r\n\r\nexport function canFocus(isFirstInput: boolean) {\r\n return !IS_MOBILE_SAFARI || !isFirstInput;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport appStickersManager from \"../../../../lib/appManagers/appStickersManager\";\r\nimport Button from \"../../../button\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport { wrapSticker } from \"../../../wrappers\";\r\nimport passwordManager from \"../../../../lib/mtproto/passwordManager\";\r\nimport AppTwoStepVerificationSetTab from \"./passwordSet\";\r\nimport CodeInputField from \"../../../codeInputField\";\r\nimport AppTwoStepVerificationEmailTab from \"./email\";\r\nimport { putPreloader } from \"../../../misc\";\r\nimport { i18n, _i18n } from \"../../../../lib/langPack\";\r\nimport { canFocus } from \"../../../../helpers/dom/canFocus\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\nimport replaceContent from \"../../../../helpers/dom/replaceContent\";\r\nimport toggleDisability from \"../../../../helpers/dom/toggleDisability\";\r\n\r\nexport default class AppTwoStepVerificationEmailConfirmationTab extends SliderSuperTab {\r\n public codeInputField: CodeInputField;\r\n public state: AccountPassword;\r\n public email: string;\r\n public length: number;\r\n public isFirst = false;\r\n\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-email-confirmation');\r\n this.setTitle('TwoStepAuth.RecoveryTitle');\r\n\r\n const section = new SettingSection({\r\n caption: true,\r\n noDelimiter: true\r\n });\r\n\r\n _i18n(section.caption, 'TwoStepAuth.ConfirmEmailCodeDesc', [this.email]);\r\n\r\n const emoji = '📬';\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n const stickerContainer = document.createElement('div');\r\n\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: stickerContainer,\r\n loop: false,\r\n play: true,\r\n width: 160,\r\n height: 160,\r\n emoji\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n stickerContainer.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n section.content.append(stickerContainer);\r\n\r\n const inputContent = section.generateContentElement();\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const inputField = this.codeInputField = new CodeInputField({\r\n name: 'recovery-email-code',\r\n label: 'TwoStepAuth.RecoveryCode',\r\n length: this.length,\r\n onFill: (code) => {\r\n freeze(true);\r\n \r\n passwordManager.confirmPasswordEmail('' + code)\r\n .then(value => {\r\n if(!value) {\r\n\r\n }\r\n\r\n goNext();\r\n })\r\n .catch(err => {\r\n switch(err.type) {\r\n case 'CODE_INVALID':\r\n inputField.input.classList.add('error');\r\n replaceContent(inputField.label, i18n('TwoStepAuth.RecoveryCodeInvalid'));\r\n break;\r\n\r\n case 'EMAIL_HASH_EXPIRED':\r\n inputField.input.classList.add('error');\r\n replaceContent(inputField.label, i18n('TwoStepAuth.RecoveryCodeExpired'));\r\n break;\r\n \r\n default:\r\n console.error('confirm error', err);\r\n break;\r\n }\r\n\r\n freeze(false);\r\n });\r\n }\r\n });\r\n\r\n const btnChange = Button('btn-primary btn-primary-transparent primary', {text: 'TwoStepAuth.EmailCodeChangeEmail'});\r\n const btnResend = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'ResendCode'});\r\n\r\n const goNext = () => {\r\n new AppTwoStepVerificationSetTab(this.slider).open();\r\n };\r\n\r\n const freeze = (disable: boolean) => {\r\n toggleDisability([inputField.input, btnChange, btnResend], disable);\r\n };\r\n\r\n attachClickEvent(btnChange, (e) => {\r\n freeze(true);\r\n passwordManager.cancelPasswordEmail().then(value => {\r\n this.slider.sliceTabsUntilTab(AppTwoStepVerificationEmailTab, this);\r\n this.close();\r\n }, () => {\r\n freeze(false);\r\n });\r\n });\r\n\r\n attachClickEvent(btnResend, (e) => {\r\n freeze(true);\r\n const d = putPreloader(btnResend);\r\n passwordManager.resendPasswordEmail().then(value => {\r\n d.remove();\r\n freeze(false);\r\n });\r\n });\r\n\r\n inputWrapper.append(inputField.container, btnChange, btnResend);\r\n\r\n inputContent.append(inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n if(!canFocus(this.isFirst)) return;\r\n this.codeInputField.input.focus();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport appStickersManager from \"../../../../lib/appManagers/appStickersManager\";\r\nimport Button from \"../../../button\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport { wrapSticker } from \"../../../wrappers\";\r\nimport InputField from \"../../../inputField\";\r\nimport { putPreloader } from \"../../../misc\";\r\nimport passwordManager from \"../../../../lib/mtproto/passwordManager\";\r\nimport AppTwoStepVerificationSetTab from \"./passwordSet\";\r\nimport AppTwoStepVerificationEmailConfirmationTab from \"./emailConfirmation\";\r\nimport RichTextProcessor from \"../../../../lib/richtextprocessor\";\r\nimport PopupPeer from \"../../../popups/peer\";\r\nimport { cancelEvent } from \"../../../../helpers/dom/cancelEvent\";\r\nimport { canFocus } from \"../../../../helpers/dom/canFocus\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\n\r\nexport default class AppTwoStepVerificationEmailTab extends SliderSuperTab {\r\n public inputField: InputField;\r\n public state: AccountPassword;\r\n public plainPassword: string;\r\n public newPassword: string;\r\n public hint: string;\r\n public isFirst = false;\r\n\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-email');\r\n this.setTitle('RecoveryEmailTitle');\r\n\r\n const section = new SettingSection({\r\n caption: true,\r\n noDelimiter: true\r\n });\r\n\r\n const emoji = '💌';\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n const stickerContainer = document.createElement('div');\r\n\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: stickerContainer,\r\n loop: false,\r\n play: true,\r\n width: 160,\r\n height: 160,\r\n emoji\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n stickerContainer.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n section.content.append(stickerContainer);\r\n\r\n const inputContent = section.generateContentElement();\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const inputField = this.inputField = new InputField({\r\n name: 'recovery-email',\r\n label: 'RecoveryEmail',\r\n plainText: true\r\n });\r\n\r\n inputField.input.addEventListener('keypress', (e) => {\r\n if(e.key === 'Enter') {\r\n cancelEvent(e);\r\n return onContinueClick();\r\n }\r\n });\r\n\r\n inputField.input.addEventListener('input', (e) => {\r\n inputField.input.classList.remove('error');\r\n });\r\n\r\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\r\n const btnSkip = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'YourEmailSkip'});\r\n\r\n const goNext = () => {\r\n new AppTwoStepVerificationSetTab(this.slider).open();\r\n };\r\n\r\n const onContinueClick = () => {\r\n const email = inputField.value.trim();\r\n const match = RichTextProcessor.matchEmail(email);\r\n if(!match || match[0].length !== email.length) {\r\n inputField.input.classList.add('error');\r\n return;\r\n }\r\n\r\n toggleButtons(true);\r\n const d = putPreloader(btnContinue);\r\n\r\n passwordManager.updateSettings({\r\n hint: this.hint,\r\n currentPassword: this.plainPassword,\r\n newPassword: this.newPassword,\r\n email\r\n }).then((value) => {\r\n goNext();\r\n }, (err) => {\r\n if(err.type.includes('EMAIL_UNCONFIRMED')) {\r\n const symbols = +err.type.match(/^EMAIL_UNCONFIRMED_(\\d+)/)[1];\r\n\r\n const tab = new AppTwoStepVerificationEmailConfirmationTab(this.slider);\r\n tab.state = this.state;\r\n tab.email = email;\r\n tab.length = symbols;\r\n tab.open();\r\n } else {\r\n console.log('password set error', err);\r\n }\r\n\r\n toggleButtons(false);\r\n d.remove();\r\n });\r\n };\r\n attachClickEvent(btnContinue, onContinueClick);\r\n\r\n const toggleButtons = (freeze: boolean) => {\r\n if(freeze) {\r\n btnContinue.setAttribute('disabled', 'true');\r\n btnSkip.setAttribute('disabled', 'true');\r\n } else {\r\n btnContinue.removeAttribute('disabled');\r\n btnSkip.removeAttribute('disabled');\r\n }\r\n };\r\n\r\n attachClickEvent(btnSkip, (e) => {\r\n const popup = new PopupPeer('popup-skip-email', {\r\n buttons: [{\r\n langKey: 'Cancel',\r\n isCancel: true\r\n }, {\r\n langKey: 'YourEmailSkip',\r\n callback: () => {\r\n //inputContent.classList.add('sidebar-left-section-disabled');\r\n toggleButtons(true);\r\n putPreloader(btnSkip);\r\n passwordManager.updateSettings({\r\n hint: this.hint, \r\n currentPassword: this.plainPassword,\r\n newPassword: this.newPassword,\r\n email: ''\r\n }).then(() => {\r\n goNext();\r\n }, (err) => {\r\n toggleButtons(false);\r\n });\r\n },\r\n isDanger: true,\r\n }], \r\n titleLangKey: 'YourEmailSkipWarning',\r\n descriptionLangKey: 'YourEmailSkipWarningText'\r\n });\r\n\r\n popup.show();\r\n });\r\n\r\n inputWrapper.append(inputField.container, btnContinue, btnSkip);\r\n\r\n inputContent.append(inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n if(!canFocus(this.isFirst)) return;\r\n this.inputField.input.focus();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport appStickersManager from \"../../../../lib/appManagers/appStickersManager\";\r\nimport Button from \"../../../button\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport { wrapSticker } from \"../../../wrappers\";\r\nimport InputField from \"../../../inputField\";\r\nimport AppTwoStepVerificationEmailTab from \"./email\";\r\nimport { toast } from \"../../../toast\";\r\nimport I18n from \"../../../../lib/langPack\";\r\nimport { cancelEvent } from \"../../../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\n\r\nexport default class AppTwoStepVerificationHintTab extends SliderSuperTab {\r\n public inputField: InputField;\r\n public state: AccountPassword;\r\n public plainPassword: string;\r\n public newPassword: string;\r\n\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-hint');\r\n this.setTitle('TwoStepAuth.SetupHintTitle');\r\n\r\n const section = new SettingSection({\r\n noDelimiter: true\r\n });\r\n\r\n const emoji = '💡';\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n const stickerContainer = document.createElement('div');\r\n\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: stickerContainer,\r\n loop: false,\r\n play: true,\r\n width: 160,\r\n height: 160,\r\n emoji\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n stickerContainer.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n section.content.append(stickerContainer);\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const inputField = this.inputField = new InputField({\r\n name: 'hint',\r\n label: 'TwoStepAuth.SetupHintPlaceholder'\r\n });\r\n\r\n inputField.input.addEventListener('keypress', (e) => {\r\n if(e.key === 'Enter') {\r\n cancelEvent(e);\r\n return inputField.value ? onContinueClick() : onSkipClick();\r\n }\r\n });\r\n\r\n const goNext = (e?: Event, saveHint?: boolean) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n \r\n const hint = saveHint ? inputField.value : undefined;\r\n if(hint && this.newPassword === hint) {\r\n toast(I18n.format('PasswordAsHintError', true));\r\n return;\r\n }\r\n\r\n const tab = new AppTwoStepVerificationEmailTab(this.slider);\r\n tab.state = this.state;\r\n tab.plainPassword = this.plainPassword;\r\n tab.newPassword = this.newPassword;\r\n tab.hint = hint;\r\n\r\n tab.open();\r\n };\r\n\r\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\r\n const btnSkip = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'YourEmailSkip'});\r\n\r\n const onContinueClick = (e?: Event) => goNext(e, true);\r\n const onSkipClick = (e?: Event) => goNext(e, false);\r\n attachClickEvent(btnContinue, onContinueClick);\r\n attachClickEvent(btnSkip, onSkipClick);\r\n\r\n inputWrapper.append(inputField.container, btnContinue, btnSkip);\r\n\r\n section.content.append(inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n this.inputField.input.focus();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport Button from \"../../../button\";\r\nimport PasswordInputField from \"../../../passwordInputField\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport TrackingMonkey from \"../../../monkeys/tracking\";\r\nimport AppTwoStepVerificationHintTab from \"./hint\";\r\nimport { InputState } from \"../../../inputField\";\r\nimport { cancelEvent } from \"../../../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\n\r\nexport default class AppTwoStepVerificationReEnterPasswordTab extends SliderSuperTab {\r\n public state: AccountPassword;\r\n public passwordInputField: PasswordInputField;\r\n public plainPassword: string;\r\n public newPassword: string;\r\n\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-enter-password', 'two-step-verification-re-enter-password');\r\n this.setTitle('PleaseReEnterPassword');\r\n\r\n const section = new SettingSection({\r\n noDelimiter: true\r\n });\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const passwordInputField = this.passwordInputField = new PasswordInputField({\r\n name: 're-enter-password',\r\n label: 'PleaseReEnterPassword'\r\n });\r\n\r\n const monkey = new TrackingMonkey(passwordInputField, 157);\r\n\r\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\r\n\r\n inputWrapper.append(passwordInputField.container, btnContinue);\r\n section.content.append(monkey.container, inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n\r\n passwordInputField.input.addEventListener('keypress', (e) => {\r\n if(passwordInputField.input.classList.contains('error')) {\r\n passwordInputField.setState(InputState.Neutral);\r\n }\r\n \r\n if(e.key === 'Enter') {\r\n return onContinueClick();\r\n }\r\n });\r\n\r\n const verifyInput = () => {\r\n if(this.newPassword !== passwordInputField.value) {\r\n passwordInputField.setError();\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n const onContinueClick = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n if(!verifyInput()) return;\r\n\r\n const tab = new AppTwoStepVerificationHintTab(this.slider);\r\n tab.state = this.state;\r\n tab.plainPassword = this.plainPassword;\r\n tab.newPassword = this.newPassword;\r\n tab.open();\r\n };\r\n attachClickEvent(btnContinue, onContinueClick);\r\n\r\n return monkey.load();\r\n }\r\n \r\n onOpenAfterTimeout() {\r\n this.passwordInputField.input.focus();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport AppTwoStepVerificationTab from \".\";\r\nimport { SettingSection } from \"../..\";\r\nimport { cancelEvent } from \"../../../../helpers/dom/cancelEvent\";\r\nimport { canFocus } from \"../../../../helpers/dom/canFocus\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\nimport replaceContent from \"../../../../helpers/dom/replaceContent\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport I18n, { i18n } from \"../../../../lib/langPack\";\r\nimport passwordManager from \"../../../../lib/mtproto/passwordManager\";\r\nimport RichTextProcessor from \"../../../../lib/richtextprocessor\";\r\nimport Button from \"../../../button\";\r\nimport { putPreloader } from \"../../../misc\";\r\nimport PasswordMonkey from \"../../../monkeys/password\";\r\nimport PasswordInputField from \"../../../passwordInputField\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport AppTwoStepVerificationReEnterPasswordTab from \"./reEnterPassword\";\r\n\r\nexport default class AppTwoStepVerificationEnterPasswordTab extends SliderSuperTab {\r\n public state: AccountPassword;\r\n public passwordInputField: PasswordInputField;\r\n public plainPassword: string;\r\n public isFirst = true;\r\n \r\n protected init() {\r\n const isNew = !this.state.pFlags.has_password || this.plainPassword;\r\n this.container.classList.add('two-step-verification', 'two-step-verification-enter-password');\r\n this.setTitle(isNew ? 'PleaseEnterFirstPassword' : 'PleaseEnterCurrentPassword');\r\n\r\n const section = new SettingSection({\r\n noDelimiter: true\r\n });\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const passwordInputField = this.passwordInputField = new PasswordInputField({\r\n name: 'enter-password',\r\n label: isNew ? 'PleaseEnterFirstPassword' : (this.state.hint ? undefined : 'LoginPassword'),\r\n labelText: !isNew && this.state.hint ? RichTextProcessor.wrapEmojiText(this.state.hint) : undefined\r\n });\r\n\r\n const monkey = new PasswordMonkey(passwordInputField, 157);\r\n\r\n const btnContinue = Button('btn-primary btn-color-primary');\r\n const textEl = new I18n.IntlElement({key: 'Continue'});\r\n\r\n btnContinue.append(textEl.element);\r\n\r\n inputWrapper.append(passwordInputField.container, btnContinue);\r\n section.content.append(monkey.container, inputWrapper);\r\n\r\n this.scrollable.container.append(section.container);\r\n\r\n passwordInputField.input.addEventListener('keypress', (e) => {\r\n if(passwordInputField.input.classList.contains('error')) {\r\n passwordInputField.input.classList.remove('error');\r\n textEl.key = 'Continue';\r\n textEl.update();\r\n }\r\n \r\n if(e.key === 'Enter') {\r\n return onContinueClick();\r\n }\r\n });\r\n\r\n const verifyInput = () => {\r\n if(!passwordInputField.value.length) {\r\n passwordInputField.input.classList.add('error');\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n let onContinueClick: (e?: Event) => void;\r\n if(!isNew) {\r\n let getStateInterval: number;\r\n\r\n let getState = () => {\r\n // * just to check session relevance\r\n if(!getStateInterval) {\r\n getStateInterval = window.setInterval(getState, 10e3);\r\n }\r\n \r\n return passwordManager.getState().then(_state => {\r\n this.state = _state;\r\n \r\n if(this.state.hint) {\r\n passwordInputField.label.innerHTML = RichTextProcessor.wrapEmojiText(this.state.hint);\r\n } else {\r\n replaceContent(passwordInputField.label, i18n('LoginPassword'));\r\n }\r\n });\r\n };\r\n \r\n const submit = (e?: Event) => {\r\n if(!verifyInput()) {\r\n cancelEvent(e);\r\n return;\r\n }\r\n\r\n btnContinue.setAttribute('disabled', 'true');\r\n textEl.key = 'PleaseWait';\r\n textEl.update();\r\n const preloader = putPreloader(btnContinue);\r\n \r\n const plainPassword = passwordInputField.value;\r\n passwordManager.check(passwordInputField.value, this.state).then(auth => {\r\n console.log(auth);\r\n \r\n if(auth._ === 'auth.authorization') {\r\n clearInterval(getStateInterval);\r\n if(monkey) monkey.remove();\r\n const tab = new AppTwoStepVerificationTab(this.slider);\r\n tab.state = this.state;\r\n tab.plainPassword = plainPassword;\r\n tab.open();\r\n this.slider.removeTabFromHistory(this);\r\n }\r\n }, (err) => {\r\n btnContinue.removeAttribute('disabled');\r\n passwordInputField.input.classList.add('error');\r\n \r\n switch(err.type) {\r\n default:\r\n //btnContinue.innerText = err.type;\r\n textEl.key = 'TwoStepAuth.InvalidPassword';\r\n textEl.update();\r\n preloader.remove();\r\n passwordInputField.select();\r\n break;\r\n }\r\n \r\n getState();\r\n });\r\n };\r\n \r\n onContinueClick = submit;\r\n\r\n getState();\r\n } else {\r\n onContinueClick = (e) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n if(!verifyInput()) return;\r\n\r\n const tab = new AppTwoStepVerificationReEnterPasswordTab(this.slider);\r\n tab.state = this.state;\r\n tab.newPassword = passwordInputField.value;\r\n tab.plainPassword = this.plainPassword;\r\n tab.open();\r\n };\r\n }\r\n\r\n attachClickEvent(btnContinue, onContinueClick);\r\n\r\n return monkey.load();\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n if(!canFocus(this.isFirst)) return;\r\n this.passwordInputField.input.focus();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"../..\";\r\nimport { attachClickEvent } from \"../../../../helpers/dom/clickEvent\";\r\nimport { AccountPassword } from \"../../../../layer\";\r\nimport appStickersManager from \"../../../../lib/appManagers/appStickersManager\";\r\nimport { _i18n } from \"../../../../lib/langPack\";\r\nimport passwordManager from \"../../../../lib/mtproto/passwordManager\";\r\nimport Button from \"../../../button\";\r\nimport PopupPeer from \"../../../popups/peer\";\r\nimport { SliderSuperTab } from \"../../../slider\";\r\nimport { wrapSticker } from \"../../../wrappers\";\r\nimport AppSettingsTab from \"../settings\";\r\nimport AppTwoStepVerificationEmailTab from \"./email\";\r\nimport AppTwoStepVerificationEnterPasswordTab from \"./enterPassword\";\r\n\r\nexport default class AppTwoStepVerificationTab extends SliderSuperTab {\r\n public state: AccountPassword;\r\n public plainPassword: string;\r\n\r\n protected init() {\r\n this.container.classList.add('two-step-verification', 'two-step-verification-main');\r\n this.setTitle('TwoStepVerificationTitle');\r\n\r\n const section = new SettingSection({\r\n caption: true,\r\n noDelimiter: true\r\n });\r\n\r\n const emoji = '🔐';\r\n const doc = appStickersManager.getAnimatedEmojiSticker(emoji);\r\n const stickerContainer = document.createElement('div');\r\n\r\n if(doc) {\r\n wrapSticker({\r\n doc,\r\n div: stickerContainer,\r\n loop: false,\r\n play: true,\r\n width: 168,\r\n height: 168,\r\n emoji\r\n }).then(() => {\r\n // this.animation = player;\r\n });\r\n } else {\r\n stickerContainer.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n section.content.append(stickerContainer);\r\n\r\n const c = section.generateContentElement();\r\n if(this.state.pFlags.has_password) {\r\n _i18n(section.caption, 'TwoStepAuth.GenericHelp');\r\n\r\n const btnChangePassword = Button('btn-primary btn-transparent', {icon: 'edit', text: 'TwoStepAuth.ChangePassword'});\r\n const btnDisablePassword = Button('btn-primary btn-transparent', {icon: 'passwordoff', text: 'TwoStepAuth.RemovePassword'});\r\n const btnSetRecoveryEmail = Button('btn-primary btn-transparent', {icon: 'email', text: this.state.pFlags.has_recovery ? 'TwoStepAuth.ChangeEmail' : 'TwoStepAuth.SetupEmail'});\r\n\r\n attachClickEvent(btnChangePassword, () => {\r\n const tab = new AppTwoStepVerificationEnterPasswordTab(this.slider);\r\n tab.state = this.state;\r\n tab.plainPassword = this.plainPassword;\r\n tab.open();\r\n });\r\n\r\n attachClickEvent(btnDisablePassword, () => {\r\n const popup = new PopupPeer('popup-disable-password', {\r\n buttons: [{\r\n langKey: 'Disable',\r\n callback: () => {\r\n passwordManager.updateSettings({currentPassword: this.plainPassword}).then(() => {\r\n this.slider.sliceTabsUntilTab(AppSettingsTab, this);\r\n this.close();\r\n });\r\n },\r\n isDanger: true,\r\n }], \r\n titleLangKey: 'TurnPasswordOffQuestionTitle',\r\n descriptionLangKey: 'TurnPasswordOffQuestion'\r\n });\r\n\r\n popup.show();\r\n });\r\n\r\n attachClickEvent(btnSetRecoveryEmail, () => {\r\n const tab = new AppTwoStepVerificationEmailTab(this.slider);\r\n tab.state = this.state;\r\n tab.hint = this.state.hint;\r\n tab.plainPassword = this.plainPassword;\r\n tab.newPassword = this.plainPassword;\r\n tab.isFirst = true;\r\n tab.open();\r\n });\r\n\r\n c.append(btnChangePassword, btnDisablePassword, btnSetRecoveryEmail);\r\n } else {\r\n _i18n(section.caption, 'TwoStepAuth.SetPasswordHelp');\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n const btnSetPassword = Button('btn-primary btn-color-primary', {text: 'TwoStepVerificationSetPassword'});\r\n \r\n inputWrapper.append(btnSetPassword);\r\n c.append(inputWrapper);\r\n\r\n attachClickEvent(btnSetPassword, (e) => {\r\n const tab = new AppTwoStepVerificationEnterPasswordTab(this.slider);\r\n tab.state = this.state;\r\n tab.open();\r\n });\r\n }\r\n\r\n this.scrollable.container.append(section.container);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\n\r\nexport default class AppPrivacyLastSeenTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-last-seen');\r\n this.setTitle('PrivacyLastSeen');\r\n\r\n const caption: LangPackKey = 'PrivacySettingsController.LastSeenDescription';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'LastSeenTitle',\r\n inputKey: 'inputPrivacyKeyStatusTimestamp',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\r\n appendTo: this.scrollable\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { PrivacyType } from \"../../../../lib/appManagers/appPrivacyManager\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\n\r\nexport default class AppPrivacyProfilePhotoTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-profile-photo');\r\n this.setTitle('PrivacyProfilePhoto');\r\n\r\n const caption: LangPackKey = 'PrivacySettingsController.ProfilePhoto.CustomHelp';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'PrivacyProfilePhotoTitle',\r\n inputKey: 'inputPrivacyKeyProfilePhoto',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\r\n appendTo: this.scrollable,\r\n skipTypes: [PrivacyType.Nobody]\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\n\r\nexport default class AppPrivacyForwardMessagesTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-forward-messages');\r\n this.setTitle('PrivacySettings.Forwards');\r\n\r\n const caption: LangPackKey = 'PrivacySettingsController.Forwards.CustomHelp';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'PrivacyForwardsTitle',\r\n inputKey: 'inputPrivacyKeyForwards',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\r\n appendTo: this.scrollable\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\nimport { PrivacyType } from \"../../../../lib/appManagers/appPrivacyManager\";\r\n\r\nexport default class AppPrivacyAddToGroupsTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-add-to-groups');\r\n this.setTitle('PrivacySettings.Groups');\r\n\r\n const caption: LangPackKey = 'PrivacySettingsController.GroupDescription';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'WhoCanAddMe',\r\n inputKey: 'inputPrivacyKeyChatInvite',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\r\n appendTo: this.scrollable,\r\n skipTypes: [PrivacyType.Nobody]\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../../sliderTab\";\r\nimport PrivacySection from \"../../../privacySection\";\r\nimport { LangPackKey } from \"../../../../lib/langPack\";\r\n\r\nexport default class AppPrivacyCallsTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('privacy-tab', 'privacy-calls');\r\n this.setTitle('PrivacySettings.VoiceCalls');\r\n\r\n const caption: LangPackKey = 'PrivacySettingsController.PhoneCallDescription';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'WhoCanCallMe',\r\n inputKey: 'inputPrivacyKeyPhoneCall',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\r\n appendTo: this.scrollable\r\n });\r\n\r\n {\r\n const caption: LangPackKey = 'PrivacySettingsController.P2p.Desc';\r\n new PrivacySection({\r\n tab: this,\r\n title: 'PrivacyP2PHeader',\r\n inputKey: 'inputPrivacyKeyPhoneP2P',\r\n captions: [caption, caption, caption],\r\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\r\n appendTo: this.scrollable\r\n });\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport { SettingSection } from \"..\";\r\nimport Button from \"../../button\";\r\nimport Row from \"../../row\";\r\nimport { Authorization } from \"../../../layer\";\r\nimport { formatDateAccordingToTodayNew } from \"../../../helpers/date\";\r\nimport { attachContextMenuListener, openBtnMenu, positionMenu } from \"../../misc\";\r\nimport ButtonMenu from \"../../buttonMenu\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport { toast } from \"../../toast\";\r\nimport AppPrivacyAndSecurityTab from \"./privacyAndSecurity\";\r\nimport I18n from \"../../../lib/langPack\";\r\nimport PopupPeer from \"../../popups/peer\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\r\n\r\nexport default class AppActiveSessionsTab extends SliderSuperTab {\r\n public privacyTab: AppPrivacyAndSecurityTab;\r\n public authorizations: Authorization.authorization[];\r\n private menuElement: HTMLElement;\r\n \r\n protected init() {\r\n this.container.classList.add('active-sessions-container');\r\n this.setTitle('SessionsTitle');\r\n\r\n const Session = (auth: Authorization.authorization) => {\r\n const row = new Row({\r\n title: [auth.app_name, auth.app_version].join(' '),\r\n subtitle: [auth.ip, auth.country].join(' - '),\r\n clickable: true,\r\n titleRight: auth.pFlags.current ? undefined : formatDateAccordingToTodayNew(new Date(Math.max(auth.date_active, auth.date_created) * 1000))\r\n });\r\n\r\n row.container.dataset.hash = auth.hash;\r\n\r\n const midtitle = document.createElement('div');\r\n midtitle.classList.add('row-midtitle');\r\n midtitle.innerHTML = [auth.device_model, auth.system_version || auth.platform].filter(Boolean).join(', ');\r\n\r\n row.subtitle.parentElement.insertBefore(midtitle, row.subtitle);\r\n\r\n return row;\r\n };\r\n\r\n const authorizations = this.authorizations.slice();\r\n\r\n {\r\n const section = new SettingSection({\r\n name: 'CurrentSession'\r\n });\r\n\r\n const auth = authorizations.findAndSplice(auth => auth.pFlags.current);\r\n const session = Session(auth);\r\n\r\n section.content.append(session.container);\r\n\r\n if(authorizations.length) {\r\n const btnTerminate = Button('btn-primary btn-transparent danger', {icon: 'stop', text: 'TerminateAllSessions'});\r\n attachClickEvent(btnTerminate, (e) => {\r\n new PopupPeer('revoke-session', {\r\n buttons: [{\r\n langKey: 'Terminate',\r\n isDanger: true,\r\n callback: () => {\r\n const toggle = toggleDisability([btnTerminate], true);\r\n apiManager.invokeApi('auth.resetAuthorizations').then(value => {\r\n //toggleDisability([btnTerminate], false);\r\n btnTerminate.remove();\r\n otherSection.container.remove();\r\n this.privacyTab.updateActiveSessions();\r\n }, onError).finally(() => {\r\n toggle();\r\n });\r\n }\r\n }],\r\n titleLangKey: 'AreYouSureSessionsTitle',\r\n descriptionLangKey: 'AreYouSureSessions'\r\n }).show();\r\n });\r\n \r\n section.content.append(btnTerminate);\r\n }\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n if(!authorizations.length) {\r\n return;\r\n }\r\n\r\n const otherSection = new SettingSection({\r\n name: 'OtherSessions'\r\n });\r\n\r\n authorizations.forEach(auth => {\r\n otherSection.content.append(Session(auth).container);\r\n });\r\n\r\n this.scrollable.append(otherSection.container);\r\n\r\n const onError = (err: any) => {\r\n if(err.type === 'FRESH_RESET_AUTHORISATION_FORBIDDEN') {\r\n toast(I18n.format('RecentSessions.Error.FreshReset', true));\r\n }\r\n };\r\n\r\n let target: HTMLElement;\r\n const onTerminateClick = () => {\r\n const hash = target.dataset.hash;\r\n \r\n new PopupPeer('revoke-session', {\r\n buttons: [{\r\n langKey: 'Terminate',\r\n isDanger: true,\r\n callback: () => {\r\n apiManager.invokeApi('account.resetAuthorization', {hash})\r\n .then(value => {\r\n if(value) {\r\n target.remove();\r\n this.privacyTab.updateActiveSessions();\r\n }\r\n }, onError);\r\n }\r\n }],\r\n titleLangKey: 'AreYouSureSessionTitle',\r\n descriptionLangKey: 'TerminateSessionText'\r\n }).show();\r\n };\r\n\r\n const element = this.menuElement = ButtonMenu([{\r\n icon: 'stop',\r\n text: 'Terminate',\r\n onClick: onTerminateClick\r\n }]);\r\n element.id = 'active-sessions-contextmenu';\r\n element.classList.add('contextmenu');\r\n\r\n document.getElementById('page-chats').append(element);\r\n\r\n attachContextMenuListener(this.scrollable.container, (e) => {\r\n target = findUpClassName(e.target, 'row');\r\n if(!target || target.dataset.hash === '0') {\r\n return;\r\n }\r\n\r\n if(e instanceof MouseEvent) e.preventDefault();\r\n // smth\r\n if(e instanceof MouseEvent) e.cancelBubble = true;\r\n\r\n positionMenu(e, element);\r\n openBtnMenu(element);\r\n });\r\n\r\n attachClickEvent(this.scrollable.container, (e) => {\r\n target = findUpClassName(e.target, 'row');\r\n if(!target || target.dataset.hash === '0') {\r\n return;\r\n }\r\n\r\n onTerminateClick();\r\n });\r\n }\r\n\r\n onCloseAfterTimeout() {\r\n if(this.menuElement) {\r\n this.menuElement.remove();\r\n }\r\n\r\n return super.onCloseAfterTimeout();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport { SettingSection } from \"..\";\r\nimport { attachContextMenuListener, openBtnMenu, positionMenu } from \"../../misc\";\r\nimport ButtonMenu from \"../../buttonMenu\";\r\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport PopupPickUser from \"../../popups/pickUser\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport findUpTag from \"../../../helpers/dom/findUpTag\";\r\nimport ButtonCorner from \"../../buttonCorner\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\n\r\nexport default class AppBlockedUsersTab extends SliderSuperTab {\r\n public peerIds: number[];\r\n private menuElement: HTMLElement;\r\n \r\n protected init() {\r\n this.container.classList.add('blocked-users-container');\r\n this.setTitle('BlockedUsers');\r\n\r\n {\r\n const section = new SettingSection({\r\n caption: 'BlockedUsersInfo'\r\n });\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n const btnAdd = ButtonCorner({icon: 'add', className: 'is-visible'});\r\n this.content.append(btnAdd);\r\n\r\n attachClickEvent(btnAdd, (e) => {\r\n new PopupPickUser({\r\n peerTypes: ['contacts'],\r\n placeholder: 'BlockModal.Search.Placeholder',\r\n onSelect: (peerId) => {\r\n //console.log('block', peerId);\r\n appUsersManager.toggleBlock(peerId, true);\r\n },\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n const list = appDialogsManager.createChatList();\r\n this.scrollable.container.classList.add('chatlist-container');\r\n this.scrollable.append(list);\r\n\r\n const add = (peerId: number, append: boolean) => {\r\n const {dom} = appDialogsManager.addDialogNew({\r\n dialog: peerId,\r\n container: list,\r\n drawStatus: false,\r\n rippleEnabled: true,\r\n avatarSize: 48,\r\n append\r\n });\r\n\r\n const user = appUsersManager.getUser(peerId);\r\n if(user.pFlags.bot) {\r\n dom.lastMessageSpan.append('@' + user.username);\r\n } else {\r\n if(user.phone) dom.lastMessageSpan.innerHTML = appUsersManager.formatUserPhone(user.phone);\r\n else dom.lastMessageSpan.append(user.username ? '@' + user.username : appUsersManager.getUserStatusString(peerId));\r\n }\r\n\r\n //dom.titleSpan.innerHTML = 'Raaid El Syed';\r\n //dom.lastMessageSpan.innerHTML = '+1 234 567891';\r\n };\r\n\r\n for(const peerId of this.peerIds) {\r\n add(peerId, true);\r\n }\r\n\r\n let target: HTMLElement;\r\n const onUnblock = () => {\r\n const peerId = +target.dataset.peerId;\r\n appUsersManager.toggleBlock(peerId, false);\r\n };\r\n\r\n const element = this.menuElement = ButtonMenu([{\r\n icon: 'lockoff',\r\n text: 'Unblock',\r\n onClick: onUnblock,\r\n options: {listenerSetter: this.listenerSetter}\r\n }]);\r\n element.id = 'blocked-users-contextmenu';\r\n element.classList.add('contextmenu');\r\n\r\n document.getElementById('page-chats').append(element);\r\n\r\n attachContextMenuListener(this.scrollable.container, (e) => {\r\n target = findUpTag(e.target, 'LI');\r\n if(!target) {\r\n return;\r\n }\r\n\r\n if(e instanceof MouseEvent) e.preventDefault();\r\n // smth\r\n if(e instanceof MouseEvent) e.cancelBubble = true;\r\n\r\n positionMenu(e, element);\r\n openBtnMenu(element);\r\n }, this.listenerSetter);\r\n\r\n this.listenerSetter.add(rootScope)('peer_block', (update) => {\r\n const {peerId, blocked} = update;\r\n const li = list.querySelector(`[data-peer-id=\"${peerId}\"]`);\r\n if(blocked) {\r\n if(!li) {\r\n add(peerId, false);\r\n }\r\n } else {\r\n if(li) {\r\n li.remove();\r\n }\r\n }\r\n });\r\n\r\n const LOAD_COUNT = 50;\r\n let loading = false;\r\n this.scrollable.onScrolledBottom = () => {\r\n if(loading) {\r\n return;\r\n }\r\n\r\n loading = true;\r\n appUsersManager.getBlocked(list.childElementCount, LOAD_COUNT).then(res => {\r\n for(const peerId of res.peerIds) {\r\n add(peerId, true);\r\n }\r\n\r\n if(res.peerIds.length < LOAD_COUNT || list.childElementCount === res.count) {\r\n this.scrollable.onScrolledBottom = null;\r\n }\r\n\r\n this.scrollable.checkForTriggers();\r\n }).finally(() => {\r\n loading = false;\r\n });\r\n };\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n this.scrollable.onScroll();\r\n }\r\n\r\n onCloseAfterTimeout() {\r\n if(this.menuElement) {\r\n this.menuElement.remove();\r\n }\r\n\r\n return super.onCloseAfterTimeout();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTabEventable } from \"../../sliderTab\";\r\nimport { SettingSection } from \"..\";\r\nimport Row from \"../../row\";\r\nimport { AccountPassword, Authorization, InputPrivacyKey, Updates } from \"../../../layer\";\r\nimport appPrivacyManager, { PrivacyType } from \"../../../lib/appManagers/appPrivacyManager\";\r\nimport AppPrivacyPhoneNumberTab from \"./privacy/phoneNumber\";\r\nimport AppTwoStepVerificationTab from \"./2fa\";\r\nimport passwordManager from \"../../../lib/mtproto/passwordManager\";\r\nimport AppTwoStepVerificationEnterPasswordTab from \"./2fa/enterPassword\";\r\nimport AppTwoStepVerificationEmailConfirmationTab from \"./2fa/emailConfirmation\";\r\nimport AppPrivacyLastSeenTab from \"./privacy/lastSeen\";\r\nimport AppPrivacyProfilePhotoTab from \"./privacy/profilePhoto\";\r\nimport AppPrivacyForwardMessagesTab from \"./privacy/forwardMessages\";\r\nimport AppPrivacyAddToGroupsTab from \"./privacy/addToGroups\";\r\nimport AppPrivacyCallsTab from \"./privacy/calls\";\r\nimport AppActiveSessionsTab from \"./activeSessions\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport AppBlockedUsersTab from \"./blockedUsers\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport { convertKeyToInputKey } from \"../../../helpers/string\";\r\nimport { i18n, LangPackKey, _i18n } from \"../../../lib/langPack\";\r\nimport replaceContent from \"../../../helpers/dom/replaceContent\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport PopupPeer from \"../../popups/peer\";\r\nimport appDraftsManager from \"../../../lib/appManagers/appDraftsManager\";\r\nimport Button from \"../../button\";\r\nimport toggleDisability from \"../../../helpers/dom/toggleDisability\";\r\n\r\nexport default class AppPrivacyAndSecurityTab extends SliderSuperTabEventable {\r\n private activeSessionsRow: Row;\r\n private authorizations: Authorization.authorization[];\r\n\r\n protected init() {\r\n this.container.classList.add('dont-u-dare-block-me');\r\n this.setTitle('PrivacySettings');\r\n\r\n const SUBTITLE: LangPackKey = 'Loading';\r\n\r\n {\r\n const section = new SettingSection({noDelimiter: true});\r\n\r\n let blockedPeerIds: number[];\r\n const blockedUsersRow = new Row({\r\n icon: 'deleteuser',\r\n titleLangKey: 'BlockedUsers',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n const tab = new AppBlockedUsersTab(this.slider);\r\n tab.peerIds = blockedPeerIds;\r\n tab.open();\r\n }\r\n });\r\n blockedUsersRow.freezed = true;\r\n\r\n let passwordState: AccountPassword;\r\n const twoFactorRowOptions = {\r\n icon: 'lock',\r\n titleLangKey: 'TwoStepVerification' as LangPackKey,\r\n subtitleLangKey: SUBTITLE,\r\n clickable: (e: Event) => {\r\n let tab: AppTwoStepVerificationTab | AppTwoStepVerificationEnterPasswordTab | AppTwoStepVerificationEmailConfirmationTab;\r\n if(passwordState.pFlags.has_password) {\r\n tab = new AppTwoStepVerificationEnterPasswordTab(this.slider);\r\n } else if(passwordState.email_unconfirmed_pattern) {\r\n tab = new AppTwoStepVerificationEmailConfirmationTab(this.slider);\r\n tab.email = passwordState.email_unconfirmed_pattern;\r\n tab.length = 6;\r\n tab.isFirst = true;\r\n passwordManager.resendPasswordEmail();\r\n } else {\r\n tab = new AppTwoStepVerificationTab(this.slider);\r\n }\r\n \r\n tab.state = passwordState;\r\n tab.open();\r\n }\r\n };\r\n \r\n const twoFactorRow = new Row(twoFactorRowOptions);\r\n twoFactorRow.freezed = true;\r\n\r\n const activeSessionsRow = this.activeSessionsRow = new Row({\r\n icon: 'activesessions',\r\n titleLangKey: 'SessionsTitle',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n const tab = new AppActiveSessionsTab(this.slider);\r\n tab.privacyTab = this;\r\n tab.authorizations = this.authorizations;\r\n tab.open();\r\n }\r\n });\r\n activeSessionsRow.freezed = true;\r\n\r\n section.content.append(blockedUsersRow.container, twoFactorRow.container, activeSessionsRow.container);\r\n this.scrollable.append(section.container);\r\n\r\n const setBlockedCount = (count: number) => {\r\n if(count) {\r\n replaceContent(blockedUsersRow.subtitle, i18n('PrivacySettingsController.UserCount', [count]));\r\n } else {\r\n replaceContent(blockedUsersRow.subtitle, i18n('BlockedEmpty', [count]));\r\n }\r\n };\r\n\r\n this.listenerSetter.add(rootScope)('peer_block', () => {\r\n /* const {blocked, peerId} = update;\r\n if(!blocked) blockedPeerIds.findAndSplice(p => p === peerId);\r\n else blockedPeerIds.unshift(peerId);\r\n blockedCount += blocked ? 1 : -1;\r\n setBlockedCount(blockedCount); */\r\n updateBlocked();\r\n });\r\n\r\n const updateBlocked = () => {\r\n appUsersManager.getBlocked().then(res => {\r\n blockedUsersRow.freezed = false;\r\n setBlockedCount(res.count);\r\n blockedPeerIds = res.peerIds;\r\n });\r\n };\r\n\r\n updateBlocked();\r\n\r\n passwordManager.getState().then(state => {\r\n passwordState = state;\r\n replaceContent(twoFactorRow.subtitle, i18n(state.pFlags.has_password ? 'PrivacyAndSecurity.Item.On' : 'PrivacyAndSecurity.Item.Off'));\r\n twoFactorRow.freezed = false;\r\n \r\n //console.log('password state', state);\r\n });\r\n\r\n this.updateActiveSessions();\r\n }\r\n\r\n {\r\n const section = new SettingSection({name: 'PrivacyTitle'});\r\n\r\n section.content.classList.add('privacy-navigation-container');\r\n\r\n const rowsByKeys: Partial<{\r\n [key in InputPrivacyKey['_']]: Row\r\n }> = {};\r\n\r\n const numberVisibilityRow = rowsByKeys['inputPrivacyKeyPhoneNumber'] = new Row({\r\n titleLangKey: 'PrivacyPhoneTitle',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyPhoneNumberTab(this.slider).open();\r\n }\r\n });\r\n\r\n const lastSeenTimeRow = rowsByKeys['inputPrivacyKeyStatusTimestamp'] = new Row({\r\n titleLangKey: 'LastSeenTitle',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyLastSeenTab(this.slider).open();\r\n }\r\n });\r\n\r\n const photoVisibilityRow = rowsByKeys['inputPrivacyKeyProfilePhoto'] = new Row({\r\n titleLangKey: 'PrivacyProfilePhotoTitle',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyProfilePhotoTab(this.slider).open();\r\n }\r\n });\r\n\r\n const callRow = rowsByKeys['inputPrivacyKeyPhoneCall'] = new Row({\r\n titleLangKey: 'WhoCanCallMe',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyCallsTab(this.slider).open();\r\n }\r\n });\r\n\r\n const linkAccountRow = rowsByKeys['inputPrivacyKeyForwards'] = new Row({\r\n titleLangKey: 'PrivacyForwardsTitle',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyForwardMessagesTab(this.slider).open();\r\n }\r\n });\r\n\r\n const groupChatsAddRow = rowsByKeys['inputPrivacyKeyChatInvite'] = new Row({\r\n titleLangKey: 'WhoCanAddMe',\r\n subtitleLangKey: SUBTITLE,\r\n clickable: () => {\r\n new AppPrivacyAddToGroupsTab(this.slider).open();\r\n }\r\n });\r\n\r\n const updatePrivacyRow = (key: InputPrivacyKey['_']) => {\r\n const row = rowsByKeys[key];\r\n if(!row) {\r\n return;\r\n }\r\n\r\n appPrivacyManager.getPrivacy(key).then(rules => {\r\n const details = appPrivacyManager.getPrivacyRulesDetails(rules);\r\n const langKey = details.type === PrivacyType.Everybody ? 'PrivacySettingsController.Everbody' : (details.type === PrivacyType.Contacts ? 'PrivacySettingsController.MyContacts' : 'PrivacySettingsController.Nobody');\r\n const disallowLength = details.disallowPeers.users.length + details.disallowPeers.chats.length;\r\n const allowLength = details.allowPeers.users.length + details.allowPeers.chats.length;\r\n\r\n row.subtitle.innerHTML = '';\r\n const s = i18n(langKey);\r\n row.subtitle.append(s);\r\n if(disallowLength || allowLength) {\r\n row.subtitle.append(` (${[-disallowLength, allowLength ? '+' + allowLength : 0].filter(Boolean).join(', ')})`);\r\n }\r\n });\r\n };\r\n\r\n section.content.append(numberVisibilityRow.container, lastSeenTimeRow.container, photoVisibilityRow.container, callRow.container, linkAccountRow.container, groupChatsAddRow.container);\r\n this.scrollable.append(section.container);\r\n\r\n for(const key in rowsByKeys) {\r\n updatePrivacyRow(key as keyof typeof rowsByKeys);\r\n }\r\n\r\n rootScope.addEventListener('privacy_update', (update) => {\r\n updatePrivacyRow(convertKeyToInputKey(update.key._) as any);\r\n });\r\n }\r\n\r\n const promises: Promise[] = [];\r\n {\r\n const section = new SettingSection({name: 'Privacy.SensitiveContent'});\r\n section.container.classList.add('hide');\r\n\r\n promises.push(apiManager.invokeApi('account.getContentSettings').then(settings => {\r\n if(!settings.pFlags.sensitive_can_change) {\r\n return;\r\n }\r\n \r\n const enabled = settings.pFlags.sensitive_enabled;\r\n\r\n const sensitiveRow = new Row({\r\n checkboxField: new CheckboxField({text: 'PrivacyAndSecurity.SensitiveText', checked: enabled}),\r\n subtitleLangKey: 'PrivacyAndSecurity.SensitiveDesc',\r\n noCheckboxSubtitle: true\r\n });\r\n \r\n section.content.append(sensitiveRow.container);\r\n section.container.classList.remove('hide');\r\n \r\n this.eventListener.addEventListener('destroy', () => {\r\n const _enabled = sensitiveRow.checkboxField.checked;\r\n const isChanged = _enabled !== enabled;\r\n if(!isChanged) {\r\n return;\r\n }\r\n \r\n apiManager.invokeApi('account.setContentSettings', {\r\n sensitive_enabled: _enabled\r\n });\r\n }, {once: true});\r\n }));\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n {\r\n const section = new SettingSection({name: 'FilterChats'});\r\n\r\n const onDeleteClick = () => {\r\n const popup = new PopupPeer('popup-delete-drafts', {\r\n buttons: [{\r\n langKey: 'Delete',\r\n callback: () => {\r\n const toggle = toggleDisability([deleteButton], true);\r\n appDraftsManager.clearAllDrafts().then(() => {\r\n toggle();\r\n });\r\n },\r\n isDanger: true,\r\n }], \r\n titleLangKey: 'AreYouSureClearDraftsTitle',\r\n descriptionLangKey: 'AreYouSureClearDrafts'\r\n });\r\n \r\n popup.show();\r\n };\r\n\r\n const deleteButton = Button('btn-primary btn-transparent', {icon: 'delete', text: 'PrivacyDeleteCloudDrafts'});\r\n this.listenerSetter.add(deleteButton)('click', onDeleteClick);\r\n section.content.append(deleteButton);\r\n\r\n /* promises.push(apiManager.invokeApi('messages.getAllDrafts').then(drafts => {\r\n const draftsRow = new Row({\r\n titleLangKey: 'PrivacyDeleteCloudDrafts',\r\n subtitleLangKey: 'Drafts',\r\n subtitleLangArgs: [(drafts as Updates.updates).updates.length],\r\n icon: 'delete',\r\n clickable: onDeleteClick\r\n });\r\n \r\n section.content.append(draftsRow.container);\r\n })); */\r\n\r\n this.scrollable.append(section.container);\r\n }\r\n\r\n return Promise.all(promises);\r\n }\r\n\r\n public updateActiveSessions() {\r\n apiManager.invokeApi('account.getAuthorizations').then(auths => {\r\n this.activeSessionsRow.freezed = false;\r\n this.authorizations = auths.authorizations;\r\n _i18n(this.activeSessionsRow.subtitle, 'Privacy.Devices', [this.authorizations.length]);\r\n //console.log('auths', auths);\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type ColorHsla = {\r\n h: number,\r\n s: number,\r\n l: number,\r\n a: number\r\n};\r\n\r\nexport type ColorRgba = [number, number, number, number];\r\n\r\n/**\r\n * @returns h [0, 360], s [0, 100], l [0, 100], a [0, 1]\r\n */\r\nexport function rgbaToHsla(r: number, g: number, b: number, a: number = 1): ColorHsla {\r\n r /= 255, g /= 255, b /= 255;\r\n const max = Math.max(r, g, b),\r\n min = Math.min(r, g, b);\r\n let h, s, l = (max + min) / 2;\r\n\r\n if(max === min) {\r\n h = s = 0; // achromatic\r\n } else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n\r\n return {\r\n h: h * 360,\r\n s: s * 100,\r\n l: l * 100,\r\n a\r\n };\r\n}\r\n\r\n// * https://stackoverflow.com/a/9493060/6758968\r\n/**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h in [0, 360], s, and l are contained in the set [0, 1], a in [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * @param {number} h The hue\r\n * @param {number} s The saturation\r\n * @param {number} l The lightness\r\n * @return {Array} The RGB representation\r\n */\r\nexport function hslaToRgba(h: number, s: number, l: number, a: number): ColorRgba {\r\n h /= 360, s /= 100, l /= 100;\r\n let r: number, g: number, b: number;\r\n\r\n if(s === 0) {\r\n r = g = b = l; // achromatic\r\n } else {\r\n const hue2rgb = function hue2rgb(p: number, q: number, t: number) {\r\n if(t < 0) t += 1;\r\n if(t > 1) t -= 1;\r\n if(t < 1/6) return p + (q - p) * 6 * t;\r\n if(t < 1/2) return q;\r\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\r\n return p;\r\n }\r\n\r\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n const p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1/3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1/3);\r\n }\r\n\r\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), Math.round(a * 255)];\r\n}\r\n\r\nexport function hslaStringToRgba(hsla: string) {\r\n const splitted = hsla.slice(5, -1).split(', ');\r\n const alpha = +splitted.pop();\r\n const arr = splitted.map((val) => {\r\n if(val.endsWith('%')) {\r\n return +val.slice(0, -1);\r\n }\r\n \r\n return +val;\r\n });\r\n\r\n return hslaToRgba(arr[0], arr[1], arr[2], alpha);\r\n}\r\n\r\nexport function hexaToRgba(hexa: string) {\r\n const arr: ColorRgba = [] as any;\r\n const offset = 1;\r\n if(hexa.length === (3 + offset)) {\r\n for(let i = offset; i < hexa.length; ++i) {\r\n arr.push(parseInt(hexa[i] + hexa[i], 16));\r\n }\r\n } else if(hexa.length === (4 + offset)) {\r\n for(let i = offset; i < (hexa.length - 1); ++i) {\r\n arr.push(parseInt(hexa[i] + hexa[i], 16));\r\n }\r\n\r\n arr.push(parseInt(hexa[hexa.length - 1], 16));\r\n } else {\r\n for(let i = offset; i < hexa.length; i += 2) {\r\n arr.push(parseInt(hexa.slice(i, i + 2), 16));\r\n }\r\n }\r\n\r\n return arr;\r\n}\r\n\r\nexport function hexaToHsla(hexa: string) {\r\n const rgba = hexaToRgba(hexa);\r\n return rgbaToHsla(rgba[0], rgba[1], rgba[2], rgba[3]);\r\n}\r\n\r\nexport function rgbaToHexa(rgba: ColorRgba) {\r\n return '#' + rgba.map(v => ('0' + v.toString(16)).slice(-2)).join('');\r\n}\r\n\r\nexport function hslaStringToHexa(hsla: string) {\r\n return rgbaToHexa(hslaStringToRgba(hsla));\r\n}\r\n\r\nexport function hslaStringToHex(hsla: string) {\r\n return hslaStringToHexa(hsla).slice(0, -2);\r\n}\r\n","import { rgbaToHsla } from \"./color\";\r\n\r\n// * https://github.com/TelegramMessenger/Telegram-iOS/blob/3d062fff78cc6b287c74e6171f855a3500c0156d/submodules/TelegramPresentationData/Sources/PresentationData.swift#L453\r\nexport default function highlightningColor(rgba: [number, number, number, number?]) {\r\n let {h, s, l} = rgbaToHsla(rgba[0], rgba[1], rgba[2]);\r\n if(s > 0) {\r\n s = Math.min(100, s + 5 + 0.1 * (100 - s));\r\n }\r\n l = Math.max(0, l * .65);\r\n \r\n const hsla = `hsla(${h}, ${s}%, ${l}%, .4)`;\r\n return hsla;\r\n}\r\n","import { ColorHsla, ColorRgba, hexaToHsla, hslaToRgba, rgbaToHexa as rgbaToHexa, rgbaToHsla } from \"../helpers/color\";\r\nimport attachGrabListeners from \"../helpers/dom/attachGrabListeners\";\r\nimport { clamp } from \"../helpers/number\";\r\nimport InputField, { InputState } from \"./inputField\";\r\n\r\nexport type ColorPickerColor = { \r\n hsl: string; \r\n rgb: string; \r\n hex: string; \r\n hsla: string; \r\n rgba: string; \r\n hexa: string; \r\n rgbaArray: ColorRgba; \r\n};\r\n\r\nexport default class ColorPicker {\r\n private static BASE_CLASS = 'color-picker';\r\n public container: HTMLElement;\r\n\r\n private boxRect: DOMRect;\r\n //private boxDraggerRect: DOMRect;\r\n private hueRect: DOMRect;\r\n //private hueDraggerRect: DOMRect;\r\n\r\n\tprivate hue = 0;\r\n\tprivate saturation = 100;\r\n\tprivate lightness = 50;\r\n\tprivate alpha = 1;\r\n private elements: {\r\n box: SVGSVGElement,\r\n boxDragger: SVGSVGElement,\r\n sliders: HTMLElement,\r\n hue: SVGSVGElement,\r\n hueDragger: SVGSVGElement,\r\n saturation: SVGLinearGradientElement,\r\n } = {} as any;\r\n private hexInputField: InputField;\r\n private rgbInputField: InputField;\r\n public onChange: (color: ReturnType) => void;\r\n\r\n constructor() {\r\n this.container = document.createElement('div');\r\n this.container.classList.add(ColorPicker.BASE_CLASS);\r\n\r\n const html = `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n `;\r\n\r\n this.container.innerHTML = html;\r\n\r\n this.elements.box = this.container.firstElementChild as any;\r\n this.elements.boxDragger = this.elements.box.lastElementChild as any;\r\n this.elements.saturation = this.elements.box.firstElementChild.firstElementChild as any;\r\n\r\n this.elements.sliders = this.elements.box.nextElementSibling as any;\r\n\r\n this.elements.hue = this.elements.sliders.firstElementChild as any;\r\n this.elements.hueDragger = this.elements.hue.lastElementChild as any;\r\n\r\n this.hexInputField = new InputField({plainText: true, label: 'Appearance.Color.Hex'});\r\n this.rgbInputField = new InputField({plainText: true, label: 'Appearance.Color.RGB'});\r\n\r\n const inputs = document.createElement('div');\r\n inputs.className = ColorPicker.BASE_CLASS + '-inputs';\r\n inputs.append(this.hexInputField.container, this.rgbInputField.container);\r\n this.container.append(inputs);\r\n\r\n this.hexInputField.input.addEventListener('input', () => {\r\n let value = this.hexInputField.value.replace(/#/g, '').slice(0, 6);\r\n\r\n const match = value.match(/([a-fA-F\\d]+)/);\r\n const valid = match && match[0].length === value.length && [/* 3, 4, */6].includes(value.length);\r\n this.hexInputField.setState(valid ? InputState.Neutral : InputState.Error);\r\n\r\n value = '#' + value;\r\n this.hexInputField.setValueSilently(value);\r\n \r\n if(valid) {\r\n this.setColor(value, false, true);\r\n }\r\n });\r\n\r\n // patched https://stackoverflow.com/a/34029238/6758968\r\n const rgbRegExp = /^(?:rgb)?\\(?([01]?\\d\\d?|2[0-4]\\d|25[0-5])(?:\\W+)([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\W+(?:([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\)?)$/;\r\n this.rgbInputField.input.addEventListener('input', () => {\r\n const match = this.rgbInputField.value.match(rgbRegExp);\r\n this.rgbInputField.setState(match ? InputState.Neutral : InputState.Error);\r\n\r\n if(match) {\r\n this.setColor(rgbaToHsla(+match[1], +match[2], +match[3]), true, false);\r\n }\r\n });\r\n\r\n this.attachBoxListeners();\r\n this.attachHueListeners();\r\n }\r\n\r\n private onGrabStart = () => {\r\n document.documentElement.style.cursor = this.elements.boxDragger.style.cursor = 'grabbing';\r\n };\r\n\r\n private onGrabEnd = () => {\r\n document.documentElement.style.cursor = this.elements.boxDragger.style.cursor = '';\r\n };\r\n\r\n private attachBoxListeners() {\r\n attachGrabListeners(this.elements.box as any, () => {\r\n this.onGrabStart();\r\n this.boxRect = this.elements.box.getBoundingClientRect();\r\n //this.boxDraggerRect = this.elements.boxDragger.getBoundingClientRect();\r\n }, (pos) => {\r\n this.saturationHandler(pos.x, pos.y);\r\n }, () => {\r\n this.onGrabEnd();\r\n });\r\n }\r\n\r\n private attachHueListeners() {\r\n attachGrabListeners(this.elements.hue as any, () => {\r\n this.onGrabStart();\r\n this.hueRect = this.elements.hue.getBoundingClientRect();\r\n //this.hueDraggerRect = this.elements.hueDragger.getBoundingClientRect();\r\n }, (pos) => {\r\n this.hueHandler(pos.x);\r\n }, () => {\r\n this.onGrabEnd();\r\n });\r\n }\r\n\r\n public setColor(color: ColorHsla | string, updateHexInput = true, updateRgbInput = true) {\r\n if(color === undefined) { // * set to red\r\n color = {\r\n h: 0,\r\n s: 100,\r\n l: 50,\r\n a: 1\r\n };\r\n } else if(typeof(color) === 'string') {\r\n if(color[0] === '#') {\r\n color = hexaToHsla(color);\r\n } else {\r\n const rgb = color.match(/[.?\\d]+/g);\r\n color = rgbaToHsla(+rgb[0], +rgb[1], +rgb[2], rgb[3] === undefined ? 1 : +rgb[3]);\r\n }\r\n }\r\n\r\n // Set box\r\n this.boxRect = this.elements.box.getBoundingClientRect();\r\n\r\n const boxX = this.boxRect.width / 100 * color.s;\r\n const percentY = 100 - (color.l / (100 - color.s / 2)) * 100;\r\n const boxY = this.boxRect.height / 100 * percentY;\r\n\r\n this.saturationHandler(this.boxRect.left + boxX, this.boxRect.top + boxY, false);\r\n\r\n // Set hue\r\n this.hueRect = this.elements.hue.getBoundingClientRect();\r\n\r\n const percentHue = color.h / 360;\r\n const hueX = this.hueRect.left + this.hueRect.width * percentHue;\r\n\r\n this.hueHandler(hueX, false);\r\n\r\n // Set values\r\n this.hue = color.h;\r\n this.saturation = color.s;\r\n this.lightness = color.l;\r\n this.alpha = color.a;\r\n\r\n this.updatePicker(updateHexInput, updateRgbInput);\r\n };\r\n\r\n public getCurrentColor(): ColorPickerColor {\r\n const rgbaArray = hslaToRgba(this.hue, this.saturation, this.lightness, this.alpha);\r\n const hexa = rgbaToHexa(rgbaArray);\r\n const hex = hexa.slice(0, -2);\r\n\r\n return {\r\n hsl: `hsl(${this.hue}, ${this.saturation}%, ${this.lightness}%)`,\r\n rgb: `rgb(${rgbaArray[0]}, ${rgbaArray[1]}, ${rgbaArray[2]})`,\r\n hex: hex,\r\n hsla: `hsla(${this.hue}, ${this.saturation}%, ${this.lightness}%, ${this.alpha})`,\r\n rgba: `rgba(${rgbaArray[0]}, ${rgbaArray[1]}, ${rgbaArray[2]}, ${rgbaArray[3]})`,\r\n hexa: hexa,\r\n rgbaArray: rgbaArray\r\n };\r\n }\r\n\r\n public updatePicker(updateHexInput = true, updateRgbInput = true) {\r\n const color = this.getCurrentColor();\r\n this.elements.boxDragger.setAttributeNS(null, 'fill', color.hex);\r\n\r\n if(updateHexInput) {\r\n this.hexInputField.setValueSilently(color.hex);\r\n this.hexInputField.setState(InputState.Neutral);\r\n }\r\n\r\n if(updateRgbInput) {\r\n this.rgbInputField.setValueSilently(color.rgbaArray.slice(0, -1).join(', '));\r\n this.rgbInputField.setState(InputState.Neutral);\r\n }\r\n\r\n if(this.onChange) {\r\n this.onChange(color);\r\n }\r\n }\r\n\r\n private hueHandler(pageX: number, update = true) {\r\n const eventX = clamp(pageX - this.hueRect.left, 0, this.hueRect.width);\r\n\r\n const percents = eventX / this.hueRect.width;\r\n this.hue = Math.round(360 * percents);\r\n \r\n const hsla = `hsla(${this.hue}, 100%, 50%, ${this.alpha})`;\r\n\r\n this.elements.hueDragger.setAttributeNS(null, 'x', (percents * 100) + '%');\r\n this.elements.hueDragger.setAttributeNS(null, 'fill', hsla);\r\n \r\n this.elements.saturation.lastElementChild.setAttributeNS(null, 'stop-color', hsla);\r\n\r\n if(update) {\r\n this.updatePicker();\r\n }\r\n }\r\n\r\n private saturationHandler(pageX: number, pageY: number, update = true) {\r\n const maxX = this.boxRect.width;\r\n const maxY = this.boxRect.height;\r\n\r\n const eventX = clamp(pageX - this.boxRect.left, 0, maxX);\r\n const eventY = clamp(pageY - this.boxRect.top, 0, maxY);\r\n\r\n const posX = eventX / maxX * 100;\r\n const posY = eventY / maxY * 100;\r\n \r\n const boxDragger = this.elements.boxDragger;\r\n boxDragger.setAttributeNS(null, 'x', posX + '%');\r\n boxDragger.setAttributeNS(null, 'y', posY + '%');\r\n\r\n const saturation = clamp(posX, 0, 100);\r\n\r\n const lightnessX = 100 - saturation / 2;\r\n const lightnessY = 100 - clamp(posY, 0, 100);\r\n\r\n const lightness = clamp(lightnessY / 100 * lightnessX, 0, 100);\r\n\r\n this.saturation = saturation;\r\n this.lightness = lightness;\r\n\r\n if(update) {\r\n this.updatePicker();\r\n }\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"..\";\r\nimport { hexaToRgba } from \"../../../helpers/color\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport highlightningColor from \"../../../helpers/highlightningColor\";\r\nimport throttle from \"../../../helpers/schedulers/throttle\";\r\nimport appImManager from \"../../../lib/appManagers/appImManager\";\r\nimport appStateManager, { Theme } from \"../../../lib/appManagers/appStateManager\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport ColorPicker, { ColorPickerColor } from \"../../colorPicker\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\n\r\nexport default class AppBackgroundColorTab extends SliderSuperTab {\r\n private colorPicker: ColorPicker;\r\n private grid: HTMLElement;\r\n private applyColor: (hex: string, updateColorPicker?: boolean) => void;\r\n private theme: Theme;\r\n\r\n init() {\r\n this.container.classList.add('background-container', 'background-color-container');\r\n this.setTitle('SetColor');\r\n\r\n this.theme = rootScope.getTheme();\r\n\r\n const section = new SettingSection({});\r\n this.colorPicker = new ColorPicker();\r\n\r\n section.content.append(this.colorPicker.container);\r\n\r\n this.scrollable.append(section.container);\r\n\r\n const grid = this.grid = document.createElement('div');\r\n grid.classList.add('grid');\r\n\r\n const colors = [\r\n '#E6EBEE',\r\n '#B2CEE1',\r\n '#008DD0',\r\n '#C6E7CB',\r\n '#C4E1A6',\r\n '#60B16E',\r\n '#CCD0AF',\r\n '#A6A997',\r\n '#7A7072',\r\n '#FDD7AF',\r\n '#FDB76E',\r\n '#DD8851'\r\n ];\r\n\r\n colors.forEach(color => {\r\n const item = document.createElement('div');\r\n item.classList.add('grid-item');\r\n item.dataset.color = color.toLowerCase();\r\n\r\n // * need for transform scale\r\n const media = document.createElement('div');\r\n media.classList.add('grid-item-media');\r\n media.style.backgroundColor = color;\r\n\r\n item.append(media);\r\n grid.append(item);\r\n });\r\n\r\n attachClickEvent(grid, (e) => {\r\n const target = findUpClassName(e.target, 'grid-item');\r\n if(!target || target.classList.contains('active')) {\r\n return;\r\n }\r\n\r\n const color = target.dataset.color;\r\n if(!color) {\r\n return;\r\n }\r\n\r\n this.applyColor(color);\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n this.scrollable.append(grid);\r\n\r\n this.applyColor = throttle(this._applyColor, 16, true);\r\n }\r\n\r\n private setActive() {\r\n const active = this.grid.querySelector('.active');\r\n const background = this.theme.background;\r\n const target = background.type === 'color' ? this.grid.querySelector(`.grid-item[data-color=\"${background.color}\"]`) : null;\r\n if(active === target) {\r\n return;\r\n }\r\n\r\n if(active) {\r\n active.classList.remove('active');\r\n }\r\n\r\n if(target) {\r\n target.classList.add('active');\r\n }\r\n }\r\n\r\n private _applyColor = (hex: string, updateColorPicker = true) => {\r\n if(updateColorPicker) {\r\n this.colorPicker.setColor(hex);\r\n } else {\r\n const rgba = hexaToRgba(hex);\r\n const background = this.theme.background;\r\n const hsla = highlightningColor(rgba);\r\n \r\n background.color = hex.toLowerCase();\r\n background.type = 'color';\r\n background.highlightningColor = hsla;\r\n appStateManager.pushToState('settings', rootScope.settings);\r\n \r\n appImManager.applyCurrentTheme(undefined, undefined, true);\r\n this.setActive();\r\n }\r\n };\r\n\r\n private onColorChange = (color: ColorPickerColor) => {\r\n this.applyColor(color.hex, false);\r\n };\r\n\r\n onOpen() {\r\n setTimeout(() => {\r\n const background = this.theme.background;\r\n\r\n // * set active if type is color\r\n if(background.type === 'color') {\r\n this.colorPicker.onChange = this.onColorChange;\r\n }\r\n\r\n this.colorPicker.setColor(background.color || '#cccccc');\r\n \r\n if(background.type !== 'color') {\r\n this.colorPicker.onChange = this.onColorChange;\r\n }\r\n }, 0);\r\n }\r\n\r\n onCloseAfterTimeout() {\r\n this.colorPicker.onChange = undefined;\r\n this.colorPicker = undefined;\r\n\r\n return super.onCloseAfterTimeout();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { generateSection } from \"..\";\r\nimport { averageColor } from \"../../../helpers/averageColor\";\r\nimport blur from \"../../../helpers/blur\";\r\nimport { deferredPromise } from \"../../../helpers/cancellablePromise\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport { requestFile } from \"../../../helpers/files\";\r\nimport highlightningColor from \"../../../helpers/highlightningColor\";\r\nimport { copy } from \"../../../helpers/object\";\r\nimport sequentialDom from \"../../../helpers/sequentialDom\";\r\nimport { AccountWallPapers, PhotoSize, WallPaper } from \"../../../layer\";\r\nimport appDocsManager, { MyDocument } from \"../../../lib/appManagers/appDocsManager\";\r\nimport appDownloadManager from \"../../../lib/appManagers/appDownloadManager\";\r\nimport appImManager from \"../../../lib/appManagers/appImManager\";\r\nimport appPhotosManager from \"../../../lib/appManagers/appPhotosManager\";\r\nimport appStateManager, { Theme, STATE_INIT } from \"../../../lib/appManagers/appStateManager\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport Button from \"../../button\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport ProgressivePreloader from \"../../preloader\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport { wrapPhoto } from \"../../wrappers\";\r\nimport AppBackgroundColorTab from \"./backgroundColor\";\r\n\r\nlet uploadTempId = 0;\r\n\r\nexport default class AppBackgroundTab extends SliderSuperTab {\r\n private grid: HTMLElement;\r\n private tempId = 0;\r\n private theme: Theme;\r\n private clicked: Set = new Set();\r\n private blurCheckboxField: CheckboxField;\r\n\r\n init() {\r\n this.container.classList.add('background-container', 'background-image-container');\r\n this.setTitle('ChatBackground');\r\n\r\n this.theme = rootScope.getTheme();\r\n\r\n {\r\n const container = generateSection(this.scrollable);\r\n\r\n const uploadButton = Button('btn-primary btn-transparent', {icon: 'cameraadd', text: 'ChatBackground.UploadWallpaper'});\r\n const colorButton = Button('btn-primary btn-transparent', {icon: 'colorize', text: 'SetColor'});\r\n const resetButton = Button('btn-primary btn-transparent', {icon: 'favourites', text: 'Appearance.Reset'});\r\n\r\n attachClickEvent(uploadButton, this.onUploadClick, {listenerSetter: this.listenerSetter});\r\n\r\n attachClickEvent(colorButton, () => {\r\n new AppBackgroundColorTab(this.slider).open();\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n attachClickEvent(resetButton, this.onResetClick, {listenerSetter: this.listenerSetter});\r\n\r\n const blurCheckboxField = this.blurCheckboxField = new CheckboxField({\r\n text: 'ChatBackground.Blur', \r\n name: 'blur', \r\n checked: this.theme.background.blur,\r\n withRipple: true\r\n });\r\n\r\n this.listenerSetter.add(blurCheckboxField.input)('change', () => {\r\n this.theme.background.blur = blurCheckboxField.input.checked;\r\n appStateManager.pushToState('settings', rootScope.settings);\r\n\r\n const active = grid.querySelector('.active') as HTMLElement;\r\n if(!active) return;\r\n\r\n // * wait for animation end\r\n setTimeout(() => {\r\n this.setBackgroundDocument(active.dataset.slug, appDocsManager.getDoc(active.dataset.docId));\r\n }, 100);\r\n });\r\n\r\n container.append(uploadButton, colorButton, resetButton, blurCheckboxField.label);\r\n }\r\n\r\n rootScope.addEventListener('background_change', this.setActive);\r\n\r\n apiManager.invokeApiHashable('account.getWallPapers').then((accountWallpapers) => {\r\n const wallpapers = (accountWallpapers as AccountWallPapers.accountWallPapers).wallpapers as WallPaper.wallPaper[];\r\n wallpapers.forEach((wallpaper) => {\r\n this.addWallPaper(wallpaper);\r\n });\r\n\r\n //console.log(accountWallpapers);\r\n });\r\n\r\n const grid = this.grid = document.createElement('div');\r\n grid.classList.add('grid');\r\n attachClickEvent(grid, this.onGridClick, {listenerSetter: this.listenerSetter});\r\n this.scrollable.append(grid);\r\n }\r\n\r\n private onUploadClick = () => {\r\n requestFile('image/x-png,image/png,image/jpeg').then(file => {\r\n const id = 'wallpaper-upload-' + ++uploadTempId;\r\n\r\n const thumb = {\r\n _: 'photoSize',\r\n h: 0,\r\n w: 0,\r\n location: {} as any,\r\n size: file.size,\r\n type: 'full',\r\n } as PhotoSize.photoSize;\r\n let document: MyDocument = {\r\n _: 'document',\r\n access_hash: '',\r\n attributes: [],\r\n dc_id: 0,\r\n file_reference: [],\r\n id,\r\n mime_type: file.type,\r\n size: file.size,\r\n date: Date.now() / 1000,\r\n pFlags: {},\r\n thumbs: [thumb],\r\n file_name: file.name\r\n };\r\n\r\n document = appDocsManager.saveDoc(document);\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(document);\r\n cacheContext.downloaded = file.size;\r\n cacheContext.url = URL.createObjectURL(file);\r\n\r\n let wallpaper: WallPaper.wallPaper = {\r\n _: 'wallPaper',\r\n access_hash: '',\r\n document: document,\r\n id,\r\n slug: id,\r\n pFlags: {}\r\n };\r\n\r\n const upload = appDownloadManager.upload(file, file.name);\r\n\r\n const deferred = deferredPromise();\r\n deferred.addNotifyListener = upload.addNotifyListener;\r\n deferred.cancel = upload.cancel;\r\n\r\n upload.then(inputFile => {\r\n apiManager.invokeApi('account.uploadWallPaper', {\r\n file: inputFile,\r\n mime_type: file.type,\r\n settings: {\r\n _: 'wallPaperSettings'\r\n }\r\n }).then(_wallpaper => {\r\n const newDoc = (_wallpaper as WallPaper.wallPaper).document as MyDocument;\r\n const newCacheContext = appDownloadManager.getCacheContext(newDoc);\r\n Object.assign(newCacheContext, cacheContext);\r\n\r\n wallpaper = _wallpaper as WallPaper.wallPaper;\r\n wallpaper.document = appDocsManager.saveDoc(wallpaper.document);\r\n\r\n container.dataset.docId = wallpaper.document.id;\r\n container.dataset.slug = wallpaper.slug;\r\n \r\n this.setBackgroundDocument(wallpaper.slug, wallpaper.document).then(deferred.resolve, deferred.reject);\r\n }, deferred.reject);\r\n }, deferred.reject);\r\n\r\n deferred.then(() => {\r\n this.clicked.delete(wallpaper.document.id);\r\n }, (err) => {\r\n container.remove();\r\n //console.error('i saw the body drop', err);\r\n });\r\n\r\n const preloader = new ProgressivePreloader({\r\n isUpload: true,\r\n cancelable: true,\r\n tryAgainOnFail: false\r\n });\r\n\r\n const container = this.addWallPaper(wallpaper, false);\r\n this.clicked.add(wallpaper.document.id);\r\n\r\n preloader.attach(container, false, deferred);\r\n });\r\n };\r\n\r\n private onResetClick = () => {\r\n const defaultTheme = STATE_INIT.settings.themes.find(t => t.name === this.theme.name);\r\n if(defaultTheme) {\r\n ++this.tempId;\r\n this.theme.background = copy(defaultTheme.background);\r\n appStateManager.pushToState('settings', rootScope.settings);\r\n appImManager.applyCurrentTheme(undefined, undefined, true);\r\n this.blurCheckboxField.setValueSilently(this.theme.background.blur);\r\n }\r\n };\r\n\r\n private addWallPaper(wallpaper: WallPaper.wallPaper, append = true) {\r\n if(wallpaper.pFlags.pattern || \r\n !wallpaper.document || \r\n (wallpaper.document as MyDocument).mime_type.indexOf('application/') === 0) {\r\n return;\r\n }\r\n\r\n wallpaper.document = appDocsManager.saveDoc(wallpaper.document);\r\n\r\n const container = document.createElement('div');\r\n container.classList.add('grid-item');\r\n\r\n const media = document.createElement('div');\r\n media.classList.add('grid-item-media');\r\n\r\n const wrapped = wrapPhoto({\r\n photo: wallpaper.document,\r\n message: null,\r\n container: media,\r\n withoutPreloader: true,\r\n size: appPhotosManager.choosePhotoSize(wallpaper.document, 200, 200)\r\n });\r\n\r\n container.dataset.docId = wallpaper.document.id;\r\n container.dataset.slug = wallpaper.slug;\r\n\r\n if(this.theme.background.type === 'image' && this.theme.background.slug === wallpaper.slug) {\r\n container.classList.add('active');\r\n }\r\n\r\n (wrapped.loadPromises.thumb || wrapped.loadPromises.full).then(() => {\r\n sequentialDom.mutate(() => {\r\n container.append(media);\r\n });\r\n });\r\n\r\n this.grid[append ? 'append' : 'prepend'](container);\r\n\r\n return container;\r\n }\r\n\r\n private onGridClick = (e: MouseEvent | TouchEvent) => {\r\n const target = findUpClassName(e.target, 'grid-item') as HTMLElement;\r\n if(!target) return;\r\n\r\n const {docId, slug} = target.dataset;\r\n if(this.clicked.has(docId)) return;\r\n this.clicked.add(docId);\r\n\r\n const preloader = new ProgressivePreloader({\r\n cancelable: true,\r\n tryAgainOnFail: false\r\n });\r\n\r\n const doc = appDocsManager.getDoc(docId);\r\n\r\n const load = () => {\r\n const promise = this.setBackgroundDocument(slug, doc);\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n if(!cacheContext.url || this.theme.background.blur) {\r\n preloader.attach(target, true, promise);\r\n }\r\n };\r\n\r\n preloader.construct();\r\n\r\n attachClickEvent(target, (e) => {\r\n if(preloader.preloader.parentElement) {\r\n preloader.onClick(e);\r\n preloader.detach();\r\n } else {\r\n load();\r\n }\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n load();\r\n\r\n //console.log(doc);\r\n };\r\n\r\n private saveToCache = (slug: string, url: string) => {\r\n fetch(url).then(response => {\r\n appDownloadManager.cacheStorage.save('backgrounds/' + slug, response);\r\n });\r\n };\r\n\r\n private setBackgroundDocument = (slug: string, doc: MyDocument) => {\r\n let _tempId = ++this.tempId;\r\n const middleware = () => _tempId === this.tempId;\r\n\r\n const download = appDocsManager.downloadDoc(doc, appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : 0);\r\n\r\n const deferred = deferredPromise();\r\n deferred.addNotifyListener = download.addNotifyListener;\r\n deferred.cancel = download.cancel;\r\n\r\n download.then(() => {\r\n if(!middleware()) {\r\n deferred.resolve();\r\n return;\r\n }\r\n\r\n const background = this.theme.background;\r\n const onReady = (url: string) => {\r\n //const perf = performance.now();\r\n averageColor(url).then(pixel => {\r\n if(!middleware()) {\r\n deferred.resolve();\r\n return;\r\n }\r\n \r\n const hsla = highlightningColor(Array.from(pixel) as any);\r\n //console.log(doc, hsla, performance.now() - perf);\r\n\r\n background.slug = slug;\r\n background.type = 'image';\r\n background.highlightningColor = hsla;\r\n appStateManager.pushToState('settings', rootScope.settings);\r\n\r\n this.saveToCache(slug, url);\r\n appImManager.applyCurrentTheme(slug, url).then(deferred.resolve);\r\n });\r\n };\r\n\r\n const cacheContext = appDownloadManager.getCacheContext(doc);\r\n if(background.blur) {\r\n setTimeout(() => {\r\n blur(cacheContext.url, 12, 4)\r\n .then(url => {\r\n if(!middleware()) {\r\n deferred.resolve();\r\n return;\r\n }\r\n\r\n onReady(url);\r\n });\r\n }, 200);\r\n } else {\r\n onReady(cacheContext.url);\r\n }\r\n });\r\n\r\n return deferred;\r\n };\r\n\r\n private setActive = () => {\r\n const active = this.grid.querySelector('.active');\r\n const background = this.theme.background;\r\n const target = background.type === 'image' ? this.grid.querySelector(`.grid-item[data-slug=\"${background.slug}\"]`) : null;\r\n if(active === target) {\r\n return;\r\n }\r\n\r\n if(active) {\r\n active.classList.remove('active');\r\n }\r\n\r\n if(target) {\r\n target.classList.add('active');\r\n }\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport renderImageFromUrl from \"./dom/renderImageFromUrl\";\r\n\r\nexport const averageColor = (imageUrl: string): Promise => {\r\n const img = document.createElement('img');\r\n return new Promise((resolve) => {\r\n renderImageFromUrl(img, imageUrl, () => {\r\n const canvas = document.createElement('canvas');\r\n const ratio = img.naturalWidth / img.naturalHeight;\r\n const DIMENSIONS = 50;\r\n if(ratio === 1) {\r\n canvas.width = DIMENSIONS;\r\n canvas.height = canvas.width / ratio;\r\n } else if(ratio > 1) {\r\n canvas.height = DIMENSIONS;\r\n canvas.width = canvas.height / ratio;\r\n } else {\r\n canvas.width = canvas.height = DIMENSIONS;\r\n }\r\n \r\n const context = canvas.getContext('2d');\r\n context.drawImage(img, 0, 0, img.naturalWidth, img.naturalHeight, 0, 0, canvas.width, canvas.height);\r\n\r\n const pixel = new Array(4).fill(0);\r\n const pixels = context.getImageData(0, 0, canvas.width, canvas.height).data;\r\n for(let i = 0; i < pixels.length; i += 4) {\r\n pixel[0] += pixels[i];\r\n pixel[1] += pixels[i + 1];\r\n pixel[2] += pixels[i + 2];\r\n pixel[3] += pixels[i + 3];\r\n }\r\n\r\n const pixelsLength = pixels.length / 4;\r\n const outPixel = new Uint8ClampedArray(4);\r\n outPixel[0] = pixel[0] / pixelsLength;\r\n outPixel[1] = pixel[1] / pixelsLength;\r\n outPixel[2] = pixel[2] / pixelsLength;\r\n outPixel[3] = pixel[3] / pixelsLength;\r\n resolve(outPixel);\r\n });\r\n });\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport PopupElement from \".\";\r\nimport appStickersManager, { AppStickersManager } from \"../../lib/appManagers/appStickersManager\";\r\nimport { RichTextProcessor } from \"../../lib/richtextprocessor\";\r\nimport Scrollable from \"../scrollable\";\r\nimport { wrapSticker } from \"../wrappers\";\r\nimport LazyLoadQueue from \"../lazyLoadQueue\";\r\nimport { putPreloader } from \"../misc\";\r\nimport animationIntersector from \"../animationIntersector\";\r\nimport appImManager from \"../../lib/appManagers/appImManager\";\r\nimport { StickerSet } from \"../../layer\";\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\nimport { i18n } from \"../../lib/langPack\";\r\nimport Button from \"../button\";\r\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\r\nimport toggleDisability from \"../../helpers/dom/toggleDisability\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\n\r\nconst ANIMATION_GROUP = 'STICKERS-POPUP';\r\n\r\nexport default class PopupStickers extends PopupElement {\r\n private stickersFooter: HTMLElement;\r\n private stickersDiv: HTMLElement;\r\n private h6: HTMLElement;\r\n\r\n private set: StickerSet.stickerSet;\r\n\r\n constructor(private stickerSetInput: Parameters[0]) {\r\n super('popup-stickers', null, {closable: true, overlayClosable: true, body: true});\r\n\r\n this.h6 = document.createElement('h6');\r\n this.h6.append(i18n('Loading'));\r\n\r\n this.header.append(this.h6);\r\n\r\n this.onClose = () => {\r\n animationIntersector.setOnlyOnePlayableGroup('');\r\n };\r\n\r\n const div = document.createElement('div');\r\n div.classList.add('sticker-set');\r\n\r\n this.stickersDiv = document.createElement('div');\r\n this.stickersDiv.classList.add('sticker-set-stickers', 'is-loading');\r\n\r\n attachClickEvent(this.stickersDiv, this.onStickersClick, {listenerSetter: this.listenerSetter});\r\n\r\n putPreloader(this.stickersDiv, true);\r\n\r\n this.stickersFooter = document.createElement('div');\r\n this.stickersFooter.classList.add('sticker-set-footer');\r\n\r\n div.append(this.stickersDiv);\r\n\r\n const btn = Button('btn-primary btn-primary-transparent disable-hover', {noRipple: true, text: 'Loading'});\r\n this.stickersFooter.append(btn);\r\n\r\n this.body.append(div);\r\n const scrollable = new Scrollable(this.body);\r\n this.body.append(this.stickersFooter);\r\n \r\n // const editButton = document.createElement('button');\r\n // editButton.classList.add('btn-primary');\r\n\r\n // this.stickersFooter.append(editButton);\r\n\r\n this.loadStickerSet();\r\n }\r\n\r\n private onStickersClick = (e: MouseEvent) => {\r\n const target = findUpClassName(e.target, 'sticker-set-sticker');\r\n if(!target) return;\r\n\r\n const fileId = target.dataset.docId;\r\n if(appImManager.chat.input.sendMessageWithDocument(fileId)) {\r\n this.hide();\r\n } else {\r\n console.warn('got no doc by id:', fileId);\r\n }\r\n };\r\n\r\n private loadStickerSet() {\r\n return appStickersManager.getStickerSet(this.stickerSetInput).then(set => {\r\n //console.log('PopupStickers loadStickerSet got set:', set);\r\n\r\n this.set = set.set;\r\n\r\n animationIntersector.setOnlyOnePlayableGroup(ANIMATION_GROUP);\r\n\r\n this.h6.innerHTML = RichTextProcessor.wrapEmojiText(set.set.title);\r\n this.stickersFooter.classList.toggle('add', !set.set.installed_date);\r\n\r\n let button: HTMLElement;\r\n if(set.set.installed_date) {\r\n button = Button('btn-primary btn-primary-transparent danger', {noRipple: true});\r\n button.append(i18n('RemoveStickersCount', [i18n('Stickers', [set.set.count])]));\r\n } else {\r\n button = Button('btn-primary btn-color-primary', {noRipple: true});\r\n button.append(i18n('AddStickersCount', [i18n('Stickers', [set.set.count])]));\r\n }\r\n\r\n this.stickersFooter.textContent = '';\r\n this.stickersFooter.append(button);\r\n\r\n attachClickEvent(button, () => {\r\n const toggle = toggleDisability([button], true);\r\n\r\n appStickersManager.toggleStickerSet(this.set).then(() => {\r\n this.hide();\r\n }).catch(() => {\r\n toggle();\r\n });\r\n });\r\n\r\n const lazyLoadQueue = new LazyLoadQueue();\r\n \r\n this.stickersDiv.classList.remove('is-loading');\r\n this.stickersDiv.innerHTML = '';\r\n for(let doc of set.documents) {\r\n if(doc._ === 'documentEmpty') {\r\n continue;\r\n }\r\n \r\n const div = document.createElement('div');\r\n div.classList.add('sticker-set-sticker');\r\n\r\n const size = mediaSizes.active.esgSticker.width;\r\n \r\n wrapSticker({\r\n doc, \r\n div, \r\n lazyLoadQueue, \r\n group: ANIMATION_GROUP, \r\n play: true,\r\n loop: true,\r\n width: size,\r\n height: size\r\n });\r\n\r\n this.stickersDiv.append(div);\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\"\r\nimport { generateSection } from \"..\";\r\nimport RangeSelector from \"../../rangeSelector\";\r\nimport Button from \"../../button\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport RadioField from \"../../radioField\";\r\nimport appStateManager from \"../../../lib/appManagers/appStateManager\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport { IS_APPLE } from \"../../../environment/userAgent\";\r\nimport Row from \"../../row\";\r\nimport AppBackgroundTab from \"./background\";\r\nimport { LangPackKey, _i18n } from \"../../../lib/langPack\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport appStickersManager from \"../../../lib/appManagers/appStickersManager\";\r\nimport assumeType from \"../../../helpers/assumeType\";\r\nimport { MessagesAllStickers, StickerSet } from \"../../../layer\";\r\nimport RichTextProcessor from \"../../../lib/richtextprocessor\";\r\nimport { wrapStickerSetThumb } from \"../../wrappers\";\r\nimport LazyLoadQueue from \"../../lazyLoadQueue\";\r\nimport PopupStickers from \"../../popups/stickers\";\r\n\r\nexport class RangeSettingSelector {\r\n public container: HTMLDivElement;\r\n private range: RangeSelector;\r\n\r\n public onChange: (value: number) => void;\r\n\r\n constructor(name: LangPackKey, step: number, initialValue: number, minValue: number, maxValue: number) {\r\n const BASE_CLASS = 'range-setting-selector';\r\n this.container = document.createElement('div');\r\n this.container.classList.add(BASE_CLASS);\r\n\r\n const details = document.createElement('div');\r\n details.classList.add(BASE_CLASS + '-details');\r\n\r\n const nameDiv = document.createElement('div');\r\n nameDiv.classList.add(BASE_CLASS + '-name');\r\n _i18n(nameDiv, name);\r\n\r\n const valueDiv = document.createElement('div');\r\n valueDiv.classList.add(BASE_CLASS + '-value');\r\n valueDiv.innerHTML = '' + initialValue;\r\n\r\n details.append(nameDiv, valueDiv);\r\n\r\n this.range = new RangeSelector({\r\n step, \r\n min: minValue, \r\n max: maxValue\r\n }, initialValue);\r\n this.range.setListeners();\r\n this.range.setHandlers({\r\n onScrub: value => {\r\n if(this.onChange) {\r\n this.onChange(value);\r\n }\r\n\r\n //console.log('font size scrub:', value);\r\n valueDiv.innerText = '' + value;\r\n }\r\n });\r\n\r\n this.container.append(details, this.range.container);\r\n }\r\n}\r\n\r\nexport default class AppGeneralSettingsTab extends SliderSuperTab {\r\n init() {\r\n this.container.classList.add('general-settings-container');\r\n this.setTitle('General');\r\n\r\n const section = generateSection.bind(null, this.scrollable);\r\n\r\n {\r\n const container = section('Settings');\r\n \r\n const range = new RangeSettingSelector('TextSize', 1, rootScope.settings.messagesTextSize, 12, 20);\r\n range.onChange = (value) => {\r\n appStateManager.setByKey('settings.messagesTextSize', value);\r\n };\r\n\r\n const chatBackgroundButton = Button('btn-primary btn-transparent', {icon: 'image', text: 'ChatBackground'});\r\n\r\n attachClickEvent(chatBackgroundButton, () => {\r\n new AppBackgroundTab(this.slider).open();\r\n });\r\n\r\n const animationsCheckboxField = new CheckboxField({\r\n text: 'EnableAnimations', \r\n name: 'animations', \r\n stateKey: 'settings.animationsEnabled',\r\n withRipple: true\r\n });\r\n \r\n container.append(range.container, chatBackgroundButton, animationsCheckboxField.label);\r\n }\r\n\r\n {\r\n const container = section('General.Keyboard');\r\n\r\n const form = document.createElement('form');\r\n\r\n const enterRow = new Row({\r\n radioField: new RadioField({\r\n langKey: 'General.SendShortcut.Enter', \r\n name: 'send-shortcut', \r\n value: 'enter', \r\n stateKey: 'settings.sendShortcut'\r\n }),\r\n subtitleLangKey: 'General.SendShortcut.NewLine.ShiftEnter'\r\n });\r\n\r\n const ctrlEnterRow = new Row({\r\n radioField: new RadioField({\r\n name: 'send-shortcut',\r\n value: 'ctrlEnter', \r\n stateKey: 'settings.sendShortcut'\r\n }),\r\n subtitleLangKey: 'General.SendShortcut.NewLine.Enter'\r\n });\r\n _i18n(ctrlEnterRow.radioField.main, 'General.SendShortcut.CtrlEnter', [IS_APPLE ? '⌘' : 'Ctrl']);\r\n \r\n form.append(enterRow.container, ctrlEnterRow.container);\r\n container.append(form);\r\n }\r\n\r\n {\r\n const container = section('AutoDownloadMedia');\r\n //container.classList.add('sidebar-left-section-disabled');\r\n\r\n const contactsCheckboxField = new CheckboxField({\r\n text: 'AutodownloadContacts', \r\n name: 'contacts',\r\n stateKey: 'settings.autoDownload.contacts',\r\n withRipple: true\r\n });\r\n const privateCheckboxField = new CheckboxField({\r\n text: 'AutodownloadPrivateChats', \r\n name: 'private',\r\n stateKey: 'settings.autoDownload.private',\r\n withRipple: true\r\n });\r\n const groupsCheckboxField = new CheckboxField({\r\n text: 'AutodownloadGroupChats', \r\n name: 'groups',\r\n stateKey: 'settings.autoDownload.groups',\r\n withRipple: true\r\n });\r\n const channelsCheckboxField = new CheckboxField({\r\n text: 'AutodownloadChannels', \r\n name: 'channels',\r\n stateKey: 'settings.autoDownload.channels',\r\n withRipple: true\r\n });\r\n\r\n container.append(contactsCheckboxField.label, privateCheckboxField.label, groupsCheckboxField.label, channelsCheckboxField.label);\r\n }\r\n\r\n {\r\n const container = section('General.AutoplayMedia');\r\n //container.classList.add('sidebar-left-section-disabled');\r\n\r\n const gifsCheckboxField = new CheckboxField({\r\n text: 'AutoplayGIF', \r\n name: 'gifs', \r\n stateKey: 'settings.autoPlay.gifs',\r\n withRipple: true\r\n });\r\n const videosCheckboxField = new CheckboxField({\r\n text: 'AutoplayVideo', \r\n name: 'videos', \r\n stateKey: 'settings.autoPlay.videos',\r\n withRipple: true\r\n });\r\n\r\n container.append(gifsCheckboxField.label, videosCheckboxField.label);\r\n }\r\n\r\n {\r\n const container = section('Emoji');\r\n\r\n const suggestCheckboxField = new CheckboxField({\r\n text: 'GeneralSettings.EmojiPrediction', \r\n name: 'suggest-emoji', \r\n stateKey: 'settings.emoji.suggest',\r\n withRipple: true\r\n });\r\n const bigCheckboxField = new CheckboxField({\r\n text: 'GeneralSettings.BigEmoji', \r\n name: 'emoji-big', \r\n stateKey: 'settings.emoji.big',\r\n withRipple: true\r\n });\r\n\r\n container.append(suggestCheckboxField.label, bigCheckboxField.label);\r\n }\r\n \r\n {\r\n const container = section('Telegram.InstalledStickerPacksController');\r\n\r\n const suggestCheckboxField = new CheckboxField({\r\n text: 'Stickers.SuggestStickers', \r\n name: 'suggest', \r\n stateKey: 'settings.stickers.suggest',\r\n withRipple: true\r\n });\r\n const loopCheckboxField = new CheckboxField({\r\n text: 'InstalledStickers.LoopAnimated', \r\n name: 'loop', \r\n stateKey: 'settings.stickers.loop',\r\n withRipple: true\r\n });\r\n\r\n const stickerSets: {[id: string]: Row} = {};\r\n\r\n const lazyLoadQueue = new LazyLoadQueue();\r\n const renderStickerSet = (stickerSet: StickerSet.stickerSet, method: 'append' | 'prepend' = 'append') => {\r\n const row = new Row({\r\n title: RichTextProcessor.wrapEmojiText(stickerSet.title),\r\n subtitleLangKey: 'Stickers',\r\n subtitleLangArgs: [stickerSet.count],\r\n havePadding: true,\r\n clickable: () => {\r\n new PopupStickers({id: stickerSet.id, access_hash: stickerSet.access_hash}).show();\r\n }\r\n });\r\n\r\n stickerSets[stickerSet.id] = row;\r\n\r\n const div = document.createElement('div');\r\n div.classList.add('row-media');\r\n\r\n wrapStickerSetThumb({\r\n set: stickerSet,\r\n container: div,\r\n group: 'GENERAL-SETTINGS',\r\n lazyLoadQueue,\r\n width: 48,\r\n height: 48,\r\n autoplay: true\r\n });\r\n\r\n row.container.append(div);\r\n\r\n container[method](row.container);\r\n };\r\n\r\n appStickersManager.getAllStickers().then(allStickers => {\r\n assumeType(allStickers);\r\n for(const stickerSet of allStickers.sets) {\r\n renderStickerSet(stickerSet);\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('stickers_installed', (e) => {\r\n const set: StickerSet.stickerSet = e;\r\n \r\n if(!stickerSets[set.id]) {\r\n renderStickerSet(set, 'prepend');\r\n }\r\n });\r\n \r\n this.listenerSetter.add(rootScope)('stickers_deleted', (e) => {\r\n const set: StickerSet.stickerSet = e;\r\n \r\n if(stickerSets[set.id]) {\r\n stickerSets[set.id].container.remove();\r\n delete stickerSets[set.id];\r\n }\r\n });\r\n\r\n container.append(suggestCheckboxField.label, loopCheckboxField.label);\r\n }\r\n }\r\n\r\n onOpen() {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appProfileManager from \"../../../lib/appManagers/appProfileManager\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport InputField from \"../../inputField\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport EditPeer from \"../../editPeer\";\r\nimport { UsernameInputField } from \"../../usernameInputField\";\r\nimport { i18n, i18n_ } from \"../../../lib/langPack\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\n\r\n// TODO: аватарка не поменяется в этой вкладке после изменения почему-то (если поставить в другом клиенте, и потом тут проверить, для этого ещё вышел в чатлист)\r\n\r\nexport default class AppEditProfileTab extends SliderSuperTab {\r\n private firstNameInputField: InputField;\r\n private lastNameInputField: InputField;\r\n private bioInputField: InputField;\r\n private usernameInputField: InputField;\r\n \r\n private profileUrlContainer: HTMLDivElement;\r\n private profileUrlAnchor: HTMLAnchorElement;\r\n\r\n private editPeer: EditPeer;\r\n\r\n protected async init() {\r\n this.container.classList.add('edit-profile-container');\r\n this.setTitle('EditAccount.Title');\r\n\r\n const inputFields: InputField[] = [];\r\n\r\n {\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n \r\n this.firstNameInputField = new InputField({\r\n label: 'EditProfile.FirstNameLabel',\r\n name: 'first-name',\r\n maxLength: 70\r\n });\r\n this.lastNameInputField = new InputField({\r\n label: 'Login.Register.LastName.Placeholder',\r\n name: 'last-name',\r\n maxLength: 64\r\n });\r\n this.bioInputField = new InputField({\r\n label: 'EditProfile.BioLabel',\r\n name: 'bio',\r\n maxLength: 70\r\n });\r\n \r\n inputWrapper.append(this.firstNameInputField.container, this.lastNameInputField.container, this.bioInputField.container);\r\n \r\n const caption = document.createElement('div');\r\n caption.classList.add('caption');\r\n i18n_({element: caption, key: 'Bio.Description'});\r\n\r\n inputFields.push(this.firstNameInputField, this.lastNameInputField, this.bioInputField);\r\n this.scrollable.append(inputWrapper, caption);\r\n }\r\n\r\n this.scrollable.append(document.createElement('hr'));\r\n\r\n this.editPeer = new EditPeer({\r\n peerId: appUsersManager.getSelf().id,\r\n inputFields,\r\n listenerSetter: this.listenerSetter\r\n });\r\n this.content.append(this.editPeer.nextBtn);\r\n this.scrollable.prepend(this.editPeer.avatarEdit.container);\r\n\r\n {\r\n const h2 = document.createElement('div');\r\n h2.classList.add('sidebar-left-h2');\r\n i18n_({element: h2, key: 'EditAccount.Username'});\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n this.usernameInputField = new UsernameInputField({\r\n peerId: 0,\r\n label: 'EditProfile.Username.Label',\r\n name: 'username',\r\n plainText: true,\r\n listenerSetter: this.listenerSetter,\r\n onChange: () => {\r\n this.editPeer.handleChange();\r\n this.setProfileUrl();\r\n },\r\n availableText: 'EditProfile.Username.Available',\r\n takenText: 'EditProfile.Username.Taken',\r\n invalidText: 'EditProfile.Username.Invalid'\r\n });\r\n\r\n inputWrapper.append(this.usernameInputField.container);\r\n\r\n const caption = document.createElement('div');\r\n caption.classList.add('caption');\r\n caption.append(i18n('UsernameSettings.ChangeDescription'));\r\n caption.append(document.createElement('br'), document.createElement('br'));\r\n\r\n const profileUrlContainer = this.profileUrlContainer = document.createElement('div');\r\n profileUrlContainer.classList.add('profile-url-container');\r\n \r\n const profileUrlAnchor = this.profileUrlAnchor = document.createElement('a');\r\n profileUrlAnchor.classList.add('profile-url');\r\n profileUrlAnchor.href = '#';\r\n profileUrlAnchor.target = '_blank';\r\n\r\n profileUrlContainer.append(i18n('UsernameHelpLink', [profileUrlAnchor]));\r\n\r\n caption.append(profileUrlContainer);\r\n\r\n inputFields.push(this.usernameInputField);\r\n this.scrollable.append(h2, inputWrapper, caption);\r\n }\r\n\r\n attachClickEvent(this.editPeer.nextBtn, () => {\r\n this.editPeer.nextBtn.disabled = true;\r\n\r\n let promises: Promise[] = [];\r\n \r\n promises.push(appProfileManager.updateProfile(this.firstNameInputField.value, this.lastNameInputField.value, this.bioInputField.value).then(() => {\r\n this.close();\r\n }, (err) => {\r\n console.error('updateProfile error:', err);\r\n }));\r\n\r\n if(this.editPeer.uploadAvatar) {\r\n promises.push(this.editPeer.uploadAvatar().then(inputFile => {\r\n return appProfileManager.uploadProfilePhoto(inputFile);\r\n }));\r\n }\r\n\r\n if(this.usernameInputField.isValid() && !this.usernameInputField.input.classList.contains('error')) {\r\n promises.push(appUsersManager.updateUsername(this.usernameInputField.value));\r\n }\r\n\r\n Promise.race(promises).finally(() => {\r\n this.editPeer.nextBtn.removeAttribute('disabled');\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n const user = appUsersManager.getSelf();\r\n\r\n const userFull = await appProfileManager.getProfile(user.id, true);\r\n\r\n this.firstNameInputField.setOriginalValue(user.first_name, true);\r\n this.lastNameInputField.setOriginalValue(user.last_name, true);\r\n this.bioInputField.setOriginalValue(userFull.about, true);\r\n this.usernameInputField.setOriginalValue(user.username, true);\r\n\r\n this.setProfileUrl();\r\n this.editPeer.handleChange();\r\n }\r\n\r\n private setProfileUrl() {\r\n if(this.usernameInputField.input.classList.contains('error') || !this.usernameInputField.value.length) {\r\n this.profileUrlContainer.style.display = 'none';\r\n } else {\r\n this.profileUrlContainer.style.display = '';\r\n let url = 'https://t.me/' + this.usernameInputField.value;\r\n this.profileUrlAnchor.innerText = url;\r\n this.profileUrlAnchor.href = url;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport AppSelectPeers from \"../../appSelectPeers\";\r\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport { MyDialogFilter as DialogFilter } from \"../../../lib/storages/filters\";\r\nimport { copy } from \"../../../helpers/object\";\r\nimport ButtonIcon from \"../../buttonIcon\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport Button from \"../../button\";\r\nimport AppEditFolderTab from \"./editFolder\";\r\nimport I18n, { i18n, LangPackKey, _i18n, join } from \"../../../lib/langPack\";\r\nimport appMessagesManager from \"../../../lib/appManagers/appMessagesManager\";\r\nimport RichTextProcessor from \"../../../lib/richtextprocessor\";\r\nimport { SettingSection } from \"..\";\r\nimport { toast } from \"../../toast\";\r\n\r\nexport default class AppIncludedChatsTab extends SliderSuperTab {\r\n private editFolderTab: AppEditFolderTab;\r\n private confirmBtn: HTMLElement;\r\n\r\n private selector: AppSelectPeers;\r\n private type: 'included' | 'excluded';\r\n private filter: DialogFilter;\r\n private originalFilter: DialogFilter;\r\n\r\n private dialogsByFilters: Map>;\r\n\r\n protected init() {\r\n this.content.remove();\r\n this.container.classList.add('included-chatlist-container');\r\n this.confirmBtn = ButtonIcon('check btn-confirm blue', {noRipple: true});\r\n this.confirmBtn.style.display = 'none';\r\n\r\n this.header.append(this.confirmBtn);\r\n\r\n this.confirmBtn.addEventListener('click', () => {\r\n const selected = this.selector.getSelected();\r\n\r\n //this.filter.pFlags = {};\r\n\r\n if(this.type === 'included') {\r\n for(const key in this.filter.pFlags) {\r\n if(key.indexOf('exclude_') === 0) {\r\n continue;\r\n }\r\n\r\n // @ts-ignore\r\n delete this.filter.pFlags[key];\r\n }\r\n } else {\r\n for(const key in this.filter.pFlags) {\r\n if(key.indexOf('exclude_') !== 0) {\r\n continue;\r\n }\r\n\r\n // @ts-ignore\r\n delete this.filter.pFlags[key];\r\n }\r\n }\r\n\r\n const peers: number[] = [];\r\n for(const key of selected) {\r\n if(typeof(key) === 'number') {\r\n peers.push(key);\r\n } else {\r\n // @ts-ignore\r\n this.filter.pFlags[key] = true;\r\n }\r\n }\r\n\r\n if(this.type === 'included') {\r\n this.filter.pinned_peers = this.filter.pinned_peers.filter(peerId => {\r\n return peers.includes(peerId); // * because I have pinned peer in include_peers too\r\n /* const index = peers.indexOf(peerId);\r\n if(index !== -1) {\r\n peers.splice(index, 1);\r\n return true;\r\n } else {\r\n return false;\r\n } */\r\n });\r\n } else {\r\n this.filter.pinned_peers = this.filter.pinned_peers.filter(peerId => {\r\n return !peers.includes(peerId);\r\n });\r\n }\r\n\r\n const other = this.type === 'included' ? 'exclude_peers' : 'include_peers';\r\n this.filter[other] = this.filter[other].filter(peerId => {\r\n return !peers.includes(peerId);\r\n });\r\n \r\n this.filter[this.type === 'included' ? 'include_peers' : 'exclude_peers'] = peers;\r\n //this.filter.pinned_peers = this.filter.pinned_peers.filter(peerId => this.filter.include_peers.includes(peerId));\r\n\r\n this.editFolderTab.setFilter(this.filter, false);\r\n this.close();\r\n });\r\n\r\n this.dialogsByFilters = new Map();\r\n return appMessagesManager.filtersStorage.getDialogFilters().then(filters => {\r\n for(const filter of filters) {\r\n this.dialogsByFilters.set(filter, new Set(appMessagesManager.dialogsStorage.getFolder(filter.id).map(d => d.peerId)));\r\n }\r\n });\r\n }\r\n\r\n checkbox(selected?: boolean) {\r\n const checkboxField = new CheckboxField({\r\n round: true\r\n });\r\n if(selected) {\r\n checkboxField.input.checked = selected;\r\n }\r\n\r\n return checkboxField.label;\r\n }\r\n\r\n renderResults = async(peerIds: number[]) => {\r\n //const other = this.type === 'included' ? this.filter.exclude_peers : this.filter.include_peers;\r\n\r\n await appUsersManager.getContacts();\r\n peerIds.forEach(peerId => {\r\n //if(other.includes(peerId)) return;\r\n\r\n const {dom} = appDialogsManager.addDialogNew({\r\n dialog: peerId,\r\n container: this.selector.scrollable,\r\n drawStatus: false,\r\n rippleEnabled: true,\r\n avatarSize: 46\r\n });\r\n\r\n const selected = this.selector.selected.has(peerId);\r\n dom.containerEl.append(this.checkbox(selected));\r\n //if(selected) dom.listEl.classList.add('active');\r\n\r\n const foundInFilters: HTMLElement[] = [];\r\n this.dialogsByFilters.forEach((dialogs, filter) => {\r\n if(dialogs.has(peerId)) {\r\n const span = document.createElement('span');\r\n span.innerHTML = RichTextProcessor.wrapEmojiText(filter.title);\r\n foundInFilters.push(span);\r\n }\r\n });\r\n\r\n const joined = join(foundInFilters, false);\r\n joined.forEach(el => {\r\n dom.lastMessageSpan.append(el);\r\n });\r\n });\r\n };\r\n\r\n onOpen() {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n this.confirmBtn.style.display = this.type === 'excluded' ? '' : 'none';\r\n this.setTitle(this.type === 'included' ? 'FilterAlwaysShow' : 'FilterNeverShow');\r\n\r\n const filter = this.filter;\r\n\r\n const fragment = document.createDocumentFragment();\r\n\r\n const categoriesSection = new SettingSection({\r\n noDelimiter: true,\r\n name: 'FilterChatTypes'\r\n });\r\n\r\n categoriesSection.container.classList.add('folder-categories');\r\n\r\n let details: {[flag: string]: {ico: string, text: LangPackKey}};\r\n if(this.type === 'excluded') {\r\n details = {\r\n exclude_muted: {ico: 'mute', text: 'ChatList.Filter.MutedChats'},\r\n exclude_archived: {ico: 'archive', text: 'ChatList.Filter.Archive'},\r\n exclude_read: {ico: 'readchats', text: 'ChatList.Filter.ReadChats'}\r\n };\r\n } else {\r\n details = {\r\n contacts: {ico: 'newprivate', text: 'ChatList.Filter.Contacts'},\r\n non_contacts: {ico: 'noncontacts', text: 'ChatList.Filter.NonContacts'},\r\n groups: {ico: 'group', text: 'ChatList.Filter.Groups'},\r\n broadcasts: {ico: 'newchannel', text: 'ChatList.Filter.Channels'},\r\n bots: {ico: 'bots', text: 'ChatList.Filter.Bots'}\r\n };\r\n }\r\n\r\n const f = document.createDocumentFragment();\r\n for(const key in details) {\r\n const button = Button('btn-primary btn-transparent folder-category-button', {icon: details[key].ico, text: details[key].text});\r\n button.dataset.peerId = key;\r\n button.append(this.checkbox());\r\n f.append(button);\r\n }\r\n categoriesSection.content.append(f);\r\n\r\n const chatsSection = new SettingSection({\r\n name: 'FilterChats'\r\n });\r\n\r\n fragment.append(categoriesSection.container, chatsSection.container);\r\n\r\n /////////////////\r\n\r\n const selectedPeers = (this.type === 'included' ? filter.include_peers : filter.exclude_peers).slice();\r\n\r\n this.selector = new AppSelectPeers({\r\n appendTo: this.container, \r\n onChange: this.onSelectChange, \r\n peerType: ['dialogs'], \r\n renderResultsFunc: this.renderResults,\r\n placeholder: 'Search'\r\n });\r\n this.selector.selected = new Set(selectedPeers);\r\n\r\n let addedInitial = false;\r\n const _add = this.selector.add.bind(this.selector);\r\n this.selector.add = (peerId, title, scroll) => {\r\n if(this.selector.selected.size >= 100 && addedInitial && !details[peerId]) {\r\n const el: HTMLInputElement = this.selector.list.querySelector(`[data-peer-id=\"${peerId}\"] [type=\"checkbox\"]`);\r\n if(el) {\r\n setTimeout(() => {\r\n el.checked = false;\r\n }, 0);\r\n }\r\n\r\n const str = I18n.format(this.type === 'excluded' ? 'ChatList.Filter.Exclude.LimitReached': 'ChatList.Filter.Include.LimitReached', true);\r\n toast(str);\r\n return;\r\n }\r\n\r\n const div = _add(peerId, details[peerId] ? i18n(details[peerId].text) : undefined, scroll);\r\n if(details[peerId]) {\r\n div.querySelector('avatar-element').classList.add('tgico-' + details[peerId].ico);\r\n }\r\n return div;\r\n };\r\n\r\n const parent = this.selector.list.parentElement;\r\n chatsSection.content.append(this.selector.list);\r\n parent.append(fragment);\r\n\r\n this.selector.addInitial(selectedPeers);\r\n addedInitial = true;\r\n\r\n for(const flag in filter.pFlags) {\r\n // @ts-ignore\r\n if(details.hasOwnProperty(flag) && !!filter.pFlags[flag]) {\r\n (categoriesSection.content.querySelector(`[data-peer-id=\"${flag}\"]`) as HTMLElement).click();\r\n }\r\n }\r\n }\r\n\r\n onSelectChange = (length: number) => {\r\n //const changed = !deepEqual(this.filter, this.originalFilter);\r\n if(this.type === 'included') {\r\n this.confirmBtn.style.display = length ? '' : 'none';\r\n }\r\n };\r\n\r\n onCloseAfterTimeout() {\r\n if(this.selector) {\r\n this.selector.container.remove();\r\n this.selector = null;\r\n }\r\n\r\n return super.onCloseAfterTimeout();\r\n }\r\n\r\n /**\r\n * Do not ignore arguments!\r\n */\r\n public open(filter?: DialogFilter, type?: 'included' | 'excluded', editFolderTab?: AppIncludedChatsTab['editFolderTab']) {\r\n this.originalFilter = filter;\r\n this.filter = copy(this.originalFilter);\r\n this.type = type;\r\n this.editFolderTab = editFolderTab;\r\n \r\n return super.open();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { deepEqual, copy } from \"../../../helpers/object\";\r\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\r\nimport { MyDialogFilter as DialogFilter } from \"../../../lib/storages/filters\";\r\nimport lottieLoader, { RLottiePlayer } from \"../../../lib/lottieLoader\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport { toast } from \"../../toast\";\r\nimport appMessagesManager from \"../../../lib/appManagers/appMessagesManager\";\r\nimport InputField from \"../../inputField\";\r\nimport RichTextProcessor from \"../../../lib/richtextprocessor\";\r\nimport ButtonIcon from \"../../buttonIcon\";\r\nimport ButtonMenuToggle from \"../../buttonMenuToggle\";\r\nimport { ButtonMenuItemOptions } from \"../../buttonMenu\";\r\nimport Button from \"../../button\";\r\nimport AppIncludedChatsTab from \"./includedChats\";\r\nimport { i18n, i18n_, LangPackKey } from \"../../../lib/langPack\";\r\nimport { SettingSection } from \"..\";\r\n\r\nconst MAX_FOLDER_NAME_LENGTH = 12;\r\n\r\nexport default class AppEditFolderTab extends SliderSuperTab {\r\n private caption: HTMLElement;\r\n private stickerContainer: HTMLElement;\r\n\r\n private confirmBtn: HTMLElement;\r\n private menuBtn: HTMLElement;\r\n private nameInputField: InputField;\r\n\r\n private include_peers: SettingSection;\r\n private exclude_peers: SettingSection;\r\n private flags: {[k in 'contacts' | 'non_contacts' | 'groups' | 'broadcasts' | 'bots' | 'exclude_muted' | 'exclude_archived' | 'exclude_read']: HTMLElement} = {} as any;\r\n\r\n private animation: RLottiePlayer;\r\n private filter: DialogFilter;\r\n private originalFilter: DialogFilter;\r\n\r\n private type: 'edit' | 'create';\r\n private loadAnimationPromise: Promise;\r\n\r\n protected init() {\r\n this.container.classList.add('edit-folder-container');\r\n this.caption = document.createElement('div');\r\n this.caption.classList.add('caption');\r\n this.caption.append(i18n('FilterIncludeExcludeInfo'));\r\n this.stickerContainer = document.createElement('div');\r\n this.stickerContainer.classList.add('sticker-container');\r\n\r\n this.confirmBtn = ButtonIcon('check btn-confirm hide blue');\r\n const deleteFolderButton: ButtonMenuItemOptions = {\r\n icon: 'delete danger',\r\n text: 'FilterMenuDelete',\r\n onClick: () => {\r\n deleteFolderButton.element.setAttribute('disabled', 'true');\r\n appMessagesManager.filtersStorage.updateDialogFilter(this.filter, true).then(bool => {\r\n if(bool) {\r\n this.close();\r\n }\r\n }).finally(() => {\r\n deleteFolderButton.element.removeAttribute('disabled');\r\n });\r\n }\r\n };\r\n this.menuBtn = ButtonMenuToggle({}, 'bottom-left', [deleteFolderButton]);\r\n this.menuBtn.classList.add('hide');\r\n\r\n this.header.append(this.confirmBtn, this.menuBtn);\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n \r\n this.nameInputField = new InputField({\r\n label: 'FilterNameInputLabel',\r\n maxLength: MAX_FOLDER_NAME_LENGTH\r\n });\r\n\r\n inputWrapper.append(this.nameInputField.container);\r\n\r\n const generateList = (className: string, h2Text: LangPackKey, buttons: {icon: string, name?: string, withRipple?: true, text: LangPackKey}[], to: any) => {\r\n const section = new SettingSection({\r\n name: h2Text,\r\n noDelimiter: true\r\n });\r\n\r\n section.container.classList.add('folder-list', className);\r\n\r\n const categories = section.generateContentElement();\r\n categories.classList.add('folder-categories');\r\n\r\n buttons.forEach(o => {\r\n const button = Button('folder-category-button btn btn-primary btn-transparent', {\r\n icon: o.icon,\r\n text: o.text,\r\n noRipple: o.withRipple ? undefined : true\r\n });\r\n\r\n if(o.name) {\r\n to[o.name] = button;\r\n }\r\n\r\n categories.append(button);\r\n });\r\n\r\n return section;\r\n };\r\n\r\n this.include_peers = generateList('folder-list-included', 'FilterInclude', [{\r\n icon: 'add primary',\r\n text: 'ChatList.Filter.Include.AddChat',\r\n withRipple: true\r\n }, {\r\n text: 'ChatList.Filter.Contacts',\r\n icon: 'newprivate',\r\n name: 'contacts'\r\n }, {\r\n text: 'ChatList.Filter.NonContacts',\r\n icon: 'noncontacts',\r\n name: 'non_contacts'\r\n }, {\r\n text: 'ChatList.Filter.Groups',\r\n icon: 'group',\r\n name: 'groups'\r\n }, {\r\n text: 'ChatList.Filter.Channels',\r\n icon: 'channel',\r\n name: 'broadcasts'\r\n }, {\r\n text: 'ChatList.Filter.Bots',\r\n icon: 'bots',\r\n name: 'bots'\r\n }], this.flags);\r\n\r\n this.exclude_peers = generateList('folder-list-excluded', 'FilterExclude', [{\r\n icon: 'minus primary',\r\n text: 'ChatList.Filter.Exclude.AddChat',\r\n withRipple: true\r\n }, {\r\n text: 'ChatList.Filter.MutedChats',\r\n icon: 'mute',\r\n name: 'exclude_muted'\r\n }, {\r\n text: 'ChatList.Filter.Archive',\r\n icon: 'archive',\r\n name: 'exclude_archived'\r\n }, {\r\n text: 'ChatList.Filter.ReadChats',\r\n icon: 'readchats',\r\n name: 'exclude_read'\r\n }], this.flags);\r\n\r\n this.scrollable.append(this.stickerContainer, this.caption, inputWrapper, this.include_peers.container, this.exclude_peers.container);\r\n\r\n const includedFlagsContainer = this.include_peers.container.querySelector('.folder-categories');\r\n const excludedFlagsContainer = this.exclude_peers.container.querySelector('.folder-categories');\r\n\r\n includedFlagsContainer.querySelector('.btn').addEventListener('click', () => {\r\n new AppIncludedChatsTab(this.slider).open(this.filter, 'included', this);\r\n });\r\n\r\n excludedFlagsContainer.querySelector('.btn').addEventListener('click', () => {\r\n new AppIncludedChatsTab(this.slider).open(this.filter, 'excluded', this);\r\n });\r\n\r\n this.confirmBtn.addEventListener('click', () => {\r\n if(this.nameInputField.input.classList.contains('error')) {\r\n return;\r\n }\r\n\r\n if(!this.nameInputField.value.trim()) {\r\n this.nameInputField.input.classList.add('error');\r\n return;\r\n }\r\n\r\n let include = (Array.from(includedFlagsContainer.children) as HTMLElement[]).slice(1).reduce((acc, el) => acc + +!el.style.display, 0);\r\n include += this.filter.include_peers.length;\r\n \r\n if(!include) {\r\n toast('Please choose at least one chat for this folder.');\r\n return;\r\n }\r\n\r\n this.confirmBtn.setAttribute('disabled', 'true');\r\n\r\n let promise: Promise;\r\n if(!this.filter.id) {\r\n promise = appMessagesManager.filtersStorage.createDialogFilter(this.filter);\r\n } else {\r\n promise = appMessagesManager.filtersStorage.updateDialogFilter(this.filter);\r\n }\r\n\r\n promise.then(bool => {\r\n if(bool) {\r\n this.close();\r\n }\r\n }).catch(err => {\r\n if(err.type === 'DIALOG_FILTERS_TOO_MUCH') {\r\n toast('Sorry, you can\\'t create more folders.');\r\n } else {\r\n console.error('updateDialogFilter error:', err);\r\n }\r\n }).finally(() => {\r\n this.confirmBtn.removeAttribute('disabled');\r\n });\r\n });\r\n \r\n this.nameInputField.input.addEventListener('input', () => {\r\n this.filter.title = this.nameInputField.value;\r\n this.editCheckForChange();\r\n });\r\n\r\n return this.loadAnimationPromise = lottieLoader.loadAnimationFromURL({\r\n container: this.stickerContainer,\r\n loop: false,\r\n autoplay: false,\r\n width: 86,\r\n height: 86\r\n }, 'assets/img/Folders_2.tgs').then(player => {\r\n this.animation = player;\r\n\r\n return lottieLoader.waitForFirstFrame(player);\r\n });\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n this.loadAnimationPromise.then(() => {\r\n this.animation.autoplay = true;\r\n this.animation.play();\r\n });\r\n }\r\n\r\n private onCreateOpen() {\r\n this.caption.style.display = '';\r\n this.setTitle('FilterNew');\r\n this.menuBtn.classList.add('hide');\r\n this.confirmBtn.classList.remove('hide');\r\n this.nameInputField.value = '';\r\n\r\n for(const flag in this.flags) {\r\n // @ts-ignore\r\n this.flags[flag].style.display = 'none';\r\n }\r\n }\r\n\r\n private onEditOpen() {\r\n this.caption.style.display = 'none';\r\n this.setTitle(this.type === 'create' ? 'FilterNew' : 'FilterHeaderEdit');\r\n\r\n if(this.type === 'edit') {\r\n this.menuBtn.classList.remove('hide');\r\n this.confirmBtn.classList.add('hide');\r\n }\r\n \r\n const filter = this.filter;\r\n this.nameInputField.value = RichTextProcessor.wrapDraftText(filter.title);\r\n\r\n for(const flag in this.flags) {\r\n this.flags[flag as keyof AppEditFolderTab['flags']].style.display = !!filter.pFlags[flag as keyof AppEditFolderTab['flags']] ? '' : 'none';\r\n }\r\n\r\n (['include_peers', 'exclude_peers'] as ['include_peers', 'exclude_peers']).forEach(key => {\r\n const section = this[key];\r\n const ul = appDialogsManager.createChatList();\r\n\r\n const peers = filter[key].slice();\r\n\r\n const renderMore = (_length: number) => {\r\n for(let i = 0, length = Math.min(peers.length, _length); i < length; ++i) {\r\n const peerId = peers.shift();\r\n\r\n const {dom} = appDialogsManager.addDialogNew({\r\n dialog: peerId,\r\n container: ul,\r\n drawStatus: false,\r\n rippleEnabled: false,\r\n meAsSaved: true,\r\n avatarSize: 32\r\n });\r\n dom.lastMessageSpan.parentElement.remove();\r\n }\r\n\r\n if(peers.length) {\r\n showMore.lastElementChild.replaceWith(i18n('FilterShowMoreChats', [peers.length]));\r\n } else if(showMore) {\r\n showMore.remove();\r\n }\r\n };\r\n \r\n section.generateContentElement().append(ul);\r\n\r\n let showMore: HTMLElement;\r\n if(peers.length) {\r\n const content = section.generateContentElement();\r\n showMore = Button('folder-category-button btn btn-primary btn-transparent', {icon: 'down'});\r\n showMore.classList.add('load-more', 'rp-overflow');\r\n showMore.addEventListener('click', () => renderMore(20));\r\n showMore.append(i18n('FilterShowMoreChats', [peers.length]));\r\n\r\n content.append(showMore);\r\n }\r\n\r\n renderMore(4);\r\n });\r\n }\r\n\r\n editCheckForChange() {\r\n if(this.type === 'edit') {\r\n const changed = !deepEqual(this.originalFilter, this.filter);\r\n this.confirmBtn.classList.toggle('hide', !changed);\r\n this.menuBtn.classList.toggle('hide', changed);\r\n }\r\n };\r\n\r\n setFilter(filter: DialogFilter, firstTime: boolean) {\r\n // cleanup\r\n Array.from(this.container.querySelectorAll('ul, .load-more')).forEach(el => el.remove());\r\n\r\n if(firstTime) {\r\n this.originalFilter = filter;\r\n this.filter = copy(filter);\r\n } else {\r\n this.filter = filter;\r\n this.onEditOpen();\r\n this.editCheckForChange();\r\n }\r\n }\r\n\r\n public open(filter?: DialogFilter) {\r\n const ret = super.open();\r\n \r\n if(filter === undefined) {\r\n this.setFilter({\r\n _: 'dialogFilter',\r\n id: 0,\r\n title: '',\r\n pFlags: {},\r\n pinned_peers: [],\r\n include_peers: [],\r\n exclude_peers: []\r\n }, true);\r\n this.type = 'create';\r\n this.onCreateOpen();\r\n } else {\r\n this.setFilter(filter, true);\r\n this.type = 'edit';\r\n this.onEditOpen();\r\n }\r\n\r\n return ret;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport lottieLoader, { RLottiePlayer } from \"../../../lib/lottieLoader\";\r\nimport { RichTextProcessor } from \"../../../lib/richtextprocessor\";\r\nimport { toast } from \"../../toast\";\r\nimport type { MyDialogFilter } from \"../../../lib/storages/filters\";\r\nimport type { DialogFilterSuggested, DialogFilter } from \"../../../layer\";\r\nimport type _rootScope from \"../../../lib/rootScope\";\r\nimport type { BroadcastEvents } from \"../../../lib/rootScope\";\r\nimport Button from \"../../button\";\r\nimport appMessagesManager from \"../../../lib/appManagers/appMessagesManager\";\r\nimport appPeersManager from \"../../../lib/appManagers/appPeersManager\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport AppEditFolderTab from \"./editFolder\";\r\nimport Row from \"../../row\";\r\nimport { SettingSection } from \"..\";\r\nimport { i18n, i18n_, LangPackKey, join } from \"../../../lib/langPack\";\r\nimport { cancelEvent } from \"../../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport positionElementByIndex from \"../../../helpers/dom/positionElementByIndex\";\r\n\r\nexport default class AppChatFoldersTab extends SliderSuperTab {\r\n private createFolderBtn: HTMLElement;\r\n private foldersSection: SettingSection;\r\n private suggestedSection: SettingSection;\r\n private stickerContainer: HTMLElement;\r\n private animation: RLottiePlayer;\r\n\r\n private filtersRendered: {[filterId: number]: Row} = {};\r\n private loadAnimationPromise: Promise;\r\n\r\n private renderFolder(dialogFilter: DialogFilterSuggested | DialogFilter | MyDialogFilter, container?: HTMLElement, row?: Row) {\r\n let filter: DialogFilter | MyDialogFilter;\r\n let description = '';\r\n let d: HTMLElement[] = [];\r\n if(dialogFilter._ === 'dialogFilterSuggested') {\r\n filter = dialogFilter.filter;\r\n description = dialogFilter.description;\r\n } else {\r\n filter = dialogFilter;\r\n\r\n let enabledFilters = Object.keys(filter.pFlags).length;\r\n /* (['include_peers', 'exclude_peers'] as ['include_peers', 'exclude_peers']).forEach(key => {\r\n enabledFilters += +!!filter[key].length;\r\n }); */\r\n \r\n if(enabledFilters === 1) {\r\n const pFlags = filter.pFlags;\r\n let k: LangPackKey;\r\n if(pFlags.contacts) k = 'FilterAllContacts';\r\n else if(pFlags.non_contacts) k = 'FilterAllNonContacts';\r\n else if(pFlags.groups) k = 'FilterAllGroups';\r\n else if(pFlags.broadcasts) k = 'FilterAllChannels';\r\n else if(pFlags.bots) k = 'FilterAllBots';\r\n\r\n if(k) {\r\n d.push(i18n(k));\r\n }\r\n }\r\n \r\n if(!d.length) {\r\n const folder = appMessagesManager.dialogsStorage.getFolder(filter.id);\r\n let chats = 0, channels = 0, groups = 0;\r\n for(const dialog of folder) {\r\n if(appPeersManager.isAnyGroup(dialog.peerId)) groups++;\r\n else if(appPeersManager.isBroadcast(dialog.peerId)) channels++;\r\n else chats++;\r\n }\r\n\r\n if(chats) d.push(i18n('Chats', [chats]));\r\n if(channels) d.push(i18n('Channels', [channels]));\r\n if(groups) d.push(i18n('Groups', [groups]));\r\n }\r\n }\r\n\r\n let div: HTMLElement;\r\n if(!row) {\r\n row = new Row({\r\n title: RichTextProcessor.wrapEmojiText(filter.title),\r\n subtitle: description,\r\n clickable: true\r\n });\r\n\r\n if(d.length) {\r\n join(d).forEach(el => {\r\n row.subtitle.append(el);\r\n });\r\n }\r\n \r\n if(dialogFilter._ === 'dialogFilter') {\r\n const filterId = filter.id;\r\n if(!this.filtersRendered.hasOwnProperty(filter.id)) {\r\n attachClickEvent(row.container, () => {\r\n new AppEditFolderTab(this.slider).open(appMessagesManager.filtersStorage.getFilter(filterId));\r\n }, {listenerSetter: this.listenerSetter});\r\n }\r\n\r\n this.filtersRendered[filter.id] = row;\r\n }\r\n } else {\r\n row.subtitle.textContent = '';\r\n join(d).forEach(el => {\r\n row.subtitle.append(el);\r\n });\r\n }\r\n\r\n div = row.container;\r\n\r\n if((filter as MyDialogFilter).hasOwnProperty('orderIndex')) {\r\n // ! header will be at 0 index\r\n positionElementByIndex(div, div.parentElement || container, (filter as MyDialogFilter).orderIndex);\r\n } else if(container) container.append(div);\r\n \r\n return div;\r\n }\r\n\r\n protected async init() {\r\n this.container.classList.add('chat-folders-container');\r\n this.setTitle('ChatList.Filter.List.Title');\r\n\r\n this.scrollable.container.classList.add('chat-folders');\r\n\r\n this.stickerContainer = document.createElement('div');\r\n this.stickerContainer.classList.add('sticker-container');\r\n \r\n const caption = document.createElement('div');\r\n caption.classList.add('caption');\r\n i18n_({element: caption, key: 'ChatList.Filter.Header'});\r\n \r\n this.createFolderBtn = Button('btn-primary btn-color-primary btn-control tgico', {\r\n text: 'ChatList.Filter.NewTitle',\r\n icon: 'add'\r\n });\r\n\r\n this.foldersSection = new SettingSection({\r\n name: 'Filters'\r\n });\r\n this.foldersSection.container.style.display = 'none';\r\n\r\n this.suggestedSection = new SettingSection({\r\n name: 'FilterRecommended'\r\n });\r\n this.suggestedSection.container.style.display = 'none';\r\n\r\n this.scrollable.append(this.stickerContainer, caption, this.createFolderBtn, this.foldersSection.container, this.suggestedSection.container);\r\n\r\n attachClickEvent(this.createFolderBtn, () => {\r\n if(Object.keys(this.filtersRendered).length >= 10) {\r\n toast('Sorry, you can\\'t create more folders.');\r\n } else {\r\n new AppEditFolderTab(this.slider).open();\r\n }\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n const onFiltersContainerUpdate = () => {\r\n this.foldersSection.container.style.display = Object.keys(this.filtersRendered).length ? '' : 'none';\r\n };\r\n\r\n appMessagesManager.filtersStorage.getDialogFilters().then(filters => {\r\n for(const filter of filters) {\r\n this.renderFolder(filter, this.foldersSection.content);\r\n }\r\n\r\n onFiltersContainerUpdate();\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('filter_update', (e) => {\r\n const filter = e;\r\n if(this.filtersRendered.hasOwnProperty(filter.id)) {\r\n this.renderFolder(filter, null, this.filtersRendered[filter.id]);\r\n } else {\r\n this.renderFolder(filter, this.foldersSection.content);\r\n }\r\n\r\n onFiltersContainerUpdate();\r\n\r\n this.getSuggestedFilters();\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('filter_delete', (e) => {\r\n const filter = e;\r\n if(this.filtersRendered.hasOwnProperty(filter.id)) {\r\n /* for(const suggested of this.suggestedFilters) {\r\n if(deepEqual(suggested.filter, filter)) {\r\n \r\n }\r\n } */\r\n this.getSuggestedFilters();\r\n\r\n this.filtersRendered[filter.id].container.remove();\r\n delete this.filtersRendered[filter.id];\r\n }\r\n\r\n onFiltersContainerUpdate();\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('filter_order', (e: BroadcastEvents['filter_order']) => {\r\n const order = e;\r\n order.forEach((filterId, idx) => {\r\n const container = this.filtersRendered[filterId].container;\r\n positionElementByIndex(container, container.parentElement, idx + 1); // ! + 1 due to header \r\n });\r\n });\r\n\r\n this.loadAnimationPromise = lottieLoader.loadAnimationFromURL({\r\n container: this.stickerContainer,\r\n loop: false,\r\n autoplay: false,\r\n width: 86,\r\n height: 86\r\n }, 'assets/img/Folders_1.tgs').then(player => {\r\n this.animation = player;\r\n\r\n return lottieLoader.waitForFirstFrame(player);\r\n });\r\n\r\n this.getSuggestedFilters()\r\n\r\n /* return Promise.all([\r\n this.loadAnimationPromise\r\n ]); */\r\n return this.loadAnimationPromise;\r\n }\r\n\r\n onOpenAfterTimeout() {\r\n this.loadAnimationPromise.then(() => {\r\n this.animation.autoplay = true;\r\n this.animation.play();\r\n });\r\n }\r\n\r\n private getSuggestedFilters() {\r\n return apiManager.invokeApi('messages.getSuggestedDialogFilters').then(suggestedFilters => {\r\n this.suggestedSection.container.style.display = suggestedFilters.length ? '' : 'none';\r\n Array.from(this.suggestedSection.content.children).slice(1).forEach(el => el.remove());\r\n\r\n suggestedFilters.forEach(filter => {\r\n const div = this.renderFolder(filter);\r\n const button = Button('btn-primary btn-color-primary', {text: 'Add'});\r\n div.append(button);\r\n this.suggestedSection.content.append(div);\r\n\r\n attachClickEvent(button, (e) => {\r\n cancelEvent(e);\r\n\r\n if(Object.keys(this.filtersRendered).length >= 10) {\r\n toast('Sorry, you can\\'t create more folders.');\r\n return;\r\n }\r\n\r\n button.setAttribute('disabled', 'true');\r\n\r\n appMessagesManager.filtersStorage.createDialogFilter(filter.filter as any).then(bool => {\r\n if(bool) {\r\n div.remove();\r\n }\r\n }).finally(() => {\r\n button.removeAttribute('disabled');\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n });\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"..\";\r\nimport Row from \"../../row\";\r\nimport CheckboxField from \"../../checkboxField\";\r\nimport { InputNotifyPeer, Update } from \"../../../layer\";\r\nimport appNotificationsManager from \"../../../lib/appManagers/appNotificationsManager\";\r\nimport { SliderSuperTabEventable } from \"../../sliderTab\";\r\nimport { copy } from \"../../../helpers/object\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport { convertKeyToInputKey } from \"../../../helpers/string\";\r\nimport { LangPackKey } from \"../../../lib/langPack\";\r\nimport appStateManager from \"../../../lib/appManagers/appStateManager\";\r\n\r\ntype InputNotifyKey = Exclude;\r\n\r\nexport default class AppNotificationsTab extends SliderSuperTabEventable {\r\n protected init() {\r\n this.container.classList.add('notifications-container');\r\n this.setTitle('Telegram.NotificationSettingsViewController');\r\n\r\n const NotifySection = (options: {\r\n name: LangPackKey,\r\n typeText: LangPackKey,\r\n inputKey: InputNotifyKey,\r\n }) => {\r\n const section = new SettingSection({\r\n name: options.name\r\n });\r\n\r\n const enabledRow = new Row({\r\n checkboxField: new CheckboxField({text: options.typeText, checked: true}),\r\n subtitleLangKey: 'Loading',\r\n });\r\n \r\n const previewEnabledRow = new Row({\r\n checkboxField: new CheckboxField({text: 'Notifications.MessagePreview', checked: true}),\r\n subtitleLangKey: 'Loading',\r\n });\r\n\r\n section.content.append(enabledRow.container, previewEnabledRow.container);\r\n\r\n this.scrollable.append(section.container);\r\n\r\n const inputNotifyPeer = {_: options.inputKey};\r\n const ret = appNotificationsManager.getNotifySettings(inputNotifyPeer);\r\n (ret instanceof Promise ? ret : Promise.resolve(ret)).then((notifySettings) => {\r\n const applySettings = () => {\r\n const muted = appNotificationsManager.isMuted(notifySettings);\r\n enabledRow.checkboxField.checked = !muted;\r\n previewEnabledRow.checkboxField.checked = notifySettings.show_previews;\r\n \r\n return muted;\r\n };\r\n \r\n applySettings();\r\n\r\n this.eventListener.addEventListener('destroy', () => {\r\n const mute = !enabledRow.checkboxField.checked;\r\n const showPreviews = previewEnabledRow.checkboxField.checked;\r\n\r\n if(mute === appNotificationsManager.isMuted(notifySettings) && showPreviews === notifySettings.show_previews) {\r\n return;\r\n }\r\n\r\n const inputSettings: any = copy(notifySettings);\r\n inputSettings._ = 'inputPeerNotifySettings';\r\n inputSettings.mute_until = mute ? 0x7FFFFFFF : 0;\r\n inputSettings.show_previews = showPreviews;\r\n\r\n appNotificationsManager.updateNotifySettings(inputNotifyPeer, inputSettings);\r\n }, {once: true});\r\n\r\n this.listenerSetter.add(rootScope)('notify_settings', (update: Update.updateNotifySettings) => {\r\n const inputKey = convertKeyToInputKey(update.peer._) as any;\r\n if(options.inputKey === inputKey) {\r\n notifySettings = update.notify_settings;\r\n applySettings();\r\n }\r\n });\r\n });\r\n };\r\n\r\n NotifySection({\r\n name: 'NotificationsPrivateChats',\r\n typeText: 'NotificationsForPrivateChats',\r\n inputKey: 'inputNotifyUsers'\r\n });\r\n\r\n NotifySection({\r\n name: 'NotificationsGroups',\r\n typeText: 'NotificationsForGroups',\r\n inputKey: 'inputNotifyChats'\r\n });\r\n\r\n NotifySection({\r\n name: 'NotificationsChannels',\r\n typeText: 'NotificationsForChannels',\r\n inputKey: 'inputNotifyBroadcasts'\r\n });\r\n\r\n {\r\n const section = new SettingSection({\r\n name: 'NotificationsOther'\r\n });\r\n\r\n const contactsSignUpRow = new Row({\r\n checkboxField: new CheckboxField({text: 'ContactJoined', checked: true}),\r\n subtitleLangKey: 'Loading',\r\n });\r\n \r\n const soundRow = new Row({\r\n checkboxField: new CheckboxField({text: 'Notifications.Sound', checked: true, stateKey: 'settings.notifications.sound'}),\r\n subtitleLangKey: 'Loading',\r\n });\r\n\r\n appStateManager.getState().then(state => {\r\n soundRow.checkboxField.checked = state.settings.notifications.sound;\r\n });\r\n\r\n section.content.append(contactsSignUpRow.container, soundRow.container);\r\n\r\n this.scrollable.append(section.container);\r\n\r\n appNotificationsManager.getContactSignUpNotification().then(enabled => {\r\n contactsSignUpRow.checkboxField.checked = enabled;\r\n\r\n this.eventListener.addEventListener('destroy', () => {\r\n const _enabled = contactsSignUpRow.checkboxField.checked;\r\n if(enabled !== _enabled) {\r\n appNotificationsManager.setContactSignUpNotification(!_enabled);\r\n }\r\n }, {once: true});\r\n });\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SettingSection } from \"..\";\r\nimport { randomLong } from \"../../../helpers/random\";\r\nimport I18n from \"../../../lib/langPack\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport RadioField from \"../../radioField\";\r\nimport Row, { RadioFormFromRows } from \"../../row\";\r\nimport { SliderSuperTab } from \"../../slider\"\r\n\r\nexport default class AppLanguageTab extends SliderSuperTab {\r\n protected async init() {\r\n this.container.classList.add('language-container');\r\n this.setTitle('Telegram.LanguageViewController');\r\n\r\n const section = new SettingSection({});\r\n\r\n const radioRows: Map = new Map();\r\n\r\n const promise = apiManager.invokeApiCacheable('langpack.getLanguages', {\r\n lang_pack: 'macos'\r\n }).then((languages) => {\r\n const random = randomLong();\r\n languages.forEach((language) => {\r\n const row = new Row({\r\n radioField: new RadioField({\r\n text: language.name, \r\n name: random, \r\n value: language.lang_code\r\n }),\r\n subtitle: language.native_name\r\n });\r\n \r\n radioRows.set(language.lang_code, row);\r\n });\r\n\r\n const form = RadioFormFromRows([...radioRows.values()], (value) => {\r\n I18n.getLangPack(value);\r\n });\r\n \r\n I18n.getCacheLangPack().then(langPack => {\r\n const row = radioRows.get(langPack.lang_code);\r\n if(!row) {\r\n console.error('no row', row, langPack);\r\n return;\r\n }\r\n \r\n row.radioField.setValueSilently(true);\r\n });\r\n \r\n section.content.append(form);\r\n });\r\n\r\n this.scrollable.append(section.container);\r\n\r\n return promise;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport AvatarElement from \"../../avatar\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport ButtonMenuToggle from \"../../buttonMenuToggle\";\r\nimport Button from \"../../button\";\r\nimport AppPrivacyAndSecurityTab from \"./privacyAndSecurity\";\r\nimport AppGeneralSettingsTab from \"./generalSettings\";\r\nimport AppEditProfileTab from \"./editProfile\";\r\nimport AppChatFoldersTab from \"./chatFolders\";\r\nimport AppNotificationsTab from \"./notifications\";\r\nimport PeerTitle from \"../../peerTitle\";\r\nimport AppLanguageTab from \"./language\";\r\nimport lottieLoader from \"../../../lib/lottieLoader\";\r\n//import AppMediaViewer from \"../../appMediaViewerNew\";\r\n\r\nexport default class AppSettingsTab extends SliderSuperTab {\r\n private avatarElem: AvatarElement;\r\n private nameDiv: HTMLElement;\r\n private phoneDiv: HTMLElement;\r\n\r\n private buttons: {\r\n edit: HTMLButtonElement,\r\n folders: HTMLButtonElement,\r\n general: HTMLButtonElement,\r\n notifications: HTMLButtonElement,\r\n privacy: HTMLButtonElement,\r\n language: HTMLButtonElement\r\n } = {} as any;\r\n\r\n protected init() {\r\n this.container.classList.add('settings-container');\r\n this.setTitle('Settings');\r\n \r\n const btnMenu = ButtonMenuToggle({}, 'bottom-left', [{\r\n icon: 'logout',\r\n text: 'EditAccount.Logout',\r\n onClick: () => {\r\n apiManager.logOut();\r\n }\r\n }]);\r\n\r\n this.header.append(btnMenu);\r\n\r\n this.avatarElem = new AvatarElement();\r\n this.avatarElem.setAttribute('clickable', '');\r\n this.avatarElem.classList.add('profile-avatar', 'avatar-120');\r\n\r\n /* const div = document.createElement('div');\r\n //div.style.cssText = 'border-radius: 8px; overflow: hidden; width: 396px; height: 264px; flex: 0 0 auto; position: relative; margin: 10rem 0 10rem auto;';\r\n //div.style.width = '135px';\r\n //div.style.height = '100px';\r\n div.style.cssText = 'border-radius: 8px; overflow: hidden; width: 396px; height: 264px; flex: 0 0 auto; position: relative; margin: 10rem auto 10rem 0;';\r\n div.style.width = '135px';\r\n div.style.height = '100px';\r\n \r\n const img = document.createElement('img');\r\n img.src = 'assets/img/pepe.jpg';\r\n img.classList.add('media-photo');\r\n img.style.cssText = 'max-width: 100%;max-height: 100%;';\r\n\r\n div.append(img);\r\n\r\n div.addEventListener('click', () => {\r\n new AppMediaViewer().setSearchContext({peerId: 61004386, inputFilter: 'inputMessagesFilterPhotos'}).openMedia({\r\n _: 'message',\r\n mid: 1,\r\n peerId: 61004386,\r\n fromId: 61004386,\r\n message: '',\r\n media: {\r\n _: 'messageMediaPhoto',\r\n photo: {\r\n _: 'photo',\r\n url: img.src,\r\n downloaded: 111,\r\n sizes: [{\r\n _: 'photoSize',\r\n type: 'x',\r\n w: 618,\r\n h: 412\r\n }]\r\n }\r\n },\r\n date: Date.now() / 1000 | 0\r\n }, img);\r\n });\r\n\r\n this.scrollable.append(div); */\r\n \r\n this.nameDiv = document.createElement('div');\r\n this.nameDiv.classList.add('profile-name');\r\n\r\n this.phoneDiv = document.createElement('div');\r\n this.phoneDiv.classList.add('profile-subtitle');\r\n\r\n const buttonsDiv = document.createElement('div');\r\n buttonsDiv.classList.add('profile-buttons');\r\n\r\n const className = 'profile-button btn-primary btn-transparent';\r\n buttonsDiv.append(this.buttons.edit = Button(className, {icon: 'edit', text: 'EditAccount.Title'}));\r\n buttonsDiv.append(this.buttons.folders = Button(className, {icon: 'folder', text: 'AccountSettings.Filters'}));\r\n buttonsDiv.append(this.buttons.general = Button(className, {icon: 'settings', text: 'Telegram.GeneralSettingsViewController'}));\r\n buttonsDiv.append(this.buttons.notifications = Button(className, {icon: 'unmute', text: 'AccountSettings.Notifications'}));\r\n buttonsDiv.append(this.buttons.privacy = Button(className, {icon: 'lock', text: 'AccountSettings.PrivacyAndSecurity'}));\r\n buttonsDiv.append(this.buttons.language = Button(className, {icon: 'language', text: 'AccountSettings.Language'}));\r\n \r\n this.scrollable.append(this.avatarElem, this.nameDiv, this.phoneDiv, buttonsDiv);\r\n this.scrollable.container.classList.add('profile-content-wrapper');\r\n\r\n /* rootScope.$on('user_auth', (e) => {\r\n this.fillElements();\r\n }); */\r\n\r\n this.buttons.edit.addEventListener('click', () => {\r\n const tab = new AppEditProfileTab(this.slider);\r\n tab.open();\r\n });\r\n\r\n this.buttons.folders.addEventListener('click', () => {\r\n new AppChatFoldersTab(this.slider).open();\r\n });\r\n\r\n this.buttons.general.addEventListener('click', () => {\r\n new AppGeneralSettingsTab(this.slider).open();\r\n });\r\n\r\n this.buttons.notifications.addEventListener('click', () => {\r\n new AppNotificationsTab(this.slider).open();\r\n });\r\n\r\n this.buttons.privacy.addEventListener('click', () => {\r\n new AppPrivacyAndSecurityTab(this.slider).open();\r\n });\r\n\r\n this.buttons.language.addEventListener('click', () => {\r\n new AppLanguageTab(this.slider).open();\r\n });\r\n\r\n lottieLoader.loadLottieWorkers();\r\n\r\n this.fillElements();\r\n }\r\n\r\n public fillElements() {\r\n let user = appUsersManager.getSelf();\r\n this.avatarElem.setAttribute('peer', '' + user.id);\r\n\r\n this.nameDiv.append(new PeerTitle({peerId: user.id}).element);\r\n this.phoneDiv.innerHTML = user.phone ? appUsersManager.formatUserPhone(user.phone) : '';\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appSidebarLeft from \"..\";\r\nimport { InputFile } from \"../../../layer\";\r\nimport appChatsManager from \"../../../lib/appManagers/appChatsManager\";\r\nimport Button from \"../../button\";\r\nimport InputField from \"../../inputField\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport AvatarEdit from \"../../avatarEdit\";\r\nimport AppAddMembersTab from \"./addMembers\";\r\nimport { _i18n } from \"../../../lib/langPack\";\r\nimport ButtonCorner from \"../../buttonCorner\";\r\n\r\nexport default class AppNewChannelTab extends SliderSuperTab {\r\n private uploadAvatar: () => Promise = null;\r\n\r\n private channelNameInputField: InputField;\r\n private channelDescriptionInputField: InputField;\r\n private nextBtn: HTMLButtonElement;\r\n private avatarEdit: AvatarEdit;\r\n\r\n protected init() {\r\n this.container.classList.add('new-channel-container');\r\n this.setTitle('NewChannel');\r\n\r\n this.avatarEdit = new AvatarEdit((_upload) => {\r\n this.uploadAvatar = _upload;\r\n });\r\n\r\n const inputWrapper = document.createElement('div');\r\n inputWrapper.classList.add('input-wrapper');\r\n\r\n this.channelNameInputField = new InputField({\r\n label: 'EnterChannelName',\r\n maxLength: 128\r\n });\r\n\r\n this.channelDescriptionInputField = new InputField({\r\n label: 'DescriptionOptionalPlaceholder',\r\n maxLength: 255\r\n });\r\n\r\n inputWrapper.append(this.channelNameInputField.container, this.channelDescriptionInputField.container);\r\n\r\n const onLengthChange = () => {\r\n this.nextBtn.classList.toggle('is-visible', !!this.channelNameInputField.value.length && \r\n !this.channelNameInputField.input.classList.contains('error') && \r\n !this.channelDescriptionInputField.input.classList.contains('error'));\r\n };\r\n\r\n this.channelNameInputField.input.addEventListener('input', onLengthChange);\r\n this.channelDescriptionInputField.input.addEventListener('input', onLengthChange);\r\n\r\n const caption = document.createElement('div');\r\n caption.classList.add('caption');\r\n _i18n(caption, 'Channel.DescriptionHolderDescrpiton');\r\n\r\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\r\n\r\n this.nextBtn.addEventListener('click', () => {\r\n const title = this.channelNameInputField.value;\r\n const about = this.channelDescriptionInputField.value;\r\n\r\n this.nextBtn.disabled = true;\r\n appChatsManager.createChannel(title, about).then((channelId) => {\r\n if(this.uploadAvatar) {\r\n this.uploadAvatar().then((inputFile) => {\r\n appChatsManager.editPhoto(channelId, inputFile);\r\n });\r\n }\r\n \r\n appSidebarLeft.removeTabFromHistory(this);\r\n new AppAddMembersTab(this.slider).open({\r\n peerId: channelId,\r\n type: 'channel',\r\n skippable: true,\r\n title: 'GroupAddMembers',\r\n placeholder: 'SendMessageTo',\r\n takeOut: (peerIds) => {\r\n return appChatsManager.inviteToChannel(Math.abs(channelId), peerIds);\r\n }\r\n });\r\n });\r\n });\r\n\r\n this.content.append(this.nextBtn);\r\n this.scrollable.append(this.avatarEdit.container, inputWrapper, caption);\r\n }\r\n\r\n public onCloseAfterTimeout() {\r\n this.avatarEdit.clear();\r\n this.uploadAvatar = null;\r\n this.channelNameInputField.value = '';\r\n this.channelDescriptionInputField.value = '';\r\n this.nextBtn.disabled = false;\r\n return super.onCloseAfterTimeout();\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport InputField from \"../inputField\";\nimport PopupElement from \".\";\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport EditPeer from \"../editPeer\";\nimport { _i18n } from \"../../lib/langPack\";\nimport TelInputField from \"../telInputField\";\nimport appUsersManager from \"../../lib/appManagers/appUsersManager\";\nimport { formatPhoneNumber } from \"../../helpers/formatPhoneNumber\";\nimport { toastNew } from \"../toast\";\n\nexport default class PopupCreateContact extends PopupElement {\n constructor() {\n super('popup-create-contact popup-send-photo popup-new-media', null, {closable: true, withConfirm: 'Add'});\n\n _i18n(this.title, 'AddContactTitle');\n\n attachClickEvent(this.btnConfirm, () => {\n const promise = appUsersManager.importContact(nameInputField.value, lastNameInputField.value, telInputField.value);\n\n promise.then(() => {\n this.hide();\n }, (err) => {\n if(err.type === 'NO_USER') {\n toastNew({langPackKey: 'Contacts.PhoneNumber.NotRegistred'});\n editPeer.disabled = false;\n }\n });\n\n editPeer.lockWithPromise(promise);\n }, {listenerSetter: this.listenerSetter});\n\n const inputFields: InputField[] = [];\n const div = document.createElement('div');\n div.classList.add('name-fields');\n const nameInputField = new InputField({\n label: 'FirstName',\n name: 'create-contact-name',\n maxLength: 70,\n required: true\n });\n const lastNameInputField = new InputField({\n label: 'LastName',\n name: 'create-contact-lastname',\n maxLength: 70\n });\n const telInputField = new TelInputField({required: true});\n inputFields.push(nameInputField, lastNameInputField, telInputField);\n\n const onInput = () => {\n const name = nameInputField.value + ' ' + lastNameInputField.value;\n // const abbr = RichTextProcessor.getAbbreviation(name);\n editPeer.avatarElem.setAttribute('peer-title', name);\n editPeer.avatarElem.update();\n };\n\n this.listenerSetter.add(nameInputField.input)('input', onInput);\n this.listenerSetter.add(lastNameInputField.input)('input', onInput);\n\n const user = appUsersManager.getSelf();\n const formatted = formatPhoneNumber(user.phone);\n if(formatted) {\n telInputField.validate = () => {\n return !!telInputField.value.match(/\\d/);\n };\n\n telInputField.value = '+' + formatted.code.country_code;\n }\n\n const editPeer = new EditPeer({\n inputFields,\n listenerSetter: this.listenerSetter,\n doNotEditAvatar: true,\n nextBtn: this.btnConfirm,\n avatarSize: 100\n });\n\n div.append(nameInputField.container, lastNameInputField.container, editPeer.avatarElem);\n this.container.append(div, telInputField.container);\n\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { SliderSuperTab } from \"../../slider\";\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\nimport InputSearch from \"../../inputSearch\";\nimport { IS_MOBILE } from \"../../../environment/userAgent\";\nimport { canFocus } from \"../../../helpers/dom/canFocus\";\nimport windowSize from \"../../../helpers/windowSize\";\nimport ButtonCorner from \"../../buttonCorner\";\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\nimport PopupCreateContact from \"../../popups/createContact\";\nimport SortedUserList from \"../../sortedUserList\";\nimport { getMiddleware } from \"../../../helpers/middleware\";\nimport replaceContent from \"../../../helpers/dom/replaceContent\";\nimport rootScope from \"../../../lib/rootScope\";\n\n// TODO: поиск по людям глобальный, если не нашло в контактах никого\n\nexport default class AppContactsTab extends SliderSuperTab {\n private inputSearch: InputSearch;\n private middleware: ReturnType;\n private sortedUserList: SortedUserList;\n \n protected init() {\n this.container.id = 'contacts-container';\n\n // this.list = appDialogsManager.createChatList(/* {avatarSize: 48, handheldsSize: 66} */);\n\n const btnAdd = ButtonCorner({icon: 'add', className: 'is-visible'});\n this.content.append(btnAdd);\n\n attachClickEvent(btnAdd, () => {\n new PopupCreateContact();\n }, {listenerSetter: this.listenerSetter});\n\n this.inputSearch = new InputSearch('Search', (value) => {\n this.openContacts(value);\n });\n\n this.listenerSetter.add(rootScope)('contacts_update', (userId) => {\n const isContact = appUsersManager.isContact(userId);\n if(isContact) this.sortedUserList.add(userId);\n else this.sortedUserList.delete(userId);\n });\n\n this.title.replaceWith(this.inputSearch.container);\n\n this.middleware = getMiddleware();\n\n // preload contacts\n // appUsersManager.getContacts();\n }\n\n protected createList() {\n const sortedUserList = new SortedUserList();\n const list = sortedUserList.list;\n list.id = 'contacts';\n list.classList.add('contacts-container');\n appDialogsManager.setListClickListener(list, () => {\n this.close();\n }, undefined, true);\n return sortedUserList;\n }\n\n protected onClose() {\n this.middleware.clean();\n /* // need to clear, and left 1 page for smooth slide\n let pageCount = appPhotosManager.windowH / 72 * 1.25 | 0;\n (Array.from(this.list.children) as HTMLElement[]).slice(pageCount).forEach(el => el.remove()); */\n }\n\n protected onOpenAfterTimeout() {\n if(IS_MOBILE || !canFocus(true)) return;\n this.inputSearch.input.focus();\n }\n\n public openContacts(query?: string) {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.middleware.clean();\n const middleware = this.middleware.get();\n this.scrollable.onScrolledBottom = null;\n this.scrollable.container.textContent = '';\n\n appUsersManager.getContacts(query, undefined, 'online').then(contacts => {\n if(!middleware()) {\n return;\n }\n\n const sortedUserList = this.sortedUserList = this.createList();\n\n let renderPage = () => {\n const pageCount = windowSize.windowH / 72 * 1.25 | 0;\n const arr = contacts.splice(0, pageCount); // надо splice!\n\n arr.forEach((peerId) => {\n sortedUserList.add(peerId);\n });\n\n if(!contacts.length) {\n renderPage = undefined;\n this.scrollable.onScrolledBottom = null;\n }\n };\n\n renderPage();\n this.scrollable.onScrolledBottom = () => {\n if(renderPage) {\n renderPage();\n } else {\n this.scrollable.onScrolledBottom = null;\n }\n };\n\n replaceContent(this.scrollable.container, sortedUserList.list);\n });\n }\n\n public open() {\n this.openContacts();\n return super.open();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appDialogsManager from \"../../../lib/appManagers/appDialogsManager\";\nimport { SliderSuperTab } from \"../../slider\";\n\nexport default class AppArchivedTab extends SliderSuperTab {\n private static filterId = 1;\n private wasFilterId: number;\n\n init() {\n this.container.id = 'chats-archived-container';\n this.setTitle('ArchivedChats');\n\n if(!appDialogsManager.sortedLists[AppArchivedTab.filterId]) {\n const chatList = appDialogsManager.createChatList();\n appDialogsManager.generateScrollable(chatList, AppArchivedTab.filterId).container.append(chatList);\n appDialogsManager.setListClickListener(chatList, null, true);\n //appDialogsManager.setListClickListener(archivedChatList, null, true); // * to test peer changing\n }\n\n const scrollable = appDialogsManager.scrollables[AppArchivedTab.filterId];\n this.scrollable.container.replaceWith(scrollable.container);\n this.scrollable = scrollable;\n }\n\n onOpen() {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.wasFilterId = appDialogsManager.filterId;\n appDialogsManager.setFilterId(AppArchivedTab.filterId);\n appDialogsManager.onTabChange();\n }\n\n // вообще, так делать нельзя, но нет времени чтобы переделать главный чатлист на слайд...\n onOpenAfterTimeout() {\n appDialogsManager.sortedLists[this.wasFilterId].clear();\n }\n\n onClose() {\n appDialogsManager.setFilterId(this.wasFilterId);\n appDialogsManager.onTabChange();\n }\n\n onCloseAfterTimeout() {\n appDialogsManager.sortedLists[AppArchivedTab.filterId].clear();\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { formatNumber } from \"../../helpers/number\";\nimport appImManager from \"../../lib/appManagers/appImManager\";\nimport appStateManager from \"../../lib/appManagers/appStateManager\";\nimport appUsersManager from \"../../lib/appManagers/appUsersManager\";\nimport rootScope from \"../../lib/rootScope\";\nimport { SearchGroup } from \"../appSearch\";\nimport \"../avatar\";\nimport Scrollable, { ScrollableX } from \"../scrollable\";\nimport InputSearch from \"../inputSearch\";\nimport SidebarSlider from \"../slider\";\nimport { TransitionSlider } from \"../transition\";\nimport AppNewGroupTab from \"./tabs/newGroup\";\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport AppSearchSuper from \"../appSearchSuper.\";\nimport { DateData, fillTipDates } from \"../../helpers/date\";\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport AppSettingsTab from \"./tabs/settings\";\nimport AppNewChannelTab from \"./tabs/newChannel\";\nimport AppContactsTab from \"./tabs/contacts\";\nimport AppArchivedTab from \"./tabs/archivedTab\";\nimport AppAddMembersTab from \"./tabs/addMembers\";\nimport { i18n_, LangPackKey } from \"../../lib/langPack\";\nimport { ButtonMenuItemOptions } from \"../buttonMenu\";\nimport CheckboxField from \"../checkboxField\";\nimport { IS_MOBILE_SAFARI } from \"../../environment/userAgent\";\nimport appNavigationController from \"../appNavigationController\";\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\nimport findUpTag from \"../../helpers/dom/findUpTag\";\nimport PeerTitle from \"../peerTitle\";\nimport App from \"../../config/app\";\nimport ButtonMenuToggle from \"../buttonMenuToggle\";\nimport replaceContent from \"../../helpers/dom/replaceContent\";\nimport sessionStorage from \"../../lib/sessionStorage\";\nimport { CLICK_EVENT_NAME } from \"../../helpers/dom/clickEvent\";\nimport { closeBtnMenu } from \"../misc\";\n\nexport const LEFT_COLUMN_ACTIVE_CLASSNAME = 'is-left-column-shown';\n\nexport class AppSidebarLeft extends SidebarSlider {\n private toolsBtn: HTMLButtonElement;\n private backBtn: HTMLButtonElement;\n //private searchInput = document.getElementById('global-search') as HTMLInputElement;\n private inputSearch: InputSearch;\n \n public archivedCount: HTMLSpanElement;\n\n private newBtnMenu: HTMLElement;\n\n //private log = logger('SL');\n\n private searchGroups: {[k in 'contacts' | 'globalContacts' | 'messages' | 'people' | 'recent']: SearchGroup} = {} as any;\n private searchSuper: AppSearchSuper;\n\n constructor() {\n super({\n sidebarEl: document.getElementById('column-left') as HTMLDivElement,\n navigationType: 'left'\n });\n\n //this._selectTab(0); // make first tab as default\n\n this.inputSearch = new InputSearch('Search');\n const sidebarHeader = this.sidebarEl.querySelector('.item-main .sidebar-header');\n sidebarHeader.append(this.inputSearch.container);\n\n const onNewGroupClick = () => {\n new AppAddMembersTab(this).open({\n peerId: 0,\n type: 'chat',\n skippable: false,\n takeOut: (peerIds) => {\n new AppNewGroupTab(this).open(peerIds);\n },\n title: 'GroupAddMembers',\n placeholder: 'SendMessageTo'\n });\n };\n\n const onContactsClick = () => {\n new AppContactsTab(this).open();\n };\n\n //this.toolsBtn = this.sidebarEl.querySelector('.sidebar-tools-button') as HTMLButtonElement;\n this.backBtn = this.sidebarEl.querySelector('.sidebar-back-button') as HTMLButtonElement;\n\n const btnArchive: ButtonMenuItemOptions & {verify?: () => boolean} = {\n icon: 'archive',\n text: 'ArchivedChats',\n onClick: () => {\n new AppArchivedTab(this).open();\n },\n verify: () => {\n const folder = appMessagesManager.dialogsStorage.getFolder(1);\n return !!folder.length;\n }\n };\n\n const themeCheckboxField = new CheckboxField({\n toggle: true,\n checked: rootScope.getTheme().name === 'night'\n });\n themeCheckboxField.input.addEventListener('change', () => {\n rootScope.settings.theme = themeCheckboxField.input.checked ? 'night' : 'day';\n appStateManager.pushToState('settings', rootScope.settings);\n appImManager.applyCurrentTheme();\n });\n\n rootScope.addEventListener('theme_change', () => {\n themeCheckboxField.setValueSilently(rootScope.getTheme().name === 'night');\n });\n\n const menuButtons: (ButtonMenuItemOptions & {verify?: () => boolean})[] = [{\n icon: 'saved',\n text: 'SavedMessages',\n onClick: () => {\n setTimeout(() => { // menu doesn't close if no timeout (lol)\n appImManager.setPeer(appImManager.myId);\n }, 0);\n }\n }, btnArchive, {\n icon: 'user',\n text: 'Contacts',\n onClick: onContactsClick\n }, {\n icon: 'settings',\n text: 'Settings',\n onClick: () => {\n new AppSettingsTab(this).open();\n }\n }, {\n icon: 'darkmode',\n text: 'DarkMode',\n onClick: () => {\n \n },\n checkboxField: themeCheckboxField\n }, {\n icon: 'animations',\n text: 'Animations',\n onClick: () => {\n \n },\n checkboxField: new CheckboxField({\n toggle: true, \n checked: true,\n stateKey: 'settings.animationsEnabled',\n })\n }, {\n icon: 'help',\n text: 'TelegramFeatures',\n onClick: () => {\n appImManager.openUsername('TelegramTips');\n }\n }, {\n icon: 'bug',\n text: 'ReportBug',\n onClick: () => {\n const a = document.createElement('a');\n a.target = '_blank';\n a.href = 'https://bugs.telegram.org/?tag_ids=40&sort=time';\n document.body.append(a);\n a.click();\n setTimeout(() => {\n a.remove();\n }, 0);\n }\n }, {\n icon: 'char z',\n text: 'ChatList.Menu.SwitchTo.Z',\n onClick: () => {\n sessionStorage.set({kz_version: 'Z'}).then(() => {\n location.href = 'https://web.telegram.org/z/';\n });\n },\n verify: () => App.isMainDomain\n }, {\n icon: 'char w',\n text: 'ChatList.Menu.SwitchTo.Webogram',\n onClick: () => {\n location.href = 'https://web.telegram.org/?legacy=1';\n },\n verify: () => App.isMainDomain\n }];\n\n this.toolsBtn = ButtonMenuToggle({}, 'bottom-right', menuButtons, (e) => {\n menuButtons.forEach(button => {\n if(button.verify) {\n button.element.classList.toggle('hide', !button.verify());\n }\n });\n });\n this.toolsBtn.classList.remove('tgico-more');\n this.toolsBtn.classList.add('sidebar-tools-button', 'is-visible');\n\n this.backBtn.parentElement.insertBefore(this.toolsBtn, this.backBtn);\n\n const btnMenu = this.toolsBtn.querySelector('.btn-menu') as HTMLElement;\n\n const btnMenuFooter = document.createElement('a');\n btnMenuFooter.href = 'https://github.com/morethanwords/tweb/blob/master/CHANGELOG.md';\n btnMenuFooter.target = '_blank';\n btnMenuFooter.rel = 'noopener noreferrer';\n btnMenuFooter.classList.add('btn-menu-footer');\n btnMenuFooter.addEventListener(CLICK_EVENT_NAME, (e) => {\n e.stopPropagation();\n closeBtnMenu();\n });\n const t = document.createElement('span');\n t.classList.add('btn-menu-footer-text');\n t.innerHTML = 'Telegram Web' + App.suffix + ' alpha ' + App.versionFull;\n btnMenuFooter.append(t); \n btnMenu.classList.add('has-footer');\n btnMenu.append(btnMenuFooter);\n\n this.newBtnMenu = ButtonMenuToggle({}, 'top-left', [{\n icon: 'newchannel',\n text: 'NewChannel',\n onClick: () => {\n new AppNewChannelTab(this).open();\n }\n }, {\n icon: 'newgroup',\n text: 'NewGroup',\n onClick: onNewGroupClick\n }, {\n icon: 'newprivate',\n text: 'NewPrivateChat',\n onClick: onContactsClick\n }]);\n this.newBtnMenu.className = 'btn-circle rp btn-corner z-depth-1 btn-menu-toggle animated-button-icon';\n this.newBtnMenu.insertAdjacentHTML('afterbegin', `\n \n \n `);\n this.newBtnMenu.id = 'new-menu';\n sidebarHeader.nextElementSibling.append(this.newBtnMenu);\n\n this.inputSearch.input.addEventListener('focus', () => this.initSearch(), {once: true});\n\n //parseMenuButtonsTo(this.newButtons, this.newBtnMenu.firstElementChild.children);\n\n this.archivedCount = document.createElement('span');\n this.archivedCount.className = 'archived-count badge badge-24 badge-gray';\n\n btnArchive.element.append(this.archivedCount);\n\n rootScope.addEventListener('dialogs_archived_unread', (e) => {\n this.archivedCount.innerText = '' + formatNumber(e.count, 1);\n this.archivedCount.classList.toggle('hide', !e.count);\n });\n\n appUsersManager.getTopPeers('correspondents');\n\n appStateManager.getState().then(state => {\n const recentSearch = state.recentSearch || [];\n for(let i = 0, length = recentSearch.length; i < length; ++i) {\n appStateManager.requestPeer(recentSearch[i], 'recentSearch');\n }\n });\n }\n\n private initSearch() {\n const searchContainer = this.sidebarEl.querySelector('#search-container') as HTMLDivElement;\n\n const scrollable = new Scrollable(searchContainer);\n\n const close = () => {\n //setTimeout(() => {\n this.backBtn.click();\n //}, 0);\n };\n\n this.searchGroups = {\n contacts: new SearchGroup('Search.Chats', 'contacts', undefined, undefined, undefined, undefined, close),\n globalContacts: new SearchGroup('Search.Global', 'contacts', undefined, undefined, undefined, undefined, close),\n messages: new SearchGroup('Search.Messages', 'messages'),\n people: new SearchGroup(false, 'contacts', true, 'search-group-people', true, false, close),\n recent: new SearchGroup('Recent', 'contacts', true, 'search-group-recent', true, true, close)\n };\n\n const searchSuper = this.searchSuper = new AppSearchSuper({\n mediaTabs: [{\n inputFilter: 'inputMessagesFilterEmpty',\n name: 'FilterChats',\n type: 'chats'\n }, {\n inputFilter: 'inputMessagesFilterPhotoVideo',\n name: 'SharedMediaTab2',\n type: 'media'\n }, {\n inputFilter: 'inputMessagesFilterUrl',\n name: 'SharedLinksTab2',\n type: 'links'\n }, {\n inputFilter: 'inputMessagesFilterDocument',\n name: 'SharedFilesTab2',\n type: 'files'\n }, {\n inputFilter: 'inputMessagesFilterMusic',\n name: 'SharedMusicTab2',\n type: 'music'\n }, {\n inputFilter: 'inputMessagesFilterRoundVoice',\n name: 'SharedVoiceTab2',\n type: 'voice'\n }], \n scrollable, \n searchGroups: this.searchGroups, \n asChatList: true,\n hideEmptyTabs: false,\n showSender: true\n });\n\n searchContainer.prepend(searchSuper.nav.parentElement.parentElement);\n scrollable.container.append(searchSuper.container);\n\n const resetSearch = () => {\n searchSuper.setQuery({\n peerId: 0, \n folderId: 0\n });\n searchSuper.selectTab(0);\n searchSuper.load(true); \n };\n\n resetSearch();\n\n let pickedElements: HTMLElement[] = [];\n let selectedPeerId = 0;\n let selectedMinDate = 0;\n let selectedMaxDate = 0;\n const updatePicked = () => {\n //(this.inputSearch.input as HTMLInputElement).placeholder = pickedElements.length ? 'Search' : 'Telegram Search';\n this.inputSearch.container.classList.toggle('is-picked-twice', pickedElements.length === 2);\n this.inputSearch.container.classList.toggle('is-picked', !!pickedElements.length);\n\n if(pickedElements.length) {\n this.inputSearch.input.style.setProperty('--paddingLeft', (pickedElements[pickedElements.length - 1].getBoundingClientRect().right - this.inputSearch.input.getBoundingClientRect().left) + 'px');\n } else {\n this.inputSearch.input.style.removeProperty('--paddingLeft');\n }\n };\n\n const helper = document.createElement('div');\n helper.classList.add('search-helper');\n helper.addEventListener('click', (e) => {\n const target = findUpClassName(e.target, 'selector-user');\n if(!target) {\n return;\n }\n\n const key = target.dataset.key;\n if(key.indexOf('date_') === 0) {\n const [_, minDate, maxDate] = key.split('_');\n selectedMinDate = +minDate;\n selectedMaxDate = +maxDate;\n } else {\n selectedPeerId = +key;\n }\n\n target.addEventListener('click', () => {\n unselectEntity(target);\n });\n\n this.inputSearch.container.append(target);\n this.inputSearch.onChange(this.inputSearch.value = '');\n pickedElements.push(target);\n updatePicked();\n });\n\n searchSuper.nav.parentElement.append(helper);\n\n const renderEntity = (peerId: any, title?: string | HTMLElement) => {\n const div = document.createElement('div');\n div.classList.add('selector-user'/* , 'scale-in' */);\n\n const avatarEl = document.createElement('avatar-element');\n avatarEl.classList.add('selector-user-avatar', 'tgico');\n avatarEl.setAttribute('dialog', '1');\n avatarEl.classList.add('avatar-30');\n\n div.dataset.key = '' + peerId;\n if(typeof(peerId) === 'number') {\n if(title === undefined) {\n title = new PeerTitle({peerId}).element;\n }\n\n avatarEl.setAttribute('peer', '' + peerId);\n } else {\n avatarEl.classList.add('tgico-calendarfilter');\n }\n\n if(title) {\n if(typeof(title) === 'string') {\n div.innerHTML = title;\n } else {\n replaceContent(div, title);\n div.append(title);\n }\n }\n\n div.insertAdjacentElement('afterbegin', avatarEl);\n\n return div;\n };\n\n const unselectEntity = (target: HTMLElement) => {\n const key = target.dataset.key;\n if(key.indexOf('date_') === 0) {\n selectedMinDate = selectedMaxDate = 0;\n } else {\n selectedPeerId = 0;\n }\n \n target.remove();\n pickedElements.findAndSplice(t => t === target);\n\n setTimeout(() => {\n updatePicked();\n this.inputSearch.onChange(this.inputSearch.value);\n }, 0);\n };\n\n this.inputSearch.onClear = () => {\n pickedElements.forEach(el => {\n unselectEntity(el);\n });\n };\n\n this.inputSearch.onChange = (value) => {\n searchSuper.cleanupHTML();\n searchSuper.setQuery({\n peerId: selectedPeerId, \n folderId: selectedPeerId ? undefined : 0,\n query: value,\n minDate: selectedMinDate,\n maxDate: selectedMaxDate\n });\n searchSuper.load(true);\n\n helper.innerHTML = '';\n searchSuper.nav.classList.remove('hide');\n if(!value) {\n }\n \n if(!selectedPeerId && value.trim()) {\n const middleware = searchSuper.middleware.get();\n Promise.all([\n appMessagesManager.getConversationsAll(value).then(dialogs => dialogs.map(d => d.peerId)),\n appUsersManager.getContacts(value, true)\n ]).then(results => {\n if(!middleware()) return;\n const peerIds = new Set(results[0].concat(results[1]));\n \n peerIds.forEach(peerId => {\n helper.append(renderEntity(peerId));\n });\n \n searchSuper.nav.classList.toggle('hide', !!helper.innerHTML);\n //console.log('got peerIds by value:', value, [...peerIds]);\n });\n }\n \n if(!selectedMinDate && value.trim()) {\n const dates: DateData[] = [];\n fillTipDates(value, dates);\n dates.forEach(dateData => {\n helper.append(renderEntity('date_' + dateData.minDate + '_' + dateData.maxDate, dateData.title));\n });\n\n searchSuper.nav.classList.toggle('hide', !!helper.innerHTML);\n }\n };\n\n searchSuper.tabs.inputMessagesFilterEmpty.addEventListener('mousedown', (e) => {\n const target = findUpTag(e.target, 'LI') as HTMLElement;\n if(!target) {\n return;\n }\n\n const searchGroup = findUpClassName(target, 'search-group');\n if(!searchGroup || searchGroup.classList.contains('search-group-recent') || searchGroup.classList.contains('search-group-people')) {\n return;\n }\n\n const peerId = +target.getAttribute('data-peer-id');\n appStateManager.getState().then(state => {\n const recentSearch = state.recentSearch || [];\n if(recentSearch[0] !== peerId) {\n recentSearch.findAndSplice(p => p === peerId);\n recentSearch.unshift(peerId);\n if(recentSearch.length > 20) {\n recentSearch.length = 20;\n }\n \n appStateManager.pushToState('recentSearch', recentSearch);\n for(const peerId of recentSearch) {\n appStateManager.requestPeer(peerId, 'recentSearch');\n }\n }\n });\n }, {capture: true});\n\n let peopleContainer = document.createElement('div');\n peopleContainer.classList.add('search-group-scrollable');\n peopleContainer.append(this.searchGroups.people.list);\n this.searchGroups.people.container.append(peopleContainer);\n let peopleScrollable = new ScrollableX(peopleContainer);\n\n let first = true;\n let hideNewBtnMenuTimeout: number;\n //const transition = Transition.bind(null, searchContainer.parentElement, 150);\n const transition = TransitionSlider(searchContainer.parentElement, 'zoom-fade', 150, (id) => {\n if(hideNewBtnMenuTimeout) clearTimeout(hideNewBtnMenuTimeout);\n\n if(id === 0 && !first) {\n searchSuper.selectTab(0, false);\n this.inputSearch.onClearClick();\n hideNewBtnMenuTimeout = window.setTimeout(() => {\n hideNewBtnMenuTimeout = 0;\n this.newBtnMenu.classList.remove('is-hidden');\n }, 150);\n }\n\n first = false;\n });\n\n transition(0);\n\n const activeClassName = 'is-visible';\n const onFocus = () => {\n this.toolsBtn.classList.remove(activeClassName);\n this.backBtn.classList.add(activeClassName);\n this.newBtnMenu.classList.add('is-hidden');\n this.toolsBtn.parentElement.firstElementChild.classList.toggle('state-back', true);\n\n if(!IS_MOBILE_SAFARI && !appNavigationController.findItemByType('global-search')) {\n appNavigationController.pushItem({\n onPop: () => {\n close();\n },\n type: 'global-search'\n });\n }\n\n transition(1);\n };\n\n this.inputSearch.input.addEventListener('focus', onFocus);\n onFocus();\n\n this.backBtn.addEventListener('click', (e) => {\n this.toolsBtn.classList.add(activeClassName);\n this.backBtn.classList.remove(activeClassName);\n this.toolsBtn.parentElement.firstElementChild.classList.toggle('state-back', false);\n\n appNavigationController.removeByType('global-search');\n\n transition(0);\n });\n\n const clearRecentSearchBtn = document.createElement('button');\n clearRecentSearchBtn.classList.add('btn-icon', 'tgico-close');\n this.searchGroups.recent.nameEl.append(clearRecentSearchBtn);\n clearRecentSearchBtn.addEventListener('click', () => {\n this.searchGroups.recent.clear();\n appStateManager.pushToState('recentSearch', []);\n });\n }\n}\n\nexport class SettingSection {\n public container: HTMLElement;\n public content: HTMLElement;\n public title: HTMLElement;\n public caption: HTMLElement;\n\n constructor(options: {\n name?: LangPackKey, \n caption?: LangPackKey | true,\n noDelimiter?: boolean,\n fakeGradientDelimiter?: boolean\n }) {\n this.container = document.createElement('div');\n this.container.classList.add('sidebar-left-section');\n\n if(options.fakeGradientDelimiter) {\n this.container.append(generateDelimiter());\n this.container.classList.add('with-fake-delimiter');\n } else if(!options.noDelimiter) {\n const hr = document.createElement('hr');\n this.container.append(hr);\n } else {\n this.container.classList.add('no-delimiter');\n }\n\n this.content = this.generateContentElement();\n\n if(options.name) {\n this.title = document.createElement('div');\n this.title.classList.add('sidebar-left-h2', 'sidebar-left-section-name');\n i18n_({element: this.title, key: options.name});\n this.content.append(this.title);\n }\n\n if(options.caption) {\n this.caption = this.generateContentElement();\n this.caption.classList.add('sidebar-left-section-caption');\n\n if(options.caption !== true) {\n i18n_({element: this.caption, key: options.caption});\n }\n }\n }\n\n public generateContentElement() {\n const content = document.createElement('div');\n content.classList.add('sidebar-left-section-content');\n this.container.append(content);\n return content;\n }\n}\n\nexport const generateSection = (appendTo: Scrollable, name?: LangPackKey, caption?: LangPackKey) => {\n const section = new SettingSection({name, caption});\n appendTo.append(section.container);\n return section.content;\n};\n\nexport const generateDelimiter = () => {\n const delimiter = document.createElement('div');\n delimiter.classList.add('gradient-delimiter');\n return delimiter;\n};\n\nconst appSidebarLeft = new AppSidebarLeft();\nMOUNT_CLASS_TO.appSidebarLeft = appSidebarLeft;\nexport default appSidebarLeft;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport rootScope from \"../../lib/rootScope\";\r\n//import { generatePathData } from \"../../helpers/dom\";\r\nimport { MyMessage } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type Chat from \"./chat\";\r\n\r\ntype Group = {bubble: HTMLElement, mid: number, timestamp: number}[];\r\ntype BubbleGroup = {timestamp: number, fromId: number, mid: number, group: Group};\r\nexport default class BubbleGroups {\r\n private bubbles: Array = []; // map to group\r\n private detailsMap: Map = new Map();\r\n private groups: Array = [];\r\n //updateRAFs: Map = new Map();\r\n private newGroupDiff = 121; // * 121 in scheduled messages\r\n\r\n constructor(private chat: Chat) {\r\n\r\n }\r\n\r\n removeBubble(bubble: HTMLElement) {\r\n const details = this.detailsMap.get(bubble);\r\n if(details) {\r\n if(details.group.length) {\r\n details.group.findAndSplice(d => d.bubble === bubble);\r\n if(!details.group.length) {\r\n this.groups.findAndSplice(g => g === details.group);\r\n } else {\r\n this.updateGroup(details.group);\r\n }\r\n }\r\n \r\n this.detailsMap.delete(bubble);\r\n }\r\n }\r\n \r\n addBubble(bubble: HTMLElement, message: MyMessage, reverse: boolean) {\r\n //return;\r\n\r\n const timestamp = message.date;\r\n const mid = message.mid;\r\n let fromId = message.viaBotId || message.fromId;\r\n let group: Group;\r\n\r\n // fix for saved messages forward to self\r\n if(fromId === rootScope.myId && message.peerId === rootScope.myId && (message as any).fwdFromId === fromId) {\r\n fromId = -fromId;\r\n }\r\n \r\n // try to find added\r\n this.removeBubble(bubble);\r\n \r\n const insertObject = {bubble, mid, timestamp};\r\n if(this.bubbles.length) {\r\n let foundBubble: BubbleGroup;\r\n let foundAtIndex = -1;\r\n for(let i = 0; i < this.bubbles.length; ++i) {\r\n const bubble = this.bubbles[i];\r\n const diff = Math.abs(bubble.timestamp - timestamp);\r\n const good = bubble.fromId === fromId && diff <= this.newGroupDiff;\r\n\r\n if(good) {\r\n foundAtIndex = i;\r\n\r\n if(this.chat.type === 'scheduled') {\r\n break;\r\n }\r\n } else {\r\n foundAtIndex = -1;\r\n }\r\n\r\n if(this.chat.type !== 'scheduled') {\r\n if(mid > bubble.mid) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(foundAtIndex !== -1) {\r\n foundBubble = this.bubbles[foundAtIndex];\r\n }\r\n /* const foundBubble = this.bubbles.find(bubble => {\r\n const diff = Math.abs(bubble.timestamp - timestamp);\r\n return bubble.fromId === fromId && diff <= this.newGroupDiff;\r\n }); */\r\n\r\n if(!foundBubble) this.groups.push(group = [insertObject]);\r\n else {\r\n group = foundBubble.group;\r\n \r\n let i = 0, foundMidOnSameTimestamp = 0;\r\n for(; i < group.length; ++i) {\r\n const _timestamp = group[i].timestamp;\r\n const _mid = group[i].mid;\r\n\r\n if(timestamp < _timestamp) {\r\n break;\r\n } else if(timestamp === _timestamp) {\r\n foundMidOnSameTimestamp = _mid;\r\n } \r\n \r\n if(foundMidOnSameTimestamp && mid < foundMidOnSameTimestamp) {\r\n break;\r\n }\r\n }\r\n\r\n group.splice(i, 0, insertObject);\r\n }\r\n } else {\r\n this.groups.push(group = [insertObject]);\r\n }\r\n\r\n //console.log('[BUBBLE]: addBubble', bubble, message.mid, fromId, reverse, group);\r\n\r\n const bubbleGroup = {timestamp, fromId, mid: message.mid, group};\r\n let insertIndex = 0;\r\n for(; insertIndex < this.bubbles.length; ++insertIndex) {\r\n if(this.bubbles[insertIndex].mid < mid) {\r\n break;\r\n }\r\n }\r\n \r\n this.bubbles.splice(insertIndex, 0, {timestamp, fromId, mid: message.mid, group});\r\n this.updateGroup(group);\r\n\r\n this.detailsMap.set(bubble, bubbleGroup);\r\n }\r\n\r\n /* setClipIfNeeded(bubble: HTMLDivElement, remove = false) {\r\n //console.log('setClipIfNeeded', bubble, remove);\r\n const className = bubble.className;\r\n if(className.includes('is-message-empty') && (className.includes('photo') || className.includes('video'))) {\r\n let container = bubble.querySelector('.bubble__media-container') as SVGSVGElement;\r\n //console.log('setClipIfNeeded', bubble, remove, container);\r\n if(!container) return;\r\n\r\n try {\r\n Array.from(container.children).forEach(object => {\r\n if(object instanceof SVGDefsElement) return;\r\n \r\n if(remove) {\r\n object.removeAttributeNS(null, 'clip-path');\r\n } else {\r\n let clipId = container.dataset.clipId;\r\n let path = container.firstElementChild.firstElementChild.lastElementChild as SVGPathElement;\r\n let width = +object.getAttributeNS(null, 'width');\r\n let height = +object.getAttributeNS(null, 'height');\r\n let isOut = className.includes('is-out');\r\n let isReply = className.includes('is-reply');\r\n let d = '';\r\n \r\n //console.log('setClipIfNeeded', object, width, height, isOut);\r\n \r\n let tr: number, tl: number;\r\n if(className.includes('forwarded') || isReply) {\r\n tr = tl = 0;\r\n } else if(isOut) {\r\n tr = className.includes('is-group-first') ? 12 : 6;\r\n tl = 12;\r\n } else {\r\n tr = 12;\r\n tl = className.includes('is-group-first') ? 12 : 6;\r\n }\r\n \r\n if(isOut) {\r\n d = generatePathData(0, 0, width - 9, height, tl, tr, 0, 12);\r\n } else {\r\n d = generatePathData(9, 0, width - 9, height, tl, tr, 12, 0);\r\n }\r\n \r\n path.setAttributeNS(null, 'd', d);\r\n object.setAttributeNS(null, 'clip-path', 'url(#' + clipId + ')');\r\n }\r\n });\r\n } catch(err) {}\r\n }\r\n } */\r\n \r\n updateGroup(group: Group) {\r\n /* if(this.updateRAFs.has(group)) {\r\n window.cancelAnimationFrame(this.updateRAFs.get(group));\r\n this.updateRAFs.delete(group);\r\n } */\r\n \r\n //this.updateRAFs.set(group, window.requestAnimationFrame(() => {\r\n //this.updateRAFs.delete(group);\r\n \r\n if(!group.length) {\r\n return;\r\n }\r\n \r\n const first = group[0].bubble;\r\n\r\n //console.log('[BUBBLE]: updateGroup', group, first);\r\n \r\n if(group.length === 1) {\r\n first.classList.add('is-group-first', 'is-group-last');\r\n //this.setClipIfNeeded(first);\r\n return;\r\n } else {\r\n first.classList.remove('is-group-last');\r\n first.classList.add('is-group-first');\r\n //this.setClipIfNeeded(first, true);\r\n }\r\n \r\n const length = group.length - 1;\r\n for(let i = 1; i < length; ++i) {\r\n const bubble = group[i].bubble;\r\n bubble.classList.remove('is-group-last', 'is-group-first');\r\n //this.setClipIfNeeded(bubble, true);\r\n }\r\n \r\n const last = group[group.length - 1].bubble;\r\n last.classList.remove('is-group-first');\r\n last.classList.add('is-group-last');\r\n //this.setClipIfNeeded(last);\r\n //}));\r\n }\r\n\r\n updateGroupByMessageId(mid: number) {\r\n const details = this.bubbles.find(g => g.mid === mid);\r\n if(details) {\r\n this.updateGroup(details.group);\r\n }\r\n }\r\n \r\n cleanup() {\r\n this.bubbles = [];\r\n this.groups = [];\r\n this.detailsMap.clear();\r\n /* for(let value of this.updateRAFs.values()) {\r\n window.cancelAnimationFrame(value);\r\n }\r\n this.updateRAFs.clear(); */\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport PopupElement, { PopupOptions } from \".\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\nimport I18n, { i18n, LangPackKey } from \"../../lib/langPack\";\r\nimport InputField from \"../inputField\";\r\n\r\nexport default class PopupDatePicker extends PopupElement {\r\n protected controlsDiv: HTMLElement;\r\n protected monthTitle: HTMLElement;\r\n protected prevBtn: HTMLElement;\r\n protected nextBtn: HTMLElement;\r\n\r\n protected monthsContainer: HTMLElement;\r\n protected month: HTMLElement;\r\n\r\n protected minMonth: Date;\r\n protected maxMonth: Date;\r\n protected minDate: Date;\r\n protected maxDate: Date;\r\n protected selectedDate: Date;\r\n protected selectedMonth: Date;\r\n protected selectedEl: HTMLElement;\r\n\r\n protected timeDiv: HTMLDivElement;\r\n protected hoursInputField: InputField;\r\n protected minutesInputField: InputField;\r\n\r\n constructor(initDate: Date, public onPick: (timestamp: number) => void, protected options: Partial<{\r\n noButtons: true, \r\n noTitle: true, \r\n minDate: Date,\r\n maxDate: Date\r\n withTime: true,\r\n showOverflowMonths: true\r\n }> & PopupOptions = {}) {\r\n super('popup-date-picker', options.noButtons ? [] : [{\r\n langKey: 'JumpToDate',\r\n callback: () => {\r\n if(this.onPick) {\r\n this.onPick(this.selectedDate.getTime() / 1000 | 0);\r\n }\r\n }\r\n }, {\r\n langKey: 'Cancel',\r\n isCancel: true\r\n }], {body: true, overlayClosable: true, ...options});\r\n\r\n this.minDate = options.minDate || new Date('2013-08-01T00:00:00');\r\n\r\n if(initDate < this.minDate) {\r\n initDate.setFullYear(this.minDate.getFullYear(), this.minDate.getMonth(), this.minDate.getDate());\r\n }\r\n\r\n // Controls\r\n this.controlsDiv = document.createElement('div');\r\n this.controlsDiv.classList.add('date-picker-controls');\r\n\r\n this.prevBtn = document.createElement('button');\r\n this.prevBtn.classList.add('btn-icon', 'tgico-down', 'date-picker-prev');\r\n attachClickEvent(this.prevBtn, this.onPrevClick, {listenerSetter: this.listenerSetter});\r\n\r\n this.nextBtn = document.createElement('button');\r\n this.nextBtn.classList.add('btn-icon', 'tgico-down', 'date-picker-next');\r\n attachClickEvent(this.nextBtn, this.onNextClick, {listenerSetter: this.listenerSetter});\r\n \r\n this.monthTitle = document.createElement('div');\r\n this.monthTitle.classList.add('date-picker-month-title');\r\n\r\n this.controlsDiv.append(this.prevBtn, this.monthTitle, this.nextBtn);\r\n\r\n // Month\r\n this.monthsContainer = document.createElement('div');\r\n this.monthsContainer.classList.add('date-picker-months');\r\n attachClickEvent(this.monthsContainer, this.onDateClick, {listenerSetter: this.listenerSetter});\r\n\r\n this.body.append(this.controlsDiv, this.monthsContainer);\r\n\r\n // Time inputs\r\n if(options.withTime) {\r\n this.timeDiv = document.createElement('div');\r\n this.timeDiv.classList.add('date-picker-time');\r\n\r\n const delimiter = document.createElement('div');\r\n delimiter.classList.add('date-picker-time-delimiter');\r\n delimiter.append(':');\r\n\r\n const handleTimeInput = (max: number, inputField: InputField, onInput: (length: number) => void, onOverflow?: (number: number) => void) => {\r\n const maxString = '' + max;\r\n this.listenerSetter.add(inputField.input)('input', (e) => {\r\n let value = inputField.value.replace(/\\D/g, '');\r\n if(value.length > 2) {\r\n value = value.slice(0, 2);\r\n } else {\r\n if((value.length === 1 && +value[0] > +maxString[0]) || (value.length === 2 && +value > max)) {\r\n if(value.length === 2 && onOverflow) {\r\n onOverflow(+value[1]);\r\n }\r\n\r\n value = '0' + value[0];\r\n }\r\n }\r\n\r\n inputField.setValueSilently(value);\r\n onInput(value.length);\r\n });\r\n };\r\n\r\n this.hoursInputField = new InputField({plainText: true});\r\n this.minutesInputField = new InputField({plainText: true});\r\n\r\n handleTimeInput(23, this.hoursInputField, (length) => {\r\n if(length === 2) {\r\n this.minutesInputField.input.focus();\r\n }\r\n\r\n this.setTimeTitle();\r\n }, (number) => {\r\n this.minutesInputField.value = (number + this.minutesInputField.value).slice(0, 2);\r\n });\r\n handleTimeInput(59, this.minutesInputField, (length) => {\r\n if(!length) {\r\n this.hoursInputField.input.focus();\r\n }\r\n\r\n this.setTimeTitle();\r\n });\r\n\r\n this.selectedDate = initDate;\r\n\r\n initDate.setMinutes(initDate.getMinutes() + 10);\r\n \r\n this.hoursInputField.setValueSilently(('0' + initDate.getHours()).slice(-2));\r\n this.minutesInputField.setValueSilently(('0' + initDate.getMinutes()).slice(-2));\r\n\r\n initDate.setHours(0, 0, 0, 0);\r\n \r\n this.timeDiv.append(this.hoursInputField.container, delimiter, this.minutesInputField.container);\r\n\r\n attachClickEvent(this.btnConfirm, () => {\r\n if(this.onPick) {\r\n this.selectedDate.setHours(+this.hoursInputField.value || 0, +this.minutesInputField.value || 0, 0, 0);\r\n this.onPick(this.selectedDate.getTime() / 1000 | 0);\r\n }\r\n\r\n this.hide();\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n this.body.append(this.timeDiv);\r\n\r\n this.prevBtn.classList.add('primary');\r\n this.nextBtn.classList.add('primary');\r\n }\r\n\r\n const popupCenterer = document.createElement('div');\r\n popupCenterer.classList.add('popup-centerer');\r\n popupCenterer.append(this.container);\r\n this.element.append(popupCenterer);\r\n\r\n //const passed = (initDate.getTime() - (initDate.getTimezoneOffset() * 60000)) % 86400000;\r\n //this.selectedDate = this.maxDate = new Date(initDate.getTime() - passed);\r\n initDate.setHours(0, 0, 0, 0);\r\n this.selectedDate = initDate;\r\n\r\n this.maxDate = options.maxDate || new Date();\r\n this.maxDate.setHours(0, 0, 0, 0);\r\n\r\n this.selectedMonth = new Date(this.selectedDate);\r\n this.selectedMonth.setDate(1);\r\n\r\n this.maxMonth = new Date(this.maxDate);\r\n this.maxMonth.setDate(1);\r\n\r\n this.minMonth = new Date(this.minDate);\r\n this.minMonth.setHours(0, 0, 0, 0);\r\n this.minMonth.setDate(1);\r\n\r\n if(this.selectedMonth.getTime() === this.minMonth.getTime()) {\r\n this.prevBtn.setAttribute('disabled', 'true');\r\n }\r\n\r\n if(this.selectedMonth.getTime() === this.maxMonth.getTime()) {\r\n this.nextBtn.setAttribute('disabled', 'true');\r\n }\r\n\r\n if(options.noTitle) {\r\n this.setTitle = () => {};\r\n }\r\n\r\n this.setTimeTitle();\r\n this.setTitle();\r\n this.setMonth();\r\n }\r\n\r\n onPrevClick = (e: MouseEvent) => {\r\n this.selectedMonth.setMonth(this.selectedMonth.getMonth() - 1);\r\n this.setMonth();\r\n\r\n if(this.selectedMonth.getTime() === this.minMonth.getTime()) {\r\n this.prevBtn.setAttribute('disabled', 'true');\r\n }\r\n \r\n this.nextBtn.removeAttribute('disabled');\r\n };\r\n\r\n onNextClick = (e: MouseEvent) => {\r\n this.selectedMonth.setMonth(this.selectedMonth.getMonth() + 1);\r\n this.setMonth();\r\n\r\n if(this.selectedMonth.getTime() === this.maxMonth.getTime()) {\r\n this.nextBtn.setAttribute('disabled', 'true');\r\n }\r\n\r\n this.prevBtn.removeAttribute('disabled');\r\n };\r\n\r\n onDateClick = (e: MouseEvent) => {\r\n //cancelEvent(e);\r\n const target = e.target as HTMLElement;\r\n\r\n if(!target.dataset.timestamp) return;\r\n\r\n if(this.selectedEl) {\r\n if(this.selectedEl === target) return;\r\n this.selectedEl.classList.remove('active');\r\n }\r\n\r\n this.selectedEl = target;\r\n \r\n target.classList.add('active');\r\n const timestamp = +target.dataset.timestamp;\r\n\r\n this.selectedDate = new Date(timestamp);\r\n\r\n this.setTitle();\r\n this.setTimeTitle();\r\n };\r\n\r\n public setTimeTitle() {\r\n if(this.btnConfirm && this.selectedDate) {\r\n let key: LangPackKey, args: any[] = [];\r\n const date = new Date();\r\n date.setHours(0, 0, 0, 0);\r\n\r\n const timeOptions: Intl.DateTimeFormatOptions = {\r\n minute: '2-digit',\r\n hour: '2-digit'\r\n };\r\n \r\n const sendDate = new Date(this.selectedDate.getTime());\r\n sendDate.setHours(+this.hoursInputField.value, +this.minutesInputField.value);\r\n\r\n if(this.selectedDate.getTime() === date.getTime()) {\r\n key = 'Schedule.SendToday';\r\n }/* else if(this.selectedDate.getTime() === (date.getTime() + 86400e3)) {\r\n dayStr = 'Tomorrow';\r\n } */ else {\r\n key = 'Schedule.SendDate';\r\n\r\n const dateOptions: Intl.DateTimeFormatOptions = {\r\n month: 'short',\r\n day: 'numeric'\r\n };\r\n\r\n if(sendDate.getFullYear() !== date.getFullYear()) {\r\n dateOptions.year = 'numeric';\r\n }\r\n\r\n args.push(new I18n.IntlDateElement({\r\n date: sendDate,\r\n options: dateOptions\r\n }).element);\r\n }\r\n\r\n args.push(new I18n.IntlDateElement({\r\n date: sendDate,\r\n options: timeOptions\r\n }).element);\r\n\r\n this.btnConfirm.firstChild.replaceWith(i18n(key, args));\r\n }\r\n }\r\n\r\n public setTitle() {\r\n //const splitted = this.selectedDate.toString().split(' ', 3);\r\n //this.title.innerText = splitted[0] + ', ' + splitted[1] + ' ' + splitted[2];\r\n this.title.textContent = '';\r\n this.title.append(new I18n.IntlDateElement({\r\n date: this.selectedDate,\r\n options: {\r\n day: 'numeric',\r\n month: 'long',\r\n weekday: 'short'\r\n }\r\n }).element);\r\n }\r\n\r\n private renderElement(disabled: boolean, innerText: string | HTMLElement = '') {\r\n const el = document.createElement('button');\r\n el.classList.add('btn-icon', 'date-picker-month-date');\r\n\r\n if(disabled) {\r\n el.setAttribute('disabled', 'true');\r\n }\r\n\r\n if(innerText) {\r\n el.append(innerText);\r\n }\r\n\r\n return el;\r\n }\r\n\r\n public setMonth() {\r\n const firstDate = new Date(this.selectedMonth);\r\n\r\n const options: Intl.DateTimeFormatOptions = {\r\n year: 'numeric',\r\n month: this.timeDiv && mediaSizes.isMobile ? 'short' : 'long'\r\n };\r\n\r\n this.monthTitle.textContent = '';\r\n this.monthTitle.append(new I18n.IntlDateElement({date: firstDate, options}).element);\r\n //this.monthTitle.innerText = (this.timeDiv && mediaSizes.isMobile ? monthName.slice(0, 3) : monthName) + ' ' + this.selectedMonth.getFullYear();\r\n\r\n if(this.month) {\r\n this.month.remove();\r\n }\r\n\r\n this.month = document.createElement('div');\r\n this.month.classList.add('date-picker-month');\r\n\r\n const weekStartDate = new Date();\r\n const day = weekStartDate.getDay();\r\n if(day !== 1) {\r\n weekStartDate.setHours(-24 * (day - 1)); \r\n }\r\n\r\n for(let i = 0; i < 7; ++i) {\r\n const el = this.renderElement(true, new I18n.IntlDateElement({date: weekStartDate, options: {weekday: 'narrow'}}).element);\r\n el.classList.remove('date-picker-month-date');\r\n el.classList.add('date-picker-month-day');\r\n this.month.append(el);\r\n weekStartDate.setDate(weekStartDate.getDate() + 1);\r\n }\r\n\r\n // 0 - sunday\r\n let dayIndex = firstDate.getDay() - 1;\r\n if(dayIndex === -1) dayIndex = 7 - 1;\r\n\r\n const clonedDate = new Date(firstDate.getTime());\r\n clonedDate.setDate(clonedDate.getDate() - dayIndex - 1);\r\n\r\n // Padding first week\r\n for(let i = 0; i < dayIndex; ++i) {\r\n if(this.options.showOverflowMonths) {\r\n clonedDate.setDate(clonedDate.getDate() + 1);\r\n this.month.append(this.renderElement(true, '' + clonedDate.getDate()));\r\n } else {\r\n this.month.append(this.renderElement(true));\r\n }\r\n }\r\n\r\n do {\r\n const date = firstDate.getDate();\r\n const el = this.renderElement(firstDate > this.maxDate || firstDate < this.minDate, '' + date);\r\n el.dataset.timestamp = '' + firstDate.getTime();\r\n\r\n if(firstDate.getTime() === this.selectedDate.getTime()) {\r\n this.selectedEl = el;\r\n el.classList.add('active');\r\n }\r\n\r\n this.month.append(el);\r\n\r\n firstDate.setDate(date + 1);\r\n } while(firstDate.getDate() !== 1);\r\n\r\n const remainder = this.month.childElementCount % 7;\r\n if(this.options.showOverflowMonths && remainder) {\r\n for(let i = remainder; i < 7; ++i) {\r\n this.month.append(this.renderElement(true, '' + firstDate.getDate()));\r\n firstDate.setDate(firstDate.getDate() + 1);\r\n }\r\n }\r\n\r\n const lines = Math.ceil(this.month.childElementCount / 7);\r\n this.container.dataset.lines = '' + lines;\r\n\r\n this.monthsContainer.append(this.month);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default class StickyIntersector {\r\n private headersObserver: IntersectionObserver;\r\n private elementsObserver: IntersectionObserver;\r\n\r\n constructor(private container: HTMLElement, private handler: (stuck: boolean, target: HTMLElement) => void) {\r\n this.observeHeaders();\r\n this.observeElements();\r\n }\r\n\r\n /**\r\n * Sets up an intersection observer to notify when elements with the class\r\n * `.sticky_sentinel--top` become visible/invisible at the top of the container.\r\n * @param {!Element} container\r\n */\r\n private observeHeaders() {\r\n this.headersObserver = new IntersectionObserver((entries) => {\r\n for(const entry of entries) {\r\n const targetInfo = entry.boundingClientRect;\r\n const stickyTarget = entry.target.parentElement;\r\n const rootBoundsInfo = entry.rootBounds;\r\n \r\n // Started sticking.\r\n if(targetInfo.bottom < rootBoundsInfo.top) {\r\n this.handler(true, stickyTarget);\r\n }\r\n \r\n // Stopped sticking.\r\n if(targetInfo.bottom >= rootBoundsInfo.top &&\r\n targetInfo.bottom < rootBoundsInfo.bottom) {\r\n this.handler(false, stickyTarget);\r\n }\r\n }\r\n }, {threshold: 0, root: this.container});\r\n }\r\n \r\n private observeElements() {\r\n this.elementsObserver = new IntersectionObserver((entries) => {\r\n let entry = entries.filter(entry => entry.boundingClientRect.top < 0).sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\r\n if(!entry) return;\r\n let container = entry.isIntersecting ? entry.target : entry.target.nextElementSibling;\r\n this.handler(true, container as HTMLElement);\r\n }, {root: this.container});\r\n }\r\n\r\n /**\r\n * @param {!Element} container\r\n * @param {string} className\r\n */\r\n private addSentinel(container: HTMLElement, className: string) {\r\n const sentinel = document.createElement('div');\r\n sentinel.classList.add('sticky_sentinel', className);\r\n return container.appendChild(sentinel);\r\n }\r\n\r\n /**\r\n * Notifies when elements w/ the `sticky` class begin to stick or stop sticking.\r\n * Note: the elements should be children of `container`.\r\n * @param {!Element} container\r\n */\r\n public observeStickyHeaderChanges(element: HTMLElement) {\r\n const headerSentinel = this.addSentinel(element, 'sticky_sentinel--top');\r\n this.headersObserver.observe(headerSentinel);\r\n\r\n this.elementsObserver.observe(element);\r\n }\r\n\r\n public disconnect() {\r\n this.headersObserver.disconnect();\r\n this.elementsObserver.disconnect();\r\n }\r\n\r\n public unobserve(element: HTMLElement, headerSentinel: HTMLElement) {\r\n this.elementsObserver.unobserve(element);\r\n this.headersObserver.unobserve(headerSentinel);\r\n }\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { LazyLoadQueueIntersector } from \"../lazyLoadQueue\";\r\nimport { formatNumber } from \"../../helpers/number\";\r\nimport { Message } from \"../../layer\";\r\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\r\nimport appPeersManager from \"../../lib/appManagers/appPeersManager\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport { ripple } from \"../ripple\";\r\nimport AvatarElement from \"../avatar\";\r\nimport { i18n } from \"../../lib/langPack\";\r\nimport replaceContent from \"../../helpers/dom/replaceContent\";\r\n\r\nconst TAG_NAME = 'replies-element';\r\n\r\nrootScope.addEventListener('replies_updated', (e) => {\r\n const message = e;\r\n (Array.from(document.querySelectorAll(TAG_NAME + `[data-post-key=\"${message.peerId}_${message.mid}\"]`)) as RepliesElement[]).forEach(element => {\r\n element.message = message;\r\n element.render();\r\n });\r\n});\r\n\r\nexport default class RepliesElement extends HTMLElement {\r\n public message: Message.message;\r\n public type: 'footer' | 'beside';\r\n public loadPromises: Promise[];\r\n public lazyLoadQueue: LazyLoadQueueIntersector;\r\n \r\n private updated = false;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n public init() {\r\n this.render();\r\n this.dataset.postKey = this.message.peerId + '_' + this.message.mid;\r\n this.classList.add('replies', 'replies-' + this.type);\r\n }\r\n\r\n public render() {\r\n const replies = this.message.replies;\r\n\r\n /* if(this.firstChild) {\r\n this.innerHTML = '';\r\n } */\r\n\r\n if(this.type === 'footer') {\r\n let leftPart: HTMLElement;\r\n if(this.firstElementChild) {\r\n leftPart = this.firstElementChild as HTMLElement;\r\n }\r\n\r\n if(replies?.recent_repliers) {\r\n if(leftPart && !leftPart.classList.contains('replies-footer-avatars')) {\r\n this.innerHTML = '';\r\n leftPart = null;\r\n }\r\n\r\n if(!leftPart) {\r\n leftPart = document.createElement('div');\r\n leftPart.classList.add('replies-footer-avatars');\r\n }\r\n\r\n replies.recent_repliers.slice().reverse().forEach((peer, idx) => {\r\n let avatarElem = leftPart.children[idx] as AvatarElement;\r\n if(!avatarElem) {\r\n avatarElem = new AvatarElement();\r\n avatarElem.setAttribute('dialog', '0');\r\n avatarElem.classList.add('avatar-30');\r\n avatarElem.lazyLoadQueue = this.lazyLoadQueue;\r\n \r\n if(this.loadPromises) {\r\n avatarElem.loadPromises = this.loadPromises;\r\n }\r\n }\r\n \r\n avatarElem.setAttribute('peer', '' + appPeersManager.getPeerId(peer));\r\n \r\n if(!avatarElem.parentNode) {\r\n leftPart.append(avatarElem);\r\n }\r\n });\r\n\r\n // if were 3 and became 2\r\n (Array.from(leftPart.children) as HTMLElement[]).slice(replies.recent_repliers.length).forEach(el => el.remove());\r\n } else {\r\n if(leftPart && !leftPart.classList.contains('tgico-comments')) {\r\n leftPart.remove();\r\n leftPart = null;\r\n }\r\n\r\n if(!leftPart) {\r\n leftPart = document.createElement('span');\r\n leftPart.classList.add('tgico-comments');\r\n }\r\n }\r\n\r\n if(!leftPart.parentElement) {\r\n this.append(leftPart);\r\n }\r\n \r\n let text: HTMLElement;\r\n if(replies) {\r\n if(replies.replies) {\r\n text = i18n('Comments', [replies.replies]);\r\n } else {\r\n text = i18n('LeaveAComment');\r\n }\r\n } else {\r\n text = i18n('ViewInChat');\r\n }\r\n\r\n if(replies) {\r\n const historyStorage = appMessagesManager.getHistoryStorage(-replies.channel_id);\r\n let isUnread = false;\r\n if(replies.replies) {\r\n if(replies.read_max_id !== undefined && replies.max_id !== undefined) {\r\n isUnread = replies.read_max_id < replies.max_id;\r\n } else {\r\n isUnread = !historyStorage.readMaxId || historyStorage.readMaxId < (replies.max_id || 0);\r\n }\r\n }\r\n this.classList.toggle('is-unread', isUnread);\r\n }\r\n\r\n let textSpan = this.children[1] as HTMLElement;\r\n if(!textSpan) {\r\n textSpan = document.createElement('span');\r\n textSpan.classList.add('replies-footer-text');\r\n\r\n const iconSpan = document.createElement('span');\r\n iconSpan.classList.add('tgico-next');\r\n\r\n const rippleContainer = document.createElement('div');\r\n ripple(rippleContainer);\r\n\r\n this.append(textSpan, iconSpan, rippleContainer);\r\n }\r\n\r\n replaceContent(textSpan, text);\r\n } else {\r\n this.classList.add('bubble-beside-button');\r\n this.innerHTML = `${replies?.replies ? formatNumber(replies.replies, 0) : ''}`;\r\n }\r\n\r\n if(replies && !this.updated && !this.message.pFlags.is_outgoing) {\r\n appMessagesManager.subscribeRepliesThread(this.message.peerId, this.message.mid);\r\n appMessagesManager.updateMessage(this.message.peerId, this.message.mid, 'replies_updated');\r\n this.updated = true;\r\n }\r\n\r\n if(this.loadPromises) {\r\n this.loadPromises = undefined;\r\n }\r\n }\r\n}\r\n\r\ncustomElements.define(TAG_NAME, RepliesElement);\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { getFullDate } from \"../../helpers/date\";\nimport { formatNumber } from \"../../helpers/number\";\nimport { i18n } from \"../../lib/langPack\";\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\nimport { LazyLoadQueueIntersector } from \"../lazyLoadQueue\";\nimport PeerTitle from \"../peerTitle\";\nimport { wrapReply } from \"../wrappers\";\nimport Chat from \"./chat\";\nimport RepliesElement from \"./replies\";\n\nexport namespace MessageRender {\n /* export const setText = () => {\n\n }; */\n\n export const setTime = (chat: Chat, message: any, bubble: HTMLElement, bubbleContainer: HTMLElement, messageDiv: HTMLElement) => {\n const date = new Date(message.date * 1000);\n let time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);\n\n if(message.views) {\n const postAuthor = message.post_author || message.fwd_from?.post_author;\n\n bubble.classList.add('channel-post');\n time = '' + formatNumber(message.views, 1) + ' ' + (postAuthor ? RichTextProcessor.wrapEmojiText(postAuthor) + ', ' : '') + time;\n \n if(!message.fwd_from?.saved_from_msg_id && chat.type !== 'pinned') {\n const forward = document.createElement('div');\n forward.classList.add('bubble-beside-button', 'forward');\n forward.innerHTML = `\n \n \n \n \n \n `;\n bubbleContainer.append(forward);\n bubble.classList.add('with-beside-button');\n }\n }\n\n if(message.edit_date && chat.type !== 'scheduled' && !message.pFlags.edit_hide) {\n bubble.classList.add('is-edited');\n time = 'edited ' + time;\n }\n\n if(chat.type !== 'pinned' && message.pFlags.pinned) {\n bubble.classList.add('is-pinned');\n time = '' + time;\n }\n\n const title = getFullDate(date) \n + (message.edit_date ? `\\nEdited: ${getFullDate(new Date(message.edit_date * 1000))}` : '')\n + (message.fwd_from ? `\\nOriginal: ${getFullDate(new Date(message.fwd_from.date * 1000))}` : '');\n\n const timeSpan = document.createElement('span');\n timeSpan.classList.add('time', 'tgico');\n timeSpan.title = title;\n timeSpan.innerHTML = `${time}
${time}
`;\n\n messageDiv.append(timeSpan);\n\n return timeSpan;\n };\n\n export const renderReplies = ({bubble, bubbleContainer, message, messageDiv, loadPromises, lazyLoadQueue}: {\n bubble: HTMLElement,\n bubbleContainer: HTMLElement,\n message: any,\n messageDiv: HTMLElement,\n loadPromises?: Promise[],\n lazyLoadQueue?: LazyLoadQueueIntersector\n }) => {\n const isFooter = !bubble.classList.contains('sticker') && !bubble.classList.contains('emoji-big') && !bubble.classList.contains('round');\n const repliesFooter = new RepliesElement();\n repliesFooter.message = message;\n repliesFooter.type = isFooter ? 'footer' : 'beside';\n repliesFooter.loadPromises = loadPromises;\n repliesFooter.lazyLoadQueue = lazyLoadQueue;\n repliesFooter.init();\n bubbleContainer.prepend(repliesFooter);\n return isFooter;\n };\n\n export const setReply = ({chat, bubble, bubbleContainer, message}: {\n chat: Chat,\n bubble: HTMLElement,\n bubbleContainer?: HTMLElement,\n message: any\n }) => {\n const isReplacing = !bubbleContainer;\n if(isReplacing) {\n bubbleContainer = bubble.querySelector('.bubble-content');\n }\n\n const currentReplyDiv = isReplacing ? bubbleContainer.querySelector('.reply') : null;\n if(!message.reply_to_mid) {\n if(currentReplyDiv) {\n currentReplyDiv.remove();\n }\n\n bubble.classList.remove('is-reply');\n return;\n }\n\n\n const replyToPeerId = message.reply_to.reply_to_peer_id ? chat.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) : chat.peerId;\n\n let originalMessage = chat.appMessagesManager.getMessageByPeer(replyToPeerId, message.reply_to_mid);\n let originalPeerTitle: string | HTMLElement;\n \n /////////this.log('message to render reply', originalMessage, originalPeerTitle, bubble, message);\n \n // need to download separately\n if(originalMessage._ === 'messageEmpty') {\n //////////this.log('message to render reply empty, need download', message, message.reply_to_mid);\n chat.appMessagesManager.wrapSingleMessage(replyToPeerId, message.reply_to_mid);\n chat.bubbles.needUpdate.push({replyToPeerId, replyMid: message.reply_to_mid, mid: message.mid});\n \n originalPeerTitle = i18n('Loading');\n } else {\n originalPeerTitle = new PeerTitle({\n peerId: originalMessage.fromId || originalMessage.fwdFromId,\n dialog: false,\n onlyFirstName: false,\n plainText: false\n }).element;\n }\n\n const wrapped = wrapReply(originalPeerTitle, undefined, originalMessage);\n if(currentReplyDiv) {\n currentReplyDiv.replaceWith(wrapped);\n } else {\n bubbleContainer.append(wrapped);\n }\n //bubbleContainer.insertBefore(, nameContainer);\n bubble.classList.add('is-reply');\n };\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nexport function getElementByPoint(container: HTMLElement, verticalSide: 'top' | 'bottom', horizontalSide: 'center' | 'left'): HTMLElement {\r\n //return null;\r\n const rect = container.getBoundingClientRect();\r\n const x = horizontalSide === 'center' ? Math.ceil(rect.left + ((rect.right - rect.left) / 2) + 1) : Math.ceil(rect.left + 1);\r\n const y = verticalSide === 'bottom' ? Math.floor(rect.top + rect.height - 1) : Math.ceil(rect.top + 1);\r\n return document.elementFromPoint(x, y) as any;\r\n};\r\n\r\nMOUNT_CLASS_TO.getElementByPoint = getElementByPoint;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function reflowScrollableElement(element: HTMLElement) {\r\n element.style.display = 'none';\r\n void element.offsetLeft; // reflow\r\n element.style.display = '';\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from \"../../config/app\";\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport { validateInitObject } from \"../../helpers/object\";\nimport I18n from \"../langPack\";\nimport { isObject } from \"../mtproto/bin_utils\";\nimport apiManager from \"../mtproto/mtprotoworker\";\nimport RichTextProcessor from \"../richtextprocessor\";\nimport rootScope from \"../rootScope\";\nimport SearchIndex from \"../searchIndex\";\nimport stateStorage from \"../stateStorage\";\nimport appStateManager from \"./appStateManager\";\n\ntype EmojiLangPack = {\n keywords: {\n [keyword: string]: string[],\n },\n version: number,\n langCode: string\n};\n\nconst EMOJI_LANG_PACK: EmojiLangPack = {\n keywords: {},\n version: 0,\n langCode: App.langPackCode\n};\n\nconst RECENT_MAX_LENGTH = 36;\n\nexport class AppEmojiManager {\n private static POPULAR_EMOJI = [\"😂\", \"😘\", \"❤️\", \"😍\", \"😊\", \"😁\", \"👍\", \"☺️\", \"😔\", \"😄\", \"😭\", \"💋\", \"😒\", \"😳\", \"😜\", \"🙈\", \"😉\", \"😃\", \"😢\", \"😝\", \"😱\", \"😡\", \"😏\", \"😞\", \"😅\", \"😚\", \"🙊\", \"😌\", \"😀\", \"😋\", \"😆\", \"👌\", \"😐\", \"😕\"];\n private keywordLangPacks: {\n [langCode: string]: EmojiLangPack\n } = {};\n\n private index: SearchIndex;\n private indexedLangPacks: {[langCode: string]: boolean} = {};\n\n private getKeywordsPromises: {[langCode: string]: Promise} = {};\n\n private recent: string[];\n private getRecentEmojisPromise: Promise;\n\n /* public getPopularEmoji() {\n return stateStorage.get('emojis_popular').then(popEmojis => {\n var result = []\n if (popEmojis && popEmojis.length) {\n for (var i = 0, len = popEmojis.length; i < len; i++) {\n result.push({code: popEmojis[i][0], rate: popEmojis[i][1]})\n }\n callback(result)\n return\n }\n\n return stateStorage.get('emojis_recent').then(recentEmojis => {\n recentEmojis = recentEmojis || popular || []\n var shortcut\n var code\n for (var i = 0, len = recentEmojis.length; i < len; i++) {\n shortcut = recentEmojis[i]\n if (Array.isArray(shortcut)) {\n shortcut = shortcut[0]\n }\n if (shortcut && typeof shortcut === 'string') {\n if (shortcut.charAt(0) == ':') {\n shortcut = shortcut.substr(1, shortcut.length - 2)\n }\n if (code = shortcuts[shortcut]) {\n result.push({code: code, rate: 1})\n }\n }\n }\n callback(result)\n });\n });\n }\n\n function pushPopularEmoji (code) {\n getPopularEmoji(function (popularEmoji) {\n var exists = false\n var count = popularEmoji.length\n var result = []\n for (var i = 0; i < count; i++) {\n if (popularEmoji[i].code == code) {\n exists = true\n popularEmoji[i].rate++\n }\n result.push([popularEmoji[i].code, popularEmoji[i].rate])\n }\n if (exists) {\n result.sort(function (a, b) {\n return b[1] - a[1]\n })\n } else {\n if (result.length > 41) {\n result = result.slice(0, 41)\n }\n result.push([code, 1])\n }\n ConfigStorage.set({emojis_popular: result})\n })\n } */\n\n public getEmojiKeywords(langCode: string = App.langPackCode) {\n const promise = this.getKeywordsPromises[langCode];\n if(promise) {\n return promise;\n }\n\n const storageKey: any = 'emojiKeywords_' + langCode;\n return this.getKeywordsPromises[langCode] = stateStorage.get(storageKey).then((pack: EmojiLangPack) => {\n if(!isObject(pack)) {\n pack = {} as any;\n }\n\n validateInitObject(EMOJI_LANG_PACK, pack);\n\n // important\n pack.langCode = langCode;\n this.keywordLangPacks[langCode] = pack;\n\n return apiManager.invokeApi('messages.getEmojiKeywordsDifference', {\n lang_code: pack.langCode,\n from_version: pack.version\n }).then((keywordsDifference) => {\n pack.version = keywordsDifference.version;\n \n const packKeywords = pack.keywords;\n const keywords = keywordsDifference.keywords;\n for(let i = 0, length = keywords.length; i < length; ++i) {\n const {keyword, emoticons} = keywords[i];\n packKeywords[keyword] = emoticons;\n }\n\n stateStorage.set({\n [storageKey]: pack\n });\n\n return pack;\n }, () => {\n return pack;\n });\n });\n }\n\n public getBothEmojiKeywords() {\n const promises: Promise[] = [\n this.getEmojiKeywords()\n ];\n\n if(I18n.lastRequestedLangCode !== App.langPackCode) {\n promises.push(this.getEmojiKeywords(I18n.lastRequestedLangCode));\n }\n\n if(!this.recent) {\n promises.push(this.getRecentEmojis());\n }\n\n return Promise.all(promises);\n }\n\n public indexEmojis() {\n if(!this.index) {\n this.index = new SearchIndex(undefined, 2);\n }\n\n for(const langCode in this.keywordLangPacks) {\n if(this.indexedLangPacks[langCode]) {\n continue;\n }\n\n const pack = this.keywordLangPacks[langCode];\n const keywords = pack.keywords;\n\n for(const keyword in keywords) {\n const emoticons = keywords[keyword];\n this.index.indexObject(emoticons, keyword);\n }\n\n this.indexedLangPacks[langCode] = true;\n }\n }\n\n public searchEmojis(q: string) {\n this.indexEmojis();\n\n q = q.toLowerCase().replace(/_/g, ' ');\n \n //const perf = performance.now();\n let emojis: Array;\n if(q.trim()) {\n const set = this.index.search(q);\n emojis = Array.from(set).reduce((acc, v) => acc.concat(v), []);\n } else {\n emojis = this.recent.concat(AppEmojiManager.POPULAR_EMOJI).slice(0, RECENT_MAX_LENGTH);\n }\n\n emojis = Array.from(new Set(emojis));\n //console.log('searchEmojis', q, 'time', performance.now() - perf);\n\n /* for(let i = 0, length = emojis.length; i < length; ++i) {\n if(emojis[i].includes(zeroWidthJoiner) && !emojis[i].includes('\\ufe0f')) {\n emojis[i] += '\\ufe0f';\n }\n } */\n\n return emojis;\n }\n\n public getRecentEmojis() {\n if(this.getRecentEmojisPromise) return this.getRecentEmojisPromise;\n return this.getRecentEmojisPromise = appStateManager.getState().then(state => {\n return this.recent = Array.isArray(state.recentEmoji) ? state.recentEmoji : [];\n });\n }\n\n public pushRecentEmoji(emoji: string) {\n emoji = RichTextProcessor.fixEmoji(emoji);\n this.getRecentEmojis().then(recent => {\n recent.findAndSplice(e => e === emoji);\n recent.unshift(emoji);\n if(recent.length > RECENT_MAX_LENGTH) {\n recent.length = RECENT_MAX_LENGTH;\n }\n\n appStateManager.pushToState('recentEmoji', recent);\n rootScope.dispatchEvent('emoji_recent', emoji);\n });\n }\n}\n\nconst appEmojiManager = new AppEmojiManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appEmojiManager = appEmojiManager);\nexport default appEmojiManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport emoticonsDropdown, { EmoticonsDropdown, EmoticonsTab } from \"..\";\nimport { cancelEvent } from \"../../../helpers/dom/cancelEvent\";\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\nimport { fastRaf } from \"../../../helpers/schedulers\";\nimport { pause } from \"../../../helpers/schedulers/pause\";\nimport { IS_TOUCH_SUPPORTED } from \"../../../environment/touchSupport\";\nimport appEmojiManager from \"../../../lib/appManagers/appEmojiManager\";\nimport appImManager from \"../../../lib/appManagers/appImManager\";\nimport Config from \"../../../lib/config\";\nimport { i18n, LangPackKey } from \"../../../lib/langPack\";\nimport { RichTextProcessor } from \"../../../lib/richtextprocessor\";\nimport rootScope from \"../../../lib/rootScope\";\nimport { emojiFromCodePoints } from \"../../../vendor/emoji\";\nimport { putPreloader } from \"../../misc\";\nimport Scrollable from \"../../scrollable\";\nimport StickyIntersector from \"../../stickyIntersector\";\nimport IS_EMOJI_SUPPORTED from \"../../../environment/emojiSupport\";\n\nconst loadedURLs: Set = new Set();\nexport function appendEmoji(emoji: string, container: HTMLElement, prepend = false, unify = false) {\n //const emoji = details.unified;\n //const emoji = (details.unified as string).split('-')\n //.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\n\n const spanEmoji = document.createElement('span');\n spanEmoji.classList.add('super-emoji');\n\n let kek: string;\n if(unify && !IS_EMOJI_SUPPORTED) {\n kek = RichTextProcessor.wrapSingleEmoji(emoji);\n } else {\n emoji = RichTextProcessor.fixEmoji(emoji);\n kek = RichTextProcessor.wrapEmojiText(emoji);\n }\n\n /* if(!kek.includes('emoji')) {\n console.log(emoji, kek, spanEmoji, emoji.length, new TextEncoder().encode(emoji), emojiUnicode(emoji));\n return;\n } */\n\n //console.log(kek);\n\n spanEmoji.innerHTML = kek;\n\n if(spanEmoji.children.length > 1) {\n const first = spanEmoji.firstElementChild;\n spanEmoji.innerHTML = '';\n spanEmoji.append(first);\n }\n\n if(spanEmoji.firstElementChild && !IS_EMOJI_SUPPORTED) {\n const image = spanEmoji.firstElementChild as HTMLImageElement;\n \n const url = image.src;\n if(!loadedURLs.has(url)) {\n image.setAttribute('loading', 'lazy');\n const placeholder = document.createElement('span');\n placeholder.classList.add('emoji-placeholder');\n\n if(rootScope.settings.animationsEnabled) {\n image.style.opacity = '0';\n placeholder.style.opacity = '1';\n }\n\n image.addEventListener('load', () => {\n fastRaf(() => {\n if(rootScope.settings.animationsEnabled) {\n image.style.opacity = '';\n placeholder.style.opacity = '';\n }\n\n spanEmoji.classList.remove('empty');\n\n loadedURLs.add(url);\n });\n }, {once: true});\n\n spanEmoji.append(placeholder);\n }\n }\n\n //spanEmoji = spanEmoji.firstElementChild as HTMLSpanElement;\n //spanEmoji.setAttribute('emoji', emoji);\n if(prepend) container.prepend(spanEmoji);\n else container.appendChild(spanEmoji);\n}\n\nexport function getEmojiFromElement(element: HTMLElement) {\n if(!findUpClassName(element, 'super-emoji')) return '';\n\n if(element.nodeType === 3) return element.nodeValue;\n if(element.tagName === 'SPAN' && !element.classList.contains('emoji') && element.firstElementChild) {\n element = element.firstElementChild as HTMLElement;\n }\n \n return element.getAttribute('alt') || element.innerText;\n}\n\nexport default class EmojiTab implements EmoticonsTab {\n private content: HTMLElement;\n\n private recentItemsDiv: HTMLElement;\n\n private scroll: Scrollable;\n private stickyIntersector: StickyIntersector;\n private menu: HTMLElement;\n\n private closeScrollTop = 0;\n private setMenuActive: (id: number) => boolean;\n\n init() {\n this.content = document.getElementById('content-emoji') as HTMLDivElement;\n\n const categories: LangPackKey[] = [\n 'Emoji.SmilesAndPeople', \n 'Emoji.AnimalsAndNature', \n 'Emoji.FoodAndDrink', \n 'Emoji.TravelAndPlaces', \n 'Emoji.ActivityAndSport', \n 'Emoji.Objects', \n /* 'Emoji.Symbols', */\n 'Emoji.Flags', \n 'Skin Tones' as any\n ];\n const divs: {\n [category in LangPackKey]?: HTMLDivElement\n } = {};\n\n const sorted: Map = new Map([\n [\n 'Emoji.Recent',\n []\n ]\n ]);\n\n for(const emoji in Config.Emoji) {\n const details = Config.Emoji[emoji];\n const i = '' + details;\n const category = categories[+i[0] - 1];\n if(!category) continue; // maybe it's skin tones\n\n let s = sorted.get(category);\n if(!s) {\n s = [];\n sorted.set(category, s);\n }\n \n s[+i.slice(1) || 0] = emoji;\n }\n\n //console.log('emoticons sorted:', sorted);\n\n //Object.keys(sorted).forEach(c => sorted[c].sort((a, b) => a - b));\n\n sorted.delete(categories.pop());\n\n //console.time('emojiParse');\n sorted.forEach((emojis, category) => {\n const div = document.createElement('div');\n div.classList.add('emoji-category');\n\n const titleDiv = document.createElement('div');\n titleDiv.classList.add('category-title');\n titleDiv.append(i18n(category));\n\n const itemsDiv = document.createElement('div');\n itemsDiv.classList.add('super-emojis');\n\n div.append(titleDiv, itemsDiv);\n\n emojis.forEach(unified => {\n /* if(emojiUnicode(emoji) === '1f481-200d-2642') {\n console.log('append emoji', emoji, emojiUnicode(emoji));\n } */\n\n let emoji = emojiFromCodePoints(unified);\n //if(emoji.includes('🕵')) {\n //console.log('toCodePoints', toCodePoints(emoji));\n //emoji = emoji.replace(/(\\u200d[\\u2640\\u2642\\u2695])(?!\\ufe0f)/, '\\ufe0f$1');\n // const zwjIndex = emoji.indexOf('\\u200d');\n // if(zwjIndex !== -1 && !emoji.includes('\\ufe0f')) {\n // /* if(zwjIndex !== (emoji.length - 1)) {\n // emoji = emoji.replace(/(\\u200d)/g, '\\ufe0f$1');\n // } */\n\n // emoji += '\\ufe0f';\n // //emoji += '\\ufe0f';\n // }\n\n //debugger;\n //}\n\n appendEmoji(emoji/* .replace(/[\\ufe0f\\u2640\\u2642\\u2695]/g, '') */, itemsDiv, false/* , false */);\n\n /* if(category === 'Smileys & Emotion') {\n console.log('appended emoji', emoji, itemsDiv.children[itemsDiv.childElementCount - 1].innerHTML, emojiUnicode(emoji));\n } */\n });\n\n divs[category] = div;\n });\n\n //console.timeEnd('emojiParse');\n\n const menu = this.menu = this.content.previousElementSibling as HTMLElement;\n const emojiScroll = this.scroll = new Scrollable(this.content, 'EMOJI');\n\n //emojiScroll.setVirtualContainer(emojiScroll.container);\n\n const preloader = putPreloader(this.content, true);\n\n Promise.all([\n pause(200),\n appEmojiManager.getRecentEmojis().then(recent => {\n const hasRecent = !!recent.length;\n const activeId = hasRecent ? 0 : 1;\n this.menu.children[0].classList.toggle('hide', !hasRecent);\n this.menu.children[activeId].classList.add('active');\n const m = EmoticonsDropdown.menuOnClick(menu, emojiScroll, undefined, activeId);\n this.stickyIntersector = m.stickyIntersector;\n this.setMenuActive = m.setActive;\n return recent;\n })\n ]).then(([_, recent]) => {\n preloader.remove();\n\n this.recentItemsDiv = divs['Emoji.Recent'].querySelector('.super-emojis');\n for(const emoji of recent) {\n appendEmoji(emoji, this.recentItemsDiv);\n }\n\n this.recentItemsDiv.parentElement.classList.toggle('hide', !this.recentItemsDiv.childElementCount);\n\n categories.unshift('Emoji.Recent');\n categories.map(category => {\n const div = divs[category];\n \n if(!div) {\n console.error('no div by category:', category);\n }\n \n emojiScroll.container.append(div);\n this.stickyIntersector.observeStickyHeaderChanges(div);\n return div;\n });\n });\n\n this.content.addEventListener('click', this.onContentClick);\n this.init = null;\n\n rootScope.addEventListener('emoji_recent', (emoji) => {\n const children = Array.from(this.recentItemsDiv.children) as HTMLElement[];\n for(let i = 0, length = children.length; i < length; ++i) {\n const el = children[i];\n const _emoji = RichTextProcessor.fixEmoji(getEmojiFromElement(el));\n if(emoji === _emoji) {\n if(i === 0) {\n return;\n }\n\n el.remove();\n }\n }\n\n appendEmoji(emoji, this.recentItemsDiv, true);\n this.recentItemsDiv.parentElement.classList.remove('hide');\n this.menu.children[0].classList.remove('hide');\n\n if(!this.closeScrollTop) {\n this.setMenuActive(0);\n }\n });\n\n emoticonsDropdown.addEventListener('close', () => {\n this.closeScrollTop = this.scroll.scrollTop;\n });\n }\n\n onContentClick = (e: MouseEvent) => {\n cancelEvent(e);\n \n const emoji = getEmojiFromElement(e.target as HTMLElement);\n if(!emoji) {\n return;\n }\n\n const messageInput = appImManager.chat.input.messageInput;\n let inputHTML = messageInput.innerHTML;\n\n const html = RichTextProcessor.wrapEmojiText(emoji, true);\n let inserted = false;\n if(window.getSelection) {\n const savedRange = IS_TOUCH_SUPPORTED ? undefined : emoticonsDropdown.getSavedRange();\n let sel = window.getSelection();\n if(savedRange) {\n sel.removeAllRanges();\n sel.addRange(savedRange);\n }\n\n if(sel.getRangeAt && sel.rangeCount) {\n var el = document.createElement('div');\n el.innerHTML = html;\n var node = el.firstChild;\n var range = sel.getRangeAt(0);\n range.deleteContents();\n //range.insertNode(document.createTextNode(' '));\n range.insertNode(node);\n range.setStart(node, 0);\n inserted = true;\n \n setTimeout(() => {\n range = document.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }, 0);\n }\n }\n\n if(!inserted || messageInput.innerHTML === inputHTML) {\n messageInput.insertAdjacentHTML('beforeend', html);\n }\n \n // Append to input\n const event = new Event('input', {bubbles: true, cancelable: true});\n messageInput.dispatchEvent(event);\n };\n\n onClose() {\n\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appDocsManager, {MyDocument} from \"../lib/appManagers/appDocsManager\";\r\nimport { wrapVideo } from \"./wrappers\";\r\nimport { LazyLoadQueueRepeat2 } from \"./lazyLoadQueue\";\r\nimport animationIntersector from \"./animationIntersector\";\r\nimport Scrollable from \"./scrollable\";\r\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\r\nimport renderImageFromUrl from \"../helpers/dom/renderImageFromUrl\";\r\nimport calcImageInBox from \"../helpers/calcImageInBox\";\r\nimport { doubleRaf } from \"../helpers/schedulers\";\r\n\r\nconst width = 400;\r\nconst maxSingleWidth = width - 100;\r\nconst height = 100;\r\n\r\nexport default class GifsMasonry {\r\n public lazyLoadQueue: LazyLoadQueueRepeat2;\r\n private scrollPromise: CancellablePromise = Promise.resolve();\r\n private timeout: number = 0;\r\n\r\n constructor(private element: HTMLElement, private group: string, private scrollable: Scrollable, attach = true) {\r\n this.lazyLoadQueue = new LazyLoadQueueRepeat2(undefined, (target, visible) => {\r\n if(visible) {\r\n this.processVisibleDiv(target);\r\n } else {\r\n this.processInvisibleDiv(target);\r\n }\r\n });\r\n\r\n /* setInterval(() => {\r\n // @ts-ignore\r\n const players = animationIntersector.byGroups[group];\r\n\r\n if(players) {\r\n console.log(`GIFS RENDERED IN ${group}:`, players.length, players.filter(p => !p.animation.paused).length, this.lazyLoadQueue.intersector.getVisible().length);\r\n }\r\n }, .25e3); */\r\n\r\n if(attach) {\r\n this.attach();\r\n }\r\n }\r\n \r\n private onScroll = () => {\r\n if(this.timeout) {\r\n clearTimeout(this.timeout);\r\n } else {\r\n this.scrollPromise = deferredPromise();\r\n //animationIntersector.checkAnimations(true, group);\r\n }\r\n\r\n this.timeout = window.setTimeout(() => {\r\n this.timeout = 0;\r\n this.scrollPromise.resolve();\r\n //animationIntersector.checkAnimations(false, group);\r\n }, 150);\r\n };\r\n\r\n public attach() {\r\n this.scrollable.container.addEventListener('scroll', this.onScroll);\r\n }\r\n\r\n public detach() {\r\n this.clear();\r\n this.scrollable.container.removeEventListener('scroll', this.onScroll);\r\n }\r\n\r\n public clear() {\r\n this.lazyLoadQueue.clear();\r\n }\r\n\r\n private processVisibleDiv(div: HTMLElement) {\r\n const video = div.querySelector('video');\r\n if(video) {\r\n return;\r\n }\r\n\r\n //console.log('processVisibleDiv');\r\n\r\n const load = () => {\r\n const docId = div.dataset.docId;\r\n const doc = appDocsManager.getDoc(docId);\r\n\r\n const promise = this.scrollPromise.then(() => {\r\n const res = wrapVideo({\r\n doc,\r\n container: div as HTMLDivElement,\r\n lazyLoadQueue: null,\r\n //lazyLoadQueue: EmoticonsDropdown.lazyLoadQueue,\r\n group: this.group,\r\n noInfo: true,\r\n });\r\n \r\n const promise = res.loadPromise;\r\n promise.finally(() => {\r\n const video = div.querySelector('video');\r\n\r\n div.style.opacity = '';\r\n const img = div.querySelector('img');\r\n img && img.classList.add('hide');\r\n\r\n if(video && !video.parentElement) {\r\n setTimeout(() => {\r\n video.src = '';\r\n video.load();\r\n const animations = animationIntersector.getAnimations(video);\r\n animations.forEach(item => {\r\n animationIntersector.checkAnimation(item, true, true);\r\n });\r\n }, 0);\r\n }\r\n\r\n //clearTimeout(timeout);\r\n if(!this.lazyLoadQueue.intersector.isVisible(div)) {\r\n this.processInvisibleDiv(div);\r\n }\r\n });\r\n\r\n return promise;\r\n });\r\n\r\n /* let timeout = window.setTimeout(() => {\r\n console.error('processVisibleDiv timeout', div, doc);\r\n }, 1e3); */\r\n\r\n return promise;\r\n };\r\n\r\n //return load();\r\n \r\n this.lazyLoadQueue.push({div, load});\r\n }\r\n\r\n public processInvisibleDiv = (div: HTMLElement) => {\r\n return this.scrollPromise.then(async() => {\r\n //return;\r\n\r\n if(this.lazyLoadQueue.intersector.isVisible(div)) {\r\n return;\r\n }\r\n\r\n const video = div.querySelector('video');\r\n const img = div.querySelector('img');\r\n \r\n if(img) {\r\n img && img.classList.remove('hide');\r\n \r\n await doubleRaf();\r\n }\r\n\r\n if(this.lazyLoadQueue.intersector.isVisible(div)) {\r\n return;\r\n }\r\n \r\n if(video) {\r\n video.remove();\r\n video.src = '';\r\n video.load();\r\n const animations = animationIntersector.getAnimations(video);\r\n animations.forEach(item => {\r\n animationIntersector.checkAnimation(item, true, true);\r\n });\r\n }\r\n });\r\n };\r\n\r\n public add(doc: MyDocument, appendTo = this.element) {\r\n let gifWidth = doc.w;\r\n let gifHeight = doc.h;\r\n if(gifHeight < height) {\r\n gifWidth = height / gifHeight * gifWidth;\r\n gifHeight = height;\r\n }\r\n\r\n const willUseWidth = Math.min(maxSingleWidth, width, gifWidth);\r\n const size = calcImageInBox(gifWidth, gifHeight, willUseWidth, height);\r\n\r\n /* wastedWidth += w;\r\n\r\n if(wastedWidth === width || h < height) {\r\n wastedWidth = 0;\r\n console.log('completed line', i, line);\r\n line = [];\r\n continue;\r\n }\r\n\r\n line.push(gif); */\r\n\r\n //console.log('gif:', gif, w, h);\r\n\r\n const div = document.createElement('div');\r\n div.classList.add('gif', 'fade-in-transition');\r\n div.style.width = size.width + 'px';\r\n div.style.opacity = '0';\r\n //div.style.height = h + 'px';\r\n div.dataset.docId = doc.id;\r\n\r\n appendTo.append(div);\r\n\r\n //this.lazyLoadQueue.observe({div, load: this.processVisibleDiv});\r\n this.lazyLoadQueue.observe(div);\r\n\r\n //let preloader = new ProgressivePreloader(div);\r\n\r\n const gotThumb = appDocsManager.getThumb(doc, false);\r\n\r\n const willBeAPoster = !!gotThumb;\r\n let img: HTMLImageElement;\r\n if(willBeAPoster) {\r\n img = new Image();\r\n img.classList.add('media-poster');\r\n\r\n if(!gotThumb.cacheContext.url) {\r\n gotThumb.promise.then(() => {\r\n img.src = gotThumb.cacheContext.url;\r\n });\r\n }\r\n }\r\n\r\n const afterRender = () => {\r\n if(img) {\r\n div.append(img);\r\n div.style.opacity = '';\r\n }\r\n };\r\n\r\n (gotThumb?.cacheContext?.url ? renderImageFromUrl(img, gotThumb.cacheContext.url, afterRender) : afterRender());\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport emoticonsDropdown, { EmoticonsDropdown, EmoticonsTab, EMOTICONSSTICKERGROUP } from \"..\";\r\nimport GifsMasonry from \"../../gifsMasonry\";\r\nimport Scrollable from \"../../scrollable\";\r\nimport { putPreloader } from \"../../misc\";\r\nimport apiManager from \"../../../lib/mtproto/mtprotoworker\";\r\nimport appDocsManager, {MyDocument} from \"../../../lib/appManagers/appDocsManager\";\r\n\r\nexport default class GifsTab implements EmoticonsTab {\r\n private content: HTMLElement;\r\n\r\n init() {\r\n this.content = document.getElementById('content-gifs');\r\n const gifsContainer = this.content.firstElementChild as HTMLDivElement;\r\n gifsContainer.addEventListener('click', EmoticonsDropdown.onMediaClick);\r\n\r\n const scroll = new Scrollable(this.content, 'GIFS');\r\n const masonry = new GifsMasonry(gifsContainer, EMOTICONSSTICKERGROUP, scroll);\r\n const preloader = putPreloader(this.content, true);\r\n\r\n apiManager.invokeApi('messages.getSavedGifs', {hash: 0}).then((res) => {\r\n //console.log('getSavedGifs res:', res);\r\n\r\n if(res._ === 'messages.savedGifs') {\r\n res.gifs.forEach((doc, idx) => {\r\n res.gifs[idx] = doc = appDocsManager.saveDoc(doc);\r\n //if(doc._ === 'documentEmpty') return;\r\n masonry.add(doc as MyDocument);\r\n });\r\n }\r\n\r\n preloader.remove();\r\n });\r\n\r\n emoticonsDropdown.addLazyLoadQueueRepeat(masonry.lazyLoadQueue, masonry.processInvisibleDiv);\r\n\r\n this.init = null;\r\n }\r\n\r\n onClose() {\r\n\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport emoticonsDropdown, { EmoticonsDropdown, EMOTICONSSTICKERGROUP, EmoticonsTab } from \"..\";\r\nimport findUpAttribute from \"../../../helpers/dom/findUpAttribute\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport mediaSizes from \"../../../helpers/mediaSizes\";\r\nimport { MessagesAllStickers, StickerSet } from \"../../../layer\";\r\nimport appDocsManager, { MyDocument } from \"../../../lib/appManagers/appDocsManager\";\r\nimport appStickersManager from \"../../../lib/appManagers/appStickersManager\";\r\nimport { i18n } from \"../../../lib/langPack\";\r\nimport { RichTextProcessor } from \"../../../lib/richtextprocessor\";\r\nimport rootScope from \"../../../lib/rootScope\";\r\nimport animationIntersector from \"../../animationIntersector\";\r\nimport LazyLoadQueue, { LazyLoadQueueRepeat } from \"../../lazyLoadQueue\";\r\nimport { putPreloader } from \"../../misc\";\r\nimport PopupStickers from \"../../popups/stickers\";\r\nimport Scrollable, { ScrollableX } from \"../../scrollable\";\r\nimport StickyIntersector from \"../../stickyIntersector\";\r\nimport { wrapSticker, wrapStickerSetThumb } from \"../../wrappers\";\r\n\r\nexport class SuperStickerRenderer {\r\n public lazyLoadQueue: LazyLoadQueueRepeat;\r\n private animatedDivs: Set = new Set();\r\n\r\n constructor(private regularLazyLoadQueue: LazyLoadQueue, private group: string) {\r\n this.lazyLoadQueue = new LazyLoadQueueRepeat(undefined, (target, visible) => {\r\n if(!visible) {\r\n this.processInvisibleDiv(target as HTMLDivElement);\r\n }\r\n });\r\n }\r\n\r\n public clear() {\r\n this.lazyLoadQueue.clear();\r\n }\r\n\r\n public renderSticker(doc: MyDocument, div?: HTMLDivElement, loadPromises?: Promise[]) {\r\n if(!div) {\r\n div = document.createElement('div');\r\n div.classList.add('grid-item', 'super-sticker');\r\n\r\n if(doc.sticker === 2) {\r\n this.observeAnimatedDiv(div);\r\n }\r\n }\r\n\r\n // * This will wrap only a thumb\r\n wrapSticker({\r\n doc, \r\n div,\r\n lazyLoadQueue: this.regularLazyLoadQueue, \r\n group: this.group, \r\n onlyThumb: doc.sticker === 2,\r\n loadPromises\r\n });\r\n\r\n return div;\r\n }\r\n\r\n public observeAnimatedDiv(div: HTMLDivElement) {\r\n this.animatedDivs.add(div);\r\n\r\n this.lazyLoadQueue.observe({\r\n div, \r\n load: this.processVisibleDiv\r\n });\r\n }\r\n\r\n private checkAnimationContainer = (div: HTMLElement, visible: boolean) => {\r\n //console.error('checkAnimationContainer', div, visible);\r\n const players = animationIntersector.getAnimations(div);\r\n players.forEach(player => {\r\n if(!visible) {\r\n animationIntersector.checkAnimation(player, true, true);\r\n } else {\r\n animationIntersector.checkAnimation(player, false);\r\n }\r\n });\r\n };\r\n\r\n private processVisibleDiv = (div: HTMLElement) => {\r\n const docId = div.dataset.docId;\r\n const doc = appDocsManager.getDoc(docId);\r\n \r\n const size = mediaSizes.active.esgSticker.width;\r\n\r\n //console.log('processVisibleDiv:', div);\r\n\r\n const promise = wrapSticker({\r\n doc, \r\n div: div as HTMLDivElement,\r\n width: size,\r\n height: size,\r\n lazyLoadQueue: null, \r\n group: this.group, \r\n onlyThumb: false,\r\n play: true,\r\n loop: true\r\n });\r\n\r\n promise.then(() => {\r\n //clearTimeout(timeout);\r\n this.checkAnimationContainer(div, this.lazyLoadQueue.intersector.isVisible(div));\r\n });\r\n\r\n /* let timeout = window.setTimeout(() => {\r\n console.error('processVisibleDiv timeout', div, doc);\r\n }, 1e3); */\r\n\r\n return promise;\r\n };\r\n\r\n public processInvisibleDiv = (div: HTMLElement) => {\r\n const docId = div.dataset.docId;\r\n const doc = appDocsManager.getDoc(docId);\r\n\r\n //console.log('STICKER INvisible:', /* div, */docId);\r\n\r\n this.checkAnimationContainer(div, false);\r\n\r\n div.innerHTML = '';\r\n this.renderSticker(doc, div as HTMLDivElement);\r\n };\r\n}\r\n\r\nexport default class StickersTab implements EmoticonsTab {\r\n private content: HTMLElement;\r\n private stickersDiv: HTMLElement;\r\n\r\n private stickerSets: {[id: string]: {\r\n stickers: HTMLElement,\r\n tab: HTMLElement\r\n }} = {};\r\n\r\n private recentDiv: HTMLElement;\r\n private recentStickers: MyDocument[] = [];\r\n\r\n private scroll: Scrollable;\r\n\r\n private menu: HTMLElement;\r\n \r\n private mounted = false;\r\n\r\n private queueCategoryPush: {element: HTMLElement, prepend: boolean}[] = [];\r\n\r\n private stickyIntersector: StickyIntersector;\r\n\r\n private superStickerRenderer: SuperStickerRenderer;\r\n\r\n categoryPush(categoryDiv: HTMLElement, categoryTitle: string = '', promise: Promise, prepend?: boolean) {\r\n //if((docs.length % 5) !== 0) categoryDiv.classList.add('not-full');\r\n\r\n const itemsDiv = document.createElement('div');\r\n itemsDiv.classList.add('category-items', 'super-stickers');\r\n\r\n const titleDiv = document.createElement('div');\r\n titleDiv.classList.add('category-title');\r\n\r\n if(categoryTitle) {\r\n titleDiv.innerHTML = categoryTitle;\r\n }\r\n\r\n categoryDiv.append(titleDiv, itemsDiv);\r\n\r\n this.stickyIntersector.observeStickyHeaderChanges(categoryDiv);\r\n\r\n this.queueCategoryPush.push({element: categoryDiv, prepend});\r\n\r\n promise.then(documents => {\r\n documents.forEach(doc => {\r\n //if(doc._ === 'documentEmpty') return;\r\n itemsDiv.append(this.superStickerRenderer.renderSticker(doc));\r\n });\r\n\r\n if(this.queueCategoryPush.length) {\r\n this.queueCategoryPush.forEach(({element, prepend}) => {\r\n if(prepend) {\r\n if(this.recentDiv.parentElement) {\r\n this.stickersDiv.prepend(element);\r\n this.stickersDiv.prepend(this.recentDiv);\r\n } else {\r\n this.stickersDiv.prepend(element);\r\n }\r\n } else this.stickersDiv.append(element);\r\n });\r\n\r\n this.queueCategoryPush.length = 0;\r\n }\r\n });\r\n\r\n return {titleDiv};\r\n }\r\n\r\n async renderStickerSet(set: StickerSet.stickerSet, prepend = false) {\r\n const categoryDiv = document.createElement('div');\r\n categoryDiv.classList.add('sticker-category');\r\n categoryDiv.dataset.id = set.id;\r\n categoryDiv.dataset.access_hash = set.access_hash;\r\n\r\n const button = document.createElement('button');\r\n button.classList.add('btn-icon', 'menu-horizontal-div-item');\r\n\r\n this.stickerSets[set.id] = {\r\n stickers: categoryDiv,\r\n tab: button\r\n };\r\n\r\n if(prepend) {\r\n this.menu.insertBefore(button, this.menu.firstElementChild.nextSibling);\r\n } else {\r\n this.menu.append(button);\r\n }\r\n\r\n //stickersScroll.append(categoryDiv);\r\n\r\n const promise = appStickersManager.getStickerSet(set);\r\n this.categoryPush(categoryDiv, RichTextProcessor.wrapEmojiText(set.title), promise.then(stickerSet => stickerSet.documents as MyDocument[]), prepend);\r\n const stickerSet = await promise;\r\n\r\n //console.log('got stickerSet', stickerSet, li);\r\n \r\n wrapStickerSetThumb({\r\n set,\r\n container: button,\r\n group: EMOTICONSSTICKERGROUP,\r\n lazyLoadQueue: EmoticonsDropdown.lazyLoadQueue,\r\n width: 32,\r\n height: 32,\r\n autoplay: false\r\n });\r\n }\r\n\r\n init() {\r\n this.content = document.getElementById('content-stickers');\r\n //let stickersDiv = contentStickersDiv.querySelector('.os-content') as HTMLDivElement;\r\n\r\n this.recentDiv = document.createElement('div');\r\n this.recentDiv.classList.add('sticker-category', 'stickers-recent');\r\n\r\n let menuWrapper = this.content.previousElementSibling as HTMLDivElement;\r\n this.menu = menuWrapper.firstElementChild as HTMLUListElement;\r\n\r\n let menuScroll = new ScrollableX(menuWrapper);\r\n\r\n this.stickersDiv = document.createElement('div');\r\n this.stickersDiv.classList.add('stickers-categories');\r\n this.content.append(this.stickersDiv);\r\n\r\n /* stickersDiv.addEventListener('mouseover', (e) => {\r\n let target = e.target as HTMLElement;\r\n\r\n if(target.tagName === 'CANVAS') { // turn on sticker\r\n let animation = lottieLoader.getAnimation(target.parentElement, EMOTICONSSTICKERGROUP);\r\n\r\n if(animation) {\r\n // @ts-ignore\r\n if(animation.currentFrame === animation.totalFrames - 1) {\r\n animation.goToAndPlay(0, true);\r\n } else {\r\n animation.play();\r\n }\r\n }\r\n }\r\n }); */\r\n\r\n rootScope.addEventListener('stickers_installed', (e) => {\r\n const set: StickerSet.stickerSet = e;\r\n \r\n if(!this.stickerSets[set.id] && this.mounted) {\r\n this.renderStickerSet(set, true);\r\n }\r\n });\r\n\r\n rootScope.addEventListener('stickers_deleted', (e) => {\r\n const set: StickerSet.stickerSet = e;\r\n \r\n if(this.stickerSets[set.id] && this.mounted) {\r\n const elements = this.stickerSets[set.id];\r\n elements.stickers.remove();\r\n elements.tab.remove();\r\n delete this.stickerSets[set.id];\r\n }\r\n });\r\n\r\n this.stickersDiv.addEventListener('click', (e) => {\r\n const target = e.target as HTMLElement;\r\n if(findUpClassName(target, 'category-title')) {\r\n const el = findUpAttribute(target, 'data-id');\r\n new PopupStickers({id: el.dataset.id, access_hash: el.dataset.access_hash}).show();\r\n return;\r\n }\r\n\r\n EmoticonsDropdown.onMediaClick(e);\r\n });\r\n\r\n this.scroll = new Scrollable(this.content, 'STICKERS');\r\n this.scroll.setVirtualContainer(this.stickersDiv);\r\n\r\n this.stickyIntersector = EmoticonsDropdown.menuOnClick(this.menu, this.scroll, menuScroll).stickyIntersector;\r\n\r\n const preloader = putPreloader(this.content, true);\r\n\r\n Promise.all([\r\n appStickersManager.getRecentStickers().then(stickers => {\r\n this.recentStickers = stickers.stickers.slice(0, 20) as MyDocument[];\r\n \r\n //stickersScroll.prepend(categoryDiv);\r\n\r\n this.stickerSets['recent'] = {\r\n stickers: this.recentDiv,\r\n tab: this.menu.firstElementChild as HTMLElement\r\n };\r\n\r\n preloader.remove();\r\n const {titleDiv} = this.categoryPush(this.recentDiv, '', Promise.resolve(this.recentStickers), true);\r\n titleDiv.append(i18n('Stickers.Recent'));\r\n }),\r\n\r\n appStickersManager.getAllStickers().then((res) => {\r\n preloader.remove();\r\n\r\n for(let set of (res as MessagesAllStickers.messagesAllStickers).sets) {\r\n this.renderStickerSet(set);\r\n }\r\n })\r\n ]).finally(() => {\r\n this.mounted = true;\r\n });\r\n\r\n this.superStickerRenderer = new SuperStickerRenderer(EmoticonsDropdown.lazyLoadQueue, EMOTICONSSTICKERGROUP);\r\n\r\n emoticonsDropdown.addLazyLoadQueueRepeat(this.superStickerRenderer.lazyLoadQueue, this.superStickerRenderer.processInvisibleDiv);\r\n\r\n /* setInterval(() => {\r\n // @ts-ignore\r\n const players = Object.values(lottieLoader.players).filter(p => p.width === 80);\r\n \r\n console.log('STICKERS RENDERED IN PANEL:', players.length, players.filter(p => !p.paused).length, this.superStickerRenderer.lazyLoadQueue.intersector.getVisible().length);\r\n }, .25e3); */\r\n \r\n\r\n this.init = null;\r\n }\r\n\r\n pushRecentSticker(doc: MyDocument) {\r\n if(!this.recentDiv?.parentElement) {\r\n return;\r\n }\r\n\r\n let div = this.recentDiv.querySelector(`[data-doc-id=\"${doc.id}\"]`);\r\n if(!div) {\r\n div = this.superStickerRenderer.renderSticker(doc);\r\n }\r\n\r\n const items = this.recentDiv.querySelector('.category-items');\r\n items.prepend(div);\r\n\r\n if(items.childElementCount > 20) {\r\n (Array.from(items.children) as HTMLElement[]).slice(20).forEach(el => el.remove());\r\n }\r\n }\r\n\r\n onClose() {\r\n\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { toast } from \"../../components/toast\";\r\nimport { BotInlineResult, GeoPoint, InputGeoPoint, InputMedia, MessageEntity, ReplyMarkup } from \"../../layer\";\r\nimport appPeersManager from \"./appPeersManager\";\r\nimport apiManagerProxy from \"../mtproto/mtprotoworker\";\r\nimport { RichTextProcessor } from \"../richtextprocessor\";\r\nimport appDocsManager, { MyDocument } from \"./appDocsManager\";\r\nimport appPhotosManager, { MyPhoto } from \"./appPhotosManager\";\r\nimport appUsersManager, { MyTopPeer } from \"./appUsersManager\";\r\nimport appMessagesManager from \"./appMessagesManager\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport rootScope from \"../rootScope\";\r\nimport appDraftsManager from \"./appDraftsManager\";\r\nimport appMessagesIdsManager from \"./appMessagesIdsManager\";\r\nimport { insertInDescendSortedArray } from \"../../helpers/array\";\r\nimport appStateManager from \"./appStateManager\";\r\n\r\nexport class AppInlineBotsManager {\r\n private inlineResults: {[queryAndResultIds: string]: BotInlineResult} = {};\r\n private setHash: {\r\n [botId: string]: {\r\n peerId: number, \r\n time: number\r\n }\r\n } = {};\r\n\r\n public getGeoInput(geo: GeoPoint): InputGeoPoint {\r\n return geo._ === 'geoPoint' ? {\r\n _: 'inputGeoPoint',\r\n lat: geo.lat,\r\n long: geo.long,\r\n accuracy_radius: geo.accuracy_radius\r\n } : {\r\n _: 'inputGeoPointEmpty'\r\n };\r\n }\r\n\r\n public getInlineResults(peerId: number, botId: number, query = '', offset = '', geo?: GeoPoint) {\r\n return apiManagerProxy.invokeApi('messages.getInlineBotResults', {\r\n bot: appUsersManager.getUserInput(botId),\r\n peer: appPeersManager.getInputPeerById(peerId),\r\n query,\r\n geo_point: geo ? this.getGeoInput(geo) : undefined,\r\n offset\r\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true}).then(botResults => {\r\n const queryId = botResults.query_id;\r\n\r\n /* if(botResults.switch_pm) {\r\n botResults.switch_pm.rText = RichTextProcessor.wrapRichText(botResults.switch_pm.text, {noLinebreaks: true, noLinks: true});\r\n } */\r\n \r\n botResults.results.forEach(result => {\r\n if(result._ === 'botInlineMediaResult') {\r\n if(result.document) {\r\n result.document = appDocsManager.saveDoc(result.document);\r\n }\r\n \r\n if(result.photo) {\r\n result.photo = appPhotosManager.savePhoto(result.photo);\r\n }\r\n }\r\n \r\n this.inlineResults[this.generateQId(queryId, result.id)] = result;\r\n });\r\n\r\n return botResults;\r\n });\r\n }\r\n\r\n public generateQId(queryId: string, resultId: string) {\r\n return queryId + '_' + resultId;\r\n }\r\n\r\n private pushPopularBot(botId: number) {\r\n appUsersManager.getTopPeers('bots_inline').then((topPeers) => {\r\n const index = topPeers.findIndex(topPeer => topPeer.id);\r\n let topPeer: MyTopPeer;\r\n if(index !== -1) {\r\n topPeer = topPeers[index];\r\n } else {\r\n topPeer = {\r\n id: botId,\r\n rating: 0\r\n };\r\n }\r\n\r\n ++topPeer.rating;\r\n insertInDescendSortedArray(topPeers, topPeer, 'rating');\r\n\r\n appStateManager.setKeyValueToStorage('topPeersCache');\r\n \r\n // rootScope.$broadcast('inline_bots_popular')\r\n });\r\n }\r\n\r\n public switchToPM(fromPeerId: number, botId: number, startParam: string) {\r\n this.setHash[botId] = {peerId: fromPeerId, time: Date.now()};\r\n rootScope.dispatchEvent('history_focus', {peerId: botId});\r\n return appMessagesManager.startBot(botId, 0, startParam);\r\n }\r\n \r\n /*\r\n function resolveInlineMention (username) {\r\n return AppPeersManager.resolveUsername(username).then(function (peerId) {\r\n if (peerId > 0) {\r\n var bot = AppUsersManager.getUser(peerId)\r\n if (bot.pFlags.bot && bot.bot_inline_placeholder !== undefined) {\r\n var resolvedBot = {\r\n username: username,\r\n id: peerId,\r\n placeholder: bot.bot_inline_placeholder\r\n }\r\n if (bot.pFlags.bot_inline_geo &&\r\n GeoLocationManager.isAvailable()) {\r\n return checkGeoLocationAccess(peerId).then(function () {\r\n return GeoLocationManager.getPosition().then(function (coords) {\r\n resolvedBot.geo = coords\r\n return qSync.when(resolvedBot)\r\n })\r\n })['catch'](function () {\r\n return qSync.when(resolvedBot)\r\n })\r\n }\r\n return qSync.when(resolvedBot)\r\n }\r\n }\r\n return $q.reject()\r\n }, function (error) {\r\n error.handled = true\r\n return $q.reject(error)\r\n })\r\n }\r\n \r\n function regroupWrappedResults (results, rowW, rowH) {\r\n if (!results ||\r\n !results[0] ||\r\n ['photo', 'gif', 'sticker'].indexOf(results[0].type) === -1) {\r\n return\r\n }\r\n var ratios = []\r\n angular.forEach(results, function (result) {\r\n var w\r\n var h, doc\r\n var photo\r\n if (result._ === 'botInlineMediaResult') {\r\n if (doc = result.document) {\r\n w = result.document.w\r\n h = result.document.h\r\n }\r\n else if (photo = result.photo) {\r\n var photoSize = (photo.sizes || [])[0]\r\n w = photoSize && photoSize.w\r\n h = photoSize && photoSize.h\r\n }\r\n }else {\r\n w = result.w\r\n h = result.h\r\n }\r\n if (!w || !h) {\r\n w = h = 1\r\n }\r\n ratios.push(w / h)\r\n })\r\n \r\n var rows = []\r\n var curCnt = 0\r\n var curW = 0\r\n angular.forEach(ratios, function (ratio) {\r\n var w = ratio * rowH\r\n curW += w\r\n if (!curCnt || curCnt < 4 && curW < (rowW * 1.1)) {\r\n curCnt++\r\n } else {\r\n rows.push(curCnt)\r\n curCnt = 1\r\n curW = w\r\n }\r\n })\r\n if (curCnt) {\r\n rows.push(curCnt)\r\n }\r\n \r\n var i = 0\r\n var thumbs = []\r\n var lastRowI = rows.length - 1\r\n angular.forEach(rows, function (rowCnt, rowI) {\r\n var lastRow = rowI === lastRowI\r\n var curRatios = ratios.slice(i, i + rowCnt)\r\n var sumRatios = 0\r\n angular.forEach(curRatios, function (ratio) {\r\n sumRatios += ratio\r\n })\r\n angular.forEach(curRatios, function (ratio, j) {\r\n var thumbH = rowH\r\n var thumbW = rowW * ratio / sumRatios\r\n var realW = thumbH * ratio\r\n if (lastRow && thumbW > realW) {\r\n thumbW = realW\r\n }\r\n var result = results[i + j]\r\n result.thumbW = Math.floor(thumbW) - 2\r\n result.thumbH = Math.floor(thumbH) - 2\r\n })\r\n \r\n i += rowCnt\r\n })\r\n } */\r\n\r\n public async checkSwitchReturn(botId: number) {\r\n const bot = appUsersManager.getUser(botId);\r\n if(!bot || !bot.pFlags.bot || !bot.bot_inline_placeholder) {\r\n return;\r\n }\r\n\r\n const peerData = this.setHash[botId];\r\n if(peerData) {\r\n delete this.setHash[botId];\r\n if((Date.now() - peerData.time) < 3600e3) {\r\n return peerData.peerId;\r\n }\r\n }\r\n }\r\n\r\n public switchInlineQuery(peerId: number, threadId: number, botId: number, query: string) {\r\n rootScope.dispatchEvent('history_focus', {peerId, threadId});\r\n appDraftsManager.setDraft(peerId, threadId, '@' + appUsersManager.getUser(botId).username + ' ' + query);\r\n }\r\n\r\n public callbackButtonClick(peerId: number, mid: number, button: any) {\r\n return apiManagerProxy.invokeApi('messages.getBotCallbackAnswer', {\r\n peer: appPeersManager.getInputPeerById(peerId),\r\n msg_id: appMessagesIdsManager.getServerMessageId(mid),\r\n data: button.data\r\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true}).then((callbackAnswer) => {\r\n if(typeof callbackAnswer.message === 'string' && callbackAnswer.message.length) {\r\n toast(RichTextProcessor.wrapRichText(callbackAnswer.message, {noLinks: true, noLinebreaks: true}));\r\n }\r\n \r\n //console.log('callbackButtonClick callbackAnswer:', callbackAnswer);\r\n });\r\n }\r\n \r\n /* function gameButtonClick (id) {\r\n var message = AppMessagesManager.getMessage(id)\r\n var peerId = AppMessagesManager.getMessagePeer(message)\r\n \r\n return MtpApiManager.invokeApi('messages.getBotCallbackAnswer', {\r\n peer: AppPeersManager.getInputPeerByID(peerId),\r\n msg_id: AppMessagesIDsManager.getMessageLocalID(id)\r\n }, {timeout: 1, stopTime: -1, noErrorBox: true}).then(function (callbackAnswer) {\r\n if (typeof callbackAnswer.message === 'string' &&\r\n callbackAnswer.message.length) {\r\n showCallbackMessage(callbackAnswer.message, callbackAnswer.pFlags.alert)\r\n }\r\n else if (typeof callbackAnswer.url === 'string') {\r\n AppGamesManager.openGame(message.media.game.id, id, callbackAnswer.url)\r\n }\r\n })\r\n } */\r\n\r\n public sendInlineResult(peerId: number, botId: number, queryAndResultIds: string, options: Partial<{\r\n viaBotId: number,\r\n queryId: string,\r\n resultId: string,\r\n replyMarkup: ReplyMarkup,\r\n entities: MessageEntity[],\r\n replyToMsgId: number,\r\n clearDraft: true,\r\n scheduleDate: number,\r\n silent: true,\r\n geoPoint: GeoPoint\r\n }> = {}) {\r\n const inlineResult = this.inlineResults[queryAndResultIds];\r\n if(!inlineResult) {\r\n return;\r\n }\r\n\r\n this.pushPopularBot(botId);\r\n const splitted = queryAndResultIds.split('_');\r\n const queryID = splitted.shift();\r\n const resultID = splitted.join('_');\r\n options.viaBotId = botId;\r\n options.queryId = queryID;\r\n options.resultId = resultID;\r\n if(inlineResult.send_message.reply_markup) {\r\n options.replyMarkup = inlineResult.send_message.reply_markup;\r\n }\r\n \r\n if(inlineResult.send_message._ === 'botInlineMessageText') {\r\n options.entities = inlineResult.send_message.entities;\r\n appMessagesManager.sendText(peerId, inlineResult.send_message.message, options);\r\n } else {\r\n let caption = '';\r\n let inputMedia: InputMedia;\r\n const sendMessage = inlineResult.send_message;\r\n switch(sendMessage._) {\r\n case 'botInlineMessageMediaAuto': {\r\n caption = sendMessage.message;\r\n\r\n if(inlineResult._ === 'botInlineMediaResult') {\r\n const {document, photo} = inlineResult;\r\n if(document) {\r\n inputMedia = appDocsManager.getMediaInput(document as MyDocument);\r\n } else {\r\n inputMedia = appPhotosManager.getMediaInput(photo as MyPhoto);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'botInlineMessageMediaGeo': {\r\n inputMedia = {\r\n _: 'inputMediaGeoPoint',\r\n geo_point: this.getGeoInput(sendMessage.geo)\r\n };\r\n\r\n options.geoPoint = sendMessage.geo;\r\n\r\n break;\r\n }\r\n \r\n case 'botInlineMessageMediaVenue': {\r\n inputMedia = {\r\n _: 'inputMediaVenue',\r\n geo_point: this.getGeoInput(sendMessage.geo),\r\n title: sendMessage.title,\r\n address: sendMessage.address,\r\n provider: sendMessage.provider,\r\n venue_id: sendMessage.venue_id,\r\n venue_type: sendMessage.venue_type\r\n };\r\n\r\n options.geoPoint = sendMessage.geo;\r\n\r\n break;\r\n }\r\n\r\n case 'botInlineMessageMediaContact': {\r\n inputMedia = {\r\n _: 'inputMediaContact',\r\n phone_number: sendMessage.phone_number,\r\n first_name: sendMessage.first_name,\r\n last_name: sendMessage.last_name,\r\n vcard: sendMessage.vcard\r\n };\r\n\r\n break;\r\n }\r\n }\r\n\r\n if(!inputMedia) {\r\n inputMedia = {\r\n _: 'messageMediaPending',\r\n type: inlineResult.type,\r\n file_name: inlineResult.title || \r\n (inlineResult as BotInlineResult.botInlineResult).content?.url || \r\n (inlineResult as BotInlineResult.botInlineResult).url,\r\n size: 0,\r\n progress: {percent: 30, total: 0}\r\n } as any;\r\n }\r\n\r\n appMessagesManager.sendOther(peerId, inputMedia, options);\r\n }\r\n }\r\n \r\n /* function checkGeoLocationAccess (botID) {\r\n var key = 'bot_access_geo' + botID\r\n return Storage.get(key).then(function (geoAccess) {\r\n if (geoAccess && geoAccess.granted) {\r\n return true\r\n }\r\n return ErrorService.confirm({\r\n type: 'BOT_ACCESS_GEO_INLINE'\r\n }).then(function () {\r\n var setHash = {}\r\n setHash[key] = {granted: true, time: tsNow()}\r\n Storage.set(setHash)\r\n return true\r\n }, function () {\r\n var setHash = {}\r\n setHash[key] = {denied: true, time: tsNow()}\r\n Storage.set(setHash)\r\n return $q.reject()\r\n })\r\n })\r\n } */\r\n}\r\n\r\nconst appInlineBotsManager = new AppInlineBotsManager();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appInlineBotsManager = appInlineBotsManager);\r\nexport default appInlineBotsManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport InputSearch from \"../../inputSearch\";\r\nimport animationIntersector from \"../../animationIntersector\";\r\nimport appSidebarRight from \"..\";\r\nimport appUsersManager from \"../../../lib/appManagers/appUsersManager\";\r\nimport appInlineBotsManager, { AppInlineBotsManager } from \"../../../lib/appManagers/appInlineBotsManager\";\r\nimport GifsMasonry from \"../../gifsMasonry\";\r\nimport appImManager from \"../../../lib/appManagers/appImManager\";\r\nimport type { MyDocument } from \"../../../lib/appManagers/appDocsManager\";\r\nimport mediaSizes from \"../../../helpers/mediaSizes\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\n\r\nconst ANIMATIONGROUP = 'GIFS-SEARCH';\r\n\r\nexport default class AppGifsTab extends SliderSuperTab {\r\n private inputSearch: InputSearch;\r\n private gifsDiv: HTMLDivElement;\r\n\r\n private nextOffset = '';\r\n private loadedAll = false;\r\n\r\n private gifBotPeerId: number;\r\n private masonry: GifsMasonry;\r\n\r\n private searchPromise: ReturnType;\r\n\r\n protected init() {\r\n this.container.id = 'search-gifs-container';\r\n \r\n this.inputSearch = new InputSearch('SearchGifsTitle', (value) => {\r\n this.reset();\r\n this.search(value);\r\n });\r\n \r\n this.title.replaceWith(this.inputSearch.container);\r\n \r\n this.gifsDiv = document.createElement('div');\r\n this.gifsDiv.classList.add('gifs-masonry');\r\n attachClickEvent(this.gifsDiv, this.onGifsClick, {listenerSetter: this.listenerSetter});\r\n \r\n this.scrollable.append(this.gifsDiv);\r\n \r\n this.masonry = new GifsMasonry(this.gifsDiv, ANIMATIONGROUP, this.scrollable);\r\n //this.backBtn.parentElement.append(this.inputSearch.container);\r\n }\r\n\r\n private onGifsClick = (e: MouseEvent | TouchEvent) => {\r\n const target = findUpClassName(e.target, 'gif');\r\n if(!target) return;\r\n\r\n const fileId = target.dataset.docId;\r\n if(appImManager.chat.input.sendMessageWithDocument(fileId)) {\r\n if(mediaSizes.isMobile) {\r\n appSidebarRight.onCloseBtnClick();\r\n }\r\n } else {\r\n console.warn('got no doc by id:', fileId);\r\n }\r\n };\r\n\r\n public onClose() {\r\n this.scrollable.onScrolledBottom = () => {};\r\n }\r\n\r\n public onCloseAfterTimeout() {\r\n this.reset();\r\n this.gifsDiv.innerHTML = '';\r\n animationIntersector.checkAnimations(undefined, ANIMATIONGROUP);\r\n this.inputSearch.remove();\r\n return super.onCloseAfterTimeout();\r\n }\r\n\r\n private reset() {\r\n this.searchPromise = null;\r\n this.nextOffset = '';\r\n this.loadedAll = false;\r\n this.masonry.clear();\r\n }\r\n\r\n public open() {\r\n const ret = super.open();\r\n appSidebarRight.toggleSidebar(true).then(() => {\r\n this.search('', true);\r\n\r\n this.scrollable.onScrolledBottom = () => {\r\n this.search(this.inputSearch.value, false);\r\n };\r\n });\r\n return ret;\r\n }\r\n\r\n public async search(query: string, newSearch = true) {\r\n if(this.searchPromise || this.loadedAll) return;\r\n\r\n if(!this.gifBotPeerId) {\r\n this.gifBotPeerId = (await appUsersManager.resolveUsername('gif')).id;\r\n }\r\n\r\n try {\r\n this.searchPromise = appInlineBotsManager.getInlineResults(0, this.gifBotPeerId, query, this.nextOffset);\r\n const { results, next_offset } = await this.searchPromise;\r\n\r\n if(this.inputSearch.value !== query) {\r\n return;\r\n }\r\n\r\n this.searchPromise = null;\r\n this.nextOffset = next_offset;\r\n if(newSearch) {\r\n this.gifsDiv.innerHTML = '';\r\n }\r\n\r\n if(results.length) {\r\n results.forEach((result) => {\r\n if(result._ === 'botInlineMediaResult' && result.document) {\r\n this.masonry.add(result.document as MyDocument);\r\n }\r\n });\r\n } else {\r\n this.loadedAll = true;\r\n }\r\n\r\n this.scrollable.onScroll();\r\n } catch(err) {\r\n this.searchPromise = null;\r\n console.error('gifs loading error:', err);\r\n throw err;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { SliderSuperTab } from \"../../slider\";\r\nimport InputSearch from \"../../inputSearch\";\r\nimport LazyLoadQueue from \"../../lazyLoadQueue\";\r\nimport appImManager from \"../../../lib/appManagers/appImManager\";\r\nimport appStickersManager from \"../../../lib/appManagers/appStickersManager\";\r\nimport PopupStickers from \"../../popups/stickers\";\r\nimport animationIntersector from \"../../animationIntersector\";\r\nimport { RichTextProcessor } from \"../../../lib/richtextprocessor\";\r\nimport { wrapSticker } from \"../../wrappers\";\r\nimport appSidebarRight from \"..\";\r\nimport { StickerSet, StickerSetCovered } from \"../../../layer\";\r\nimport { forEachReverse } from \"../../../helpers/array\";\r\nimport { i18n } from \"../../../lib/langPack\";\r\nimport findUpClassName from \"../../../helpers/dom/findUpClassName\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\n\r\nexport default class AppStickersTab extends SliderSuperTab {\r\n private inputSearch: InputSearch;\r\n private setsDiv: HTMLDivElement;\r\n private lazyLoadQueue: LazyLoadQueue;\r\n\r\n protected init() {\r\n this.container.id = 'stickers-container';\r\n this.container.classList.add('chatlist-container');\r\n\r\n this.lazyLoadQueue = new LazyLoadQueue();\r\n\r\n this.inputSearch = new InputSearch('StickersTab.SearchPlaceholder', (value) => {\r\n this.search(value);\r\n });\r\n\r\n this.title.replaceWith(this.inputSearch.container);\r\n\r\n this.setsDiv = document.createElement('div');\r\n this.setsDiv.classList.add('sticker-sets');\r\n this.scrollable.append(this.setsDiv);\r\n\r\n attachClickEvent(this.setsDiv, (e) => {\r\n const sticker = findUpClassName(e.target, 'sticker-set-sticker');\r\n if(sticker) {\r\n const docId = sticker.dataset.docId;\r\n appImManager.chat.input.sendMessageWithDocument(docId);\r\n return;\r\n }\r\n\r\n const target = findUpClassName(e.target, 'sticker-set');\r\n if(!target) return;\r\n\r\n const id = target.dataset.stickerSet as string;\r\n const access_hash = target.dataset.access_hash as string;\r\n\r\n const button = findUpClassName(e.target, 'sticker-set-button') as HTMLElement;\r\n if(button) {\r\n e.preventDefault();\r\n e.cancelBubble = true;\r\n\r\n button.setAttribute('disabled', 'true');\r\n \r\n appStickersManager.getStickerSet({id, access_hash}).then(full => {\r\n appStickersManager.toggleStickerSet(full.set).then(changed => {\r\n if(changed) {\r\n button.textContent = '';\r\n button.append(i18n(full.set.installed_date ? 'Stickers.SearchAdded' : 'Stickers.SearchAdd'));\r\n button.classList.toggle('gray', !!full.set.installed_date);\r\n }\r\n }).finally(() => {\r\n //button.style.width = set.installed_date ? '68px' : '52px';\r\n button.removeAttribute('disabled');\r\n });\r\n });\r\n } else {\r\n appStickersManager.getStickerSet({id, access_hash}).then(full => {\r\n new PopupStickers(full.set).show();\r\n });\r\n }\r\n }, {listenerSetter: this.listenerSetter});\r\n }\r\n\r\n public onCloseAfterTimeout() {\r\n this.setsDiv.innerHTML = '';\r\n animationIntersector.checkAnimations(undefined, 'STICKERS-SEARCH');\r\n return super.onCloseAfterTimeout();\r\n }\r\n\r\n public renderSet(set: StickerSet.stickerSet) {\r\n //console.log('renderSet:', set);\r\n const div = document.createElement('div');\r\n div.classList.add('sticker-set');\r\n\r\n const header = document.createElement('div');\r\n header.classList.add('sticker-set-header');\r\n\r\n const details = document.createElement('div');\r\n details.classList.add('sticker-set-details');\r\n details.innerHTML = `\r\n
${RichTextProcessor.wrapEmojiText(set.title)}
\r\n `;\r\n\r\n const countDiv = document.createElement('div');\r\n countDiv.classList.add('sticker-set-count');\r\n countDiv.append(i18n('Stickers', [set.count]));\r\n details.append(countDiv);\r\n \r\n const button = document.createElement('button');\r\n button.classList.add('btn-primary', 'btn-color-primary', 'sticker-set-button');\r\n button.append(i18n(set.installed_date ? 'Stickers.SearchAdded' : 'Stickers.SearchAdd'));\r\n // button.style.width = set.installed_date ? '68px' : '52px';\r\n\r\n if(set.installed_date) {\r\n button.classList.add('gray');\r\n }\r\n\r\n //ripple(button);\r\n\r\n header.append(details, button);\r\n\r\n const stickersDiv = document.createElement('div');\r\n stickersDiv.classList.add('sticker-set-stickers');\r\n\r\n const count = Math.min(5, set.count);\r\n for(let i = 0; i < count; ++i) {\r\n const stickerDiv = document.createElement('div');\r\n stickerDiv.classList.add('sticker-set-sticker');\r\n\r\n stickersDiv.append(stickerDiv);\r\n }\r\n\r\n appStickersManager.getStickerSet(set).then(set => {\r\n //console.log('renderSet got set:', set);\r\n \r\n for(let i = 0; i < count; ++i) {\r\n const div = stickersDiv.children[i] as HTMLDivElement;\r\n const doc = set.documents[i];\r\n if(doc._ === 'documentEmpty') {\r\n continue;\r\n }\r\n\r\n wrapSticker({\r\n doc, \r\n div, \r\n lazyLoadQueue: this.lazyLoadQueue, \r\n group: 'STICKERS-SEARCH', \r\n /* play: false,\r\n loop: false, */\r\n play: true,\r\n loop: true,\r\n width: 68,\r\n height: 68\r\n });\r\n }\r\n });\r\n\r\n /* const onMouseOver = () => {\r\n const animations: AnimationItem['animation'][] = [];\r\n for(let i = 0; i < count; ++i) {\r\n const stickerDiv = stickersDiv.children[i] as HTMLElement;\r\n const animationItem = animationIntersector.getAnimation(stickerDiv);\r\n if(!animationItem) continue;\r\n\r\n const animation = animationItem.animation;\r\n\r\n animations.push(animation);\r\n animation.loop = true;\r\n animation.play();\r\n }\r\n\r\n div.addEventListener('mouseout', () => {\r\n animations.forEach(animation => {\r\n animation.loop = false;\r\n });\r\n\r\n div.addEventListener('mouseover', onMouseOver, {once: true});\r\n }, {once: true});\r\n };\r\n\r\n div.addEventListener('mouseover', onMouseOver, {once: true}); */\r\n\r\n div.dataset.stickerSet = set.id;\r\n div.dataset.access_hash = set.access_hash;\r\n div.dataset.title = set.title;\r\n\r\n div.append(header, stickersDiv);\r\n\r\n this.setsDiv.append(div);\r\n }\r\n\r\n public open() {\r\n const ret = super.open();\r\n appSidebarRight.toggleSidebar(true).then(() => {\r\n this.renderFeatured();\r\n });\r\n\r\n return ret;\r\n }\r\n\r\n public renderFeatured() {\r\n return appStickersManager.getFeaturedStickers().then(coveredSets => {\r\n if(this.inputSearch.value) {\r\n return;\r\n }\r\n\r\n coveredSets = this.filterRendered('', coveredSets);\r\n coveredSets.forEach(set => {\r\n this.renderSet(set.set);\r\n });\r\n });\r\n }\r\n\r\n private filterRendered(query: string, coveredSets: StickerSetCovered[]) {\r\n coveredSets = coveredSets.slice();\r\n\r\n const children = Array.from(this.setsDiv.children) as HTMLElement[];\r\n forEachReverse(children, el => {\r\n const id = el.dataset.stickerSet;\r\n const index = coveredSets.findIndex(covered => covered.set.id === id);\r\n \r\n if(index !== -1) {\r\n coveredSets.splice(index, 1);\r\n } else if(!query || !el.dataset.title.toLowerCase().includes(query.toLowerCase())) {\r\n el.remove();\r\n }\r\n });\r\n\r\n animationIntersector.checkAnimations(undefined, 'STICKERS-SEARCH');\r\n\r\n return coveredSets;\r\n }\r\n\r\n public search(query: string) {\r\n if(!query) {\r\n return this.renderFeatured();\r\n }\r\n\r\n return appStickersManager.searchStickerSets(query, false).then(coveredSets => {\r\n if(this.inputSearch.value !== query) {\r\n return;\r\n }\r\n\r\n //console.log('search result:', coveredSets);\r\n\r\n coveredSets = this.filterRendered(query, coveredSets);\r\n coveredSets.forEach(set => {\r\n this.renderSet(set.set);\r\n });\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { attachClickEvent } from \"./dom/clickEvent\";\r\nimport findUpAsChild from \"./dom/findUpAsChild\";\r\nimport EventListenerBase from \"./eventListenerBase\";\r\nimport ListenerSetter from \"./listenerSetter\";\r\nimport { safeAssign } from \"./object\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\n\r\nconst KEEP_OPEN = false;\r\nconst TOGGLE_TIMEOUT = 200;\r\nconst ANIMATION_DURATION = 200;\r\n\r\nexport default class DropdownHover extends EventListenerBase<{\r\n open: () => Promise | void,\r\n opened: () => any,\r\n close: () => any,\r\n closed: () => any\r\n}> {\r\n protected element: HTMLElement;\r\n protected displayTimeout: number;\r\n protected forceClose = false;\r\n protected inited = false;\r\n\r\n constructor(options: {\r\n element: DropdownHover['element']\r\n }) {\r\n super(false);\r\n safeAssign(this, options);\r\n }\r\n\r\n public attachButtonListener(button: HTMLElement, listenerSetter: ListenerSetter) {\r\n let firstTime = true;\r\n if(IS_TOUCH_SUPPORTED) {\r\n attachClickEvent(button, () => {\r\n if(firstTime) {\r\n firstTime = false;\r\n this.toggle(true);\r\n } else {\r\n this.toggle();\r\n }\r\n }, {listenerSetter});\r\n } else {\r\n listenerSetter.add(button)('mouseover', (e) => {\r\n //console.log('onmouseover button');\r\n if(firstTime) {\r\n listenerSetter.add(button)('mouseout', this.onMouseOut);\r\n firstTime = false;\r\n }\r\n\r\n clearTimeout(this.displayTimeout);\r\n this.displayTimeout = window.setTimeout(() => {\r\n this.toggle(true);\r\n }, TOGGLE_TIMEOUT);\r\n });\r\n }\r\n }\r\n\r\n private onMouseOut = (e: MouseEvent) => {\r\n if(KEEP_OPEN) return;\r\n clearTimeout(this.displayTimeout);\r\n if(!this.isActive()) return;\r\n\r\n const toElement = (e as any).toElement as Element;\r\n if(toElement && findUpAsChild(toElement, this.element)) {\r\n return;\r\n }\r\n\r\n this.displayTimeout = window.setTimeout(() => {\r\n this.toggle(false);\r\n }, TOGGLE_TIMEOUT);\r\n };\r\n\r\n protected init() {\r\n if(!IS_TOUCH_SUPPORTED) {\r\n this.element.onmouseout = this.onMouseOut;\r\n this.element.onmouseover = (e) => {\r\n if(this.forceClose) {\r\n return;\r\n }\r\n\r\n //console.log('onmouseover element');\r\n clearTimeout(this.displayTimeout);\r\n };\r\n }\r\n }\r\n\r\n public toggle = async(enable?: boolean) => {\r\n //if(!this.element) return;\r\n const willBeActive = (!!this.element.style.display && enable === undefined) || enable;\r\n if(this.init) {\r\n if(willBeActive) {\r\n this.init();\r\n this.init = null;\r\n } else {\r\n return;\r\n }\r\n }\r\n\r\n if(willBeActive === this.isActive()) {\r\n return;\r\n }\r\n \r\n if((this.element.style.display && enable === undefined) || enable) {\r\n const res = this.dispatchEvent('open');\r\n await Promise.all(res);\r\n\r\n this.element.style.display = '';\r\n void this.element.offsetLeft; // reflow\r\n this.element.classList.add('active');\r\n\r\n clearTimeout(this.displayTimeout);\r\n this.displayTimeout = window.setTimeout(() => {\r\n this.forceClose = false;\r\n this.dispatchEvent('opened');\r\n }, IS_TOUCH_SUPPORTED ? 0 : ANIMATION_DURATION);\r\n\r\n // ! can't use together with resizeObserver\r\n /* if(isTouchSupported) {\r\n const height = this.element.scrollHeight + appImManager.chat.input.inputContainer.scrollHeight - 10;\r\n console.log('[ESG]: toggle: enable height', height);\r\n appImManager.chat.bubbles.scrollable.scrollTop += height;\r\n } */\r\n\r\n /* if(touchSupport) {\r\n this.restoreScroll();\r\n } */\r\n } else {\r\n this.dispatchEvent('close');\r\n\r\n this.element.classList.remove('active');\r\n\r\n clearTimeout(this.displayTimeout);\r\n this.displayTimeout = window.setTimeout(() => {\r\n this.element.style.display = 'none';\r\n this.forceClose = false;\r\n this.dispatchEvent('closed');\r\n }, IS_TOUCH_SUPPORTED ? 0 : ANIMATION_DURATION);\r\n\r\n /* if(isTouchSupported) {\r\n const scrollHeight = this.container.scrollHeight;\r\n if(scrollHeight) {\r\n const height = this.container.scrollHeight + appImManager.chat.input.inputContainer.scrollHeight - 10;\r\n appImManager.chat.bubbles.scrollable.scrollTop -= height;\r\n }\r\n } */\r\n\r\n /* if(touchSupport) {\r\n this.restoreScroll();\r\n } */\r\n }\r\n\r\n //animationIntersector.checkAnimations(false, EMOTICONSSTICKERGROUP);\r\n };\r\n\r\n public isActive() {\r\n return this.element.classList.contains('active');\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\nimport appImManager from \"../../lib/appManagers/appImManager\";\nimport rootScope from \"../../lib/rootScope\";\nimport animationIntersector from \"../animationIntersector\";\nimport { horizontalMenu } from \"../horizontalMenu\";\nimport LazyLoadQueue, { LazyLoadQueueIntersector } from \"../lazyLoadQueue\";\nimport Scrollable, { ScrollableX } from \"../scrollable\";\nimport appSidebarRight from \"../sidebarRight\";\nimport StickyIntersector from \"../stickyIntersector\";\nimport EmojiTab from \"./tabs/emoji\";\nimport GifsTab from \"./tabs/gifs\";\nimport StickersTab from \"./tabs/stickers\";\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport AppGifsTab from \"../sidebarRight/tabs/gifs\";\nimport AppStickersTab from \"../sidebarRight/tabs/stickers\";\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\nimport findUpTag from \"../../helpers/dom/findUpTag\";\nimport blurActiveElement from \"../../helpers/dom/blurActiveElement\";\nimport whichChild from \"../../helpers/dom/whichChild\";\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\nimport DropdownHover from \"../../helpers/dropdownHover\";\nimport { pause } from \"../../helpers/schedulers/pause\";\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\n\nexport const EMOTICONSSTICKERGROUP = 'emoticons-dropdown';\n\nexport interface EmoticonsTab {\n init: () => void,\n onCloseAfterTimeout?: () => void\n}\n\nexport class EmoticonsDropdown extends DropdownHover {\n public static lazyLoadQueue = new LazyLoadQueue();\n\n private emojiTab: EmojiTab;\n public stickersTab: StickersTab;\n private gifsTab: GifsTab;\n\n private container: HTMLElement;\n private tabsEl: HTMLElement;\n private tabId = -1;\n\n private tabs: {[id: number]: EmoticonsTab};\n\n private searchButton: HTMLElement;\n private deleteBtn: HTMLElement;\n\n private selectTab: ReturnType;\n\n private savedRange: Range;\n\n constructor() {\n super({\n element: document.getElementById('emoji-dropdown') as HTMLDivElement\n });\n\n this.addEventListener('open', async() => {\n if(IS_TOUCH_SUPPORTED) {\n //appImManager.chat.input.saveScroll();\n if(blurActiveElement()) {\n await pause(100);\n }\n }\n\n if(this.element.parentElement !== appImManager.chat.input.chatInput) {\n appImManager.chat.input.chatInput.append(this.element);\n }\n\n this.savedRange = this.getGoodRange();\n\n EmoticonsDropdown.lazyLoadQueue.lock();\n //EmoticonsDropdown.lazyLoadQueue.unlock();\n animationIntersector.lockIntersectionGroup(EMOTICONSSTICKERGROUP);\n });\n\n this.addEventListener('opened', () => {\n animationIntersector.unlockIntersectionGroup(EMOTICONSSTICKERGROUP);\n EmoticonsDropdown.lazyLoadQueue.unlock();\n EmoticonsDropdown.lazyLoadQueue.refresh();\n\n this.container.classList.remove('disable-hover');\n });\n\n this.addEventListener('close', () => {\n EmoticonsDropdown.lazyLoadQueue.lock();\n //EmoticonsDropdown.lazyLoadQueue.lock();\n\n // нужно залочить группу и выключить стикеры\n animationIntersector.lockIntersectionGroup(EMOTICONSSTICKERGROUP);\n animationIntersector.checkAnimations(true, EMOTICONSSTICKERGROUP);\n });\n\n this.addEventListener('closed', () => {\n // теперь можно убрать visible, чтобы они не включились после фокуса\n animationIntersector.unlockIntersectionGroup(EMOTICONSSTICKERGROUP);\n EmoticonsDropdown.lazyLoadQueue.unlock();\n EmoticonsDropdown.lazyLoadQueue.refresh();\n\n this.container.classList.remove('disable-hover');\n\n this.savedRange = undefined;\n });\n }\n\n protected init() {\n this.emojiTab = new EmojiTab();\n this.stickersTab = new StickersTab();\n this.gifsTab = new GifsTab();\n\n this.tabs = {\n 0: this.emojiTab,\n 1: this.stickersTab,\n 2: this.gifsTab\n };\n\n this.container = this.element.querySelector('.emoji-container .tabs-container') as HTMLDivElement;\n this.tabsEl = this.element.querySelector('.emoji-tabs') as HTMLUListElement;\n this.selectTab = horizontalMenu(this.tabsEl, this.container, this.onSelectTabClick, () => {\n const tab = this.tabs[this.tabId];\n if(tab.init) {\n tab.init();\n }\n\n tab.onCloseAfterTimeout && tab.onCloseAfterTimeout();\n animationIntersector.checkAnimations(false, EMOTICONSSTICKERGROUP);\n });\n\n this.searchButton = this.element.querySelector('.emoji-tabs-search');\n this.searchButton.addEventListener('click', () => {\n if(this.tabId === 1) {\n if(!appSidebarRight.isTabExists(AppStickersTab)) {\n new AppStickersTab(appSidebarRight).open();\n }\n } else {\n if(!appSidebarRight.isTabExists(AppGifsTab)) {\n new AppGifsTab(appSidebarRight).open();\n }\n }\n });\n\n this.deleteBtn = this.element.querySelector('.emoji-tabs-delete');\n this.deleteBtn.addEventListener('click', (e) => {\n const input = appImManager.chat.input.messageInput;\n if((input.lastChild as any)?.tagName) {\n input.lastElementChild.remove();\n } else if(input.lastChild) {\n if(!input.lastChild.textContent.length) {\n input.lastChild.remove();\n } else {\n input.lastChild.textContent = input.lastChild.textContent.slice(0, -1);\n }\n }\n\n const event = new Event('input', {bubbles: true, cancelable: true});\n appImManager.chat.input.messageInput.dispatchEvent(event);\n //appSidebarRight.stickersTab.init();\n\n cancelEvent(e);\n });\n\n (this.tabsEl.children[1] as HTMLLIElement).click(); // set emoji tab\n if(this.tabs[0].init) {\n this.tabs[0].init(); // onTransitionEnd не вызовется, т.к. это первая открытая вкладка\n }\n\n rootScope.addEventListener('peer_changed', this.checkRights);\n this.checkRights();\n\n return super.init();\n }\n\n private onSelectTabClick = (id: number) => {\n if(this.tabId === id) {\n return;\n }\n \n animationIntersector.checkAnimations(true, EMOTICONSSTICKERGROUP);\n\n this.tabId = id;\n this.searchButton.classList.toggle('hide', this.tabId === 0);\n this.deleteBtn.classList.toggle('hide', this.tabId !== 0);\n };\n\n private checkRights = () => {\n const {peerId, threadId} = appImManager.chat;\n const children = this.tabsEl.children;\n const tabsElements = Array.from(children) as HTMLElement[];\n\n const canSendStickers = appMessagesManager.canSendToPeer(peerId, threadId, 'send_stickers');\n tabsElements[2].toggleAttribute('disabled', !canSendStickers);\n\n const canSendGifs = appMessagesManager.canSendToPeer(peerId, threadId, 'send_gifs');\n tabsElements[3].toggleAttribute('disabled', !canSendGifs);\n\n const active = this.tabsEl.querySelector('.active');\n if(active && whichChild(active) !== 1 && (!canSendStickers || !canSendGifs)) {\n this.selectTab(0, false);\n }\n };\n\n public static menuOnClick = (menu: HTMLElement, scroll: Scrollable, menuScroll?: ScrollableX, prevId = 0) => {\n let jumpedTo = -1;\n\n const setActive = (id: number) => {\n if(id === prevId) {\n return false;\n }\n\n menu.children[prevId].classList.remove('active');\n menu.children[id].classList.add('active');\n prevId = id;\n\n return true;\n };\n\n const stickyIntersector = new StickyIntersector(scroll.container, (stuck, target) => {\n //console.log('sticky scrollTOp', stuck, target, scroll.container.scrollTop);\n\n if(Math.abs(jumpedTo - scroll.container.scrollTop) <= 1) {\n return;\n } else {\n jumpedTo = -1;\n }\n\n const which = whichChild(target);\n if(!stuck && which) { // * due to stickyIntersector\n return;\n }\n\n setActive(which);\n\n if(menuScroll) {\n if(which < menu.childElementCount - 4) {\n menuScroll.container.scrollLeft = (which - 3) * 47;\n } else {\n menuScroll.container.scrollLeft = which * 47;\n }\n }\n });\n\n menu.addEventListener('click', (e) => {\n let target = e.target as HTMLElement;\n target = findUpClassName(target, 'menu-horizontal-div-item');\n\n if(!target) {\n return;\n }\n\n const which = whichChild(target);\n\n /* if(menuScroll) {\n menuScroll.scrollIntoView(target, false, 0);\n } */\n\n if(!setActive(which)) {\n return;\n }\n\n const element = (scroll.splitUp || scroll.container).children[which] as HTMLElement;\n const offsetTop = element.offsetTop + 1; // * due to stickyIntersector\n\n scroll.container.scrollTop = jumpedTo = offsetTop;\n\n //console.log('set scrollTop:', offsetTop);\n });\n\n return {stickyIntersector, setActive};\n };\n\n public static onMediaClick = (e: {target: EventTarget | Element}, clearDraft = false) => {\n let target = e.target as HTMLElement;\n target = findUpTag(target, 'DIV');\n\n if(!target) return false;\n \n const fileId = target.dataset.docId;\n if(!fileId) return false;\n\n if(appImManager.chat.input.sendMessageWithDocument(fileId, undefined, clearDraft)) {\n /* dropdown.classList.remove('active');\n toggleEl.classList.remove('active'); */\n if(emoticonsDropdown.container) {\n emoticonsDropdown.forceClose = true;\n emoticonsDropdown.container.classList.add('disable-hover');\n emoticonsDropdown.toggle(false);\n }\n\n return true;\n } else {\n console.warn('got no doc by id:', fileId);\n return false;\n }\n };\n\n public addLazyLoadQueueRepeat(lazyLoadQueue: LazyLoadQueueIntersector, processInvisibleDiv: (div: HTMLElement) => void) {\n this.addEventListener('close', () => {\n lazyLoadQueue.lock();\n });\n\n this.addEventListener('closed', () => {\n const divs = lazyLoadQueue.intersector.getVisible();\n\n for(const div of divs) {\n processInvisibleDiv(div);\n }\n\n lazyLoadQueue.intersector.clearVisible();\n });\n\n this.addEventListener('opened', () => {\n lazyLoadQueue.unlockAndRefresh();\n });\n }\n\n public getSavedRange() {\n return this.getGoodRange() || this.savedRange;\n }\n\n private getGoodRange() {\n const sel = document.getSelection();\n if(sel.rangeCount && document.activeElement === appImManager.chat.input.messageInput) {\n return sel.getRangeAt(0);\n }\n }\n}\n\nconst emoticonsDropdown = new EmoticonsDropdown();\nMOUNT_CLASS_TO.emoticonsDropdown = emoticonsDropdown;\nexport default emoticonsDropdown;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppImManager } from \"../../lib/appManagers/appImManager\";\r\nimport type { AppMessagesManager, HistoryResult, HistoryStorage, MyMessage } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type { AppStickersManager } from \"../../lib/appManagers/appStickersManager\";\r\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\r\nimport type { AppInlineBotsManager } from \"../../lib/appManagers/appInlineBotsManager\";\r\nimport type { AppPhotosManager } from \"../../lib/appManagers/appPhotosManager\";\r\nimport type { MyDocument } from \"../../lib/appManagers/appDocsManager\";\r\nimport type { AppPeersManager } from \"../../lib/appManagers/appPeersManager\";\r\nimport type { AppProfileManager } from \"../../lib/appManagers/appProfileManager\";\r\nimport type { AppDraftsManager } from \"../../lib/appManagers/appDraftsManager\";\r\nimport type { AppMessagesIdsManager } from \"../../lib/appManagers/appMessagesIdsManager\";\r\nimport type Chat from \"./chat\";\r\nimport { CHAT_ANIMATION_GROUP } from \"../../lib/appManagers/appImManager\";\r\nimport { getObjectKeysAndSort } from \"../../helpers/object\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport { logger } from \"../../lib/logger\";\r\nimport rootScope, { BroadcastEvents } from \"../../lib/rootScope\";\r\nimport BubbleGroups from \"./bubbleGroups\";\r\nimport PopupDatePicker from \"../popups/datePicker\";\r\nimport PopupForward from \"../popups/forward\";\r\nimport PopupStickers from \"../popups/stickers\";\r\nimport ProgressivePreloader from \"../preloader\";\r\nimport Scrollable, { SliceSides } from \"../scrollable\";\r\nimport StickyIntersector from \"../stickyIntersector\";\r\nimport animationIntersector from \"../animationIntersector\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\nimport { IS_ANDROID, IS_APPLE, IS_MOBILE, IS_SAFARI } from \"../../environment/userAgent\";\r\nimport I18n, { i18n, langPack } from \"../../lib/langPack\";\r\nimport AvatarElement from \"../avatar\";\r\nimport { ripple } from \"../ripple\";\r\nimport { wrapAlbum, wrapPhoto, wrapVideo, wrapDocument, wrapSticker, wrapPoll, wrapGroupedDocuments } from \"../wrappers\";\r\nimport { MessageRender } from \"./messageRender\";\r\nimport LazyLoadQueue from \"../lazyLoadQueue\";\r\nimport ListenerSetter from \"../../helpers/listenerSetter\";\r\nimport PollElement from \"../poll\";\r\nimport AudioElement from \"../audio\";\r\nimport { Message, MessageEntity, MessageReplyHeader, Photo, PhotoSize, ReplyMarkup, Update, WebPage } from \"../../layer\";\r\nimport { REPLIES_PEER_ID } from \"../../lib/mtproto/mtproto_config\";\r\nimport { FocusDirection } from \"../../helpers/fastSmoothScroll\";\r\nimport useHeavyAnimationCheck, { getHeavyAnimationPromise, dispatchHeavyAnimationEvent, interruptHeavyAnimation } from \"../../hooks/useHeavyAnimationCheck\";\r\nimport { fastRaf, fastRafPromise } from \"../../helpers/schedulers\";\r\nimport { deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport RepliesElement from \"./replies\";\r\nimport DEBUG from \"../../config/debug\";\r\nimport { SliceEnd } from \"../../helpers/slicedArray\";\r\nimport serverTimeManager from \"../../lib/mtproto/serverTimeManager\";\r\nimport PeerTitle from \"../peerTitle\";\r\nimport { forEachReverse } from \"../../helpers/array\";\r\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\r\nimport findUpTag from \"../../helpers/dom/findUpTag\";\r\nimport { toast } from \"../toast\";\r\nimport { getElementByPoint } from \"../../helpers/dom/getElementByPoint\";\r\nimport { getMiddleware } from \"../../helpers/middleware\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport htmlToDocumentFragment from \"../../helpers/dom/htmlToDocumentFragment\";\r\nimport positionElementByIndex from \"../../helpers/dom/positionElementByIndex\";\r\nimport reflowScrollableElement from \"../../helpers/dom/reflowScrollableElement\";\r\nimport replaceContent from \"../../helpers/dom/replaceContent\";\r\nimport setInnerHTML from \"../../helpers/dom/setInnerHTML\";\r\nimport whichChild from \"../../helpers/dom/whichChild\";\r\nimport { cancelAnimationByKey } from \"../../helpers/animation\";\r\nimport assumeType from \"../../helpers/assumeType\";\r\nimport { EmoticonsDropdown } from \"../emoticonsDropdown\";\r\nimport debounce from \"../../helpers/schedulers/debounce\";\r\nimport { formatNumber } from \"../../helpers/number\";\r\nimport { SEND_WHEN_ONLINE_TIMESTAMP } from \"../../lib/mtproto/constants\";\r\nimport windowSize from \"../../helpers/windowSize\";\r\nimport { formatPhoneNumber } from \"../../helpers/formatPhoneNumber\";\r\nimport AppMediaViewer from \"../appMediaViewer\";\r\n\r\nconst USE_MEDIA_TAILS = false;\r\nconst IGNORE_ACTIONS: Set = new Set([\r\n 'messageActionHistoryClear',\r\n 'messageActionChatCreate'/* ,\r\n 'messageActionChannelMigrateFrom' */\r\n]);\r\n\r\nconst TEST_SCROLL_TIMES: number = undefined;\r\nlet TEST_SCROLL = TEST_SCROLL_TIMES;\r\n\r\nlet queueId = 0;\r\n\r\ntype GenerateLocalMessageType = IsService extends true ? Message.messageService : Message.message;\r\n\r\nexport default class ChatBubbles {\r\n public bubblesContainer: HTMLDivElement;\r\n private chatInner: HTMLDivElement;\r\n public scrollable: Scrollable;\r\n\r\n private getHistoryTopPromise: Promise;\r\n private getHistoryBottomPromise: Promise;\r\n\r\n public peerId = 0;\r\n //public messagesCount: number = -1;\r\n\r\n private unreadOut = new Set();\r\n public needUpdate: {replyToPeerId: number, replyMid: number, mid: number}[] = []; // if need wrapSingleMessage\r\n\r\n public bubbles: {[mid: string]: HTMLDivElement} = {};\r\n public skippedMids: Set = new Set();\r\n private dateMessages: {[timestamp: number]: { \r\n div: HTMLDivElement, \r\n firstTimestamp: number, \r\n container: HTMLDivElement,\r\n timeout?: number \r\n }} = {};\r\n\r\n private scrolledDown = true;\r\n private isScrollingTimeout = 0;\r\n\r\n private stickyIntersector: StickyIntersector;\r\n\r\n private unreadedObserver: IntersectionObserver;\r\n private unreaded: Map = new Map();\r\n private unreadedSeen: Set = new Set();\r\n private readPromise: Promise;\r\n\r\n private bubbleGroups: BubbleGroups;\r\n\r\n private preloader: ProgressivePreloader = null;\r\n \r\n private loadedTopTimes = 0;\r\n private loadedBottomTimes = 0;\r\n\r\n private messagesQueuePromise: Promise = null;\r\n private messagesQueue: {message: any, bubble: HTMLElement, reverse: boolean, promises: Promise[]}[] = [];\r\n private messagesQueueOnRender: () => void = null;\r\n private messagesQueueOnRenderAdditional: () => void = null;\r\n\r\n private firstUnreadBubble: HTMLDivElement = null;\r\n private attachedUnreadBubble: boolean;\r\n\r\n public lazyLoadQueue: LazyLoadQueue;\r\n\r\n private middleware = getMiddleware();\r\n\r\n private log: ReturnType;\r\n\r\n public listenerSetter: ListenerSetter;\r\n\r\n private replyFollowHistory: number[] = [];\r\n\r\n private isHeavyAnimationInProgress = false;\r\n private scrollingToBubble: HTMLElement;\r\n\r\n private isFirstLoad = true;\r\n private needReflowScroll: boolean;\r\n\r\n private fetchNewPromise: Promise;\r\n private historyStorage: HistoryStorage;\r\n\r\n private passEntities: Partial<{\r\n [_ in MessageEntity['_']]: boolean\r\n }> = {};\r\n\r\n private onAnimateLadder: () => Promise | void;\r\n // private ladderDeferred: CancellablePromise;\r\n private resolveLadderAnimation: () => Promise;\r\n private emptyPlaceholderMid: number;\r\n\r\n private viewsObserver: IntersectionObserver;\r\n private viewsMids: Set = new Set();\r\n private sendViewCountersDebounced: () => Promise;\r\n\r\n constructor(private chat: Chat, \r\n private appMessagesManager: AppMessagesManager, \r\n private appStickersManager: AppStickersManager, \r\n private appUsersManager: AppUsersManager, \r\n private appInlineBotsManager: AppInlineBotsManager, \r\n private appPhotosManager: AppPhotosManager, \r\n private appPeersManager: AppPeersManager,\r\n private appProfileManager: AppProfileManager,\r\n private appDraftsManager: AppDraftsManager,\r\n private appMessagesIdsManager: AppMessagesIdsManager\r\n ) {\r\n //this.chat.log.error('Bubbles construction');\r\n \r\n this.listenerSetter = new ListenerSetter();\r\n\r\n this.bubblesContainer = document.createElement('div');\r\n this.bubblesContainer.classList.add('bubbles', 'scrolled-down');\r\n\r\n this.chatInner = document.createElement('div');\r\n this.chatInner.classList.add('bubbles-inner');\r\n\r\n this.setScroll();\r\n\r\n this.bubblesContainer.append(this.scrollable.container);\r\n\r\n // * constructor end\r\n\r\n this.log = this.chat.log;\r\n this.bubbleGroups = new BubbleGroups(this.chat);\r\n this.preloader = new ProgressivePreloader({\r\n cancelable: false\r\n });\r\n this.lazyLoadQueue = new LazyLoadQueue();\r\n this.lazyLoadQueue.queueId = ++queueId;\r\n\r\n // * events\r\n\r\n // will call when sent for update pos\r\n this.listenerSetter.add(rootScope)('history_update', ({storage, peerId, mid}) => {\r\n if(this.chat.getMessagesStorage() === storage) {\r\n const bubble = this.bubbles[mid];\r\n if(!bubble) return;\r\n\r\n const message = this.chat.getMessage(mid);\r\n \r\n if(+bubble.dataset.timestamp >= (message.date + serverTimeManager.serverTimeOffset - 1)) {\r\n //this.bubbleGroups.addBubble(bubble, message, false); // ! TEMP COMMENTED\r\n return;\r\n }\r\n\r\n this.setBubblePosition(bubble, message, false);\r\n //this.log('history_update', this.bubbles[mid], mid, message);\r\n\r\n if(this.scrollingToBubble) {\r\n this.scrollToBubbleEnd();\r\n }\r\n\r\n //this.renderMessage(message, false, false, bubble);\r\n }\r\n });\r\n\r\n //this.listenerSetter.add(rootScope)('')\r\n\r\n this.listenerSetter.add(rootScope)('dialog_flush', ({peerId}) => {\r\n if(this.peerId === peerId) {\r\n this.deleteMessagesByIds(Object.keys(this.bubbles).map(m => +m));\r\n }\r\n });\r\n\r\n // Calls when message successfully sent and we have an id\r\n this.listenerSetter.add(rootScope)('message_sent', (e) => {\r\n const {storage, tempId, tempMessage, mid} = e;\r\n\r\n // ! can't use peerId to validate here, because id can be the same in 'scheduled' and 'chat' types\r\n if(this.chat.getMessagesStorage() !== storage) {\r\n return;\r\n }\r\n \r\n //this.log('message_sent', e);\r\n\r\n const mounted = this.getMountedBubble(tempId, tempMessage) || this.getMountedBubble(mid);\r\n if(mounted) {\r\n const message = this.chat.getMessage(mid);\r\n const bubble = mounted.bubble;\r\n //this.bubbles[mid] = bubble;\r\n \r\n /////this.log('message_sent', bubble);\r\n\r\n if(message.replies) {\r\n const repliesElement = bubble.querySelector('replies-element') as RepliesElement;\r\n if(repliesElement) {\r\n repliesElement.message = message;\r\n repliesElement.init();\r\n }\r\n }\r\n\r\n if(message.media?.document && !message.media.document.type) {\r\n const div = bubble.querySelector(`.document-container[data-mid=\"${tempId}\"] .document`);\r\n if(div) {\r\n div.replaceWith(wrapDocument({message}));\r\n }\r\n }\r\n\r\n // set new mids to album items for mediaViewer\r\n if(message.grouped_id) {\r\n const item = (bubble.querySelector(`.grouped-item[data-mid=\"${tempId}\"]`) as HTMLElement) || bubble; // * it can be .document-container\r\n if(item) {\r\n item.dataset.mid = '' + mid;\r\n }\r\n }\r\n\r\n if(message.media?.poll) {\r\n const pollElement = bubble.querySelector('poll-element') as PollElement;\r\n if(pollElement) {\r\n const newPoll = message.media.poll;\r\n pollElement.message = message;\r\n pollElement.setAttribute('poll-id', newPoll.id);\r\n pollElement.setAttribute('message-id', '' + mid);\r\n }\r\n }\r\n\r\n if(message.media?.document) {\r\n const element = bubble.querySelector(`audio-element[data-mid=\"${tempId}\"], .document[data-doc-id=\"${tempId}\"], .media-round[data-mid=\"${tempId}\"]`) as HTMLElement;\r\n if(element) {\r\n if(element instanceof AudioElement || element.classList.contains('media-round')) {\r\n element.dataset.mid = '' + message.mid;\r\n delete element.dataset.isOutgoing;\r\n (element as any).message = message;\r\n (element as any).onLoad(true);\r\n } else {\r\n element.dataset.docId = message.media.document.id;\r\n }\r\n }\r\n }\r\n\r\n /* bubble.classList.remove('is-sending');\r\n bubble.classList.add('is-sent');\r\n bubble.dataset.mid = '' + mid;\r\n\r\n this.bubbleGroups.removeBubble(bubble, tempId); */\r\n\r\n if(message.media?.webpage && !bubble.querySelector('.web')) {\r\n getHeavyAnimationPromise().then(() => {\r\n this.safeRenderMessage(message, true, false, bubble, false);\r\n this.scrollToBubbleIfLast(bubble);\r\n });\r\n /* const mounted = this.getMountedBubble(mid);\r\n if(!mounted) return;\r\n this.renderMessage(mounted.message, true, false, mounted.bubble, false); */\r\n }\r\n \r\n //delete this.bubbles[tempId];\r\n } else {\r\n this.log.warn('message_sent there is no bubble', e);\r\n }\r\n\r\n const bubbles = this.bubbles;\r\n if(bubbles[tempId]) {\r\n const bubble = bubbles[tempId];\r\n bubbles[mid] = bubble;\r\n delete bubbles[tempId];\r\n\r\n //getHeavyAnimationPromise().then(() => {\r\n fastRaf(() => {\r\n if(bubble.classList.contains('is-sending')) {\r\n bubble.classList.remove('is-sending');\r\n bubble.classList.add(this.peerId === rootScope.myId && this.chat.type !== 'scheduled' ? 'is-read' : 'is-sent');\r\n }\r\n });\r\n //});\r\n\r\n bubble.dataset.mid = '' + mid;\r\n }\r\n\r\n if(this.unreadOut.has(tempId)) {\r\n this.unreadOut.delete(tempId);\r\n this.unreadOut.add(mid);\r\n }\r\n\r\n // * check timing of scheduled message\r\n if(this.chat.type === 'scheduled') {\r\n const timestamp = Date.now() / 1000 | 0;\r\n const maxTimestamp = tempMessage.date - 10;\r\n //this.log('scheduled timing:', timestamp, maxTimestamp);\r\n if(timestamp >= maxTimestamp) {\r\n this.deleteMessagesByIds([mid]);\r\n }\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('message_edit', ({storage, peerId, mid}) => {\r\n // fastRaf(() => {\r\n if(storage !== this.chat.getMessagesStorage()) return;\r\n const message = this.chat.getMessage(mid);\r\n const mounted = message.grouped_id ? this.getGroupedBubble(message.grouped_id) : this.getMountedBubble(mid);\r\n if(!mounted) return;\r\n\r\n const updatePosition = this.chat.type === 'scheduled';\r\n const scrolledDown = this.scrolledDown;\r\n this.safeRenderMessage(mounted.message, true, false, mounted.bubble, updatePosition);\r\n if(scrolledDown) {\r\n this.scrollToBubbleIfLast(mounted.bubble);\r\n }\r\n\r\n if(updatePosition) {\r\n (this.messagesQueuePromise || Promise.resolve()).then(() => {\r\n this.deleteEmptyDateGroups();\r\n });\r\n }\r\n // });\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('album_edit', ({peerId, groupId, deletedMids}) => {\r\n //fastRaf(() => { // ! can't use delayed smth here, need original bubble to be edited\r\n if(peerId !== this.peerId) return;\r\n const mids = this.appMessagesManager.getMidsByAlbum(groupId);\r\n const renderedId = mids.concat(deletedMids).find(mid => this.bubbles[mid]);\r\n if(!renderedId) return;\r\n\r\n const renderMaxId = getObjectKeysAndSort(this.appMessagesManager.groupedMessagesStorage[groupId], 'asc').pop();\r\n\r\n this.safeRenderMessage(this.chat.getMessage(renderMaxId), true, false, this.bubbles[renderedId], false);\r\n //});\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('messages_downloaded', ({peerId, mids}) => {\r\n const middleware = this.getMiddleware();\r\n getHeavyAnimationPromise().then(() => {\r\n if(!middleware()) return;\r\n\r\n (mids as number[]).forEach(mid => {\r\n /* const promise = (this.scrollable.scrollLocked && this.scrollable.scrollLockedPromise) || Promise.resolve();\r\n promise.then(() => {\r\n \r\n }); */\r\n forEachReverse(this.needUpdate, (obj, idx) => {\r\n if(obj.replyMid === mid && obj.replyToPeerId === peerId) {\r\n const {mid, replyMid} = this.needUpdate.splice(idx, 1)[0];\r\n \r\n //this.log('messages_downloaded', mid, replyMid, i, this.needUpdate, this.needUpdate.length, mids, this.bubbles[mid]);\r\n const bubble = this.bubbles[mid];\r\n if(!bubble) return;\r\n \r\n const message = this.chat.getMessage(mid);\r\n \r\n const repliedMessage = this.appMessagesManager.getMessageByPeer(obj.replyToPeerId, replyMid);\r\n if(repliedMessage.deleted) { // ! чтобы не пыталось бесконечно загрузить удалённое сообщение\r\n delete message.reply_to_mid; // ! WARNING!\r\n }\r\n \r\n MessageRender.setReply({\r\n chat: this.chat,\r\n bubble,\r\n message\r\n });\r\n }\r\n });\r\n });\r\n });\r\n });\r\n\r\n // attachClickEvent(this.bubblesContainer, this.onBubblesClick, {listenerSetter: this.listenerSetter});\r\n this.listenerSetter.add(this.bubblesContainer)('click', this.onBubblesClick/* , {capture: true, passive: false} */);\r\n\r\n if(DEBUG) {\r\n this.listenerSetter.add(this.bubblesContainer)('dblclick', (e) => {\r\n const bubble = findUpClassName(e.target, 'grouped-item') || findUpClassName(e.target, 'bubble');\r\n if(bubble) {\r\n const mid = +bubble.dataset.mid\r\n this.log('debug message:', this.chat.getMessage(mid));\r\n this.highlightBubble(bubble);\r\n }\r\n });\r\n }\r\n\r\n if(!IS_MOBILE) {\r\n this.listenerSetter.add(this.bubblesContainer)('dblclick', (e) => {\r\n if(this.chat.selection.isSelecting || \r\n !this.appMessagesManager.canSendToPeer(this.peerId, this.chat.threadId)) {\r\n return;\r\n }\r\n \r\n const target = e.target as HTMLElement;\r\n const bubble = target.classList.contains('bubble') ? \r\n target : \r\n (target.classList.contains('document-selection') ? target.parentElement : null);\r\n if(bubble && !bubble.classList.contains('bubble-first')) {\r\n const mid = +bubble.dataset.mid;\r\n const message = this.chat.getMessage(mid);\r\n if(message.pFlags.is_outgoing) {\r\n return;\r\n }\r\n \r\n this.chat.input.initMessageReply(mid);\r\n }\r\n });\r\n }\r\n\r\n /* if(false) */this.stickyIntersector = new StickyIntersector(this.scrollable.container, (stuck, target) => {\r\n for(const timestamp in this.dateMessages) {\r\n const dateMessage = this.dateMessages[timestamp];\r\n if(dateMessage.container === target) {\r\n dateMessage.div.classList.toggle('is-sticky', stuck);\r\n break;\r\n }\r\n }\r\n });\r\n\r\n\r\n let middleware: ReturnType;\r\n useHeavyAnimationCheck(() => {\r\n this.isHeavyAnimationInProgress = true;\r\n this.lazyLoadQueue.lock();\r\n middleware = this.getMiddleware();\r\n }, () => {\r\n this.isHeavyAnimationInProgress = false;\r\n\r\n if(middleware && middleware()) {\r\n this.lazyLoadQueue.unlock();\r\n this.lazyLoadQueue.refresh();\r\n }\r\n\r\n middleware = null;\r\n }, this.listenerSetter);\r\n }\r\n\r\n public constructPeerHelpers() {\r\n // will call when message is sent (only 1)\r\n this.listenerSetter.add(rootScope)('history_append', ({storage, mid}) => {\r\n if(storage !== this.chat.getMessagesStorage()) return;\r\n\r\n if(!this.scrollable.loadedAll.bottom) {\r\n this.chat.setMessageId();\r\n } else {\r\n this.renderNewMessagesByIds([mid], true);\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('history_multiappend', (msgIdsByPeer) => {\r\n if(!(this.peerId in msgIdsByPeer)) return;\r\n const msgIds = Array.from(msgIdsByPeer[this.peerId]).slice().sort((a, b) => b - a);\r\n this.renderNewMessagesByIds(msgIds);\r\n });\r\n \r\n this.listenerSetter.add(rootScope)('history_delete', ({peerId, msgs}) => {\r\n if(peerId === this.peerId) {\r\n this.deleteMessagesByIds(Array.from(msgs));\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('dialog_unread', ({peerId}) => {\r\n if(peerId === this.peerId) {\r\n this.chat.input.setUnreadCount();\r\n this.updateUnreadByDialog();\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('dialogs_multiupdate', (dialogs) => {\r\n if(dialogs[this.peerId]) {\r\n this.chat.input.setUnreadCount();\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('dialog_notify_settings', (dialog) => {\r\n if(this.peerId === dialog.peerId) {\r\n this.chat.input.setUnreadCount();\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\r\n if(this.peerId === -chatId) {\r\n const hadRights = this.chatInner.classList.contains('has-rights');\r\n const hasRights = this.appMessagesManager.canSendToPeer(this.peerId, this.chat.threadId);\r\n\r\n if(hadRights !== hasRights) {\r\n this.finishPeerChange();\r\n this.chat.input.updateMessageInput();\r\n }\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('settings_updated', (e: BroadcastEvents['settings_updated']) => {\r\n if(e.key === 'settings.emoji.big') {\r\n const isScrolledDown = this.scrollable.isScrolledDown;\r\n if(!isScrolledDown) {\r\n this.setMessagesQueuePromise();\r\n }\r\n \r\n const mids = getObjectKeysAndSort(this.bubbles, 'desc');\r\n mids.forEach(mid => {\r\n const bubble = this.bubbles[mid];\r\n if(bubble.classList.contains('can-have-big-emoji')) {\r\n const message = this.chat.getMessage(mid);\r\n this.safeRenderMessage(message, undefined, false, bubble);\r\n // this.bubbleGroups.addBubble(bubble, message, false);\r\n }\r\n });\r\n\r\n if(isScrolledDown) {\r\n this.scrollable.scrollTop = 99999;\r\n } else {\r\n this.performHistoryResult([], true, false, undefined);\r\n }\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('message_views', ({peerId, views, mid}) => {\r\n if(this.peerId !== peerId) return;\r\n\r\n fastRaf(() => {\r\n const bubble = this.bubbles[mid];\r\n if(!bubble) return;\r\n\r\n const postViewsElements = Array.from(bubble.querySelectorAll('.post-views')) as HTMLElement[];\r\n if(postViewsElements.length) {\r\n const str = formatNumber(views, 1);\r\n let different = false;\r\n postViewsElements.forEach(postViews => {\r\n if(different || postViews.innerHTML !== str) {\r\n different = true;\r\n postViews.innerHTML = str;\r\n }\r\n });\r\n }\r\n });\r\n });\r\n\r\n this.unreadedObserver = new IntersectionObserver((entries) => {\r\n entries.forEach(entry => {\r\n if(entry.isIntersecting) {\r\n const target = entry.target as HTMLElement;\r\n const mid = this.unreaded.get(target as HTMLElement);\r\n this.onUnreadedInViewport(target, mid);\r\n }\r\n });\r\n });\r\n\r\n this.viewsObserver = new IntersectionObserver((entries) => {\r\n entries.forEach(entry => {\r\n if(entry.isIntersecting) {\r\n this.viewsMids.add(+(entry.target as HTMLElement).dataset.mid);\r\n this.viewsObserver.unobserve(entry.target);\r\n this.sendViewCountersDebounced();\r\n }\r\n });\r\n });\r\n\r\n this.sendViewCountersDebounced = debounce(() => {\r\n const mids = [...this.viewsMids];\r\n this.viewsMids.clear();\r\n\r\n this.appMessagesManager.incrementMessageViews(this.peerId, mids);\r\n }, 1000, false, true);\r\n\r\n if('ResizeObserver' in window) {\r\n let wasHeight = this.scrollable.container.offsetHeight;\r\n let resizing = false;\r\n let skip = false;\r\n let scrolled = 0;\r\n let part = 0;\r\n let rAF = 0;\r\n\r\n const onResizeEnd = () => {\r\n const height = this.scrollable.container.offsetHeight;\r\n const isScrolledDown = this.scrollable.isScrolledDown;\r\n if(height !== wasHeight && (!skip || !isScrolledDown)) { // * fix opening keyboard while ESG is active, offsetHeight will change right between 'start' and this first frame\r\n part += wasHeight - height;\r\n }\r\n\r\n /* if(DEBUG) {\r\n this.log('resize end', scrolled, part, this.scrollable.scrollTop, height, wasHeight, this.scrollable.isScrolledDown);\r\n } */\r\n\r\n if(part) {\r\n this.scrollable.scrollTop += Math.round(part);\r\n }\r\n\r\n wasHeight = height;\r\n scrolled = 0;\r\n rAF = 0;\r\n part = 0;\r\n resizing = false;\r\n skip = false;\r\n };\r\n\r\n const setEndRAF = (single: boolean) => {\r\n if(rAF) window.cancelAnimationFrame(rAF);\r\n rAF = window.requestAnimationFrame(single ? onResizeEnd : () => {\r\n rAF = window.requestAnimationFrame(onResizeEnd);\r\n //this.log('resize after RAF', part);\r\n });\r\n };\r\n\r\n const processEntries = (entries: any) => {\r\n if(skip) {\r\n setEndRAF(false);\r\n return;\r\n }\r\n\r\n const entry = entries[0];\r\n const height = entry.contentRect.height;/* Math.ceil(entry.contentRect.height); */\r\n \r\n if(!wasHeight) {\r\n wasHeight = height;\r\n return;\r\n }\r\n\r\n const realDiff = wasHeight - height;\r\n let diff = realDiff + part;\r\n const _part = diff % 1;\r\n diff -= _part;\r\n \r\n if(!resizing) {\r\n resizing = true;\r\n\r\n /* if(DEBUG) {\r\n this.log('resize start', realDiff, this.scrollable.scrollTop, this.scrollable.container.offsetHeight, this.scrollable.isScrolledDown);\r\n } */\r\n\r\n if(realDiff < 0 && this.scrollable.isScrolledDown) {\r\n //if(isSafari) { // * fix opening keyboard while ESG is active \r\n part = -realDiff;\r\n //}\r\n\r\n skip = true;\r\n setEndRAF(false);\r\n return;\r\n }\r\n }\r\n\r\n scrolled += diff;\r\n\r\n /* if(DEBUG) {\r\n this.log('resize', wasHeight - height, diff, this.scrollable.container.offsetHeight, this.scrollable.isScrolledDown, height, wasHeight);\r\n } */\r\n\r\n if(diff) {\r\n const needScrollTop = this.scrollable.scrollTop + diff;\r\n this.scrollable.scrollTop = needScrollTop;\r\n }\r\n \r\n setEndRAF(false);\r\n\r\n part = _part;\r\n wasHeight = height;\r\n };\r\n\r\n // @ts-ignore\r\n const resizeObserver = new ResizeObserver(processEntries);\r\n resizeObserver.observe(this.bubblesContainer);\r\n }\r\n }\r\n\r\n public getRenderedLength() {\r\n return Object.keys(this.bubbles).length - this.skippedMids.size;\r\n }\r\n\r\n private onUnreadedInViewport(target: HTMLElement, mid: number) {\r\n this.unreadedSeen.add(mid);\r\n this.unreadedObserver.unobserve(target);\r\n this.unreaded.delete(target);\r\n this.readUnreaded();\r\n }\r\n\r\n private readUnreaded() {\r\n if(this.readPromise) return;\r\n\r\n const middleware = this.getMiddleware();\r\n this.readPromise = rootScope.idle.focusPromise.then(() => {\r\n if(!middleware()) return;\r\n let maxId = Math.max(...Array.from(this.unreadedSeen));\r\n\r\n // ? if message with maxId is not rendered ?\r\n if(this.scrollable.loadedAll.bottom) {\r\n const bubblesMaxId = Math.max(...Object.keys(this.bubbles).map(i => +i));\r\n if(maxId >= bubblesMaxId) {\r\n maxId = Math.max(this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId).maxId || 0, maxId);\r\n }\r\n }\r\n\r\n this.unreaded.forEach((mid, target) => {\r\n if(mid <= maxId) {\r\n this.onUnreadedInViewport(target, mid);\r\n }\r\n });\r\n\r\n const readContents: number[] = [];\r\n for(const mid of this.unreadedSeen) {\r\n const message: MyMessage = this.chat.getMessage(mid);\r\n if(this.appMessagesManager.isMentionUnread(message)) {\r\n readContents.push(mid);\r\n }\r\n }\r\n\r\n this.appMessagesManager.readMessages(this.peerId, readContents);\r\n\r\n this.unreadedSeen.clear();\r\n\r\n if(DEBUG) {\r\n this.log('will readHistory by maxId:', maxId);\r\n }\r\n\r\n // return;\r\n \r\n return this.appMessagesManager.readHistory(this.peerId, maxId, this.chat.threadId).catch((err: any) => {\r\n this.log.error('readHistory err:', err);\r\n this.appMessagesManager.readHistory(this.peerId, maxId, this.chat.threadId);\r\n }).finally(() => {\r\n if(!middleware()) return;\r\n this.readPromise = undefined;\r\n\r\n if(this.unreadedSeen.size) {\r\n this.readUnreaded();\r\n }\r\n });\r\n });\r\n }\r\n\r\n public constructPinnedHelpers() {\r\n this.listenerSetter.add(rootScope)('peer_pinned_messages', (e) => {\r\n const {peerId, mids, pinned} = e;\r\n if(peerId !== this.peerId) return;\r\n\r\n if(mids) {\r\n if(!pinned) {\r\n this.deleteMessagesByIds(mids);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public constructScheduledHelpers() {\r\n const onUpdate = () => {\r\n this.chat.topbar.setTitle(this.appMessagesManager.getScheduledMessagesStorage(this.peerId).size);\r\n };\r\n\r\n this.listenerSetter.add(rootScope)('scheduled_new', ({peerId, mid}) => {\r\n if(peerId !== this.peerId) return;\r\n\r\n this.renderNewMessagesByIds([mid]);\r\n onUpdate();\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('scheduled_delete', ({peerId, mids}) => {\r\n if(peerId !== this.peerId) return;\r\n\r\n this.deleteMessagesByIds(mids);\r\n onUpdate();\r\n });\r\n }\r\n\r\n public onBubblesClick = (e: Event) => {\r\n let target = e.target as HTMLElement;\r\n let bubble: HTMLElement = null;\r\n try {\r\n bubble = findUpClassName(target, 'bubble');\r\n } catch(err) {}\r\n \r\n if(!bubble) return;\r\n\r\n if(bubble.classList.contains('is-date') && findUpClassName(target, 'bubble-content')) {\r\n if(bubble.classList.contains('is-sticky') && !this.chatInner.classList.contains('is-scrolling')) {\r\n return;\r\n }\r\n\r\n for(const timestamp in this.dateMessages) {\r\n const d = this.dateMessages[timestamp];\r\n if(d.div === bubble) {\r\n new PopupDatePicker(new Date(+timestamp), this.onDatePick).show();\r\n break;\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED && findUpClassName(target, 'time')) {\r\n this.chat.selection.toggleByElement(bubble);\r\n return;\r\n }\r\n\r\n // ! Trusted - due to audio autoclick\r\n if(this.chat.selection.isSelecting && e.isTrusted) {\r\n if(bubble.classList.contains('service') && bubble.dataset.mid === undefined) {\r\n return;\r\n }\r\n\r\n cancelEvent(e);\r\n //console.log('bubble click', e);\r\n\r\n if(IS_TOUCH_SUPPORTED && this.chat.selection.selectedText) {\r\n this.chat.selection.selectedText = undefined;\r\n return;\r\n }\r\n\r\n //this.chatSelection.toggleByBubble(bubble);\r\n this.chat.selection.toggleByElement(findUpClassName(target, 'grouped-item') || bubble);\r\n return;\r\n }\r\n\r\n const contactDiv: HTMLElement = findUpClassName(target, 'contact');\r\n if(contactDiv) {\r\n this.chat.appImManager.setInnerPeer(+contactDiv.dataset.peerId);\r\n return;\r\n }\r\n\r\n const commentsDiv: HTMLElement = findUpClassName(target, 'replies');\r\n if(commentsDiv) {\r\n const bubbleMid = +bubble.dataset.mid;\r\n if(this.peerId === REPLIES_PEER_ID) {\r\n const message = this.chat.getMessage(bubbleMid) as Message.message;\r\n const peerId = this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id);\r\n const threadId = message.reply_to.reply_to_top_id;\r\n const lastMsgId = message.fwd_from.saved_from_msg_id;\r\n this.chat.appImManager.openThread(peerId, lastMsgId, threadId);\r\n } else {\r\n const message = this.appMessagesManager.filterMessages(this.chat.getMessage(bubbleMid), message => !!(message as Message.message).replies)[0] as Message.message;\r\n const replies = message.replies;\r\n if(replies) {\r\n this.appMessagesManager.getDiscussionMessage(this.peerId, message.mid).then(message => {\r\n this.chat.appImManager.setInnerPeer(-replies.channel_id, undefined, 'discussion', (message as MyMessage).mid);\r\n });\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n const nameDiv = findUpClassName(target, 'peer-title') || findUpClassName(target, 'name') || findUpTag(target, 'AVATAR-ELEMENT');\r\n if(nameDiv) {\r\n target = nameDiv || target;\r\n const peerId = +(target.dataset.peerId || target.getAttribute('peer'));\r\n const savedFrom = target.dataset.savedFrom;\r\n if(nameDiv.classList.contains('is-via')) {\r\n const message = '@' + this.appUsersManager.getUser(peerId).username + ' ';\r\n this.appDraftsManager.setDraft(this.peerId, this.chat.threadId, message);\r\n cancelEvent(e);\r\n } else if(savedFrom) {\r\n const splitted = savedFrom.split('_');\r\n const peerId = +splitted[0];\r\n const msgId = +splitted[1];\r\n\r\n this.chat.appImManager.setInnerPeer(peerId, msgId);\r\n } else {\r\n if(peerId) {\r\n this.chat.appImManager.setInnerPeer(peerId);\r\n } else {\r\n toast(I18n.format('HidAccount', true));\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n //this.log('chatInner click:', target);\r\n const isVideoComponentElement = target.tagName === 'SPAN' && !target.classList.contains('emoji');\r\n /* if(isVideoComponentElement) {\r\n const video = target.parentElement.querySelector('video') as HTMLElement;\r\n if(video) {\r\n video.click(); // hot-fix for time and play button\r\n return;\r\n }\r\n } */\r\n\r\n if(bubble.classList.contains('sticker') && target.parentElement.classList.contains('attachment')) {\r\n const messageId = +bubble.dataset.mid;\r\n const message = this.chat.getMessage(messageId);\r\n\r\n const doc = message.media?.document;\r\n\r\n if(doc?.stickerSetInput) {\r\n new PopupStickers(doc.stickerSetInput).show();\r\n }\r\n\r\n return;\r\n }\r\n\r\n const documentDiv = findUpClassName(target, 'document-with-thumb');\r\n if((target.tagName === 'IMG' && !target.classList.contains('emoji') && !target.classList.contains('document-thumb')) \r\n || target.classList.contains('album-item')\r\n || isVideoComponentElement\r\n || (target.tagName === 'VIDEO' && !bubble.classList.contains('round'))\r\n || (documentDiv && !documentDiv.querySelector('.preloader-container'))) {\r\n const groupedItem = findUpClassName(target, 'album-item') || findUpClassName(target, 'document-container');\r\n const messageId = +(groupedItem || bubble).dataset.mid;\r\n const message = this.chat.getMessage(messageId);\r\n if(!message) {\r\n this.log.warn('no message by messageId:', messageId);\r\n return;\r\n }\r\n\r\n const f = documentDiv ? (media: any) => {\r\n return AppMediaViewer.isMediaCompatibleForDocumentViewer(media);\r\n } : (media: any) => {\r\n return media._ === 'photo' || ['video', 'gif'].includes(media.type);\r\n };\r\n\r\n const targets: {element: HTMLElement, mid: number, peerId: number}[] = [];\r\n const ids = Object.keys(this.bubbles).map(k => +k).filter(id => {\r\n //if(!this.scrollable.visibleElements.find(e => e.element === this.bubbles[id])) return false;\r\n\r\n const message = this.chat.getMessage(id);\r\n const media = this.appMessagesManager.getMediaFromMessage(message);\r\n \r\n return media && f(media);\r\n }).sort((a, b) => a - b);\r\n\r\n ids.forEach(id => {\r\n let selector: string;\r\n if(documentDiv) {\r\n selector = '.document-container';\r\n } else {\r\n const withTail = this.bubbles[id].classList.contains('with-media-tail');\r\n selector = '.album-item video, .album-item img, .preview video, .preview img, ';\r\n if(withTail) {\r\n selector += '.bubble__media-container';\r\n } else {\r\n selector += '.attachment video, .attachment img';\r\n }\r\n }\r\n\r\n const elements = Array.from(this.bubbles[id].querySelectorAll(selector)) as HTMLElement[];\r\n const parents: Set = new Set();\r\n if(documentDiv) {\r\n elements.forEach((element) => {\r\n targets.push({\r\n element: element.querySelector('.document-ico'),\r\n mid: +element.dataset.mid,\r\n peerId: this.peerId\r\n });\r\n });\r\n } else {\r\n const hasAspecter = !!this.bubbles[id].querySelector('.media-container-aspecter');\r\n elements.forEach((element) => {\r\n if(hasAspecter && !findUpClassName(element, 'media-container-aspecter')) return;\r\n let albumItem = findUpClassName(element, 'album-item');\r\n const parent = albumItem || element.parentElement;\r\n if(parents.has(parent)) return;\r\n parents.add(parent);\r\n targets.push({\r\n element,\r\n mid: albumItem ? +albumItem.dataset.mid : id,\r\n peerId: this.peerId\r\n });\r\n });\r\n }\r\n });\r\n\r\n targets.sort((a, b) => a.mid - b.mid);\r\n\r\n let idx = targets.findIndex(t => t.mid === messageId);\r\n\r\n if(DEBUG) {\r\n this.log('open mediaViewer single with ids:', ids, idx, targets);\r\n }\r\n\r\n if(!targets[idx]) {\r\n this.log('no target for media viewer!', target);\r\n return;\r\n }\r\n\r\n new AppMediaViewer()\r\n .setSearchContext({\r\n threadId: this.chat.threadId,\r\n peerId: this.peerId,\r\n inputFilter: {_: documentDiv ? 'inputMessagesFilterDocument' : 'inputMessagesFilterPhotoVideo'},\r\n useSearch: this.chat.type !== 'scheduled',\r\n isScheduled: this.chat.type === 'scheduled'\r\n })\r\n .openMedia(message, targets[idx].element, 0, true, targets.slice(0, idx), targets.slice(idx + 1));\r\n \r\n cancelEvent(e);\r\n //appMediaViewer.openMedia(message, target as HTMLImageElement);\r\n return;\r\n }\r\n \r\n if(['IMG', 'DIV', 'SPAN'/* , 'A' */].indexOf(target.tagName) === -1) target = findUpTag(target, 'DIV');\r\n \r\n if(['DIV', 'SPAN'].indexOf(target.tagName) !== -1/* || target.tagName === 'A' */) {\r\n if(target.classList.contains('goto-original')) {\r\n const savedFrom = bubble.dataset.savedFrom;\r\n const splitted = savedFrom.split('_');\r\n const peerId = +splitted[0];\r\n const msgId = +splitted[1];\r\n ////this.log('savedFrom', peerId, msgID);\r\n this.chat.appImManager.setInnerPeer(peerId, msgId);\r\n return;\r\n } else if(target.classList.contains('forward')) {\r\n const mid = +bubble.dataset.mid;\r\n const message = this.appMessagesManager.getMessageByPeer(this.peerId, mid);\r\n new PopupForward({\r\n [this.peerId]: this.appMessagesManager.getMidsByMessage(message)\r\n });\r\n //appSidebarRight.forwardTab.open([mid]);\r\n return;\r\n }\r\n \r\n let isReplyClick = false;\r\n \r\n try {\r\n isReplyClick = !!findUpClassName(e.target, 'reply');\r\n } catch(err) {}\r\n \r\n if(isReplyClick && bubble.classList.contains('is-reply')/* || bubble.classList.contains('forwarded') */) {\r\n const bubbleMid = +bubble.dataset.mid;\r\n this.replyFollowHistory.push(bubbleMid);\r\n\r\n const message = this.chat.getMessage(bubbleMid) as Message.message;\r\n\r\n const replyToPeerId = message.reply_to.reply_to_peer_id ? this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) : this.peerId;\r\n const replyToMid = message.reply_to.reply_to_msg_id;\r\n\r\n this.chat.appImManager.setInnerPeer(replyToPeerId, replyToMid, this.chat.type, this.chat.threadId);\r\n\r\n /* if(this.chat.type === 'discussion') {\r\n this.chat.appImManager.setMessageId(, originalMessageId);\r\n } else {\r\n this.chat.appImManager.setInnerPeer(this.peerId, originalMessageId);\r\n } */\r\n //this.chat.setMessageId(, originalMessageId);\r\n }\r\n }\r\n \r\n //console.log('chatInner click', e);\r\n };\r\n\r\n public onGoDownClick() {\r\n if(this.replyFollowHistory.length) {\r\n forEachReverse(this.replyFollowHistory, (mid, idx) => {\r\n const bubble = this.bubbles[mid];\r\n let bad = true;\r\n if(bubble) {\r\n const rect = bubble.getBoundingClientRect();\r\n bad = (windowSize.windowH / 2) > rect.top;\r\n } else {\r\n const message = this.chat.getMessage(mid);\r\n if(!message.deleted) {\r\n bad = false;\r\n }\r\n }\r\n \r\n if(bad) {\r\n this.replyFollowHistory.splice(idx, 1);\r\n }\r\n });\r\n\r\n this.replyFollowHistory.sort((a, b) => b - a);\r\n\r\n const mid = this.replyFollowHistory.pop();\r\n this.chat.setMessageId(mid);\r\n } else {\r\n this.chat.setMessageId(/* , dialog.top_message */);\r\n // const dialog = this.appMessagesManager.getDialogByPeerId(this.peerId)[0];\r\n \r\n // if(dialog) {\r\n // this.chat.setPeer(this.peerId/* , dialog.top_message */);\r\n // } else {\r\n // this.log('will scroll down 3');\r\n // this.scroll.scrollTop = this.scroll.scrollHeight;\r\n // }\r\n }\r\n }\r\n\r\n public getBubbleByPoint(verticalSide: 'top' | 'bottom') {\r\n let element = getElementByPoint(this.scrollable.container, verticalSide, 'center');\r\n /* if(element) {\r\n if(element.classList.contains('bubbles-date-group')) {\r\n const children = Array.from(element.children) as HTMLElement[];\r\n if(verticalSide === 'top') {\r\n element = children[this.stickyIntersector ? 2 : 1];\r\n } else {\r\n element = children[children.length - 1];\r\n }\r\n } else {\r\n element = findUpClassName(element, 'bubble');\r\n if(element && element.classList.contains('is-date')) {\r\n element = element.nextElementSibling as HTMLElement;\r\n }\r\n }\r\n } */\r\n if(element) element = findUpClassName(element, 'bubble');\r\n\r\n return element;\r\n }\r\n\r\n public getGroupedBubble(groupId: string) {\r\n const group = this.appMessagesManager.groupedMessagesStorage[groupId];\r\n for(const [mid] of group) {\r\n if(this.bubbles[mid]) {\r\n const maxId = Math.max(...group.keys()); // * because in scheduled album can be rendered by lowest mid during sending\r\n return {\r\n bubble: this.bubbles[mid], \r\n mid: +mid,\r\n message: this.chat.getMessage(maxId)\r\n };\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getBubbleGroupedItems(bubble: HTMLElement) {\r\n return Array.from(bubble.querySelectorAll('.grouped-item')) as HTMLElement[];\r\n }\r\n\r\n public getMountedBubble(mid: number, message = this.chat.getMessage(mid)) {\r\n if(message.grouped_id && this.appMessagesManager.getMidsByAlbum(message.grouped_id).length > 1) {\r\n const a = this.getGroupedBubble(message.grouped_id);\r\n if(a) {\r\n a.bubble = a.bubble.querySelector(`.document-container[data-mid=\"${mid}\"]`) || a.bubble;\r\n return a;\r\n }\r\n }\r\n\r\n const bubble = this.bubbles[mid];\r\n if(!bubble) return;\r\n\r\n return {bubble, mid, message};\r\n }\r\n\r\n private findNextMountedBubbleByMsgId(mid: number) {\r\n return this.bubbles[getObjectKeysAndSort(this.bubbles).find(id => {\r\n if(id < mid) return false;\r\n return !!this.bubbles[id]?.parentElement;\r\n })];\r\n }\r\n\r\n public loadMoreHistory(top: boolean, justLoad = false) {\r\n //this.log('loadMoreHistory', top);\r\n if(!this.peerId || \r\n /* TEST_SCROLL || */ \r\n this.chat.setPeerPromise || \r\n this.isHeavyAnimationInProgress || \r\n (top && (this.getHistoryTopPromise || this.scrollable.loadedAll.top)) || \r\n (!top && (this.getHistoryBottomPromise || this.scrollable.loadedAll.bottom))\r\n ) {\r\n return;\r\n }\r\n\r\n // warning, если иды только отрицательные то вниз не попадёт (хотя мб и так не попадёт)\r\n const history = Object.keys(this.bubbles).map(id => +id).sort((a, b) => a - b);\r\n if(!history.length) return;\r\n \r\n if(top) {\r\n if(DEBUG) {\r\n this.log('Will load more (up) history by id:', history[0], 'maxId:', history[history.length - 1], justLoad/* , history */);\r\n }\r\n\r\n /* if(history.length === 75) {\r\n this.log('load more', this.scrollable.scrollHeight, this.scrollable.scrollTop, this.scrollable);\r\n return;\r\n } */\r\n /* false && */this.getHistory(history[0], true, undefined, undefined, justLoad);\r\n } else {\r\n //let dialog = this.appMessagesManager.getDialogByPeerId(this.peerId)[0];\r\n const historyStorage = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId);\r\n \r\n // if scroll down after search\r\n if(history.indexOf(historyStorage.maxId) !== -1) {\r\n this.setLoaded('bottom', true);\r\n return;\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('Will load more (down) history by id:', history[history.length - 1], justLoad/* , history */);\r\n }\r\n\r\n /* false && */this.getHistory(history[history.length - 1], false, true, undefined, justLoad);\r\n }\r\n }\r\n\r\n public onScroll = () => {\r\n //return;\r\n \r\n // * В таком случае, кнопка не будет моргать если чат в самом низу, и правильно отработает случай написания нового сообщения и проскролла вниз\r\n if(this.isHeavyAnimationInProgress && this.scrolledDown) return;\r\n //lottieLoader.checkAnimations(false, 'chat');\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n if(this.isScrollingTimeout) {\r\n clearTimeout(this.isScrollingTimeout);\r\n } else if(!this.chatInner.classList.contains('is-scrolling')) {\r\n this.chatInner.classList.add('is-scrolling');\r\n }\r\n \r\n this.isScrollingTimeout = window.setTimeout(() => {\r\n this.chatInner.classList.remove('is-scrolling');\r\n this.isScrollingTimeout = 0;\r\n }, 1350);\r\n }\r\n \r\n if(this.scrollable.getDistanceToEnd() < 300 && this.scrollable.loadedAll.bottom) {\r\n this.bubblesContainer.classList.add('scrolled-down');\r\n this.scrolledDown = true;\r\n } else if(this.bubblesContainer.classList.contains('scrolled-down')) {\r\n this.bubblesContainer.classList.remove('scrolled-down');\r\n this.scrolledDown = false;\r\n }\r\n\r\n if(this.chat.topbar.pinnedMessage) {\r\n this.chat.topbar.pinnedMessage.setCorrectIndex(this.scrollable.lastScrollDirection);\r\n }\r\n };\r\n\r\n public setScroll() {\r\n this.scrollable = new Scrollable(null, 'IM', /* 10300 */300);\r\n this.setLoaded('top', false);\r\n this.setLoaded('bottom', false);\r\n\r\n this.scrollable.container.append(this.chatInner);\r\n\r\n /* const getScrollOffset = () => {\r\n //return Math.round(Math.max(300, appPhotosManager.windowH / 1.5));\r\n return 300; \r\n };\r\n\r\n window.addEventListener('resize', () => {\r\n this.scrollable.onScrollOffset = getScrollOffset();\r\n });\r\n\r\n this.scrollable = new Scrollable(this.bubblesContainer, 'y', 'IM', this.chatInner, getScrollOffset()); */\r\n\r\n this.scrollable.onAdditionalScroll = this.onScroll;\r\n this.scrollable.onScrolledTop = () => this.loadMoreHistory(true);\r\n this.scrollable.onScrolledBottom = () => this.loadMoreHistory(false);\r\n //this.scrollable.attachSentinels(undefined, 300);\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n this.scrollable.container.addEventListener('touchmove', () => {\r\n if(this.isScrollingTimeout) {\r\n clearTimeout(this.isScrollingTimeout);\r\n } else if(!this.chatInner.classList.contains('is-scrolling')) {\r\n this.chatInner.classList.add('is-scrolling');\r\n }\r\n }, {passive: true});\r\n\r\n this.scrollable.container.addEventListener('touchend', () => {\r\n if(!this.chatInner.classList.contains('is-scrolling')) {\r\n return;\r\n }\r\n\r\n if(this.isScrollingTimeout) {\r\n clearTimeout(this.isScrollingTimeout);\r\n }\r\n\r\n this.isScrollingTimeout = window.setTimeout(() => {\r\n this.chatInner.classList.remove('is-scrolling');\r\n this.isScrollingTimeout = 0;\r\n }, 1350);\r\n }, {passive: true});\r\n }\r\n }\r\n\r\n public updateUnreadByDialog() {\r\n const historyStorage = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId);\r\n const maxId = this.peerId === rootScope.myId ? historyStorage.readMaxId : historyStorage.readOutboxMaxId;\r\n \r\n ///////this.log('updateUnreadByDialog', maxId, dialog, this.unreadOut);\r\n \r\n for(const msgId of this.unreadOut) {\r\n if(msgId > 0 && msgId <= maxId) {\r\n const bubble = this.bubbles[msgId];\r\n if(bubble) {\r\n bubble.classList.remove('is-sent', 'is-sending'); // is-sending can be when there are bulk of updates (e.g. sending command to Stickers bot)\r\n bubble.classList.add('is-read');\r\n }\r\n \r\n this.unreadOut.delete(msgId);\r\n }\r\n }\r\n }\r\n \r\n public deleteMessagesByIds(mids: number[], permanent = true) {\r\n mids.forEach(mid => {\r\n if(!(mid in this.bubbles)) return;\r\n \r\n /* const mounted = this.getMountedBubble(mid);\r\n if(!mounted) return; */\r\n\r\n const bubble = this.bubbles[mid];\r\n delete this.bubbles[mid];\r\n this.skippedMids.delete(mid);\r\n\r\n if(this.firstUnreadBubble === bubble) {\r\n this.firstUnreadBubble = null;\r\n }\r\n\r\n this.bubbleGroups.removeBubble(bubble);\r\n if(this.unreadedObserver) {\r\n this.unreadedObserver.unobserve(bubble);\r\n this.unreaded.delete(bubble);\r\n }\r\n if(this.viewsObserver) {\r\n this.viewsObserver.unobserve(bubble);\r\n this.viewsMids.delete(mid);\r\n }\r\n //this.unreaded.findAndSplice(mid => mid === id);\r\n bubble.remove();\r\n //bubble.remove();\r\n\r\n if(this.emptyPlaceholderMid === mid) {\r\n this.emptyPlaceholderMid = undefined;\r\n }\r\n });\r\n\r\n if(permanent && this.chat.selection.isSelecting) {\r\n this.chat.selection.deleteSelectedMids(this.peerId, mids);\r\n }\r\n \r\n animationIntersector.checkAnimations(false, CHAT_ANIMATION_GROUP);\r\n this.deleteEmptyDateGroups();\r\n }\r\n \r\n public renderNewMessagesByIds(mids: number[], scrolledDown = this.scrolledDown) {\r\n if(!this.scrollable.loadedAll.bottom) { // seems search active or sliced\r\n //this.log('renderNewMessagesByIds: seems search is active, skipping render:', mids);\r\n return;\r\n }\r\n\r\n if(this.chat.threadId) {\r\n mids = mids.filter(mid => {\r\n const message = this.chat.getMessage(mid);\r\n const replyTo = message.reply_to as MessageReplyHeader;\r\n return replyTo && (replyTo.reply_to_top_id || replyTo.reply_to_msg_id) === this.chat.threadId;\r\n });\r\n }\r\n\r\n mids = mids.filter(mid => !this.bubbles[mid]);\r\n // ! should scroll even without new messages\r\n /* if(!mids.length) {\r\n return;\r\n } */\r\n\r\n if(!scrolledDown) {\r\n if(this.scrollingToBubble && this.scrollingToBubble === this.getLastBubble()) {\r\n scrolledDown = true;\r\n }\r\n }\r\n\r\n const promise = this.performHistoryResult(mids, false, true);\r\n if(scrolledDown) {\r\n promise.then(() => {\r\n //this.log('renderNewMessagesByIDs: messagesQueuePromise after', this.scrollable.isScrolledDown);\r\n //this.scrollable.scrollTo(this.scrollable.scrollHeight, 'top', true, true, 5000);\r\n //const bubble = this.bubbles[Math.max(...mids)];\r\n\r\n let bubble: HTMLElement;\r\n if(this.chat.type === 'scheduled') {\r\n bubble = this.bubbles[Math.max(...mids)];\r\n }\r\n\r\n this.scrollToBubbleEnd(bubble);\r\n\r\n //this.scrollable.scrollIntoViewNew(this.chatInner, 'end');\r\n\r\n /* setTimeout(() => {\r\n this.log('messagesQueuePromise afterafter:', this.chatInner.childElementCount, this.scrollable.scrollHeight);\r\n }, 10); */\r\n });\r\n }\r\n }\r\n\r\n public getLastBubble() {\r\n const lastDateGroup = this.getLastDateGroup();\r\n if(lastDateGroup) {\r\n return lastDateGroup.lastElementChild as HTMLElement;\r\n }\r\n }\r\n\r\n public scrollToBubble(\r\n element: HTMLElement, \r\n position: ScrollLogicalPosition,\r\n forceDirection?: FocusDirection,\r\n forceDuration?: number\r\n ) {\r\n // * 4 = .25rem\r\n const bubble = findUpClassName(element, 'bubble');\r\n\r\n // * if it's a start, then scroll to start of the group\r\n if(position === 'center' && whichChild(bubble) === (this.stickyIntersector ? 2 : 1)) {\r\n const dateGroup = bubble.parentElement;\r\n if(whichChild(dateGroup) === 0) {\r\n element = dateGroup;\r\n position = 'start';\r\n }\r\n }\r\n\r\n return this.scrollable.scrollIntoViewNew(element, position, 4, undefined, forceDirection, forceDuration);\r\n }\r\n\r\n public scrollToBubbleEnd(bubble = this.getLastBubble()) {\r\n /* if(DEBUG) {\r\n this.log('scrollToNewLastBubble: will scroll into view:', bubble);\r\n } */\r\n\r\n if(bubble) {\r\n this.scrollingToBubble = bubble;\r\n const middleware = this.getMiddleware();\r\n this.scrollToBubble(bubble, 'end').then(() => {\r\n if(!middleware()) return;\r\n this.scrollingToBubble = undefined;\r\n });\r\n }\r\n }\r\n\r\n // ! can't get it by chatInner.lastElementChild because placeholder can be the last...\r\n private getLastDateGroup() {\r\n let lastTime = 0, lastElem: HTMLElement;\r\n for(const i in this.dateMessages) {\r\n const dateMessage = this.dateMessages[i];\r\n if(dateMessage.firstTimestamp > lastTime) {\r\n lastElem = dateMessage.container;\r\n lastTime = dateMessage.firstTimestamp;\r\n }\r\n }\r\n\r\n return lastElem;\r\n }\r\n\r\n public scrollToBubbleIfLast(bubble: HTMLElement) {\r\n if(bubble.parentElement.lastElementChild === bubble && \r\n this.getLastDateGroup().parentElement.lastElementChild === bubble.parentElement) {\r\n this.scrollToBubbleEnd(bubble);\r\n }\r\n }\r\n\r\n public highlightBubble(element: HTMLElement) {\r\n const datasetKey = 'highlightTimeout';\r\n if(element.dataset[datasetKey]) {\r\n clearTimeout(+element.dataset[datasetKey]);\r\n element.classList.remove('is-highlighted');\r\n void element.offsetWidth; // reflow\r\n }\r\n\r\n element.classList.add('is-highlighted');\r\n element.dataset[datasetKey] = '' + setTimeout(() => {\r\n element.classList.remove('is-highlighted');\r\n delete element.dataset[datasetKey];\r\n }, 2000);\r\n }\r\n\r\n public getDateContainerByMessage(message: any, reverse: boolean) {\r\n const date = new Date(message.date * 1000);\r\n date.setHours(0, 0, 0);\r\n const dateTimestamp = date.getTime();\r\n if(!this.dateMessages[dateTimestamp]) {\r\n let dateElement: HTMLElement;\r\n \r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n const isScheduled = this.chat.type === 'scheduled';\r\n \r\n if(today.getTime() === date.getTime()) {\r\n dateElement = i18n(isScheduled ? 'Chat.Date.ScheduledForToday' : 'Date.Today');\r\n } else if(isScheduled && message.date === SEND_WHEN_ONLINE_TIMESTAMP) {\r\n dateElement = i18n('MessageScheduledUntilOnline');\r\n } else {\r\n const options: Intl.DateTimeFormatOptions = {\r\n day: 'numeric',\r\n month: 'long'\r\n };\r\n\r\n if(date.getFullYear() !== today.getFullYear()) {\r\n options.year = 'numeric';\r\n }\r\n\r\n dateElement = new I18n.IntlDateElement({\r\n date,\r\n options\r\n }).element;\r\n\r\n if(isScheduled) {\r\n dateElement = i18n('Chat.Date.ScheduledFor', [dateElement]);\r\n }\r\n }\r\n \r\n const bubble = document.createElement('div');\r\n bubble.className = 'bubble service is-date';\r\n const bubbleContent = document.createElement('div');\r\n bubbleContent.classList.add('bubble-content');\r\n const serviceMsg = document.createElement('div');\r\n serviceMsg.classList.add('service-msg');\r\n\r\n serviceMsg.append(dateElement);\r\n\r\n bubbleContent.append(serviceMsg);\r\n bubble.append(bubbleContent);\r\n ////////this.log('need to render date message', dateTimestamp, str);\r\n\r\n const container = document.createElement('div');\r\n container.className = 'bubbles-date-group';\r\n container.append(bubble);\r\n\r\n this.dateMessages[dateTimestamp] = {\r\n div: bubble,\r\n container,\r\n firstTimestamp: date.getTime()\r\n };\r\n\r\n const haveTimestamps = getObjectKeysAndSort(this.dateMessages, 'asc');\r\n let i = 0, length = haveTimestamps.length, insertBefore: HTMLElement; // there can be 'first bubble' (e.g. bot description) so can't insert by index\r\n for(; i < haveTimestamps.length; ++i) {\r\n const t = haveTimestamps[i];\r\n insertBefore = this.dateMessages[t].container;\r\n if(dateTimestamp < t) {\r\n break;\r\n }\r\n }\r\n\r\n if(i === length && insertBefore) {\r\n insertBefore = insertBefore.nextElementSibling as HTMLElement;\r\n }\r\n\r\n if(!insertBefore) {\r\n this.chatInner.append(container);\r\n } else {\r\n this.chatInner.insertBefore(container, insertBefore);\r\n }\r\n\r\n if(this.stickyIntersector) {\r\n this.stickyIntersector.observeStickyHeaderChanges(container);\r\n }\r\n }\r\n\r\n return this.dateMessages[dateTimestamp];\r\n }\r\n\r\n public destroy() {\r\n //this.chat.log.error('Bubbles destroying');\r\n\r\n this.scrollable.onScrolledTop = this.scrollable.onScrolledBottom = this.scrollable.onAdditionalScroll = null;\r\n\r\n this.listenerSetter.removeAll();\r\n\r\n this.lazyLoadQueue.clear();\r\n this.unreadedObserver && this.unreadedObserver.disconnect();\r\n this.viewsObserver && this.viewsObserver.disconnect();\r\n this.stickyIntersector && this.stickyIntersector.disconnect();\r\n\r\n delete this.lazyLoadQueue;\r\n this.unreadedObserver && delete this.unreadedObserver;\r\n this.viewsObserver && delete this.viewsObserver;\r\n this.stickyIntersector && delete this.stickyIntersector;\r\n }\r\n\r\n public cleanup(bubblesToo = false) {\r\n ////console.time('appImManager cleanup');\r\n this.setLoaded('top', false);\r\n this.setLoaded('bottom', false);\r\n\r\n // cancel scroll\r\n cancelAnimationByKey(this.scrollable.container);\r\n\r\n // do not wait ending of previous scale animation\r\n interruptHeavyAnimation();\r\n\r\n if(TEST_SCROLL !== undefined) {\r\n TEST_SCROLL = TEST_SCROLL_TIMES;\r\n }\r\n\r\n this.bubbles = {};\r\n this.skippedMids.clear();\r\n this.dateMessages = {};\r\n this.bubbleGroups.cleanup();\r\n this.unreadOut.clear();\r\n this.needUpdate.length = 0;\r\n this.lazyLoadQueue.clear();\r\n \r\n // clear messages\r\n if(bubblesToo) {\r\n this.scrollable.container.textContent = '';\r\n }\r\n \r\n this.firstUnreadBubble = null;\r\n this.attachedUnreadBubble = false;\r\n \r\n this.messagesQueue.length = 0;\r\n this.messagesQueuePromise = null;\r\n \r\n this.getHistoryTopPromise = this.getHistoryBottomPromise = undefined;\r\n this.fetchNewPromise = undefined;\r\n \r\n if(this.stickyIntersector) {\r\n this.stickyIntersector.disconnect();\r\n }\r\n \r\n if(this.unreadedObserver) {\r\n this.unreadedObserver.disconnect();\r\n this.unreaded.clear();\r\n this.unreadedSeen.clear();\r\n this.readPromise = undefined;\r\n }\r\n\r\n if(this.viewsObserver) {\r\n this.viewsObserver.disconnect();\r\n this.viewsMids.clear();\r\n }\r\n \r\n this.loadedTopTimes = this.loadedBottomTimes = 0;\r\n \r\n this.middleware.clean();\r\n \r\n this.onAnimateLadder = undefined;\r\n this.resolveLadderAnimation = undefined;\r\n this.emptyPlaceholderMid = undefined;\r\n\r\n this.scrollingToBubble = undefined;\r\n ////console.timeEnd('appImManager cleanup');\r\n }\r\n\r\n public setPeer(peerId: number, lastMsgId?: number): {cached?: boolean, promise: Chat['setPeerPromise']} {\r\n //console.time('appImManager setPeer');\r\n //console.time('appImManager setPeer pre promise');\r\n ////console.time('appImManager: pre render start');\r\n if(!peerId) {\r\n this.cleanup(true);\r\n this.peerId = 0;\r\n return null;\r\n }\r\n\r\n const samePeer = this.peerId === peerId;\r\n\r\n /* if(samePeer && this.chat.setPeerPromise) {\r\n return {cached: true, promise: this.chat.setPeerPromise};\r\n } */\r\n\r\n this.historyStorage = this.appMessagesManager.getHistoryStorage(peerId, this.chat.threadId);\r\n let topMessage = this.chat.type === 'pinned' ? this.appMessagesManager.pinnedMessages[peerId].maxId : this.historyStorage.maxId ?? 0;\r\n const isTarget = lastMsgId !== undefined;\r\n\r\n // * this one will fix topMessage for null message in history (e.g. channel comments with only 1 comment and it is a topMessage)\r\n /* if(this.chat.type !== 'pinned' && topMessage && !historyStorage.history.slice.includes(topMessage)) {\r\n topMessage = 0;\r\n } */\r\n\r\n let readMaxId = 0, savedPosition: ReturnType;\r\n if(!isTarget) {\r\n if(!samePeer) {\r\n savedPosition = this.chat.appImManager.getChatSavedPosition(this.chat);\r\n }\r\n\r\n if(savedPosition) {\r\n \r\n } else if(topMessage) {\r\n readMaxId = this.appMessagesManager.getReadMaxIdIfUnread(peerId, this.chat.threadId);\r\n if(/* dialog.unread_count */readMaxId && !samePeer) {\r\n lastMsgId = readMaxId;\r\n } else {\r\n lastMsgId = topMessage;\r\n //lastMsgID = topMessage;\r\n }\r\n }\r\n }\r\n\r\n const isJump = lastMsgId !== topMessage;\r\n \r\n if(samePeer) {\r\n const mounted = this.getMountedBubble(lastMsgId);\r\n if(mounted) {\r\n if(isTarget) {\r\n this.scrollToBubble(mounted.bubble, 'center');\r\n this.highlightBubble(mounted.bubble);\r\n this.chat.dispatchEvent('setPeer', lastMsgId, false);\r\n } else if(topMessage && !isJump) {\r\n //this.log('will scroll down', this.scroll.scrollTop, this.scroll.scrollHeight);\r\n this.scrollable.scrollTop = this.scrollable.scrollHeight;\r\n this.chat.dispatchEvent('setPeer', lastMsgId, true);\r\n }\r\n \r\n return null;\r\n }\r\n } else {\r\n if(this.peerId) { // * set new queue id if new peer (setting not from 0)\r\n this.lazyLoadQueue.queueId = ++queueId;\r\n this.chat.apiManager.setQueueId(this.chat.bubbles.lazyLoadQueue.queueId);\r\n }\r\n\r\n this.peerId = peerId;\r\n this.replyFollowHistory.length = 0;\r\n\r\n this.passEntities = {\r\n messageEntityBotCommand: this.appPeersManager.isAnyGroup(this.peerId) || this.appUsersManager.isBot(this.peerId)\r\n };\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('setPeer peerId:', this.peerId, this.historyStorage, lastMsgId, topMessage);\r\n }\r\n\r\n // add last message, bc in getHistory will load < max_id\r\n const additionMsgId = isJump || this.chat.type === 'scheduled' ? 0 : topMessage;\r\n\r\n /* this.setPeerPromise = null;\r\n this.preloader.detach();\r\n return true; */\r\n\r\n //////appSidebarRight.toggleSidebar(true);\r\n\r\n let maxBubbleId = 0;\r\n if(samePeer) {\r\n let el = this.getBubbleByPoint('bottom'); // ! this may not work if being called when chat is hidden\r\n //this.chat.log('[PM]: setCorrectIndex: get last element perf:', performance.now() - perf, el);\r\n if(el) {\r\n maxBubbleId = +el.dataset.mid;\r\n }\r\n\r\n if(maxBubbleId <= 0) {\r\n maxBubbleId = Math.max(...Object.keys(this.bubbles).map(mid => +mid));\r\n }\r\n } else {\r\n this.isFirstLoad = true;\r\n }\r\n\r\n const oldChatInner = this.chatInner;\r\n this.cleanup();\r\n this.chatInner = document.createElement('div');\r\n if(samePeer) {\r\n this.chatInner.className = oldChatInner.className;\r\n this.chatInner.classList.remove('disable-hover', 'is-scrolling');\r\n } else {\r\n this.chatInner.classList.add('bubbles-inner');\r\n }\r\n\r\n this.lazyLoadQueue.lock();\r\n\r\n let result: ReturnType;\r\n if(!savedPosition) {\r\n result = this.getHistory(lastMsgId, true, isJump, additionMsgId);\r\n } else {\r\n result = {\r\n promise: getHeavyAnimationPromise().then(() => {\r\n return this.performHistoryResult(savedPosition.mids, true, false, undefined);\r\n }) as any,\r\n cached: true\r\n };\r\n }\r\n\r\n const {promise, cached} = result;\r\n\r\n // clear \r\n if(!cached) {\r\n if(!samePeer) {\r\n this.scrollable.container.textContent = '';\r\n //oldChatInner.remove();\r\n this.chat.finishPeerChange(isTarget, isJump, lastMsgId);\r\n this.preloader.attach(this.bubblesContainer);\r\n }\r\n }\r\n\r\n //console.timeEnd('appImManager setPeer pre promise');\r\n /* this.ladderDeferred && this.ladderDeferred.resolve();\r\n this.ladderDeferred = deferredPromise(); */\r\n \r\n animationIntersector.lockGroup(CHAT_ANIMATION_GROUP);\r\n const setPeerPromise = promise.then(() => {\r\n ////this.log('setPeer removing preloader');\r\n\r\n if(cached) {\r\n if(!samePeer) {\r\n this.chat.finishPeerChange(isTarget, isJump, lastMsgId); // * костыль\r\n }\r\n } else {\r\n this.preloader.detach();\r\n }\r\n\r\n if(this.resolveLadderAnimation) {\r\n this.resolveLadderAnimation();\r\n this.resolveLadderAnimation = undefined;\r\n }\r\n\r\n // this.ladderDeferred.resolve();\r\n\r\n this.scrollable.lastScrollDirection = 0;\r\n this.scrollable.lastScrollTop = 0;\r\n replaceContent(this.scrollable.container, this.chatInner);\r\n\r\n animationIntersector.unlockGroup(CHAT_ANIMATION_GROUP);\r\n animationIntersector.checkAnimations(false, CHAT_ANIMATION_GROUP/* , true */);\r\n\r\n //fastRaf(() => {\r\n this.lazyLoadQueue.unlock();\r\n //});\r\n\r\n //if(dialog && lastMsgID && lastMsgID !== topMessage && (this.bubbles[lastMsgID] || this.firstUnreadBubble)) {\r\n if(savedPosition) {\r\n this.scrollable.scrollTop = savedPosition.top;\r\n /* const mountedByLastMsgId = this.getMountedBubble(lastMsgId);\r\n let bubble: HTMLElement = mountedByLastMsgId?.bubble;\r\n if(!bubble?.parentElement) {\r\n bubble = this.findNextMountedBubbleByMsgId(lastMsgId);\r\n }\r\n\r\n if(bubble) {\r\n const top = bubble.getBoundingClientRect().top;\r\n const distance = savedPosition.top - top;\r\n this.scrollable.scrollTop += distance;\r\n } */\r\n } else if((topMessage && isJump) || isTarget) {\r\n const fromUp = maxBubbleId > 0 && (maxBubbleId < lastMsgId || lastMsgId < 0);\r\n const followingUnread = readMaxId === lastMsgId && !isTarget;\r\n if(!fromUp && samePeer) {\r\n this.scrollable.scrollTop = 99999;\r\n } else if(fromUp/* && (samePeer || forwardingUnread) */) {\r\n this.scrollable.scrollTop = 0;\r\n }\r\n\r\n const mountedByLastMsgId = this.getMountedBubble(lastMsgId);\r\n let bubble: HTMLElement = (followingUnread && this.firstUnreadBubble) || mountedByLastMsgId?.bubble;\r\n if(!bubble?.parentElement) {\r\n bubble = this.findNextMountedBubbleByMsgId(lastMsgId);\r\n }\r\n \r\n // ! sometimes there can be no bubble\r\n if(bubble) {\r\n this.scrollToBubble(bubble, followingUnread ? 'start' : 'center', !samePeer ? FocusDirection.Static : undefined);\r\n if(!followingUnread) {\r\n this.highlightBubble(bubble);\r\n }\r\n }\r\n } else {\r\n this.scrollable.scrollTop = 99999;\r\n }\r\n\r\n this.onScroll();\r\n\r\n const middleware = this.getMiddleware();\r\n const afterSetPromise = Promise.all([setPeerPromise, getHeavyAnimationPromise()]);\r\n afterSetPromise.then(() => { // check whether list isn't full\r\n this.scrollable.checkForTriggers();\r\n });\r\n\r\n this.chat.dispatchEvent('setPeer', lastMsgId, !isJump);\r\n\r\n const needFetchInterval = this.appMessagesManager.isFetchIntervalNeeded(peerId);\r\n const needFetchNew = savedPosition || needFetchInterval;\r\n if(!needFetchNew) {\r\n // warning\r\n if(!lastMsgId || this.bubbles[topMessage] || lastMsgId === topMessage) {\r\n this.setLoaded('bottom', true);\r\n }\r\n } else {\r\n afterSetPromise.then(() => {\r\n if(!middleware()) {\r\n return;\r\n }\r\n\r\n this.scrollable.checkForTriggers();\r\n\r\n if(needFetchInterval) {\r\n const f = () => {\r\n this.fetchNewPromise = new Promise((resolve) => {\r\n if(!middleware() || !this.appMessagesManager.isFetchIntervalNeeded(peerId)) {\r\n resolve();\r\n return;\r\n }\r\n \r\n this.appMessagesManager.getNewHistory(peerId, this.chat.threadId).then((historyStorage) => {\r\n if(!middleware() || !historyStorage) {\r\n resolve();\r\n return;\r\n }\r\n \r\n const slice = historyStorage.history.slice;\r\n const isBottomEnd = slice.isEnd(SliceEnd.Bottom);\r\n if(this.scrollable.loadedAll.bottom && this.scrollable.loadedAll.bottom !== isBottomEnd) {\r\n this.setLoaded('bottom', isBottomEnd);\r\n this.onScroll();\r\n }\r\n\r\n setTimeout(f, 30e3);\r\n resolve();\r\n });\r\n }).finally(() => {\r\n this.fetchNewPromise = undefined;\r\n });\r\n };\r\n \r\n if(samePeer) {\r\n setTimeout(f, 30e3);\r\n } else {\r\n f();\r\n }\r\n }\r\n });\r\n }\r\n \r\n this.log('scrolledAllDown:', this.scrollable.loadedAll.bottom);\r\n\r\n //if(!this.unreaded.length && dialog) { // lol\r\n if(this.scrollable.loadedAll.bottom && topMessage && !this.unreaded.size) { // lol\r\n this.onScrolledAllDown();\r\n }\r\n\r\n if(this.chat.type === 'chat') {\r\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\r\n if(dialog?.pFlags.unread_mark) {\r\n this.appMessagesManager.markDialogUnread(peerId, true);\r\n }\r\n }\r\n\r\n //this.chatInner.classList.remove('disable-hover', 'is-scrolling'); // warning, performance!\r\n\r\n /* if(!document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME)) {\r\n return new Promise((resolve) => fastRaf(resolve));\r\n } */\r\n //console.timeEnd('appImManager setPeer');\r\n }).catch(err => {\r\n this.log.error('getHistory promise error:', err);\r\n this.preloader.detach();\r\n throw err;\r\n });\r\n\r\n return {cached, promise: setPeerPromise};\r\n }\r\n\r\n public onScrolledAllDown() {\r\n if(this.chat.type === 'chat' || this.chat.type === 'discussion') {\r\n const storage = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId);\r\n this.appMessagesManager.readHistory(this.peerId, storage.maxId, this.chat.threadId, true);\r\n }\r\n }\r\n\r\n public finishPeerChange() {\r\n const peerId = this.peerId;\r\n const isChannel = this.appPeersManager.isChannel(peerId);\r\n const canWrite = this.appMessagesManager.canSendToPeer(peerId, this.chat.threadId);\r\n \r\n this.chatInner.classList.toggle('has-rights', canWrite);\r\n this.bubblesContainer.classList.toggle('is-chat-input-hidden', !canWrite);\r\n\r\n this.chatInner.classList.toggle('is-chat', this.chat.isAnyGroup());\r\n this.chatInner.classList.toggle('is-channel', isChannel);\r\n }\r\n\r\n public renderMessagesQueue(message: any, bubble: HTMLElement, reverse: boolean, promises: Promise[]) {\r\n /* let dateMessage = this.getDateContainerByMessage(message, reverse);\r\n if(reverse) dateMessage.container.insertBefore(bubble, dateMessage.div.nextSibling);\r\n else dateMessage.container.append(bubble);\r\n return; */\r\n\r\n /* if(DEBUG && message.mid === 4314759167) {\r\n this.log('renderMessagesQueue', message, bubble, reverse, promises);\r\n } */\r\n\r\n this.messagesQueue.push({message, bubble, reverse, promises});\r\n\r\n this.setMessagesQueuePromise(); \r\n }\r\n\r\n public setMessagesQueuePromise() {\r\n if(this.messagesQueuePromise || !this.messagesQueue.length) return;\r\n\r\n this.messagesQueuePromise = new Promise((resolve, reject) => {\r\n setTimeout(() => {\r\n const queue = this.messagesQueue.slice();\r\n this.messagesQueue.length = 0;\r\n\r\n const promises = queue.reduce((acc, {promises}) => acc.concat(promises), []);\r\n\r\n // * это нужно для того, чтобы если захочет подгрузить reply или какое-либо сообщение, то скролл не прервался\r\n // * если добавить этот промис - в таком случае нужно сделать, чтобы скроллило к последнему сообщению после рендера\r\n // promises.push(getHeavyAnimationPromise());\r\n\r\n this.log('promises to call', promises, queue, this.isHeavyAnimationInProgress);\r\n const middleware = this.getMiddleware();\r\n Promise.all(promises).then(() => {\r\n if(!middleware()) {\r\n throw 'setMessagesQueuePromise: peer changed!';\r\n }\r\n\r\n if(this.messagesQueueOnRender) {\r\n this.messagesQueueOnRender();\r\n }\r\n\r\n if(this.messagesQueueOnRenderAdditional) {\r\n this.messagesQueueOnRenderAdditional();\r\n }\r\n\r\n queue.forEach(({message, bubble, reverse}) => {\r\n this.setBubblePosition(bubble, message, reverse);\r\n });\r\n\r\n //setTimeout(() => {\r\n resolve();\r\n //}, 500);\r\n this.messagesQueuePromise = null;\r\n\r\n if(this.messagesQueue.length) {\r\n this.setMessagesQueuePromise();\r\n }\r\n\r\n this.setUnreadDelimiter(); // не нашёл места лучше\r\n }).catch(reject);\r\n }, 0);\r\n });\r\n\r\n //this.messagesQueuePromise.catch(() => {});\r\n }\r\n\r\n public setBubblePosition(bubble: HTMLElement, message: any, reverse: boolean) {\r\n if(message.id < 0) {\r\n this.chatInner.prepend(bubble);\r\n return;\r\n }\r\n\r\n const dateMessage = this.getDateContainerByMessage(message, reverse);\r\n if(this.chat.type === 'scheduled' || this.chat.type === 'pinned'/* || true */) { // ! TEMP COMMENTED\r\n const offset = this.stickyIntersector ? 2 : 1;\r\n let children = Array.from(dateMessage.container.children).slice(offset) as HTMLElement[];\r\n let i = 0, foundMidOnSameTimestamp = 0;\r\n for(; i < children.length; ++i) {\r\n const t = children[i];\r\n const timestamp = +t.dataset.timestamp;\r\n if(message.date < timestamp) {\r\n break;\r\n } else if(message.date === timestamp) {\r\n foundMidOnSameTimestamp = +t.dataset.mid;\r\n }\r\n \r\n if(foundMidOnSameTimestamp && message.mid < foundMidOnSameTimestamp) {\r\n break;\r\n }\r\n }\r\n \r\n // * 1 for date, 1 for date sentinel\r\n let index = offset + i;\r\n /* if(bubble.parentElement) { // * if already mounted\r\n const currentIndex = whichChild(bubble);\r\n if(index > currentIndex) {\r\n index -= 1; // * minus for already mounted\r\n }\r\n } */\r\n \r\n positionElementByIndex(bubble, dateMessage.container, index);\r\n } else {\r\n if(reverse) {\r\n dateMessage.container.insertBefore(bubble, dateMessage.container.children[this.stickyIntersector ? 1 : 0].nextSibling);\r\n } else {\r\n dateMessage.container.append(bubble);\r\n }\r\n }\r\n\r\n if(message._ === 'message') {\r\n this.bubbleGroups.addBubble(bubble, message, reverse);\r\n } else {\r\n bubble.classList.add('is-group-first', 'is-group-last');\r\n }\r\n }\r\n\r\n public getMiddleware() {\r\n return this.middleware.get();\r\n }\r\n \r\n // reverse means top\r\n private renderMessage(message: any, reverse = false, multipleRender = false, bubble: HTMLDivElement = null, updatePosition = true) {\r\n /* if(DEBUG) {\r\n this.log.debug('message to render:', message);\r\n } */\r\n if(!bubble && this.bubbles[message.mid]) {\r\n return;\r\n }\r\n\r\n //return;\r\n const albumMustBeRenderedFull = this.chat.type !== 'pinned';\r\n if(message.deleted) return;\r\n else if(message.grouped_id && albumMustBeRenderedFull) { // will render only last album's message\r\n const storage = this.appMessagesManager.groupedMessagesStorage[message.grouped_id];\r\n const maxId = Math.max(...storage.keys());\r\n if(message.mid < maxId) {\r\n return;\r\n }\r\n }\r\n \r\n const peerId = this.peerId;\r\n // * can't use 'message.pFlags.out' here because this check will be used to define side of message (left-right)\r\n const our = message.fromId === rootScope.myId || (message.pFlags.out && this.appPeersManager.isMegagroup(this.peerId));\r\n \r\n const messageDiv = document.createElement('div');\r\n messageDiv.classList.add('message');\r\n \r\n //messageDiv.innerText = message.message;\r\n\r\n let bubbleContainer: HTMLDivElement;\r\n let contentWrapper: HTMLElement;\r\n \r\n // bubble\r\n if(!bubble) {\r\n contentWrapper = document.createElement('div');\r\n contentWrapper.classList.add('bubble-content-wrapper');\r\n \r\n bubbleContainer = document.createElement('div');\r\n bubbleContainer.classList.add('bubble-content');\r\n \r\n bubble = document.createElement('div');\r\n bubble.classList.add('bubble');\r\n contentWrapper.appendChild(bubbleContainer);\r\n bubble.appendChild(contentWrapper);\r\n\r\n if(!our && !message.pFlags.out && this.unreadedObserver) {\r\n //this.log('not our message', message, message.pFlags.unread);\r\n const isUnread = message.pFlags.unread || \r\n this.appMessagesManager.isMentionUnread(message) || \r\n (this.historyStorage.readMaxId !== undefined && this.historyStorage.readMaxId < message.mid);\r\n if(isUnread) {\r\n this.unreadedObserver.observe(bubble); \r\n this.unreaded.set(bubble, message.mid);\r\n }\r\n }\r\n } else {\r\n const save = ['is-highlighted', 'is-group-first', 'is-group-last'];\r\n const wasClassNames = bubble.className.split(' ');\r\n const classNames = ['bubble'].concat(save.filter(c => wasClassNames.includes(c)));\r\n bubble.className = classNames.join(' ');\r\n\r\n contentWrapper = bubble.lastElementChild as HTMLElement;\r\n bubbleContainer = contentWrapper.firstElementChild as HTMLDivElement;\r\n bubbleContainer.innerHTML = '';\r\n bubbleContainer.style.cssText = '';\r\n contentWrapper.innerHTML = '';\r\n contentWrapper.appendChild(bubbleContainer);\r\n //bubbleContainer.style.marginBottom = '';\r\n const transitionDelay = contentWrapper.style.transitionDelay;\r\n contentWrapper.style.cssText = '';\r\n contentWrapper.style.transitionDelay = transitionDelay;\r\n\r\n if(bubble === this.firstUnreadBubble) {\r\n bubble.classList.add('is-first-unread');\r\n }\r\n\r\n // * Нужно очистить прошлую информацию, полезно если удалить последний элемент из альбома в ПОСЛЕДНЕМ БАББЛЕ ГРУППЫ (видно по аватару)\r\n const originalMid = +bubble.dataset.mid;\r\n const sameMid = +message.mid === originalMid;\r\n /* if(updatePosition) {\r\n bubble.remove(); // * for positionElementByIndex\r\n } */\r\n\r\n if(!sameMid) {\r\n delete this.bubbles[originalMid];\r\n this.skippedMids.delete(originalMid);\r\n }\r\n\r\n //bubble.innerHTML = '';\r\n }\r\n\r\n // ! reset due to album edit or delete item\r\n this.bubbles[+message.mid] = bubble;\r\n bubble.dataset.mid = message.mid;\r\n bubble.dataset.peerId = '' + message.peerId;\r\n bubble.dataset.timestamp = message.date;\r\n\r\n const loadPromises: Promise[] = [];\r\n\r\n if(message._ === 'messageService') {\r\n assumeType(message);\r\n\r\n const action = message.action;\r\n if(action) {\r\n const _ = action._;\r\n if(IGNORE_ACTIONS.has(_) || (langPack.hasOwnProperty(_) && !langPack[_])) {\r\n this.skippedMids.add(+message.mid);\r\n return bubble;\r\n }\r\n }\r\n\r\n bubble.className = 'bubble service';\r\n\r\n bubbleContainer.innerHTML = '';\r\n const s = document.createElement('div');\r\n s.classList.add('service-msg');\r\n if(action) {\r\n if(action._ === 'messageActionChannelMigrateFrom') {\r\n s.append(i18n('ChatMigration.From', [new PeerTitle({peerId: -action.chat_id}).element]));\r\n } else if(action._ === 'messageActionChatMigrateTo') {\r\n s.append(i18n('ChatMigration.To', [new PeerTitle({peerId: -action.channel_id}).element]));\r\n } else {\r\n s.append(this.appMessagesManager.wrapMessageActionTextNew(message));\r\n }\r\n }\r\n bubbleContainer.append(s);\r\n\r\n if(updatePosition) {\r\n this.renderMessagesQueue(message, bubble, reverse, loadPromises);\r\n\r\n if(message.pFlags.is_single) { // * Ignore 'Discussion started'\r\n bubble.classList.add('is-group-last');\r\n }\r\n }\r\n\r\n return bubble;\r\n }\r\n\r\n let messageMedia = message.media;\r\n\r\n let messageMessage: string, totalEntities: MessageEntity[];\r\n if(messageMedia?.document && !['video', 'gif'].includes(messageMedia.document.type)) {\r\n // * just filter these cases for documents caption\r\n } else if(message.grouped_id && albumMustBeRenderedFull) {\r\n const t = this.appMessagesManager.getAlbumText(message.grouped_id);\r\n messageMessage = t.message;\r\n //totalEntities = t.entities;\r\n totalEntities = t.totalEntities;\r\n } else if(messageMedia?.document?.type !== 'sticker') {\r\n messageMessage = message.message;\r\n //totalEntities = message.entities;\r\n totalEntities = message.totalEntities;\r\n }\r\n \r\n /* let richText = RichTextProcessor.wrapRichText(messageMessage, {\r\n entities: totalEntities\r\n }); */\r\n let richText = RichTextProcessor.wrapRichText(messageMessage, {\r\n entities: totalEntities,\r\n passEntities: this.passEntities\r\n });\r\n\r\n let canHaveTail = true;\r\n let isStandaloneMedia = false;\r\n let needToSetHTML = true;\r\n if(totalEntities && !messageMedia) {\r\n let emojiEntities = totalEntities.filter((e) => e._ === 'messageEntityEmoji');\r\n let strLength = messageMessage.length;\r\n let emojiStrLength = emojiEntities.reduce((acc: number, curr: any) => acc + curr.length, 0);\r\n \r\n if(emojiStrLength === strLength && emojiEntities.length <= 3) {\r\n if(rootScope.settings.emoji.big) {\r\n let sticker = this.appStickersManager.getAnimatedEmojiSticker(messageMessage);\r\n if(emojiEntities.length === 1 && !messageMedia && sticker) {\r\n messageMedia = {\r\n _: 'messageMediaDocument',\r\n document: sticker\r\n };\r\n } else {\r\n let attachmentDiv = document.createElement('div');\r\n attachmentDiv.classList.add('attachment');\r\n \r\n attachmentDiv.innerHTML = richText;\r\n \r\n bubble.classList.add('emoji-' + emojiEntities.length + 'x');\r\n \r\n bubbleContainer.append(attachmentDiv);\r\n }\r\n\r\n bubble.classList.add('is-message-empty', 'emoji-big');\r\n isStandaloneMedia = true;\r\n canHaveTail = false;\r\n needToSetHTML = false;\r\n }\r\n \r\n bubble.classList.add('can-have-big-emoji');\r\n }\r\n \r\n /* if(strLength === emojiStrLength) {\r\n messageDiv.classList.add('emoji-only');\r\n messageDiv.classList.add('message-empty');\r\n } */\r\n }\r\n\r\n if(needToSetHTML) {\r\n setInnerHTML(messageDiv, richText);\r\n }\r\n \r\n const timeSpan = MessageRender.setTime(this.chat, message, bubble, bubbleContainer, messageDiv);\r\n bubbleContainer.prepend(messageDiv);\r\n //bubble.prepend(timeSpan, messageDiv); // that's bad\r\n\r\n if(message.views && !message.pFlags.is_outgoing && this.viewsObserver) {\r\n this.viewsObserver.observe(bubble);\r\n }\r\n\r\n if(message.reply_markup && message.reply_markup._ === 'replyInlineMarkup' && message.reply_markup.rows && message.reply_markup.rows.length) {\r\n const rows = (message.reply_markup as ReplyMarkup.replyKeyboardMarkup).rows;\r\n\r\n const containerDiv = document.createElement('div');\r\n containerDiv.classList.add('reply-markup');\r\n rows.forEach((row) => {\r\n const buttons = row.buttons;\r\n if(!buttons || !buttons.length) return;\r\n\r\n const rowDiv = document.createElement('div');\r\n rowDiv.classList.add('reply-markup-row');\r\n\r\n buttons.forEach((button) => {\r\n const text = RichTextProcessor.wrapRichText(button.text, {noLinks: true, noLinebreaks: true});\r\n\r\n let buttonEl: HTMLButtonElement | HTMLAnchorElement;\r\n \r\n switch(button._) {\r\n case 'keyboardButtonUrl': {\r\n const r = RichTextProcessor.wrapRichText(' ', {\r\n entities: [{\r\n _: 'messageEntityTextUrl',\r\n length: 1,\r\n offset: 0,\r\n url: button.url\r\n }]\r\n });\r\n\r\n buttonEl = htmlToDocumentFragment(r).firstElementChild as HTMLAnchorElement;\r\n buttonEl.classList.add('is-link', 'tgico');\r\n\r\n break;\r\n }\r\n\r\n case 'keyboardButtonSwitchInline': {\r\n buttonEl = document.createElement('button');\r\n buttonEl.classList.add('is-switch-inline'/* , 'tgico' */);\r\n const i = document.createElement('i');\r\n i.classList.add('forward-icon');\r\n i.innerHTML = `\r\n \r\n \r\n \r\n \r\n `;\r\n buttonEl.append(i);\r\n attachClickEvent(buttonEl, (e) => {\r\n cancelEvent(e);\r\n\r\n const botId = message.viaBotId || message.fromId;\r\n let promise: Promise;\r\n if(button.pFlags.same_peer) promise = Promise.resolve(this.peerId);\r\n else promise = this.appInlineBotsManager.checkSwitchReturn(botId).then(peerId => {\r\n if(peerId) {\r\n return peerId;\r\n }\r\n \r\n return new Promise((resolve, reject) => {\r\n new PopupForward({\r\n [this.peerId]: []\r\n }, (peerId) => {\r\n resolve(peerId);\r\n }, () => {\r\n reject();\r\n }, true);\r\n });\r\n });\r\n \r\n promise.then(peerId => {\r\n const threadId = this.peerId === peerId ? this.chat.threadId : undefined;\r\n this.appInlineBotsManager.switchInlineQuery(peerId, threadId, botId, button.query);\r\n });\r\n });\r\n break;\r\n }\r\n\r\n default: {\r\n buttonEl = document.createElement('button');\r\n break;\r\n }\r\n }\r\n \r\n buttonEl.classList.add('reply-markup-button', 'rp');\r\n buttonEl.insertAdjacentHTML('beforeend', text);\r\n\r\n ripple(buttonEl);\r\n\r\n rowDiv.append(buttonEl);\r\n });\r\n\r\n containerDiv.append(rowDiv);\r\n });\r\n\r\n attachClickEvent(containerDiv, (e) => {\r\n let target = e.target as HTMLElement;\r\n \r\n if(!target.classList.contains('reply-markup-button')) target = findUpClassName(target, 'reply-markup-button');\r\n if(!target || target.classList.contains('is-link') || target.classList.contains('is-switch-inline')) return;\r\n\r\n cancelEvent(e);\r\n\r\n const column = whichChild(target);\r\n const row = rows[whichChild(target.parentElement)];\r\n\r\n if(!row.buttons || !row.buttons[column]) {\r\n this.log.warn('no such button', row, column, message);\r\n return;\r\n }\r\n\r\n const button = row.buttons[column];\r\n this.appInlineBotsManager.callbackButtonClick(this.peerId, message.mid, button);\r\n });\r\n\r\n canHaveTail = false;\r\n bubble.classList.add('with-reply-markup');\r\n contentWrapper.append(containerDiv);\r\n }\r\n \r\n const isOutgoing = message.pFlags.is_outgoing/* && this.peerId !== rootScope.myId */;\r\n if(our) {\r\n if(message.pFlags.unread || isOutgoing) this.unreadOut.add(message.mid);\r\n let status = '';\r\n if(isOutgoing) status = 'is-sending';\r\n else status = message.pFlags.unread ? 'is-sent' : 'is-read';\r\n bubble.classList.add(status);\r\n }\r\n\r\n const messageWithReplies = this.appMessagesManager.getMessageWithReplies(message);\r\n const withReplies = !!messageWithReplies && message.mid > 0;\r\n\r\n if(withReplies) {\r\n bubble.classList.add('with-replies');\r\n }\r\n\r\n const isOut = our && (!message.fwd_from || this.peerId !== rootScope.myId);\r\n let nameContainer: HTMLElement = bubbleContainer;\r\n\r\n // media\r\n if(messageMedia/* && messageMedia._ === 'messageMediaPhoto' */) {\r\n let attachmentDiv = document.createElement('div');\r\n attachmentDiv.classList.add('attachment');\r\n \r\n if(!messageMessage) {\r\n bubble.classList.add('is-message-empty');\r\n }\r\n \r\n let processingWebPage = false;\r\n \r\n switch(messageMedia._) {\r\n case 'messageMediaPhoto': {\r\n const photo = messageMedia.photo;\r\n ////////this.log('messageMediaPhoto', photo);\r\n\r\n if(!messageMessage) {\r\n canHaveTail = false;\r\n }\r\n \r\n if(!message.viaBotId) {\r\n bubble.classList.add('hide-name'); \r\n }\r\n\r\n bubble.classList.add('photo');\r\n \r\n const storage = this.appMessagesManager.groupedMessagesStorage[message.grouped_id];\r\n if(message.grouped_id && storage.size !== 1 && albumMustBeRenderedFull) {\r\n bubble.classList.add('is-album', 'is-grouped');\r\n wrapAlbum({\r\n groupId: message.grouped_id, \r\n attachmentDiv,\r\n middleware: this.getMiddleware(),\r\n isOut: our,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n chat: this.chat,\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n });\r\n \r\n break;\r\n }\r\n \r\n const withTail = !IS_ANDROID && canHaveTail && !withReplies && USE_MEDIA_TAILS;\r\n if(withTail) bubble.classList.add('with-media-tail');\r\n wrapPhoto({\r\n photo, \r\n message,\r\n container: attachmentDiv,\r\n withTail, \r\n isOut, \r\n lazyLoadQueue: this.lazyLoadQueue,\r\n middleware: this.getMiddleware(),\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n });\r\n\r\n break;\r\n }\r\n \r\n case 'messageMediaWebPage': {\r\n processingWebPage = true;\r\n \r\n let webpage: WebPage = messageMedia.webpage;\r\n ////////this.log('messageMediaWebPage', webpage);\r\n if(webpage._ !== 'webPage') {\r\n break;\r\n } \r\n \r\n bubble.classList.add('webpage');\r\n \r\n let box = document.createElement('div');\r\n box.classList.add('web');\r\n \r\n let quote = document.createElement('div');\r\n quote.classList.add('quote');\r\n\r\n let previewResizer: HTMLDivElement, preview: HTMLDivElement;\r\n const photo: Photo.photo = webpage.photo as any;\r\n if(photo || webpage.document) {\r\n previewResizer = document.createElement('div');\r\n previewResizer.classList.add('preview-resizer');\r\n preview = document.createElement('div');\r\n preview.classList.add('preview');\r\n previewResizer.append(preview);\r\n }\r\n \r\n const doc = webpage.document as MyDocument;\r\n if(doc) {\r\n if(doc.type === 'gif' || doc.type === 'video') {\r\n //if(doc.size <= 20e6) {\r\n bubble.classList.add('video');\r\n wrapVideo({\r\n doc, \r\n container: preview, \r\n message, \r\n boxWidth: mediaSizes.active.webpage.width,\r\n boxHeight: mediaSizes.active.webpage.height,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n middleware: this.getMiddleware(),\r\n isOut,\r\n group: CHAT_ANIMATION_GROUP,\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n });\r\n //}\r\n } else {\r\n const docDiv = wrapDocument({\r\n message,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n loadPromises\r\n });\r\n preview.append(docDiv);\r\n preview.classList.add('preview-with-document');\r\n //messageDiv.classList.add((webpage.type || 'document') + '-message');\r\n //doc = null;\r\n }\r\n }\r\n \r\n let quoteTextDiv = document.createElement('div');\r\n quoteTextDiv.classList.add('quote-text');\r\n\r\n if(previewResizer) {\r\n quoteTextDiv.append(previewResizer);\r\n }\r\n\r\n let t: HTMLElement;\r\n if(webpage.site_name) {\r\n const html = RichTextProcessor.wrapRichText(webpage.url);\r\n const a: HTMLAnchorElement = htmlToDocumentFragment(html).firstElementChild as any;\r\n a.classList.add('webpage-name');\r\n setInnerHTML(a, RichTextProcessor.wrapEmojiText(webpage.site_name));\r\n quoteTextDiv.append(a);\r\n t = a;\r\n }\r\n\r\n if(webpage.rTitle) {\r\n let titleDiv = document.createElement('div');\r\n titleDiv.classList.add('title');\r\n setInnerHTML(titleDiv, webpage.rTitle);\r\n quoteTextDiv.append(titleDiv);\r\n t = titleDiv;\r\n }\r\n\r\n if(webpage.rDescription) {\r\n let textDiv = document.createElement('div');\r\n textDiv.classList.add('text');\r\n setInnerHTML(textDiv, webpage.rDescription);\r\n quoteTextDiv.append(textDiv);\r\n t = textDiv;\r\n }\r\n\r\n /* if(t) {\r\n t.append(timeSpan);\r\n } else {\r\n box.classList.add('no-text');\r\n } */\r\n\r\n quote.append(quoteTextDiv);\r\n\r\n if(photo && !doc) {\r\n bubble.classList.add('photo');\r\n\r\n const size: PhotoSize.photoSize = photo.sizes[photo.sizes.length - 1] as any;\r\n let isSquare = false;\r\n if(size.w === size.h && t) {\r\n bubble.classList.add('is-square-photo');\r\n isSquare = true;\r\n this.appPhotosManager.setAttachmentSize(photo, preview, 48, 48, false);\r\n\r\n /* if(t) {\r\n t.append(timeSpan);\r\n } */\r\n } else if(size.h > size.w) {\r\n bubble.classList.add('is-vertical-photo');\r\n }\r\n\r\n wrapPhoto({\r\n photo, \r\n message, \r\n container: preview, \r\n boxWidth: isSquare ? 0 : mediaSizes.active.webpage.width, \r\n boxHeight: isSquare ? 0 : mediaSizes.active.webpage.height, \r\n isOut, \r\n lazyLoadQueue: this.lazyLoadQueue, \r\n middleware: this.getMiddleware(),\r\n loadPromises,\r\n withoutPreloader: isSquare,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n });\r\n }\r\n \r\n box.append(quote);\r\n \r\n //bubble.prepend(box);\r\n // if(timeSpan.parentElement === messageDiv) {\r\n messageDiv.insertBefore(box, timeSpan);\r\n // } else {\r\n // messageDiv.append(box);\r\n // }\r\n \r\n //this.log('night running', bubble.scrollHeight);\r\n \r\n break;\r\n }\r\n \r\n case 'messageMediaDocument': {\r\n const doc = messageMedia.document;\r\n\r\n //this.log('messageMediaDocument', doc, bubble);\r\n \r\n if(doc.sticker/* && doc.size <= 1e6 */) {\r\n bubble.classList.add('sticker');\r\n canHaveTail = false;\r\n isStandaloneMedia = true;\r\n \r\n if(doc.animated) {\r\n bubble.classList.add('sticker-animated');\r\n }\r\n \r\n const sizes = mediaSizes.active;\r\n const size = bubble.classList.contains('emoji-big') ? sizes.emojiSticker : (doc.animated ? sizes.animatedSticker : sizes.staticSticker);\r\n this.appPhotosManager.setAttachmentSize(doc, attachmentDiv, size.width, size.height);\r\n //let preloader = new ProgressivePreloader(attachmentDiv, false);\r\n bubbleContainer.style.height = attachmentDiv.style.height;\r\n bubbleContainer.style.width = attachmentDiv.style.width;\r\n //appPhotosManager.setAttachmentSize(doc, bubble);\r\n wrapSticker({\r\n doc, \r\n div: attachmentDiv,\r\n middleware: this.getMiddleware(),\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n group: CHAT_ANIMATION_GROUP,\r\n //play: !!message.pending || !multipleRender,\r\n play: true,\r\n loop: true,\r\n emoji: bubble.classList.contains('emoji-big') ? messageMessage : undefined,\r\n withThumb: true,\r\n loadPromises\r\n });\r\n } else if(doc.type === 'video' || doc.type === 'gif' || doc.type === 'round'/* && doc.size <= 20e6 */) {\r\n //this.log('never get free 2', doc);\r\n\r\n const isRound = doc.type === 'round';\r\n if(isRound) {\r\n isStandaloneMedia = true;\r\n }\r\n\r\n if(isRound || !messageMessage) {\r\n canHaveTail = false;\r\n }\r\n\r\n if(!message.viaBotId) {\r\n bubble.classList.add('hide-name');\r\n }\r\n \r\n bubble.classList.add(isRound ? 'round' : 'video');\r\n const storage = this.appMessagesManager.groupedMessagesStorage[message.grouped_id];\r\n if(message.grouped_id && storage.size !== 1 && albumMustBeRenderedFull) {\r\n bubble.classList.add('is-album', 'is-grouped');\r\n \r\n wrapAlbum({\r\n groupId: message.grouped_id, \r\n attachmentDiv,\r\n middleware: this.getMiddleware(),\r\n isOut: our,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n chat: this.chat,\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n });\r\n } else {\r\n const withTail = !IS_ANDROID && !IS_APPLE && !isRound && canHaveTail && !withReplies && USE_MEDIA_TAILS;\r\n if(withTail) bubble.classList.add('with-media-tail');\r\n wrapVideo({\r\n doc, \r\n container: attachmentDiv, \r\n message, \r\n boxWidth: mediaSizes.active.regular.width,\r\n boxHeight: mediaSizes.active.regular.height, \r\n withTail, \r\n isOut,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n middleware: this.getMiddleware(),\r\n group: CHAT_ANIMATION_GROUP,\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n searchContext: isRound ? {\r\n peerId: this.peerId,\r\n inputFilter: {_: 'inputMessagesFilterRoundVoice'},\r\n threadId: this.chat.threadId,\r\n useSearch: !message.pFlags.is_scheduled,\r\n isScheduled: message.pFlags.is_scheduled\r\n } : undefined,\r\n });\r\n }\r\n } else {\r\n const newNameContainer = wrapGroupedDocuments({\r\n albumMustBeRenderedFull,\r\n message,\r\n bubble,\r\n messageDiv,\r\n chat: this.chat,\r\n loadPromises,\r\n noAutoDownload: this.chat.noAutoDownloadMedia,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n searchContext: doc.type === 'voice' || doc.type === 'audio' ? {\r\n peerId: this.peerId,\r\n inputFilter: {_: doc.type === 'voice' ? 'inputMessagesFilterRoundVoice' : 'inputMessagesFilterMusic'},\r\n threadId: this.chat.threadId,\r\n useSearch: !message.pFlags.is_scheduled,\r\n isScheduled: message.pFlags.is_scheduled\r\n } : undefined,\r\n });\r\n\r\n if(newNameContainer) {\r\n nameContainer = newNameContainer;\r\n }\r\n\r\n const lastContainer = messageDiv.lastElementChild.querySelector('.document-message, .document-size, .audio');\r\n lastContainer && lastContainer.append(timeSpan.cloneNode(true));\r\n\r\n bubble.classList.remove('is-message-empty');\r\n messageDiv.classList.add((!(['photo', 'pdf'] as MyDocument['type'][]).includes(doc.type) ? doc.type || 'document' : 'document') + '-message');\r\n processingWebPage = true;\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'messageMediaContact': {\r\n //this.log('wrapping contact', message);\r\n\r\n const contactDiv = document.createElement('div');\r\n contactDiv.classList.add('contact');\r\n contactDiv.dataset.peerId = '' + messageMedia.user_id;\r\n\r\n messageDiv.classList.add('contact-message');\r\n processingWebPage = true;\r\n\r\n const texts = [];\r\n if(message.media.first_name) texts.push(RichTextProcessor.wrapEmojiText(message.media.first_name));\r\n if(message.media.last_name) texts.push(RichTextProcessor.wrapEmojiText(message.media.last_name));\r\n\r\n contactDiv.innerHTML = `\r\n
\r\n
${texts.join(' ')}
\r\n
${message.media.phone_number ? '+' + formatPhoneNumber(message.media.phone_number).formatted : 'Unknown phone number'}
\r\n
`;\r\n\r\n const avatarElem = new AvatarElement();\r\n avatarElem.lazyLoadQueue = this.lazyLoadQueue;\r\n avatarElem.setAttribute('peer', '' + message.media.user_id);\r\n avatarElem.classList.add('contact-avatar', 'avatar-54');\r\n\r\n contactDiv.prepend(avatarElem);\r\n\r\n bubble.classList.remove('is-message-empty');\r\n messageDiv.classList.add('contact-message');\r\n messageDiv.append(contactDiv);\r\n\r\n break;\r\n }\r\n\r\n case 'messageMediaPoll': {\r\n bubble.classList.remove('is-message-empty');\r\n \r\n const pollElement = wrapPoll(message);\r\n messageDiv.prepend(pollElement);\r\n messageDiv.classList.add('poll-message');\r\n\r\n break;\r\n }\r\n \r\n default:\r\n bubble.classList.remove('is-message-empty');\r\n messageDiv.innerHTML = 'This message is currently not supported on Telegram Web. Try desktop.telegram.org';\r\n messageDiv.append(timeSpan);\r\n this.log.warn('unrecognized media type:', message.media._, message);\r\n break;\r\n }\r\n \r\n if(!processingWebPage) {\r\n bubbleContainer.append(attachmentDiv);\r\n }\r\n\r\n /* if(bubble.classList.contains('is-message-empty') && (bubble.classList.contains('photo') || bubble.classList.contains('video'))) {\r\n bubble.classList.add('no-tail');\r\n\r\n if(!bubble.classList.contains('with-media-tail')) {\r\n bubble.classList.add('use-border-radius');\r\n }\r\n } */\r\n }\r\n\r\n if(isStandaloneMedia) {\r\n bubble.classList.add('just-media');\r\n }\r\n\r\n if(this.chat.selection.isSelecting) {\r\n this.chat.selection.toggleElementCheckbox(bubble, true);\r\n }\r\n\r\n let savedFrom = '';\r\n \r\n // const needName = ((peerId < 0 && (peerId !== message.fromId || our)) && message.fromId !== rootScope.myId) || message.viaBotId;\r\n const needName = (message.fromId !== rootScope.myId && peerId < 0 && !this.appPeersManager.isBroadcast(peerId)) || message.viaBotId;\r\n if(needName || message.fwd_from || message.reply_to_mid) { // chat\r\n let title: HTMLElement | DocumentFragment;\r\n\r\n const isForwardFromChannel = message.from_id && message.from_id._ === 'peerChannel' && message.fromId === message.fwdFromId;\r\n \r\n let isHidden = message.fwd_from && !message.fwd_from.from_id && !message.fwd_from.channel_id;\r\n if(message.viaBotId) {\r\n title = document.createElement('span');\r\n title.innerText = '@' + this.appUsersManager.getUser(message.viaBotId).username;\r\n title.classList.add('peer-title');\r\n } else if(isHidden) {\r\n ///////this.log('message to render hidden', message);\r\n title = document.createElement('span');\r\n title.innerHTML = RichTextProcessor.wrapEmojiText(message.fwd_from.from_name);\r\n title.classList.add('peer-title');\r\n //title = message.fwd_from.from_name;\r\n bubble.classList.add('hidden-profile');\r\n } else {\r\n title = new PeerTitle({peerId: message.viaBotId || message.fwdFromId || message.fromId}).element;\r\n }\r\n \r\n //this.log(title);\r\n \r\n if(message.viaBotId) {\r\n //if(!bubble.classList.contains('sticker') || true) {\r\n let nameDiv = document.createElement('div');\r\n nameDiv.classList.add('name', 'is-via');\r\n nameDiv.dataset.peerId = message.viaBotId;\r\n nameDiv.append(i18n('ViaBot'), ' ', title);\r\n nameContainer.append(nameDiv);\r\n // } else {\r\n // bubble.classList.add('hide-name');\r\n // }\r\n } else if((message.fwdFromId || message.fwd_from)) {\r\n if(this.peerId !== rootScope.myId && !isForwardFromChannel) {\r\n bubble.classList.add('forwarded');\r\n }\r\n \r\n if(message.savedFrom) {\r\n savedFrom = message.savedFrom;\r\n }\r\n \r\n //if(!bubble.classList.contains('sticker') || true) {\r\n let nameDiv = document.createElement('div');\r\n nameDiv.classList.add('name');\r\n nameDiv.dataset.peerId = message.fwdFromId;\r\n\r\n if((this.peerId === rootScope.myId || this.peerId === REPLIES_PEER_ID || isForwardFromChannel) && !isStandaloneMedia) {\r\n nameDiv.style.color = this.appPeersManager.getPeerColorById(message.fwdFromId, false);\r\n nameDiv.append(title);\r\n } else {\r\n /* const fromTitle = message.fromId === this.myID || appPeersManager.isBroadcast(message.fwdFromId || message.fromId) ? '' : `
${appPeersManager.getPeerTitle(message.fromId)}
`;\r\n nameDiv.innerHTML = fromTitle + 'Forwarded from ' + title; */\r\n if(isStandaloneMedia) {\r\n const fragment = document.createDocumentFragment();\r\n fragment.append(document.createElement('br'));\r\n fragment.append(title);\r\n title = fragment;\r\n }\r\n nameDiv.append(i18n('ForwardedFrom', [title]));\r\n\r\n if(savedFrom) {\r\n nameDiv.dataset.savedFrom = savedFrom;\r\n }\r\n }\r\n \r\n nameContainer.append(nameDiv);\r\n //}\r\n } else {\r\n if(!isStandaloneMedia && needName) {\r\n let nameDiv = document.createElement('div');\r\n nameDiv.classList.add('name');\r\n nameDiv.append(title);\r\n\r\n if(!our) {\r\n nameDiv.style.color = this.appPeersManager.getPeerColorById(message.fromId, false);\r\n }\r\n\r\n nameDiv.dataset.peerId = message.fromId;\r\n nameContainer.append(nameDiv);\r\n } else /* if(!message.reply_to_mid) */ {\r\n bubble.classList.add('hide-name');\r\n }\r\n }\r\n\r\n if(message.reply_to_mid && message.reply_to_mid !== this.chat.threadId) {\r\n MessageRender.setReply({\r\n chat: this.chat,\r\n bubble,\r\n bubbleContainer,\r\n message\r\n });\r\n }\r\n \r\n const needAvatar = this.chat.isAnyGroup() && !isOut;\r\n if(needAvatar) {\r\n let avatarElem = new AvatarElement();\r\n avatarElem.lazyLoadQueue = this.lazyLoadQueue;\r\n avatarElem.classList.add('user-avatar', 'avatar-40');\r\n avatarElem.loadPromises = loadPromises;\r\n\r\n if(!message.fwdFromId && message.fwd_from && message.fwd_from.from_name) {\r\n avatarElem.setAttribute('peer-title', /* '🔥 FF 🔥' */message.fwd_from.from_name);\r\n }\r\n\r\n avatarElem.setAttribute('peer', '' + (((message.fwd_from && (this.peerId === rootScope.myId || this.peerId === REPLIES_PEER_ID)) || isForwardFromChannel ? message.fwdFromId : message.fromId) || 0));\r\n //avatarElem.update();\r\n \r\n //this.log('exec loadDialogPhoto', message);\r\n\r\n contentWrapper.append(avatarElem);\r\n }\r\n } else {\r\n bubble.classList.add('hide-name');\r\n }\r\n\r\n if(this.chat.type === 'pinned') {\r\n savedFrom = `${this.chat.peerId}_${message.mid}`;\r\n }\r\n\r\n const isThreadStarter = messageWithReplies && messageWithReplies.mid === this.chat.threadId;\r\n if(isThreadStarter) {\r\n bubble.classList.add('is-thread-starter', 'is-group-last');\r\n }\r\n\r\n if(savedFrom && (this.chat.type === 'pinned' || message.fwd_from.saved_from_msg_id) && this.peerId !== REPLIES_PEER_ID) {\r\n const goto = document.createElement('div');\r\n goto.classList.add('bubble-beside-button', 'goto-original', 'tgico-arrow_next');\r\n bubbleContainer.append(goto);\r\n bubble.dataset.savedFrom = savedFrom;\r\n bubble.classList.add('with-beside-button');\r\n }\r\n \r\n bubble.classList.add(isOut ? 'is-out' : 'is-in');\r\n if(updatePosition) {\r\n this.renderMessagesQueue(message, bubble, reverse, loadPromises);\r\n }\r\n\r\n if(withReplies) {\r\n const isFooter = MessageRender.renderReplies({\r\n bubble,\r\n bubbleContainer,\r\n message: messageWithReplies,\r\n messageDiv,\r\n loadPromises,\r\n lazyLoadQueue: this.lazyLoadQueue\r\n });\r\n\r\n if(isFooter) {\r\n canHaveTail = true;\r\n }\r\n }\r\n\r\n if(canHaveTail) {\r\n bubble.classList.add('can-have-tail');\r\n\r\n bubbleContainer.append(generateTail());\r\n }\r\n\r\n return bubble;\r\n }\r\n\r\n private safeRenderMessage(message: any, reverse?: boolean, multipleRender?: boolean, bubble?: HTMLDivElement, updatePosition?: boolean) {\r\n try {\r\n return this.renderMessage(message, reverse, multipleRender, bubble, updatePosition);\r\n } catch(err) {\r\n this.log.error('renderMessage error:', err);\r\n }\r\n }\r\n\r\n public async performHistoryResult(history: number[], reverse: boolean, isBackLimit: boolean, additionMsgId?: number) {\r\n // commented bot getProfile in getHistory!\r\n // if(!history/* .filter((id: number) => id > 0) */.length) {\r\n // if(!isBackLimit) {\r\n // this.scrollable.loadedAll.top = true;\r\n\r\n // /* if(this.chat.type === 'discussion') {\r\n // const serviceStartMessageId = this.appMessagesManager.threadsServiceMessagesIdsStorage[this.peerId + '_' + this.chat.threadId];\r\n // if(serviceStartMessageId) history.push(serviceStartMessageId);\r\n // history.push(this.chat.threadId);\r\n // } */\r\n // } else {\r\n // this.scrollable.loadedAll.bottom = true;\r\n // }\r\n // }\r\n\r\n history = history.slice(); // need\r\n\r\n if(additionMsgId) {\r\n history.unshift(additionMsgId);\r\n }\r\n\r\n /* if(testScroll && additionMsgID) {\r\n for(let i = 0; i < 3; ++i) {\r\n let _history = history.slice();\r\n setTimeout(() => {\r\n this.performHistoryResult(_history, reverse, isBackLimit, 0, resetPromises);\r\n }, 0);\r\n }\r\n } */\r\n\r\n //console.time('appImManager render history');\r\n\r\n //await new Promise((resolve) => setTimeout(resolve, 1e3));\r\n\r\n /* if(DEBUG) {\r\n this.log('performHistoryResult: will render some messages:', history.length, this.isHeavyAnimationInProgress, this.messagesQueuePromise);\r\n } */\r\n\r\n //const padding = 10000;\r\n //const realLength = this.scrollable.container.childElementCount;\r\n let previousScrollHeightMinusTop: number/* , previousScrollHeight: number */;\r\n //if(realLength > 0/* && (reverse || isSafari) */) { // for safari need set when scrolling bottom too\r\n //if(!this.scrollable.isHeavyScrolling) {\r\n this.messagesQueueOnRender = () => {\r\n const {scrollTop, scrollHeight} = this.scrollable;\r\n\r\n //previousScrollHeight = scrollHeight;\r\n //previousScrollHeight = scrollHeight + padding;\r\n previousScrollHeightMinusTop = reverse ? scrollHeight - scrollTop : scrollTop;\r\n\r\n //this.chatInner.style.paddingTop = padding + 'px';\r\n /* if(reverse) {\r\n previousScrollHeightMinusTop = this.scrollable.scrollHeight - scrollTop;\r\n } else {\r\n previousScrollHeightMinusTop = scrollTop;\r\n } */\r\n\r\n /* if(DEBUG) {\r\n this.log('performHistoryResult: messagesQueueOnRender, scrollTop:', scrollTop, scrollHeight, previousScrollHeightMinusTop);\r\n } */\r\n this.messagesQueueOnRender = undefined;\r\n };\r\n //}\r\n //}\r\n\r\n if(this.needReflowScroll) {\r\n reflowScrollableElement(this.scrollable.container);\r\n this.needReflowScroll = false;\r\n }\r\n\r\n const cb = (mid: number) => {\r\n const message = this.chat.getMessage(mid);\r\n if(message.id > 0) {\r\n this.safeRenderMessage(message, reverse, true);\r\n } else {\r\n this.processLocalMessageRender(message);\r\n }\r\n };\r\n\r\n const length = history.length;\r\n if(reverse) for(let i = 0; i < length; ++i) cb(history[i]);\r\n else for(let i = length - 1; i >= 0; --i) cb(history[i]);\r\n\r\n if(this.chat.type !== 'scheduled') {\r\n const historyStorage = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId);\r\n const firstSlice = historyStorage.history.first;\r\n const lastSlice = historyStorage.history.last;\r\n if(firstSlice.isEnd(SliceEnd.Bottom) && (!firstSlice.length || history.includes(firstSlice[0]))) {\r\n this.setLoaded('bottom', true, false);\r\n }\r\n \r\n if(lastSlice.isEnd(SliceEnd.Top) && (!lastSlice.length || history.includes(lastSlice[lastSlice.length - 1]))) {\r\n this.setLoaded('top', true, false);\r\n }\r\n } else {\r\n this.setLoaded('top', true);\r\n this.setLoaded('bottom', true);\r\n }\r\n\r\n await this.messagesQueuePromise;//.then(() => new Promise(resolve => setTimeout(resolve, 100)))\r\n\r\n if(this.scrollable.loadedAll.top && this.messagesQueueOnRenderAdditional) {\r\n this.messagesQueueOnRenderAdditional();\r\n\r\n if(this.messagesQueueOnRenderAdditional) {\r\n this.messagesQueueOnRenderAdditional();\r\n }\r\n }\r\n\r\n if(previousScrollHeightMinusTop !== undefined) {\r\n /* const scrollHeight = this.scrollable.scrollHeight;\r\n const addedHeight = scrollHeight - previousScrollHeight;\r\n \r\n this.chatInner.style.paddingTop = (10000 - addedHeight) + 'px'; */\r\n /* const scrollHeight = this.scrollable.scrollHeight;\r\n const addedHeight = scrollHeight - previousScrollHeight;\r\n \r\n this.chatInner.style.paddingTop = (padding - addedHeight) + 'px';\r\n \r\n //const newScrollTop = reverse ? scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\r\n const newScrollTop = reverse ? scrollHeight - addedHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\r\n this.log('performHistoryResult: will set scrollTop', \r\n previousScrollHeightMinusTop, this.scrollable.scrollHeight, \r\n newScrollTop, this.scrollable.container.clientHeight); */\r\n //const newScrollTop = reverse ? scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\r\n const newScrollTop = reverse ? this.scrollable.scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\r\n \r\n /* if(DEBUG) {\r\n this.log('performHistoryResult: will set up scrollTop:', newScrollTop, this.isHeavyAnimationInProgress);\r\n } */\r\n\r\n // touchSupport for safari iOS\r\n //isTouchSupported && isApple && (this.scrollable.container.style.overflow = 'hidden');\r\n this.scrollable.scrollTop = newScrollTop;\r\n //this.scrollable.scrollTop = this.scrollable.scrollHeight;\r\n //isTouchSupported && isApple && (this.scrollable.container.style.overflow = '');\r\n\r\n if(IS_SAFARI/* && !isAppleMobile */) { // * fix blinking and jumping\r\n reflowScrollableElement(this.scrollable.container);\r\n }\r\n\r\n /* if(DEBUG) {\r\n this.log('performHistoryResult: have set up scrollTop:', newScrollTop, this.scrollable.scrollTop, this.scrollable.scrollHeight, this.isHeavyAnimationInProgress);\r\n } */\r\n }\r\n\r\n return true;\r\n }\r\n\r\n onDatePick = (timestamp: number) => {\r\n const peerId = this.peerId;\r\n this.appMessagesManager.requestHistory(peerId, 0, 2, -1, timestamp, this.chat.threadId).then(history => {\r\n if(!history?.messages?.length) {\r\n this.log.error('no history!');\r\n return;\r\n } else if(this.peerId !== peerId) {\r\n return;\r\n }\r\n\r\n this.chat.setMessageId((history.messages[0] as MyMessage).mid);\r\n //console.log('got history date:', history);\r\n });\r\n };\r\n\r\n public requestHistory(maxId: number, loadCount: number, backLimit: number) {\r\n //const middleware = this.getMiddleware();\r\n if(this.chat.type === 'chat' || this.chat.type === 'discussion') {\r\n return this.appMessagesManager.getHistory(this.peerId, maxId, loadCount, backLimit, this.chat.threadId);\r\n } else if(this.chat.type === 'pinned') {\r\n const promise = this.appMessagesManager.getSearch({\r\n peerId: this.peerId, \r\n inputFilter: {_: 'inputMessagesFilterPinned'}, \r\n maxId, \r\n limit: loadCount, \r\n backLimit\r\n })\r\n .then(value => ({history: value.history.map(m => m.mid)}));\r\n\r\n return promise;\r\n } else if(this.chat.type === 'scheduled') {\r\n return this.appMessagesManager.getScheduledMessages(this.peerId).then(mids => {\r\n // this.setLoaded('top', true);\r\n // this.setLoaded('bottom', true);\r\n return {history: mids.slice().reverse()};\r\n });\r\n }\r\n }\r\n\r\n private async animateAsLadder(additionMsgId: number, additionMsgIds: number[], isAdditionRender: boolean, backLimit: number, maxId: number) {\r\n /* const middleware = this.getMiddleware();\r\n await this.ladderDeferred; */\r\n\r\n if(this.chat.setPeerPromise && !this.resolveLadderAnimation) {\r\n // @ts-ignore\r\n this.resolveLadderAnimation = this.animateAsLadder.bind(this, additionMsgId, additionMsgIds, isAdditionRender, backLimit, maxId);\r\n return;\r\n }\r\n\r\n /* if(!middleware()) {\r\n return;\r\n } */\r\n\r\n if(!Object.keys(this.bubbles).length) {\r\n return;\r\n }\r\n\r\n let sortedMids = getObjectKeysAndSort(this.bubbles, 'desc');\r\n\r\n if(isAdditionRender && additionMsgIds.length) {\r\n sortedMids = sortedMids.filter(mid => !additionMsgIds.includes(mid));\r\n }\r\n\r\n let targetMid: number;\r\n if(backLimit) {\r\n targetMid = maxId || Math.max(...sortedMids); // * on discussion enter\r\n } else {\r\n if(additionMsgId) {\r\n targetMid = additionMsgId;\r\n } else { // * if maxId === 0\r\n targetMid = Math.max(...sortedMids);\r\n }\r\n }\r\n\r\n const topIds = sortedMids.slice(sortedMids.findIndex(mid => targetMid > mid));\r\n const middleIds = isAdditionRender ? [] : [targetMid];\r\n const bottomIds = isAdditionRender ? [] : sortedMids.slice(0, sortedMids.findIndex(mid => targetMid >= mid)).reverse();\r\n \r\n if(DEBUG) {\r\n this.log('getHistory: targeting mid:', targetMid, maxId, additionMsgId, \r\n topIds.map(m => this.appMessagesIdsManager.getServerMessageId(m)), \r\n bottomIds.map(m => this.appMessagesIdsManager.getServerMessageId(m)));\r\n }\r\n\r\n const setBubbles: HTMLElement[] = [];\r\n\r\n this.chatInner.classList.add('zoom-fading');\r\n const delay = isAdditionRender ? 10 : 40;\r\n const offsetIndex = isAdditionRender ? 0 : 1;\r\n const animateAsLadder = (mids: number[], offsetIndex = 0) => {\r\n const animationPromise = deferredPromise();\r\n let lastMsDelay = 0;\r\n mids.forEach((mid, idx) => {\r\n if(!this.bubbles[mid] || this.skippedMids.has(mid)) {\r\n this.log.warn('animateAsLadder: no bubble by mid:', mid);\r\n return;\r\n }\r\n\r\n const contentWrapper = this.bubbles[mid].lastElementChild as HTMLElement;\r\n\r\n lastMsDelay = ((idx + offsetIndex) || 0.1) * delay;\r\n //lastMsDelay = (idx + offsetIndex) * delay;\r\n //lastMsDelay = (idx || 0.1) * 1000;\r\n \r\n contentWrapper.classList.add('zoom-fade');\r\n contentWrapper.style.transitionDelay = lastMsDelay + 'ms';\r\n\r\n if(idx === (mids.length - 1)) {\r\n const onTransitionEnd = (e: TransitionEvent) => {\r\n if(e.target !== contentWrapper) {\r\n return;\r\n }\r\n\r\n animationPromise.resolve();\r\n contentWrapper.removeEventListener('transitionend', onTransitionEnd);\r\n };\r\n\r\n contentWrapper.addEventListener('transitionend', onTransitionEnd);\r\n }\r\n \r\n //this.log('supa', bubble);\r\n\r\n setBubbles.push(contentWrapper);\r\n });\r\n\r\n if(!mids.length) {\r\n animationPromise.resolve();\r\n }\r\n\r\n return {lastMsDelay, animationPromise};\r\n };\r\n\r\n const topRes = animateAsLadder(topIds, offsetIndex);\r\n const middleRes = animateAsLadder(middleIds);\r\n const bottomRes = animateAsLadder(bottomIds, offsetIndex);\r\n const promises = [topRes.animationPromise, middleRes.animationPromise, bottomRes.animationPromise];\r\n const delays: number[] = [topRes.lastMsDelay, middleRes.lastMsDelay, bottomRes.lastMsDelay];\r\n\r\n if(this.onAnimateLadder) {\r\n await this.onAnimateLadder();\r\n }\r\n\r\n // fastRaf(() => {\r\n fastRaf(() => {\r\n setBubbles.forEach(contentWrapper => {\r\n contentWrapper.classList.remove('zoom-fade');\r\n });\r\n });\r\n // });\r\n\r\n let promise: Promise;\r\n if(topIds.length || middleIds.length || bottomIds.length) {\r\n promise = Promise.all(promises);\r\n\r\n dispatchHeavyAnimationEvent(promise, Math.max(...delays) + 200) // * 200 - transition time\r\n .then(() => { \r\n fastRaf(() => {\r\n setBubbles.forEach(contentWrapper => {\r\n contentWrapper.style.transitionDelay = '';\r\n });\r\n\r\n this.chatInner.classList.remove('zoom-fading');\r\n });\r\n\r\n // ! в хроме, каким-то образом из-за zoom-fade класса начинает прыгать скролл при подгрузке сообщений вверх, \r\n // ! т.е. скролл не ставится, так же, как в сафари при translateZ на блок выше scrollable\r\n if(!IS_SAFARI) {\r\n this.needReflowScroll = true;\r\n }\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n private renderEmptyPlaceholder(type: 'group' | 'saved' | 'noMessages' | 'noScheduledMessages' | 'greeting', bubble: HTMLElement, message: any, elements: (Node | string)[]) {\r\n const BASE_CLASS = 'empty-bubble-placeholder';\r\n bubble.classList.add(BASE_CLASS, BASE_CLASS + '-' + type);\r\n\r\n let title: HTMLElement; \r\n if(type === 'group') title = i18n('GroupEmptyTitle1');\r\n else if(type === 'saved') title = i18n('ChatYourSelfTitle');\r\n else if(type === 'noMessages' || type === 'greeting') title = i18n('NoMessages');\r\n else if(type === 'noScheduledMessages') title = i18n('NoScheduledMessages');\r\n title.classList.add('center', BASE_CLASS + '-title');\r\n\r\n elements.push(title);\r\n\r\n let listElements: HTMLElement[];\r\n if(type === 'group') {\r\n elements.push(i18n('GroupEmptyTitle2'));\r\n listElements = [\r\n i18n('GroupDescription1'),\r\n i18n('GroupDescription2'),\r\n i18n('GroupDescription3'),\r\n i18n('GroupDescription4')\r\n ];\r\n } else if(type === 'saved') {\r\n listElements = [\r\n i18n('ChatYourSelfDescription1'),\r\n i18n('ChatYourSelfDescription2'),\r\n i18n('ChatYourSelfDescription3'),\r\n i18n('ChatYourSelfDescription4')\r\n ];\r\n } else if(type === 'greeting') {\r\n const subtitle = i18n('NoMessagesGreetingsDescription');\r\n subtitle.classList.add('center', BASE_CLASS + '-subtitle');\r\n\r\n this.messagesQueue.findAndSplice(q => q.bubble === bubble);\r\n\r\n const stickerDiv = document.createElement('div');\r\n stickerDiv.classList.add(BASE_CLASS + '-sticker');\r\n\r\n const middleware = this.getMiddleware();\r\n \r\n const loadPromise = this.appStickersManager.getGreetingSticker().then(doc => {\r\n if(!middleware()) return;\r\n\r\n const loadPromises: Promise[] = [];\r\n wrapSticker({\r\n doc, \r\n // doc: appDocsManager.getDoc(\"5431607541660389336\"), // cubigator mockup\r\n div: stickerDiv,\r\n middleware,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n group: CHAT_ANIMATION_GROUP,\r\n //play: !!message.pending || !multipleRender,\r\n play: true,\r\n loop: true,\r\n withThumb: true,\r\n loadPromises\r\n });\r\n\r\n attachClickEvent(stickerDiv, (e) => {\r\n cancelEvent(e);\r\n EmoticonsDropdown.onMediaClick({target: e.target});\r\n });\r\n\r\n return Promise.all(loadPromises);\r\n });\r\n\r\n this.renderMessagesQueue(message, bubble, false, [loadPromise]);\r\n\r\n elements.push(subtitle, stickerDiv);\r\n }\r\n\r\n if(listElements) {\r\n elements.push(\r\n ...listElements.map(elem => {\r\n const span = document.createElement('span');\r\n span.classList.add(BASE_CLASS + '-list-item');\r\n span.append(elem);\r\n return span;\r\n })\r\n );\r\n \r\n if(type === 'group') {\r\n listElements.forEach(elem => {\r\n const i = document.createElement('span');\r\n i.classList.add('tgico-check');\r\n elem.prepend(i);\r\n });\r\n } else if(type === 'saved') {\r\n listElements.forEach(elem => {\r\n const i = document.createElement('span');\r\n i.classList.add(BASE_CLASS + '-list-bullet');\r\n i.innerText = '•';\r\n elem.prepend(i);\r\n });\r\n }\r\n }\r\n\r\n if(elements.length > 1) {\r\n bubble.classList.add('has-description');\r\n }\r\n\r\n elements.forEach((element: any) => element.classList.add(BASE_CLASS + '-line'));\r\n }\r\n\r\n private processLocalMessageRender(message: Message.message | Message.messageService) {\r\n const bubble = this.safeRenderMessage(message, undefined, undefined, undefined, false);\r\n bubble.classList.add('bubble-first', 'is-group-last', 'is-group-first');\r\n bubble.classList.remove('can-have-tail', 'is-in');\r\n\r\n const messageDiv = bubble.querySelector('.message, .service-msg');\r\n const elements: (Node | string)[] = [];\r\n const isBot = this.appPeersManager.isBot(this.peerId);\r\n if(isBot && message._ === 'message') {\r\n const b = document.createElement('b');\r\n b.append(i18n('BotInfoTitle'));\r\n elements.push(b, '\\n\\n');\r\n } else if(this.appPeersManager.isAnyGroup(this.peerId) && this.appPeersManager.getPeer(this.peerId).pFlags.creator) {\r\n this.renderEmptyPlaceholder('group', bubble, message, elements);\r\n } else if(rootScope.myId === this.peerId) {\r\n this.renderEmptyPlaceholder('saved', bubble, message, elements);\r\n } else if(this.peerId > 0 && !isBot && this.appMessagesManager.canSendToPeer(this.peerId) && this.chat.type === 'chat') {\r\n this.renderEmptyPlaceholder('greeting', bubble, message, elements);\r\n } else if(this.chat.type === 'scheduled') {\r\n this.renderEmptyPlaceholder('noScheduledMessages', bubble, message, elements);\r\n } else {\r\n this.renderEmptyPlaceholder('noMessages', bubble, message, elements);\r\n }\r\n\r\n /* for(let i = 1; i < elements.length; i += 2) {\r\n elements.splice(i, 0, '\\n');\r\n } */\r\n\r\n messageDiv.prepend(...elements);\r\n \r\n if(this.messagesQueueOnRenderAdditional) {\r\n this.onAnimateLadder = () => {\r\n this.chatInner.prepend(bubble);\r\n this.onAnimateLadder = undefined;\r\n\r\n // need raf here because animation won't fire if this message is single\r\n if(!this.messagesQueuePromise) {\r\n return fastRafPromise();\r\n }\r\n };\r\n } else {\r\n this.chatInner.prepend(bubble);\r\n }\r\n\r\n this.emptyPlaceholderMid = message.mid;\r\n }\r\n\r\n private generateLocalFirstMessage(service?: T, fill?: (message: GenerateLocalMessageType) => void): GenerateLocalMessageType {\r\n const offset = this.appMessagesIdsManager.generateMessageId(this.chat.type === 'scheduled' ? -1 : 0);\r\n\r\n const message: Omit & {message?: string} = {\r\n _: service ? 'messageService' : 'message',\r\n date: 0,\r\n id: -(this.peerId + offset),\r\n peer_id: this.appPeersManager.getOutputPeer(this.peerId),\r\n pFlags: {}\r\n };\r\n\r\n if(!service) {\r\n message.message = '';\r\n }\r\n\r\n assumeType>(message);\r\n\r\n fill && fill(message);\r\n\r\n this.appMessagesManager.saveMessages([message]);\r\n return message;\r\n }\r\n\r\n private setLoaded(side: SliceSides, value: boolean, checkPlaceholders = true) {\r\n const willChange = this.scrollable.loadedAll[side] !== value;\r\n if(!willChange) {\r\n return;\r\n }\r\n\r\n this.scrollable.loadedAll[side] = value;\r\n\r\n /* if(!checkPlaceholders) {\r\n return;\r\n } */\r\n\r\n if(side === 'top' && value && this.appUsersManager.isBot(this.peerId)) {\r\n this.log('inject bot description');\r\n\r\n const middleware = this.getMiddleware();\r\n return this.appProfileManager.getProfile(this.peerId).then(userFull => {\r\n if(!middleware()) {\r\n return;\r\n }\r\n\r\n if(!userFull.bot_info?.description) {\r\n this.checkIfEmptyPlaceholderNeeded();\r\n return;\r\n }\r\n\r\n const message = this.generateLocalFirstMessage(false, message => {\r\n message.message = userFull.bot_info.description;\r\n });\r\n\r\n this.processLocalMessageRender(message);\r\n });\r\n }\r\n\r\n this.checkIfEmptyPlaceholderNeeded();\r\n }\r\n\r\n public checkIfEmptyPlaceholderNeeded() {\r\n if(this.scrollable.loadedAll.top && \r\n this.scrollable.loadedAll.bottom && \r\n this.emptyPlaceholderMid === undefined && \r\n (\r\n !this.appMessagesManager.getHistoryStorage(this.peerId).count || \r\n (\r\n Object.keys(this.bubbles).length && \r\n !this.getRenderedLength()\r\n ) ||\r\n (this.chat.type === 'scheduled' && !Object.keys(this.bubbles).length)\r\n )\r\n ) {\r\n this.log('inject empty peer placeholder');\r\n\r\n const message = this.generateLocalFirstMessage(true);\r\n this.processLocalMessageRender(message);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Load and render history\r\n * @param maxId max message id\r\n * @param reverse 'true' means up\r\n * @param isBackLimit is search\r\n * @param additionMsgId for the last message\r\n * @param justLoad do not render\r\n */\r\n public getHistory(maxId = 0, reverse = false, isBackLimit = false, additionMsgId = 0, justLoad = false): {cached: boolean, promise: Promise} {\r\n const peerId = this.peerId;\r\n\r\n //console.time('appImManager call getHistory');\r\n const pageCount = Math.min(30, windowSize.windowH / 38/* * 1.25 */ | 0);\r\n //const loadCount = Object.keys(this.bubbles).length > 0 ? 50 : pageCount;\r\n const realLoadCount = Object.keys(this.bubbles).length > 0/* || additionMsgId */ ? Math.max(40, pageCount) : pageCount;//const realLoadCount = 50;\r\n //const realLoadCount = pageCount;//const realLoadCount = 50;\r\n let loadCount = realLoadCount;\r\n \r\n /* if(TEST_SCROLL) {\r\n //loadCount = 1;\r\n if(Object.keys(this.bubbles).length > 0)\r\n return {cached: false, promise: Promise.resolve(true)};\r\n } */\r\n if(TEST_SCROLL !== undefined) {\r\n if(TEST_SCROLL) {\r\n if(Object.keys(this.bubbles).length > 0) {\r\n --TEST_SCROLL;\r\n }\r\n } else {\r\n return {cached: false, promise: Promise.resolve(true)};\r\n }\r\n }\r\n \r\n ////console.time('render history total');\r\n \r\n let backLimit = 0;\r\n if(isBackLimit) {\r\n backLimit = loadCount;\r\n\r\n if(!reverse) { // if not jump\r\n loadCount = 0;\r\n //maxId = this.appMessagesManager.incrementMessageId(maxId, 1);\r\n }\r\n }\r\n\r\n let additionMsgIds: number[];\r\n if(additionMsgId && !isBackLimit) {\r\n if(this.chat.type === 'pinned') {\r\n additionMsgIds = [additionMsgId];\r\n } else {\r\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId, this.chat.threadId);\r\n const slice = historyStorage.history.slice;\r\n if(slice.length < loadCount && !slice.isEnd(SliceEnd.Both)) {\r\n additionMsgIds = slice.slice();\r\n\r\n // * filter last album, because we don't know is it the last item\r\n for(let i = additionMsgIds.length - 1; i >= 0; --i) {\r\n const message = this.chat.getMessage(additionMsgIds[i]);\r\n if(message.grouped_id) additionMsgIds.splice(i, 1);\r\n else break;\r\n }\r\n\r\n maxId = additionMsgIds[additionMsgIds.length - 1] || maxId;\r\n }\r\n }\r\n }\r\n\r\n /* const result = additionMsgID ? \r\n {history: [additionMsgID]} : \r\n appMessagesManager.getHistory(this.peerId, maxId, loadCount, backLimit); */\r\n let result: ReturnType | {history: number[]} = this.requestHistory(maxId, loadCount, backLimit) as any;\r\n let resultPromise: Promise;\r\n\r\n //const isFirstMessageRender = !!additionMsgID && result instanceof Promise && !appMessagesManager.getMessage(additionMsgID).grouped_id;\r\n const isAdditionRender = additionMsgIds?.length && result instanceof Promise;\r\n const isFirstMessageRender = (this.isFirstLoad && backLimit && result instanceof Promise) || isAdditionRender;\r\n if(isAdditionRender) {\r\n resultPromise = result as Promise;\r\n result = {history: additionMsgIds};\r\n //additionMsgID = 0;\r\n }\r\n\r\n this.isFirstLoad = false;\r\n\r\n const processResult = async(historyResult: typeof result) => {\r\n if('offsetIdOffset' in historyResult && historyResult.history.isEnd(SliceEnd.Top)) {\r\n if(this.chat.type === 'discussion') { // * inject discussion start\r\n //this.log('discussion got history', loadCount, backLimit, historyResult, isTopEnd);\r\n const serviceStartMessageId = this.appMessagesManager.threadsServiceMessagesIdsStorage[this.peerId + '_' + this.chat.threadId];\r\n if(serviceStartMessageId) historyResult.history.push(serviceStartMessageId);\r\n historyResult.history.push(...this.chat.getMidsByMid(this.chat.threadId).reverse());\r\n }\r\n\r\n await this.setLoaded('top', true);\r\n }\r\n };\r\n\r\n const sup = (result: HistoryResult) => {\r\n /* if(maxId && result.history?.length) {\r\n if(this.bubbles[maxId]) {\r\n result.history.findAndSplice(mid => mid === maxId); \r\n }\r\n } */\r\n\r\n ////console.timeEnd('render history total');\r\n \r\n return getHeavyAnimationPromise().then(() => {\r\n return processResult(result);\r\n }).then(() => {\r\n return this.performHistoryResult(result.history || [], reverse, isBackLimit, !isAdditionRender && additionMsgId);\r\n });\r\n };\r\n\r\n const processPromise = (result: Promise) => {\r\n const promise = result.then((result) => {\r\n //this.log('getHistory not cached result by maxId:', maxId, reverse, isBackLimit, result, peerId, justLoad);\r\n\r\n if(reverse ? this.getHistoryTopPromise !== promise : this.getHistoryBottomPromise !== promise) {\r\n this.log.warn('getHistory: peer changed');\r\n ////console.timeEnd('render history total');\r\n return Promise.reject();\r\n }\r\n\r\n if(justLoad) {\r\n this.scrollable.onScroll(); // нужно делать из-за ранней прогрузки\r\n return true;\r\n }\r\n //console.timeEnd('appImManager call getHistory');\r\n\r\n return sup(result);\r\n }, (err) => {\r\n this.log.error('getHistory error:', err);\r\n throw err;\r\n });\r\n \r\n return promise;\r\n };\r\n\r\n let promise: Promise, cached: boolean;\r\n if(result instanceof Promise) {\r\n cached = false;\r\n promise = processPromise(result);\r\n } else if(justLoad) {\r\n return null;\r\n } else {\r\n cached = true;\r\n //this.log('getHistory cached result by maxId:', maxId, reverse, isBackLimit, result, peerId, justLoad);\r\n promise = sup(result as HistoryResult);\r\n //return (reverse ? this.getHistoryTopPromise = promise : this.getHistoryBottomPromise = promise);\r\n //return this.performHistoryResult(result.history || [], reverse, isBackLimit, additionMsgID, true);\r\n }\r\n\r\n const waitPromise = isAdditionRender ? processPromise(resultPromise) : promise;\r\n\r\n if(isFirstMessageRender && rootScope.settings.animationsEnabled/* && false */) {\r\n let times = isAdditionRender ? 2 : 1;\r\n this.messagesQueueOnRenderAdditional = () => {\r\n this.log('ship went past rocks of magnets');\r\n\r\n if(--times) return;\r\n\r\n this.messagesQueueOnRenderAdditional = undefined;\r\n \r\n const promise = this.animateAsLadder(additionMsgId, additionMsgIds, isAdditionRender, backLimit, maxId);\r\n (promise || Promise.resolve()).then(() => {\r\n setTimeout(() => { // preload messages\r\n this.loadMoreHistory(reverse, true);\r\n }, 0);\r\n });\r\n };\r\n } else {\r\n this.messagesQueueOnRenderAdditional = undefined;\r\n }\r\n\r\n (reverse ? this.getHistoryTopPromise = waitPromise : this.getHistoryBottomPromise = waitPromise);\r\n waitPromise.then(() => {\r\n (reverse ? this.getHistoryTopPromise = undefined : this.getHistoryBottomPromise = undefined);\r\n });\r\n\r\n if(justLoad) {\r\n return null;\r\n }\r\n\r\n /* false && */!isFirstMessageRender && promise.then(() => {\r\n if(reverse) {\r\n this.loadedTopTimes++;\r\n this.loadedBottomTimes = Math.max(0, --this.loadedBottomTimes);\r\n } else {\r\n this.loadedBottomTimes++;\r\n this.loadedTopTimes = Math.max(0, --this.loadedTopTimes);\r\n }\r\n\r\n let ids: number[];\r\n if((reverse && this.loadedTopTimes > 2) || (!reverse && this.loadedBottomTimes > 2)) {\r\n ids = getObjectKeysAndSort(this.bubbles);\r\n }\r\n\r\n //let removeCount = loadCount / 2;\r\n const safeCount = realLoadCount * 2; // cause i've been runningrunningrunning all day\r\n //this.log('getHistory: slice loadedTimes:', reverse, pageCount, this.loadedTopTimes, this.loadedBottomTimes, ids?.length, safeCount);\r\n if(ids && ids.length > safeCount) {\r\n if(reverse) {\r\n //ids = ids.slice(-removeCount);\r\n //ids = ids.slice(removeCount * 2);\r\n ids = ids.slice(safeCount);\r\n this.setLoaded('bottom', false);\r\n\r\n //this.log('getHistory: slice bottom messages:', ids.length, loadCount);\r\n //this.getHistoryBottomPromise = undefined; // !WARNING, это нужно для обратной загрузки истории, если запрос словил флуд\r\n } else {\r\n //ids = ids.slice(0, removeCount);\r\n //ids = ids.slice(0, ids.length - (removeCount * 2));\r\n ids = ids.slice(0, ids.length - safeCount);\r\n this.setLoaded('top', false);\r\n\r\n //this.log('getHistory: slice up messages:', ids.length, loadCount);\r\n //this.getHistoryTopPromise = undefined; // !WARNING, это нужно для обратной загрузки истории, если запрос словил флуд\r\n }\r\n\r\n //this.log('getHistory: will slice ids:', ids, reverse);\r\n\r\n this.deleteMessagesByIds(ids, false);\r\n }\r\n });\r\n\r\n promise.then(() => {\r\n // preload more\r\n //if(!isFirstMessageRender) {\r\n if(this.chat.type === 'chat'/* || this.chat.type === 'discussion' */) {\r\n /* const storage = this.appMessagesManager.getHistoryStorage(peerId, this.chat.threadId);\r\n const isMaxIdInHistory = storage.history.indexOf(maxId) !== -1;\r\n if(isMaxIdInHistory || true) { // * otherwise it is a search or jump */\r\n setTimeout(() => {\r\n if(reverse) {\r\n this.loadMoreHistory(true, true);\r\n } else {\r\n this.loadMoreHistory(false, true);\r\n }\r\n }, 0);\r\n //}\r\n }\r\n //}\r\n });\r\n\r\n return {cached, promise};\r\n }\r\n\r\n public setUnreadDelimiter() {\r\n if(!(this.chat.type === 'chat' || this.chat.type === 'discussion')) {\r\n return;\r\n }\r\n\r\n if(this.attachedUnreadBubble) {\r\n return;\r\n }\r\n\r\n const historyStorage = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId);\r\n let readMaxId = this.appMessagesManager.getReadMaxIdIfUnread(this.peerId, this.chat.threadId);\r\n if(!readMaxId) return;\r\n\r\n readMaxId = Object.keys(this.bubbles)\r\n .filter(mid => !this.bubbles[mid].classList.contains('is-out'))\r\n .map(i => +i)\r\n .sort((a, b) => a - b)\r\n .find(i => i > readMaxId);\r\n\r\n if(readMaxId && this.bubbles[readMaxId]) {\r\n let bubble = this.bubbles[readMaxId];\r\n if(this.firstUnreadBubble && this.firstUnreadBubble !== bubble) {\r\n this.firstUnreadBubble.classList.remove('is-first-unread');\r\n this.firstUnreadBubble = null;\r\n }\r\n\r\n if(readMaxId !== historyStorage.maxId) {\r\n bubble.classList.add('is-first-unread');\r\n }\r\n\r\n this.firstUnreadBubble = bubble;\r\n this.attachedUnreadBubble = true;\r\n }\r\n }\r\n\r\n public deleteEmptyDateGroups() {\r\n const mustBeCount = 1 + +!!this.stickyIntersector;\r\n for(const i in this.dateMessages) {\r\n const dateMessage = this.dateMessages[i];\r\n\r\n if(dateMessage.container.childElementCount === mustBeCount) { // only date div + sentinel div\r\n dateMessage.container.remove();\r\n if(this.stickyIntersector) {\r\n this.stickyIntersector.unobserve(dateMessage.container, dateMessage.div);\r\n }\r\n delete this.dateMessages[i];\r\n }\r\n }\r\n\r\n this.checkIfEmptyPlaceholderNeeded();\r\n }\r\n}\r\n\r\nexport function generateTail() {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n svg.setAttributeNS(null, 'viewBox', '0 0 11 20');\r\n svg.setAttributeNS(null, 'width', '11');\r\n svg.setAttributeNS(null, 'height', '20');\r\n svg.classList.add('bubble-tail');\r\n\r\n const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\r\n use.setAttributeNS(null, 'href', '#message-tail-filled');\r\n\r\n svg.append(use);\r\n\r\n return svg;\r\n}\r\n","export const SEND_WHEN_ONLINE_TIMESTAMP = 0x7FFFFFFE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport { addCancelButton } from \".\";\nimport PopupPeer, { PopupPeerButtonCallbackCheckboxes, PopupPeerOptions } from \"./peer\";\nimport appPeersManager from \"../../lib/appManagers/appPeersManager\";\nimport rootScope from \"../../lib/rootScope\";\nimport { FormatterArguments, LangPackKey } from \"../../lib/langPack\";\nimport appChatsManager from \"../../lib/appManagers/appChatsManager\";\nimport PeerTitle from \"../peerTitle\";\n\nexport default class PopupPinMessage {\n constructor(peerId: number, mid: number, unpin?: true, onConfirm?: () => void) {\n let title: LangPackKey, description: LangPackKey, descriptionArgs: FormatterArguments, \n buttons: PopupPeerOptions['buttons'] = [], checkboxes: PopupPeerOptions['checkboxes'] = [];\n\n const canUnpin = appPeersManager.canPinMessage(peerId);\n\n const callback = (checked: PopupPeerButtonCallbackCheckboxes, oneSide?: boolean, silent?: boolean) => {\n setTimeout(() => { // * костыль, потому что document.elementFromPoint вернёт popup-peer пока он будет закрываться\n let promise: Promise;\n if(unpin && !mid) {\n if(canUnpin) {\n promise = appMessagesManager.unpinAllMessages(peerId);\n } else {\n promise = appMessagesManager.hidePinnedMessages(peerId);\n }\n } else {\n promise = appMessagesManager.updatePinnedMessage(peerId, mid, unpin, silent, oneSide);\n }\n\n if(onConfirm) {\n promise.then(onConfirm);\n }\n }, 300);\n };\n\n if(unpin) {\n let buttonText: LangPackKey = 'UnpinMessage';\n if(!mid) {\n if(canUnpin) {\n title = 'Popup.Unpin.AllTitle';\n description = 'Chat.UnpinAllMessagesConfirmation';\n descriptionArgs = ['' + (appMessagesManager.pinnedMessages[peerId]?.count || 1)];\n } else {\n title = 'Popup.Unpin.HideTitle';\n description = 'Popup.Unpin.HideDescription';\n buttonText = 'Popup.Unpin.Hide';\n }\n } else {\n title = 'UnpinMessageAlertTitle';\n description = 'Chat.Confirm.Unpin';\n }\n \n buttons.push({\n langKey: buttonText,\n isDanger: true,\n callback\n });\n } else {\n title = 'PinMessageAlertTitle';\n const pinButtonText: LangPackKey = 'PinMessage';\n \n if(peerId < 0) {\n buttons.push({\n langKey: pinButtonText,\n callback: (checked) => callback(checked, false, !checked.size)\n });\n\n if(appChatsManager.isBroadcast(-peerId)) {\n description = 'PinMessageAlertChannel';\n } else {\n description = 'PinMessageAlert';\n \n checkboxes.push({\n text: 'PinNotify',\n checked: true\n });\n }\n } else {\n description = 'PinMessageAlertChat';\n\n if(peerId === rootScope.myId) {\n buttons.push({\n langKey: pinButtonText,\n callback\n });\n } else {\n buttons.push({\n langKey: pinButtonText,\n callback: (checked) => callback(checked, !checked.size)\n });\n\n checkboxes.push({\n text: 'PinAlsoFor',\n textArgs: [new PeerTitle({peerId}).element],\n checked: true\n });\n }\n }\n }\n\n addCancelButton(buttons);\n\n const popup = new PopupPeer('popup-delete-chat', {\n peerId,\n titleLangKey: title,\n descriptionLangKey: description,\n descriptionLangArgs: descriptionArgs,\n buttons,\n checkboxes\n });\n\n popup.show();\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function isSelectionEmpty(selection = window.getSelection()) {\r\n if(!selection || !selection.rangeCount) {\r\n return true;\r\n }\r\n\r\n const selectionRange = selection.getRangeAt(0);\r\n if(!selectionRange.toString() || !selectionRange.START_TO_END) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { ReportReason } from \"../../layer\";\nimport appMessagesManager from \"../../lib/appManagers/appMessagesManager\";\nimport appStickersManager from \"../../lib/appManagers/appStickersManager\";\nimport InputField from \"../inputField\";\nimport { toastNew } from \"../toast\";\nimport { wrapSticker } from \"../wrappers\";\nimport PopupPeer from \"./peer\";\n\nexport default class PopupReportMessagesConfirm extends PopupPeer {\n public static STICKER_EMOJI = '👮‍♀️';\n constructor(peerId: number, mids: number[], reason: ReportReason['_'], onConfirm?: () => void) {\n super('popup-report-messages-confirm', {\n noTitle: true, \n descriptionLangKey: 'ReportInfo', \n buttons: [{\n langKey: 'ReportChat',\n callback: () => {\n if(!inputField.isValid()) {\n return;\n }\n\n onConfirm && onConfirm();\n appMessagesManager.reportMessages(peerId, mids, reason, inputField.value).then(bool => {\n if(!bool) return;\n\n toastNew({\n langPackKey: 'ReportSentInfo'\n });\n });\n }\n }], \n body: true\n });\n\n const div = document.createElement('div');\n const doc = appStickersManager.getAnimatedEmojiSticker(PopupReportMessagesConfirm.STICKER_EMOJI);\n const size = 100;\n wrapSticker({\n doc,\n div,\n emoji: PopupReportMessagesConfirm.STICKER_EMOJI,\n width: size,\n height: size,\n loop: false,\n play: true\n }).finally(() => {\n this.show();\n });\n\n this.header.append(div);\n\n const inputField = new InputField({\n label: 'ReportHint',\n maxLength: 512,\n placeholder: 'ReportChatDescription'\n });\n\n this.body.append(inputField.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\nimport whichChild from \"../../helpers/dom/whichChild\";\nimport { ReportReason } from \"../../layer\";\nimport appStickersManager from \"../../lib/appManagers/appStickersManager\";\nimport { LangPackKey } from \"../../lib/langPack\";\nimport Button from \"../button\";\nimport PopupPeer from \"./peer\";\nimport PopupReportMessagesConfirm from \"./reportMessagesConfirm\";\n\nexport default class PopupReportMessages extends PopupPeer {\n constructor(peerId: number, mids: number[], onConfirm?: () => void) {\n super('popup-report-messages', {titleLangKey: 'ChatTitle.ReportMessages', buttons: [], body: true});\n\n mids = mids.slice();\n\n const buttons: [LangPackKey, ReportReason['_']][] = [\n ['ReportChatSpam', 'inputReportReasonSpam'],\n ['ReportChatViolence', 'inputReportReasonViolence'],\n ['ReportChatChild', 'inputReportReasonChildAbuse'],\n ['ReportChatPornography', 'inputReportReasonPornography'],\n ['ReportChatOther', 'inputReportReasonOther']\n ];\n\n const className = 'btn-primary btn-transparent';\n buttons.forEach(b => {\n const button = Button(className, {/* icon: 'edit', */text: b[0]});\n this.body.append(button);\n });\n\n const preloadStickerPromise = appStickersManager.preloadAnimatedEmojiSticker(PopupReportMessagesConfirm.STICKER_EMOJI);\n\n attachClickEvent(this.body, (e) => {\n const target = findUpClassName(e.target, 'btn-primary');\n const reason = buttons[whichChild(target)][1];\n\n preloadStickerPromise.then(() => {\n this.hide();\n\n new PopupReportMessagesConfirm(peerId, mids, reason, onConfirm);\n });\n }, {listenerSetter: this.listenerSetter});\n \n this.body.style.margin = '0 -1rem';\n this.buttons.style.marginTop = '.5rem';\n\n this.show();\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type { AppPeersManager } from \"../../lib/appManagers/appPeersManager\";\r\nimport type { AppPollsManager, Poll } from \"../../lib/appManagers/appPollsManager\";\r\nimport type { AppDocsManager, MyDocument } from \"../../lib/appManagers/appDocsManager\";\r\nimport type { AppMessagesIdsManager } from \"../../lib/appManagers/appMessagesIdsManager\";\r\nimport type Chat from \"./chat\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport ButtonMenu, { ButtonMenuItemOptions } from \"../buttonMenu\";\r\nimport { attachContextMenuListener, openBtnMenu, positionMenu } from \"../misc\";\r\nimport PopupDeleteMessages from \"../popups/deleteMessages\";\r\nimport PopupForward from \"../popups/forward\";\r\nimport PopupPinMessage from \"../popups/unpinMessage\";\r\nimport { copyTextToClipboard } from \"../../helpers/clipboard\";\r\nimport PopupSendNow from \"../popups/sendNow\";\r\nimport { toast } from \"../toast\";\r\nimport I18n, { LangPackKey } from \"../../lib/langPack\";\r\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent, simulateClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport isSelectionEmpty from \"../../helpers/dom/isSelectionEmpty\";\r\nimport { Message } from \"../../layer\";\r\nimport PopupReportMessages from \"../popups/reportMessages\";\r\n\r\nexport default class ChatContextMenu {\r\n private buttons: (ButtonMenuItemOptions & {verify: () => boolean, notDirect?: () => boolean, withSelection?: true})[];\r\n private element: HTMLElement;\r\n\r\n private isSelectable: boolean;\r\n private isSelected: boolean;\r\n private target: HTMLElement;\r\n private isTargetAGroupedItem: boolean;\r\n private isTextSelected: boolean;\r\n private isAnchorTarget: boolean;\r\n private isUsernameTarget: boolean;\r\n private peerId: number;\r\n private mid: number;\r\n private message: any;\r\n\r\n constructor(private attachTo: HTMLElement, \r\n private chat: Chat, \r\n private appMessagesManager: AppMessagesManager, \r\n private appPeersManager: AppPeersManager, \r\n private appPollsManager: AppPollsManager,\r\n private appDocsManager: AppDocsManager,\r\n private appMessagesIdsManager: AppMessagesIdsManager\r\n ) {\r\n const onContextMenu = (e: MouseEvent | Touch | TouchEvent) => {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n let bubble: HTMLElement, contentWrapper: HTMLElement;\r\n\r\n try {\r\n contentWrapper = findUpClassName(e.target, 'bubble-content-wrapper');\r\n bubble = contentWrapper ? contentWrapper.parentElement : findUpClassName(e.target, 'bubble');\r\n } catch(e) {}\r\n\r\n // ! context menu click by date bubble (there is no pointer-events)\r\n if(!bubble || bubble.classList.contains('bubble-first')) return;\r\n\r\n if(e instanceof MouseEvent || e.hasOwnProperty('preventDefault')) (e as any).preventDefault();\r\n if(this.element.classList.contains('active')) {\r\n return false;\r\n }\r\n if(e instanceof MouseEvent || e.hasOwnProperty('cancelBubble')) (e as any).cancelBubble = true;\r\n\r\n let mid = +bubble.dataset.mid;\r\n if(!mid) return;\r\n\r\n this.isSelectable = this.chat.selection.canSelectBubble(bubble);\r\n this.peerId = this.chat.peerId;\r\n //this.msgID = msgID;\r\n this.target = e.target as HTMLElement;\r\n this.isTextSelected = !isSelectionEmpty();\r\n this.isAnchorTarget = this.target.tagName === 'A' && (\r\n (this.target as HTMLAnchorElement).target === '_blank' || \r\n this.target.classList.contains('anchor-url')\r\n );\r\n this.isUsernameTarget = this.target.tagName === 'A' && this.target.classList.contains('mention');\r\n\r\n // * если открыть контекстное меню для альбома не по бабблу, и последний элемент не выбран, чтобы показать остальные пункты\r\n if(chat.selection.isSelecting && !contentWrapper) {\r\n const mids = this.chat.getMidsByMid(mid);\r\n if(mids.length > 1) {\r\n const selectedMid = this.chat.selection.isMidSelected(this.peerId, mid) ? \r\n mid : \r\n mids.find(mid => this.chat.selection.isMidSelected(this.peerId, mid));\r\n if(selectedMid) {\r\n mid = selectedMid;\r\n }\r\n }\r\n }\r\n\r\n const groupedItem = findUpClassName(this.target, 'grouped-item');\r\n this.isTargetAGroupedItem = !!groupedItem;\r\n if(groupedItem) {\r\n this.mid = +groupedItem.dataset.mid;\r\n } else {\r\n this.mid = mid;\r\n }\r\n\r\n this.isSelected = this.chat.selection.isMidSelected(this.peerId, this.mid);\r\n this.message = this.chat.getMessage(this.mid);\r\n\r\n this.buttons.forEach(button => {\r\n let good: boolean;\r\n\r\n //if((appImManager.chatSelection.isSelecting && !button.withSelection) || (button.withSelection && !appImManager.chatSelection.isSelecting)) {\r\n if(chat.selection.isSelecting && !button.withSelection) {\r\n good = false;\r\n } else {\r\n good = contentWrapper || IS_TOUCH_SUPPORTED || true ? \r\n button.verify() : \r\n button.notDirect && button.verify() && button.notDirect();\r\n }\r\n\r\n button.element.classList.toggle('hide', !good);\r\n });\r\n\r\n const side: 'left' | 'right' = bubble.classList.contains('is-in') ? 'left' : 'right';\r\n //bubble.parentElement.append(this.element);\r\n //appImManager.log('contextmenu', e, bubble, side);\r\n positionMenu((e as TouchEvent).touches ? (e as TouchEvent).touches[0] : e as MouseEvent, this.element, side);\r\n openBtnMenu(this.element, () => {\r\n this.peerId = this.mid = 0;\r\n this.target = null;\r\n });\r\n };\r\n\r\n if(IS_TOUCH_SUPPORTED/* && false */) {\r\n attachClickEvent(attachTo, (e) => {\r\n if(chat.selection.isSelecting) {\r\n return;\r\n }\r\n\r\n const className = (e.target as HTMLElement).className;\r\n if(!className || !className.includes) return;\r\n\r\n chat.log('touchend', e);\r\n\r\n const good = ['bubble', 'bubble-content-wrapper', 'bubble-content', 'message', 'time', 'inner'].find(c => className.match(new RegExp(c + '($|\\\\s)')));\r\n if(good) {\r\n cancelEvent(e);\r\n //onContextMenu((e as TouchEvent).changedTouches[0]);\r\n // onContextMenu((e as TouchEvent).changedTouches ? (e as TouchEvent).changedTouches[0] : e as MouseEvent);\r\n onContextMenu(e);\r\n }\r\n }, {listenerSetter: this.chat.bubbles.listenerSetter});\r\n } else attachContextMenuListener(attachTo, onContextMenu, this.chat.bubbles.listenerSetter);\r\n }\r\n\r\n private init() {\r\n this.buttons = [{\r\n icon: 'send2',\r\n text: 'MessageScheduleSend',\r\n onClick: this.onSendScheduledClick,\r\n verify: () => this.chat.type === 'scheduled' && !this.message.pFlags.is_outgoing\r\n }, {\r\n icon: 'send2',\r\n text: 'Message.Context.Selection.SendNow',\r\n onClick: this.onSendScheduledClick,\r\n verify: () => this.chat.type === 'scheduled' && this.isSelected && !this.chat.selection.selectionSendNowBtn.hasAttribute('disabled'),\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'schedule',\r\n text: 'MessageScheduleEditTime',\r\n onClick: () => {\r\n this.chat.input.scheduleSending(() => {\r\n this.appMessagesManager.editMessage(this.message, this.message.message, {\r\n scheduleDate: this.chat.input.scheduleDate,\r\n entities: this.message.entities\r\n });\r\n\r\n this.chat.input.onMessageSent(false, false);\r\n }, new Date(this.message.date * 1000));\r\n },\r\n verify: () => this.chat.type === 'scheduled'\r\n }, {\r\n icon: 'reply',\r\n text: 'Reply',\r\n onClick: this.onReplyClick,\r\n verify: () => this.appMessagesManager.canSendToPeer(this.peerId, this.chat.threadId) && \r\n !this.message.pFlags.is_outgoing && \r\n !!this.chat.input.messageInput && \r\n this.chat.type !== 'scheduled'/* ,\r\n cancelEvent: true */\r\n }, {\r\n icon: 'edit',\r\n text: 'Edit',\r\n onClick: this.onEditClick,\r\n verify: () => this.appMessagesManager.canEditMessage(this.message, 'text') && !!this.chat.input.messageInput\r\n }, {\r\n icon: 'copy',\r\n text: 'Copy',\r\n onClick: this.onCopyClick,\r\n verify: () => !!this.message.message && !this.isTextSelected && (!this.isAnchorTarget || this.message.message !== this.target.innerText)\r\n }, {\r\n icon: 'copy',\r\n text: 'Chat.CopySelectedText',\r\n onClick: this.onCopyClick,\r\n verify: () => !!this.message.message && this.isTextSelected\r\n }, {\r\n icon: 'copy',\r\n text: 'Message.Context.Selection.Copy',\r\n onClick: this.onCopyClick,\r\n verify: () => {\r\n if(!this.isSelected) {\r\n return false;\r\n }\r\n\r\n for(const [peerId, mids] of this.chat.selection.selectedMids) {\r\n for(const mid of mids) {\r\n if(!!this.appMessagesManager.getMessageByPeer(peerId, mid).message) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n },\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'copy',\r\n text: 'CopyLink',\r\n onClick: this.onCopyAnchorLinkClick,\r\n verify: () => this.isAnchorTarget,\r\n withSelection: true\r\n }, {\r\n icon: 'copy',\r\n text: 'Text.Context.Copy.Username',\r\n onClick: () => {\r\n copyTextToClipboard(this.target.innerHTML);\r\n },\r\n verify: () => this.isUsernameTarget,\r\n withSelection: true\r\n }, {\r\n icon: 'copy',\r\n text: 'Text.Context.Copy.Hashtag',\r\n onClick: () => {\r\n copyTextToClipboard(this.target.innerHTML);\r\n },\r\n verify: () => this.target.classList.contains('anchor-hashtag'),\r\n withSelection: true\r\n }, {\r\n icon: 'link',\r\n text: 'MessageContext.CopyMessageLink1',\r\n onClick: this.onCopyLinkClick,\r\n verify: () => this.appPeersManager.isChannel(this.peerId) && !this.message.pFlags.is_outgoing\r\n }, {\r\n icon: 'pin',\r\n text: 'Message.Context.Pin',\r\n onClick: this.onPinClick,\r\n verify: () => !this.message.pFlags.is_outgoing && \r\n this.message._ !== 'messageService' && \r\n !this.message.pFlags.pinned && \r\n this.appPeersManager.canPinMessage(this.peerId) && \r\n this.chat.type !== 'scheduled',\r\n }, {\r\n icon: 'unpin',\r\n text: 'Message.Context.Unpin',\r\n onClick: this.onUnpinClick,\r\n verify: () => this.message.pFlags.pinned && this.appPeersManager.canPinMessage(this.peerId),\r\n }, {\r\n icon: 'download',\r\n text: 'MediaViewer.Context.Download',\r\n onClick: () => {\r\n this.appDocsManager.saveDocFile(this.message.media.document);\r\n },\r\n verify: () => {\r\n if(this.message.pFlags.is_outgoing) {\r\n return false;\r\n }\r\n \r\n const doc: MyDocument = this.message.media?.document;\r\n if(!doc) return false;\r\n \r\n let hasTarget = !!IS_TOUCH_SUPPORTED;\r\n const isGoodType = !doc.type || !(['gif', 'video', 'sticker'] as MyDocument['type'][]).includes(doc.type);\r\n if(isGoodType) hasTarget = hasTarget || !!findUpClassName(this.target, 'document') || !!findUpClassName(this.target, 'audio');\r\n return isGoodType && hasTarget;\r\n }\r\n }, {\r\n icon: 'checkretract',\r\n text: 'Chat.Poll.Unvote',\r\n onClick: this.onRetractVote,\r\n verify: () => {\r\n const poll = this.message.media?.poll as Poll;\r\n return poll && poll.chosenIndexes.length && !poll.pFlags.closed && !poll.pFlags.quiz;\r\n }/* ,\r\n cancelEvent: true */\r\n }, {\r\n icon: 'stop',\r\n text: 'Chat.Poll.Stop',\r\n onClick: this.onStopPoll,\r\n verify: () => {\r\n const poll = this.message.media?.poll;\r\n return this.appMessagesManager.canEditMessage(this.message, 'poll') && poll && !poll.pFlags.closed && !this.message.pFlags.is_outgoing;\r\n }/* ,\r\n cancelEvent: true */\r\n }, {\r\n icon: 'forward',\r\n text: 'Forward',\r\n onClick: this.onForwardClick,\r\n verify: () => this.chat.type !== 'scheduled' && !this.message.pFlags.is_outgoing && this.message._ !== 'messageService'\r\n }, {\r\n icon: 'forward',\r\n text: 'Message.Context.Selection.Forward',\r\n onClick: this.onForwardClick,\r\n verify: () => this.chat.selection.selectionForwardBtn && \r\n this.isSelected && \r\n !this.chat.selection.selectionForwardBtn.hasAttribute('disabled'),\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'flag',\r\n text: 'ReportChat',\r\n onClick: () => {\r\n new PopupReportMessages(this.peerId, [this.mid]);\r\n },\r\n verify: () => !this.message.pFlags.out && this.message._ === 'message' && !this.message.pFlags.is_outgoing && this.appPeersManager.isChannel(this.peerId),\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'select',\r\n text: 'Message.Context.Select',\r\n onClick: this.onSelectClick,\r\n verify: () => !this.message.action && !this.isSelected && this.isSelectable,\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'select',\r\n text: 'Message.Context.Selection.Clear',\r\n onClick: this.onClearSelectionClick,\r\n verify: () => this.isSelected,\r\n notDirect: () => true,\r\n withSelection: true\r\n }, {\r\n icon: 'delete danger',\r\n text: 'Delete',\r\n onClick: this.onDeleteClick,\r\n verify: () => this.appMessagesManager.canDeleteMessage(this.message)\r\n }, {\r\n icon: 'delete danger',\r\n text: 'Message.Context.Selection.Delete',\r\n onClick: this.onDeleteClick,\r\n verify: () => this.isSelected && !this.chat.selection.selectionDeleteBtn.hasAttribute('disabled'),\r\n notDirect: () => true,\r\n withSelection: true\r\n }];\r\n\r\n this.element = ButtonMenu(this.buttons, this.chat.bubbles.listenerSetter);\r\n this.element.id = 'bubble-contextmenu';\r\n this.element.classList.add('contextmenu');\r\n this.chat.container.append(this.element);\r\n }\r\n\r\n private onSendScheduledClick = () => {\r\n if(this.chat.selection.isSelecting) {\r\n simulateClickEvent(this.chat.selection.selectionSendNowBtn);\r\n } else {\r\n new PopupSendNow(this.peerId, this.chat.getMidsByMid(this.mid));\r\n }\r\n };\r\n\r\n private onReplyClick = () => {\r\n this.chat.input.initMessageReply(this.mid);\r\n };\r\n\r\n private onEditClick = () => {\r\n this.chat.input.initMessageEditing(this.mid);\r\n };\r\n\r\n private onCopyClick = () => {\r\n if(isSelectionEmpty()) {\r\n const mids = this.chat.selection.isSelecting ? \r\n [...this.chat.selection.selectedMids.get(this.peerId)].sort((a, b) => a - b) : \r\n [this.mid];\r\n\r\n const str = mids.reduce((acc, mid) => {\r\n const message = this.chat.getMessage(mid);\r\n return acc + (message?.message ? message.message + '\\n' : '');\r\n }, '').trim();\r\n\r\n copyTextToClipboard(str);\r\n } else {\r\n document.execCommand('copy');\r\n //cancelSelection();\r\n }\r\n };\r\n\r\n private onCopyAnchorLinkClick = () => {\r\n copyTextToClipboard((this.target as HTMLAnchorElement).href);\r\n };\r\n\r\n private onCopyLinkClick = () => {\r\n let threadMessage: Message.message;\r\n if(this.chat.type === 'discussion') {\r\n threadMessage = this.appMessagesManager.getMessageByPeer(this.peerId, this.chat.threadId);\r\n }\r\n\r\n const username = this.appPeersManager.getPeerUsername(threadMessage ? threadMessage.fromId : this.peerId);\r\n const msgId = this.appMessagesIdsManager.getServerMessageId(this.mid);\r\n let url = 'https://t.me/';\r\n let key: LangPackKey;\r\n if(username) {\r\n url += username + '/' + (threadMessage ? this.appMessagesIdsManager.getServerMessageId(threadMessage.fwd_from.channel_post) : msgId);\r\n if(threadMessage) url += '?comment=' + msgId;\r\n key = 'LinkCopied';\r\n } else {\r\n url += 'c/' + Math.abs(this.peerId) + '/' + msgId;\r\n if(threadMessage) url += '?thread=' + this.appMessagesIdsManager.getServerMessageId(threadMessage.mid);\r\n key = 'LinkCopiedPrivateInfo';\r\n }\r\n\r\n toast(I18n.format(key, true));\r\n\r\n copyTextToClipboard(url);\r\n };\r\n\r\n private onPinClick = () => {\r\n new PopupPinMessage(this.peerId, this.mid);\r\n };\r\n\r\n private onUnpinClick = () => {\r\n new PopupPinMessage(this.peerId, this.mid, true);\r\n };\r\n\r\n private onRetractVote = () => {\r\n this.appPollsManager.sendVote(this.message, []);\r\n };\r\n\r\n private onStopPoll = () => {\r\n this.appPollsManager.stopPoll(this.message);\r\n };\r\n\r\n private onForwardClick = () => {\r\n if(this.chat.selection.isSelecting) {\r\n simulateClickEvent(this.chat.selection.selectionForwardBtn);\r\n } else {\r\n const mids = this.isTargetAGroupedItem ? [this.mid] : this.chat.getMidsByMid(this.mid);\r\n new PopupForward({\r\n [this.peerId]: mids\r\n });\r\n }\r\n };\r\n\r\n private onSelectClick = () => {\r\n this.chat.selection.toggleByElement(findUpClassName(this.target, 'grouped-item') || findUpClassName(this.target, 'bubble'));\r\n };\r\n\r\n private onClearSelectionClick = () => {\r\n this.chat.selection.cancelSelection();\r\n };\r\n\r\n private onDeleteClick = () => {\r\n if(this.chat.selection.isSelecting) {\r\n simulateClickEvent(this.chat.selection.selectionDeleteBtn);\r\n } else {\r\n new PopupDeleteMessages(this.peerId, this.isTargetAGroupedItem ? [this.mid] : this.chat.getMidsByMid(this.mid), this.chat.type);\r\n }\r\n };\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport ListenerSetter from \"../../helpers/listenerSetter\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport ButtonMenu, { ButtonMenuItemOptions } from \"../buttonMenu\";\r\nimport { attachContextMenuListener, openBtnMenu } from \"../misc\";\r\n\r\nexport default class SendMenu {\r\n public sendMenu: HTMLDivElement;\r\n private sendMenuButtons: (ButtonMenuItemOptions & {verify: () => boolean})[];\r\n private type: 'schedule' | 'reminder';\r\n \r\n constructor(options: {\r\n onSilentClick: () => void,\r\n onScheduleClick: () => void,\r\n listenerSetter?: ListenerSetter,\r\n openSide: string,\r\n onContextElement: HTMLElement,\r\n onOpen?: () => boolean\r\n }) {\r\n this.sendMenuButtons = [{\r\n icon: 'mute',\r\n text: 'Chat.Send.WithoutSound',\r\n onClick: options.onSilentClick,\r\n verify: () => this.type === 'schedule'\r\n }, {\r\n icon: 'schedule',\r\n text: 'Chat.Send.ScheduledMessage',\r\n onClick: options.onScheduleClick,\r\n verify: () => this.type === 'schedule'\r\n }, {\r\n icon: 'schedule',\r\n text: 'Chat.Send.SetReminder',\r\n onClick: options.onScheduleClick,\r\n verify: () => this.type === 'reminder'\r\n }];\r\n \r\n this.sendMenu = ButtonMenu(this.sendMenuButtons, options.listenerSetter);\r\n this.sendMenu.classList.add('menu-send', options.openSide);\r\n\r\n attachContextMenuListener(options.onContextElement, (e: any) => {\r\n if(options.onOpen && !options.onOpen()) {\r\n return;\r\n }\r\n\r\n this.sendMenuButtons.forEach(button => {\r\n button.element.classList.toggle('hide', !button.verify());\r\n });\r\n \r\n cancelEvent(e);\r\n openBtnMenu(this.sendMenu);\r\n }, options.listenerSetter);\r\n }\r\n\r\n public setPeerId(peerId: number) {\r\n this.type = peerId === rootScope.myId ? 'reminder' : 'schedule';\r\n }\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Poll } from \"../../lib/appManagers/appPollsManager\";\r\nimport type Chat from \"../chat/chat\";\r\nimport PopupElement from \".\";\r\nimport CheckboxField from \"../checkboxField\";\r\nimport InputField from \"../inputField\";\r\nimport RadioField from \"../radioField\";\r\nimport Scrollable from \"../scrollable\";\r\nimport SendContextMenu from \"../chat/sendContextMenu\";\r\nimport I18n, { _i18n } from \"../../lib/langPack\";\r\nimport findUpTag from \"../../helpers/dom/findUpTag\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport getRichValue from \"../../helpers/dom/getRichValue\";\r\nimport isInputEmpty from \"../../helpers/dom/isInputEmpty\";\r\nimport whichChild from \"../../helpers/dom/whichChild\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\n\r\nconst MAX_LENGTH_QUESTION = 255;\r\nconst MAX_LENGTH_OPTION = 100;\r\nconst MAX_LENGTH_SOLUTION = 200;\r\n\r\nexport default class PopupCreatePoll extends PopupElement {\r\n private questionInputField: InputField;\r\n private questions: HTMLElement;\r\n private scrollable: Scrollable;\r\n private tempId = 0;\r\n\r\n private anonymousCheckboxField: CheckboxField;\r\n private multipleCheckboxField: PopupCreatePoll['anonymousCheckboxField'];\r\n private quizCheckboxField: PopupCreatePoll['anonymousCheckboxField'];\r\n\r\n private correctAnswers: Uint8Array[];\r\n private quizSolutionField: InputField;\r\n private optionInputFields: InputField[];\r\n\r\n constructor(private chat: Chat) {\r\n super('popup-create-poll popup-new-media', null, {closable: true, withConfirm: 'Create', body: true});\r\n\r\n _i18n(this.title, 'NewPoll');\r\n\r\n this.questionInputField = new InputField({\r\n placeholder: 'AskAQuestion',\r\n label: 'AskAQuestion', \r\n name: 'question', \r\n maxLength: MAX_LENGTH_QUESTION\r\n });\r\n\r\n this.listenerSetter.add(this.questionInputField.input)('input', () => {\r\n this.handleChange();\r\n });\r\n\r\n this.optionInputFields = [];\r\n\r\n if(this.chat.type !== 'scheduled') {\r\n const sendMenu = new SendContextMenu({\r\n onSilentClick: () => {\r\n this.chat.input.sendSilent = true;\r\n this.send();\r\n },\r\n onScheduleClick: () => {\r\n this.chat.input.scheduleSending(() => {\r\n this.send();\r\n });\r\n },\r\n openSide: 'bottom-left',\r\n onContextElement: this.btnConfirm,\r\n });\r\n \r\n sendMenu.setPeerId(this.chat.peerId);\r\n\r\n this.header.append(sendMenu.sendMenu);\r\n }\r\n\r\n this.header.append(this.questionInputField.container);\r\n\r\n const hr = document.createElement('hr');\r\n const d = document.createElement('div');\r\n d.classList.add('caption');\r\n _i18n(d, 'PollOptions');\r\n\r\n this.questions = document.createElement('form');\r\n this.questions.classList.add('poll-create-questions');\r\n\r\n const dd = document.createElement('div');\r\n dd.classList.add('poll-create-settings');\r\n \r\n const settingsCaption = document.createElement('div');\r\n settingsCaption.classList.add('caption');\r\n _i18n(settingsCaption, 'Settings');\r\n\r\n if(!this.chat.appPeersManager.isBroadcast(this.chat.peerId)) {\r\n this.anonymousCheckboxField = new CheckboxField({\r\n text: 'NewPoll.Anonymous', \r\n name: 'anonymous'\r\n });\r\n this.anonymousCheckboxField.input.checked = true;\r\n dd.append(this.anonymousCheckboxField.label);\r\n }\r\n \r\n this.multipleCheckboxField = new CheckboxField({\r\n text: 'NewPoll.MultipleChoice', \r\n name: 'multiple'\r\n });\r\n this.quizCheckboxField = new CheckboxField({\r\n text: 'NewPoll.Quiz', \r\n name: 'quiz'\r\n });\r\n\r\n this.listenerSetter.add(this.multipleCheckboxField.input)('change', () => {\r\n const checked = this.multipleCheckboxField.input.checked;\r\n this.quizCheckboxField.input.toggleAttribute('disabled', checked);\r\n });\r\n\r\n this.listenerSetter.add(this.quizCheckboxField.input)('change', () => {\r\n const checked = this.quizCheckboxField.input.checked;\r\n\r\n (Array.from(this.questions.children) as HTMLElement[]).map(el => {\r\n el.classList.toggle('radio-field', checked);\r\n });\r\n\r\n if(!checked) {\r\n this.correctAnswers = undefined;\r\n this.quizSolutionField.setValueSilently('');\r\n }\r\n\r\n quizElements.forEach(el => el.classList.toggle('hide', !checked));\r\n\r\n this.multipleCheckboxField.input.toggleAttribute('disabled', checked);\r\n this.handleChange();\r\n });\r\n\r\n dd.append(this.multipleCheckboxField.label, this.quizCheckboxField.label);\r\n\r\n const quizElements: HTMLElement[] = [];\r\n\r\n const quizSolutionCaption = document.createElement('div');\r\n quizSolutionCaption.classList.add('caption');\r\n _i18n(quizSolutionCaption, 'AccDescrQuizExplanation');\r\n\r\n const quizHr = document.createElement('hr');\r\n\r\n const quizSolutionContainer = document.createElement('div');\r\n quizSolutionContainer.classList.add('poll-create-questions');\r\n\r\n this.quizSolutionField = new InputField({\r\n placeholder: 'NewPoll.Explanation.Placeholder', \r\n label: 'NewPoll.Explanation.Placeholder',\r\n name: 'solution',\r\n maxLength: MAX_LENGTH_SOLUTION\r\n });\r\n\r\n this.listenerSetter.add(this.questionInputField.input)('input', () => {\r\n this.handleChange();\r\n });\r\n\r\n const quizSolutionSubtitle = document.createElement('div');\r\n quizSolutionSubtitle.classList.add('subtitle');\r\n _i18n(quizSolutionSubtitle, 'AddAnExplanationInfo');\r\n\r\n quizSolutionContainer.append(this.quizSolutionField.container, quizSolutionSubtitle);\r\n\r\n quizElements.push(quizHr, quizSolutionCaption, quizSolutionContainer);\r\n quizElements.forEach(el => el.classList.add('hide'));\r\n\r\n this.body.parentElement.insertBefore(hr, this.body);\r\n this.body.append(d, this.questions, document.createElement('hr'), settingsCaption, dd, ...quizElements);\r\n\r\n attachClickEvent(this.btnConfirm, this.onSubmitClick, {listenerSetter: this.listenerSetter});\r\n\r\n this.scrollable = new Scrollable(this.body);\r\n this.appendMoreField();\r\n\r\n this.onEscape = () => {\r\n return !this.getFilledAnswers().length;\r\n };\r\n\r\n this.handleChange();\r\n }\r\n\r\n private getFilledAnswers() {\r\n const answers = Array.from(this.questions.children).map((el, idx) => {\r\n const input = el.querySelector('.input-field-input') as HTMLElement;\r\n return input instanceof HTMLInputElement ? input.value : getRichValue(input, false).value;\r\n }).filter(v => !!v.trim());\r\n\r\n return answers;\r\n }\r\n\r\n private onSubmitClick = () => {\r\n this.send();\r\n };\r\n\r\n private validate() {\r\n const question = this.questionInputField.value;\r\n if(!question) {\r\n return false;\r\n }\r\n\r\n if(question.length > MAX_LENGTH_QUESTION) {\r\n return false;\r\n }\r\n\r\n if(this.quizCheckboxField.input.checked && !this.correctAnswers?.length) {\r\n return false;\r\n }\r\n\r\n const answers = this.getFilledAnswers();\r\n if(answers.length < 2) {\r\n return false;\r\n }\r\n \r\n const tooLongOption = answers.find(a => a.length > MAX_LENGTH_OPTION);\r\n if(tooLongOption) {\r\n return false;\r\n }\r\n\r\n const {value: quizSolution} = getRichValue(this.quizSolutionField.input, false);\r\n if(quizSolution.length > MAX_LENGTH_SOLUTION) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private handleChange() {\r\n const valid = this.validate();\r\n this.btnConfirm.toggleAttribute('disabled', !valid);\r\n }\r\n\r\n public send(force = false) {\r\n const question = this.questionInputField.value;\r\n\r\n const answers = this.getFilledAnswers();\r\n\r\n const {value: quizSolution, entities: quizSolutionEntities} = getRichValue(this.quizSolutionField.input);\r\n\r\n if(this.chat.type === 'scheduled' && !force) {\r\n this.chat.input.scheduleSending(() => {\r\n this.send(true);\r\n });\r\n \r\n return;\r\n }\r\n\r\n this.hide();\r\n\r\n //const randomID = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)];\r\n //const randomIDS = bigint(randomID[0]).shiftLeft(32).add(bigint(randomID[1])).toString();\r\n\r\n const pFlags: Poll['pFlags'] = {};\r\n\r\n if(this.anonymousCheckboxField && !this.anonymousCheckboxField.input.checked) {\r\n pFlags.public_voters = true;\r\n }\r\n\r\n if(this.multipleCheckboxField.input.checked) {\r\n pFlags.multiple_choice = true;\r\n }\r\n\r\n if(this.quizCheckboxField.input.checked) {\r\n pFlags.quiz = true;\r\n }\r\n\r\n const poll: Poll = {\r\n _: 'poll',\r\n pFlags,\r\n question,\r\n answers: answers.map((value, idx) => {\r\n return {\r\n _: 'pollAnswer',\r\n text: value,\r\n option: new Uint8Array([idx])\r\n };\r\n }),\r\n id: undefined\r\n };\r\n //poll.id = randomIDS;\r\n\r\n const inputMediaPoll = this.chat.appPollsManager.getInputMediaPoll(poll, this.correctAnswers, quizSolution, quizSolutionEntities);\r\n\r\n //console.log('Will try to create poll:', inputMediaPoll);\r\n\r\n this.chat.appMessagesManager.sendOther(this.chat.peerId, inputMediaPoll, {\r\n threadId: this.chat.threadId,\r\n replyToMsgId: this.chat.input.replyToMsgId,\r\n scheduleDate: this.chat.input.scheduleDate,\r\n silent: this.chat.input.sendSilent\r\n });\r\n\r\n if(this.chat.input.helperType === 'reply') {\r\n this.chat.input.clearHelper();\r\n }\r\n\r\n this.chat.input.onMessageSent(false, false);\r\n }\r\n\r\n onInput = (e: Event) => {\r\n const target = e.target as HTMLInputElement;\r\n\r\n const radioLabel = findUpTag(target, 'LABEL');\r\n const isEmpty = isInputEmpty(target);\r\n if(!isEmpty) {\r\n target.parentElement.classList.add('is-filled');\r\n radioLabel.classList.remove('hidden-widget');\r\n radioLabel.firstElementChild.removeAttribute('disabled');\r\n }\r\n\r\n const isLast = !radioLabel.nextElementSibling;\r\n if(isLast && !isEmpty && this.questions.childElementCount < 10) {\r\n this.appendMoreField();\r\n }\r\n\r\n this.handleChange();\r\n };\r\n\r\n onDeleteClick = (e: MouseEvent) => {\r\n const target = e.target as HTMLSpanElement;\r\n const label = findUpTag(target, 'LABEL');\r\n const idx = whichChild(label);\r\n\r\n if(this.correctAnswers && this.correctAnswers[0][0] === idx) {\r\n this.correctAnswers = undefined;\r\n }\r\n\r\n label.remove();\r\n this.optionInputFields.splice(idx, 1);\r\n\r\n this.optionInputFields.forEach((inputField, idx) => {\r\n inputField.options.labelOptions.length = 0;\r\n inputField.options.labelOptions.push(idx + 1);\r\n const i18nElement = I18n.weakMap.get(inputField.label.firstElementChild as HTMLElement);\r\n i18nElement.update();\r\n });\r\n\r\n this.handleChange();\r\n };\r\n\r\n private appendMoreField() {\r\n const tempId = this.tempId++;\r\n const idx = this.questions.childElementCount + 1;\r\n const questionField = new InputField({\r\n placeholder: 'NewPoll.OptionsAddOption', \r\n label: 'NewPoll.OptionLabel',\r\n labelOptions: [idx],\r\n name: 'question-' + tempId, \r\n maxLength: MAX_LENGTH_OPTION\r\n });\r\n this.listenerSetter.add(questionField.input)('input', this.onInput);\r\n\r\n const radioField = new RadioField({\r\n text: '', \r\n name: 'question'\r\n });\r\n radioField.main.append(questionField.container);\r\n attachClickEvent(questionField.input, cancelEvent, {listenerSetter: this.listenerSetter});\r\n radioField.label.classList.add('hidden-widget');\r\n radioField.input.disabled = true;\r\n if(!this.quizCheckboxField.input.checked) {\r\n radioField.label.classList.remove('radio-field');\r\n }\r\n this.listenerSetter.add(radioField.input)('change', () => {\r\n const checked = radioField.input.checked;\r\n if(checked) {\r\n const idx = whichChild(radioField.label);\r\n this.correctAnswers = [new Uint8Array([idx])];\r\n this.handleChange();\r\n }\r\n });\r\n\r\n const deleteBtn = document.createElement('span');\r\n deleteBtn.classList.add('btn-icon', 'tgico-close');\r\n questionField.container.append(deleteBtn);\r\n \r\n attachClickEvent(deleteBtn, this.onDeleteClick, {listenerSetter: this.listenerSetter, once: true});\r\n\r\n this.questions.append(radioField.label);\r\n\r\n this.scrollable.scrollIntoViewNew(this.questions.lastElementChild as HTMLElement, 'center');\r\n //this.scrollable.scrollTo(this.scrollable.scrollHeight, 'top', true, true);\r\n\r\n this.optionInputFields.push(questionField);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type Chat from \"../chat/chat\";\nimport InputField from \"../inputField\";\nimport PopupElement from \".\";\nimport Scrollable from \"../scrollable\";\nimport { toast } from \"../toast\";\nimport { prepareAlbum, wrapDocument } from \"../wrappers\";\nimport CheckboxField from \"../checkboxField\";\nimport SendContextMenu from \"../chat/sendContextMenu\";\nimport { createPosterFromVideo, onMediaLoad } from \"../../helpers/files\";\nimport { MyDocument } from \"../../lib/appManagers/appDocsManager\";\nimport I18n, { i18n, LangPackKey } from \"../../lib/langPack\";\nimport appDownloadManager from \"../../lib/appManagers/appDownloadManager\";\nimport calcImageInBox from \"../../helpers/calcImageInBox\";\nimport placeCaretAtEnd from \"../../helpers/dom/placeCaretAtEnd\";\nimport rootScope from \"../../lib/rootScope\";\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\nimport { MediaSize } from \"../../helpers/mediaSizes\";\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport MEDIA_MIME_TYPES_SUPPORTED from '../../environment/mediaMimeTypesSupport';\n\ntype SendFileParams = Partial<{\n file: File,\n objectURL: string,\n thumb: {\n blob: Blob,\n url: string,\n size: MediaSize\n },\n width: number,\n height: number,\n duration: number,\n noSound: boolean\n}>;\n\n// TODO: .gif upload as video\n\nexport default class PopupNewMedia extends PopupElement {\n private input: HTMLElement;\n private mediaContainer: HTMLElement;\n private groupCheckboxField: CheckboxField;\n private wasInputValue = '';\n\n private willAttach: Partial<{\n type: 'media' | 'document',\n isMedia: true,\n group: boolean,\n sendFileDetails: SendFileParams[]\n }> = {\n sendFileDetails: [],\n group: false\n };\n private inputField: InputField;\n\n constructor(private chat: Chat, files: File[], willAttachType: PopupNewMedia['willAttach']['type']) {\n super('popup-send-photo popup-new-media', null, {closable: true, withConfirm: 'Modal.Send', confirmShortcutIsSendShortcut: true});\n\n this.willAttach.type = willAttachType;\n\n attachClickEvent(this.btnConfirm, () => this.send(), {listenerSetter: this.listenerSetter});\n\n if(this.chat.type !== 'scheduled') {\n const sendMenu = new SendContextMenu({\n onSilentClick: () => {\n this.chat.input.sendSilent = true;\n this.send();\n },\n onScheduleClick: () => {\n this.chat.input.scheduleSending(() => {\n this.send();\n });\n },\n openSide: 'bottom-left',\n onContextElement: this.btnConfirm,\n listenerSetter: this.listenerSetter\n });\n\n sendMenu.setPeerId(this.chat.peerId);\n\n this.header.append(sendMenu.sendMenu);\n }\n\n this.mediaContainer = document.createElement('div');\n this.mediaContainer.classList.add('popup-photo');\n const scrollable = new Scrollable(null);\n scrollable.container.append(this.mediaContainer);\n \n this.inputField = new InputField({\n placeholder: 'PreviewSender.CaptionPlaceholder',\n label: 'Caption',\n name: 'photo-caption',\n maxLength: rootScope.config.caption_length_max,\n showLengthOn: 80\n });\n this.input = this.inputField.input;\n\n this.inputField.value = this.wasInputValue = this.chat.input.messageInputField.input.innerHTML;\n this.chat.input.messageInputField.value = '';\n\n this.container.append(scrollable.container);\n\n if(files.length > 1) {\n this.groupCheckboxField = new CheckboxField({\n text: 'PreviewSender.GroupItems', \n name: 'group-items'\n });\n this.container.append(this.groupCheckboxField.label, this.inputField.container);\n \n this.groupCheckboxField.input.checked = true;\n this.willAttach.group = true;\n\n this.listenerSetter.add(this.groupCheckboxField.input)('change', () => {\n const checked = this.groupCheckboxField.input.checked;\n \n this.willAttach.group = checked;\n this.willAttach.sendFileDetails.length = 0;\n\n //this.mediaContainer.innerHTML = '';\n //this.container.classList.remove('is-media', 'is-document', 'is-album');\n this.attachFiles(files);\n });\n }\n \n this.container.append(this.inputField.container);\n\n this.attachFiles(files);\n }\n\n private onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement;\n if(target !== this.input) {\n if(target.tagName === 'INPUT' || target.hasAttribute('contenteditable')) {\n return;\n }\n\n this.input.focus();\n placeCaretAtEnd(this.input);\n }\n };\n\n public send(force = false) {\n if(this.chat.type === 'scheduled' && !force) {\n this.chat.input.scheduleSending(() => {\n this.send(true);\n });\n \n return;\n }\n\n let caption = this.inputField.value;\n if(caption.length > rootScope.config.caption_length_max) {\n toast(I18n.format('Error.PreviewSender.CaptionTooLong', true));\n return;\n }\n\n this.hide();\n const willAttach = this.willAttach;\n willAttach.isMedia = willAttach.type === 'media' ? true : undefined;\n\n //console.log('will send files with options:', willAttach);\n\n const peerId = this.chat.peerId;\n const input = this.chat.input;\n const silent = input.sendSilent;\n const scheduleDate = input.scheduleDate;\n\n if(willAttach.sendFileDetails.length > 1 && willAttach.group) {\n for(let i = 0; i < willAttach.sendFileDetails.length;) {\n let firstType = willAttach.sendFileDetails[i].file.type.split('/')[0];\n for(var k = 0; k < 10 && i < willAttach.sendFileDetails.length; ++i, ++k) {\n const type = willAttach.sendFileDetails[i].file.type.split('/')[0];\n if(firstType !== type) {\n break;\n }\n }\n\n const w = {...willAttach};\n w.sendFileDetails = willAttach.sendFileDetails.slice(i - k, i);\n\n this.chat.appMessagesManager.sendAlbum(peerId, w.sendFileDetails.map(d => d.file), Object.assign({\n caption,\n replyToMsgId: input.replyToMsgId,\n threadId: this.chat.threadId,\n isMedia: willAttach.isMedia,\n silent,\n scheduleDate,\n clearDraft: true as true\n }, w));\n\n caption = undefined;\n input.replyToMsgId = this.chat.threadId;\n }\n } else {\n if(caption) {\n if(willAttach.sendFileDetails.length > 1) {\n this.chat.appMessagesManager.sendText(peerId, caption, {\n replyToMsgId: input.replyToMsgId, \n threadId: this.chat.threadId,\n silent, \n scheduleDate,\n clearDraft: true\n });\n caption = '';\n //input.replyToMsgId = undefined;\n }\n }\n \n const promises = willAttach.sendFileDetails.map(params => {\n const promise = this.chat.appMessagesManager.sendFile(peerId, params.file, Object.assign({\n //isMedia: willAttach.isMedia, \n isMedia: willAttach.isMedia, \n caption,\n replyToMsgId: input.replyToMsgId,\n threadId: this.chat.threadId,\n silent,\n scheduleDate,\n clearDraft: true as true\n }, params));\n\n caption = '';\n return promise;\n });\n\n input.replyToMsgId = this.chat.threadId;\n }\n\n //Promise.all(promises);\n\n //appMessagesManager.sendFile(appImManager.peerId, willAttach.file, willAttach);\n \n input.onMessageSent();\n }\n\n public attachFile = (file: File) => {\n const willAttach = this.willAttach;\n return new Promise((resolve) => {\n const params: SendFileParams = {};\n params.file = file;\n //console.log('selected file:', file, typeof(file), willAttach);\n const itemDiv = document.createElement('div');\n switch(willAttach.type) {\n case 'media': {\n const isVideo = file.type.indexOf('video/') === 0;\n\n itemDiv.classList.add('popup-item-media');\n\n if(isVideo) {\n const video = document.createElement('video');\n const source = document.createElement('source');\n source.src = params.objectURL = URL.createObjectURL(file);\n video.autoplay = true;\n video.controls = false;\n video.muted = true;\n video.setAttribute('playsinline', 'true');\n\n video.addEventListener('timeupdate', () => {\n video.pause();\n }, {once: true});\n\n onMediaLoad(video).then(() => {\n params.width = video.videoWidth;\n params.height = video.videoHeight;\n params.duration = Math.floor(video.duration);\n \n const audioDecodedByteCount = (video as any).webkitAudioDecodedByteCount;\n if(audioDecodedByteCount !== undefined) {\n params.noSound = !audioDecodedByteCount;\n }\n\n itemDiv.append(video);\n createPosterFromVideo(video).then(thumb => {\n params.thumb = {\n url: URL.createObjectURL(thumb.blob),\n ...thumb\n };\n resolve(itemDiv);\n });\n });\n\n video.append(source);\n } else {\n const img = new Image();\n img.src = params.objectURL = URL.createObjectURL(file);\n img.onload = () => {\n params.width = img.naturalWidth;\n params.height = img.naturalHeight;\n\n itemDiv.append(img);\n resolve(itemDiv);\n };\n }\n \n break;\n }\n\n case 'document': {\n const isPhoto = file.type.indexOf('image/') !== -1;\n const isAudio = file.type.indexOf('audio/') !== -1;\n if(isPhoto || isAudio) {\n params.objectURL = URL.createObjectURL(file);\n }\n\n const doc = {\n _: 'document',\n file: file,\n file_name: file.name || '',\n fileName: file.name ? RichTextProcessor.wrapEmojiText(file.name) : '',\n size: file.size,\n type: isPhoto ? 'photo' : 'doc'\n } as MyDocument;\n\n const cacheContext = appDownloadManager.getCacheContext(doc);\n cacheContext.url = params.objectURL;\n cacheContext.downloaded = file.size;\n\n const docDiv = wrapDocument({\n message: {\n _: 'message',\n pFlags: {\n is_outgoing: true\n },\n mid: 0,\n peerId: 0,\n media: {\n _: 'messageMediaDocument',\n document: doc\n }\n } as any\n });\n\n const finish = () => {\n itemDiv.append(docDiv);\n resolve(itemDiv);\n };\n\n if(isPhoto) {\n const img = new Image();\n img.src = params.objectURL;\n img.onload = () => {\n params.width = img.naturalWidth;\n params.height = img.naturalHeight;\n\n finish();\n };\n\n img.onerror = finish;\n } else {\n finish();\n }\n\n break;\n }\n }\n\n willAttach.sendFileDetails.push(params);\n });\n };\n\n public attachFiles(files: File[]) {\n const container = this.container;\n const willAttach = this.willAttach;\n\n /* if(files.length > 10 && willAttach.type === 'media') {\n willAttach.type = 'document';\n } */\n\n if(willAttach.type === 'media') {\n files = files.filter(file => MEDIA_MIME_TYPES_SUPPORTED.has(file.type));\n } else {\n files = files.slice();\n }\n\n Promise.all(files.map(this.attachFile)).then(results => {\n this.container.classList.remove('is-media', 'is-document', 'is-album');\n this.mediaContainer.innerHTML = '';\n\n if(files.length) {\n let key: LangPackKey;\n const args: any[] = [];\n if(willAttach.type === 'document') {\n key = 'PreviewSender.SendFile';\n args.push(files.length);\n container.classList.add('is-document');\n } else {\n container.classList.add('is-media');\n \n let foundPhotos = 0;\n let foundVideos = 0;\n files.forEach(file => {\n if(file.type.indexOf('image/') === 0) ++foundPhotos;\n else if(file.type.indexOf('video/') === 0) ++foundVideos;\n });\n \n const sum = foundPhotos + foundVideos;\n if(sum > 1 && willAttach.group) {\n key = 'PreviewSender.SendAlbum';\n const albumsLength = Math.ceil(sum / 10);\n args.push(albumsLength);\n } else if(foundPhotos) {\n key = 'PreviewSender.SendPhoto';\n args.push(foundPhotos);\n } else if(foundVideos) {\n key = 'PreviewSender.SendVideo';\n args.push(foundVideos);\n }\n }\n\n this.title.textContent = '';\n this.title.append(i18n(key, args));\n }\n\n if(willAttach.type === 'media') {\n if(willAttach.sendFileDetails.length > 1 && willAttach.group) {\n container.classList.add('is-album');\n\n for(let i = 0; i < results.length; i += 10) {\n const albumContainer = document.createElement('div');\n albumContainer.classList.add('popup-album');\n\n albumContainer.append(...results.slice(i, i + 10));\n prepareAlbum({\n container: albumContainer,\n items: willAttach.sendFileDetails.slice(i, i + 10).map(o => ({w: o.width, h: o.height})),\n maxWidth: 380,\n minWidth: 100,\n spacing: 4\n });\n\n this.mediaContainer.append(albumContainer);\n }\n\n //console.log('chatInput album layout:', layout);\n } else {\n for(let i = 0; i < results.length; ++i) {\n const params = willAttach.sendFileDetails[i];\n const div = results[i];\n const size = calcImageInBox(params.width, params.height, 380, 320);\n div.style.width = size.width + 'px';\n div.style.height = size.height + 'px';\n this.mediaContainer.append(div);\n }\n }\n } else {\n this.mediaContainer.append(...results);\n }\n\n // show now\n if(!this.element.classList.contains('active')) {\n this.listenerSetter.add(document.body)('keydown', this.onKeyDown);\n this.onClose = () => {\n if(this.wasInputValue) {\n this.chat.input.messageInputField.value = this.wasInputValue;\n }\n };\n this.show();\n }\n });\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport fastSmoothScroll from \"../fastSmoothScroll\";\r\nimport { cancelEvent } from \"./cancelEvent\";\r\nimport { attachClickEvent, detachClickEvent } from \"./clickEvent\";\r\nimport findUpAsChild from \"./findUpAsChild\";\r\nimport findUpClassName from \"./findUpClassName\";\r\n\r\ntype ArrowKey = 'ArrowUp' | 'ArrowDown' | 'ArrowLeft' | 'ArrowRight';\r\nconst HANDLE_EVENT = 'keydown';\r\nconst ACTIVE_CLASS_NAME = 'active';\r\n\r\nconst AXIS_Y_KEYS: ArrowKey[] = ['ArrowUp', 'ArrowDown'];\r\nconst AXIS_X_KEYS: ArrowKey[] = ['ArrowLeft', 'ArrowRight'];\r\n\r\nexport default function attachListNavigation({list, type, onSelect, once, waitForKey}: {\r\n list: HTMLElement, \r\n type: 'xy' | 'x' | 'y',\r\n onSelect: (target: Element) => void | boolean,\r\n once: boolean,\r\n waitForKey?: string\r\n}) {\r\n const keyNames = new Set(type === 'xy' ? AXIS_Y_KEYS.concat(AXIS_X_KEYS) : (type === 'x' ? AXIS_X_KEYS : AXIS_Y_KEYS)); \r\n\r\n let target: Element;\r\n const getCurrentTarget = () => {\r\n return target || list.querySelector('.' + ACTIVE_CLASS_NAME) || list.firstElementChild;\r\n };\r\n\r\n const setCurrentTarget = (_target: Element, scrollTo: boolean) => {\r\n if(target === _target) {\r\n return;\r\n }\r\n\r\n let hadTarget = false;\r\n if(target) {\r\n hadTarget = true;\r\n target.classList.remove(ACTIVE_CLASS_NAME);\r\n }\r\n\r\n target = _target;\r\n if(!target) return;\r\n target.classList.add(ACTIVE_CLASS_NAME);\r\n\r\n if(hadTarget && scrollable && scrollTo) {\r\n fastSmoothScroll(scrollable, target as HTMLElement, 'center', undefined, undefined, undefined, 100, type === 'x' ? 'x' : 'y');\r\n }\r\n };\r\n\r\n const getNextTargetX = (currentTarget: Element, isNext: boolean) => {\r\n let nextTarget: Element;\r\n if(isNext) nextTarget = currentTarget.nextElementSibling || list.firstElementChild;\r\n else nextTarget = currentTarget.previousElementSibling || list.lastElementChild;\r\n\r\n return nextTarget;\r\n };\r\n\r\n const getNextTargetY = (currentTarget: Element, isNext: boolean) => {\r\n const property = isNext ? 'nextElementSibling' : 'previousElementSibling';\r\n const endProperty = isNext ? 'firstElementChild' : 'lastElementChild';\r\n const currentRect = currentTarget.getBoundingClientRect();\r\n\r\n let nextTarget = currentTarget[property] || list[endProperty];\r\n while(nextTarget !== currentTarget) {\r\n const targetRect = nextTarget.getBoundingClientRect();\r\n if(targetRect.x === currentRect.x && targetRect.y !== currentRect.y) {\r\n break;\r\n }\r\n\r\n nextTarget = nextTarget[property] || list[endProperty];\r\n }\r\n\r\n return nextTarget;\r\n };\r\n\r\n let handleArrowKey: (currentTarget: Element, key: ArrowKey) => Element;\r\n if(type === 'xy') { // flex-direction: row; flex-wrap: wrap;\r\n handleArrowKey = (currentTarget, key) => {\r\n if(key === 'ArrowUp' || key === 'ArrowDown') return getNextTargetY(currentTarget, key === 'ArrowDown');\r\n else return getNextTargetX(currentTarget, key === 'ArrowRight');\r\n };\r\n } else { // flex-direction: row | column;\r\n handleArrowKey = (currentTarget, key) => getNextTargetX(currentTarget, key === 'ArrowRight' || key === 'ArrowDown');\r\n }\r\n\r\n let onKeyDown = (e: KeyboardEvent) => {\r\n if(!keyNames.has(e.key as any)) {\r\n if(e.key === 'Enter') {\r\n cancelEvent(e);\r\n fireSelect(getCurrentTarget());\r\n }\r\n\r\n return;\r\n }\r\n\r\n cancelEvent(e);\r\n\r\n if(list.childElementCount > 1) {\r\n let currentTarget = getCurrentTarget();\r\n currentTarget = handleArrowKey(currentTarget, e.key as any);\r\n setCurrentTarget(currentTarget, true);\r\n }\r\n };\r\n\r\n const scrollable = findUpClassName(list, 'scrollable');\r\n list.classList.add('navigable-list');\r\n\r\n const onMouseMove = (e: MouseEvent) => {\r\n const target = findUpAsChild(e.target, list) as HTMLElement;\r\n if(!target) {\r\n return;\r\n }\r\n\r\n setCurrentTarget(target, false);\r\n };\r\n\r\n const onClick = (e: Event) => {\r\n cancelEvent(e); // cancel keyboard closening\r\n\r\n const target = findUpAsChild(e.target, list) as HTMLElement;\r\n if(!target) {\r\n return;\r\n }\r\n\r\n setCurrentTarget(target, false);\r\n fireSelect(getCurrentTarget());\r\n };\r\n\r\n const fireSelect = (target: Element) => {\r\n const canContinue = onSelect(target);\r\n if(canContinue !== undefined ? !canContinue : once) {\r\n detach();\r\n }\r\n };\r\n\r\n const detach = () => {\r\n // input.removeEventListener(HANDLE_EVENT, onKeyDown, {capture: true});\r\n document.removeEventListener(HANDLE_EVENT, onKeyDown, {capture: true});\r\n list.removeEventListener('mousemove', onMouseMove);\r\n detachClickEvent(list, onClick);\r\n };\r\n\r\n const resetTarget = () => {\r\n if(waitForKey) return;\r\n setCurrentTarget(list.firstElementChild, false);\r\n };\r\n\r\n if(waitForKey) {\r\n const _onKeyDown = onKeyDown;\r\n onKeyDown = (e) => {\r\n if(e.key === waitForKey) {\r\n cancelEvent(e);\r\n\r\n document.removeEventListener(HANDLE_EVENT, onKeyDown, {capture: true});\r\n onKeyDown = _onKeyDown;\r\n document.addEventListener(HANDLE_EVENT, onKeyDown, {capture: true, passive: false});\r\n\r\n waitForKey = undefined;\r\n resetTarget();\r\n }\r\n };\r\n } else {\r\n resetTarget();\r\n }\r\n\r\n // const input = document.activeElement as HTMLElement;\r\n // input.addEventListener(HANDLE_EVENT, onKeyDown, {capture: true, passive: false});\r\n document.addEventListener(HANDLE_EVENT, onKeyDown, {capture: true, passive: false});\r\n list.addEventListener('mousemove', onMouseMove, {passive: true});\r\n attachClickEvent(list, onClick);\r\n\r\n return {\r\n detach,\r\n resetTarget\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport attachListNavigation from \"../../helpers/dom/attachListNavigation\";\r\nimport EventListenerBase from \"../../helpers/eventListenerBase\";\r\nimport { safeAssign } from \"../../helpers/object\";\r\nimport { IS_MOBILE } from \"../../environment/userAgent\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport appNavigationController, { NavigationItem } from \"../appNavigationController\";\r\nimport SetTransition from \"../singleTransition\";\r\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\r\n\r\nexport default class AutocompleteHelper extends EventListenerBase<{\r\n hidden: () => void,\r\n visible: () => void,\r\n}> {\r\n protected hidden = true;\r\n protected container: HTMLElement;\r\n protected list: HTMLElement;\r\n protected resetTarget: () => void;\r\n protected detach: () => void;\r\n protected init?(): void;\r\n\r\n protected controller: AutocompleteHelperController;\r\n protected listType: 'xy' | 'x' | 'y';\r\n protected onSelect: (target: Element) => boolean | void;\r\n protected waitForKey?: string;\r\n\r\n protected navigationItem: NavigationItem;\r\n\r\n constructor(options: {\r\n appendTo: HTMLElement,\r\n controller: AutocompleteHelper['controller'],\r\n listType: AutocompleteHelper['listType'],\r\n onSelect: AutocompleteHelper['onSelect'],\r\n waitForKey?: AutocompleteHelper['waitForKey']\r\n }) {\r\n super(false);\r\n\r\n safeAssign(this, options);\r\n \r\n this.container = document.createElement('div');\r\n this.container.classList.add('autocomplete-helper', 'z-depth-1');\r\n \r\n options.appendTo.append(this.container);\r\n \r\n this.attachNavigation();\r\n\r\n this.controller.addHelper(this);\r\n }\r\n\r\n protected onVisible = () => {\r\n if(this.detach) { // it can be so because 'visible' calls before animation's end\r\n this.detach();\r\n }\r\n\r\n const list = this.list;\r\n const {detach, resetTarget} = attachListNavigation({\r\n list, \r\n type: this.listType,\r\n onSelect: this.onSelect,\r\n once: true,\r\n waitForKey: this.waitForKey\r\n });\r\n\r\n this.detach = detach;\r\n this.resetTarget = resetTarget;\r\n if(!IS_MOBILE && !this.navigationItem) {\r\n this.navigationItem = {\r\n type: 'autocomplete-helper',\r\n onPop: () => {\r\n this.navigationItem = undefined;\r\n this.toggle(true);\r\n },\r\n noBlurOnPop: true\r\n };\r\n\r\n appNavigationController.pushItem(this.navigationItem);\r\n }\r\n\r\n this.addEventListener('hidden', () => {\r\n this.resetTarget = undefined;\r\n this.detach = undefined;\r\n\r\n list.innerHTML = '';\r\n detach();\r\n\r\n if(this.navigationItem) {\r\n appNavigationController.removeItem(this.navigationItem);\r\n this.navigationItem = undefined;\r\n }\r\n }, {once: true});\r\n };\r\n\r\n protected attachNavigation() {\r\n this.addEventListener('visible', this.onVisible);\r\n }\r\n\r\n public toggle(hide?: boolean, fromController = false) {\r\n if(this.init) {\r\n return;\r\n }\r\n \r\n if(hide === undefined) {\r\n hide = this.container.classList.contains('is-visible') && !this.container.classList.contains('backwards');\r\n }\r\n\r\n if(this.hidden === hide) {\r\n if(!hide) {\r\n this.dispatchEvent('visible'); // reset target and listener\r\n }\r\n\r\n return;\r\n }\r\n\r\n this.hidden = hide;\r\n\r\n if(!hide) {\r\n this.controller.hideOtherHelpers(this);\r\n this.dispatchEvent('visible'); // fire it before so target will be set\r\n } else {\r\n if(this.navigationItem) {\r\n appNavigationController.removeItem(this.navigationItem);\r\n this.navigationItem = undefined;\r\n }\r\n\r\n if(!fromController) {\r\n this.controller.hideOtherHelpers();\r\n }\r\n\r\n if(this.detach) { // force detach here\r\n this.detach();\r\n }\r\n }\r\n\r\n SetTransition(this.container, 'is-visible', !hide, rootScope.settings.animationsEnabled ? 200 : 0, () => {\r\n this.hidden && this.dispatchEvent('hidden');\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\nimport { MyDocument } from \"../../lib/appManagers/appDocsManager\";\r\nimport { CHAT_ANIMATION_GROUP } from \"../../lib/appManagers/appImManager\";\r\nimport appStickersManager from \"../../lib/appManagers/appStickersManager\";\r\nimport { EmoticonsDropdown } from \"../emoticonsDropdown\";\r\nimport { SuperStickerRenderer } from \"../emoticonsDropdown/tabs/stickers\";\r\nimport LazyLoadQueue from \"../lazyLoadQueue\";\r\nimport Scrollable from \"../scrollable\";\r\nimport AutocompleteHelper from \"./autocompleteHelper\";\r\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\r\n\r\nexport default class StickersHelper extends AutocompleteHelper {\r\n private scrollable: Scrollable;\r\n private superStickerRenderer: SuperStickerRenderer;\r\n private lazyLoadQueue: LazyLoadQueue;\r\n private onChangeScreen: () => void;\r\n\r\n constructor(appendTo: HTMLElement, controller: AutocompleteHelperController) {\r\n super({\r\n appendTo, \r\n controller,\r\n listType: 'xy', \r\n onSelect: (target) => {\r\n return !EmoticonsDropdown.onMediaClick({target}, true);\r\n }, \r\n waitForKey: 'ArrowUp'\r\n });\r\n\r\n this.container.classList.add('stickers-helper');\r\n\r\n this.addEventListener('visible', () => {\r\n setTimeout(() => { // it is not rendered yet\r\n this.scrollable.container.scrollTop = 0;\r\n }, 0);\r\n });\r\n\r\n this.addEventListener('hidden', () => {\r\n if(this.onChangeScreen) {\r\n mediaSizes.removeEventListener('changeScreen', this.onChangeScreen);\r\n this.onChangeScreen = undefined;\r\n }\r\n });\r\n }\r\n\r\n public checkEmoticon(emoticon: string) {\r\n const middleware = this.controller.getMiddleware();\r\n\r\n if(this.lazyLoadQueue) {\r\n this.lazyLoadQueue.clear();\r\n }\r\n\r\n appStickersManager.getStickersByEmoticon(emoticon)\r\n .then((stickers) => {\r\n if(!middleware()) {\r\n return;\r\n }\r\n\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n const container = this.list.cloneNode() as HTMLElement;\r\n\r\n let ready: Promise;\r\n\r\n this.lazyLoadQueue.clear();\r\n if(stickers.length) {\r\n ready = new Promise((resolve) => {\r\n const promises: Promise[] = [];\r\n stickers.forEach(sticker => {\r\n container.append(this.superStickerRenderer.renderSticker(sticker as MyDocument, undefined, promises));\r\n });\r\n\r\n (Promise.all(promises) as Promise).finally(resolve);\r\n });\r\n } else {\r\n ready = Promise.resolve();\r\n }\r\n\r\n ready.then(() => {\r\n this.list.replaceWith(container);\r\n this.list = container;\r\n\r\n if(!this.onChangeScreen) {\r\n this.onChangeScreen = () => {\r\n const width = (this.list.childElementCount * mediaSizes.active.esgSticker.width) + (this.list.childElementCount - 1 * 1);\r\n this.list.style.width = width + 'px';\r\n };\r\n mediaSizes.addEventListener('changeScreen', this.onChangeScreen);\r\n }\r\n\r\n this.onChangeScreen();\r\n\r\n this.toggle(!stickers.length);\r\n this.scrollable.scrollTop = 0;\r\n });\r\n });\r\n }\r\n\r\n protected init() {\r\n this.list = document.createElement('div');\r\n this.list.classList.add('stickers-helper-stickers', 'super-stickers');\r\n\r\n this.container.append(this.list);\r\n\r\n this.scrollable = new Scrollable(this.container);\r\n this.lazyLoadQueue = new LazyLoadQueue();\r\n this.superStickerRenderer = new SuperStickerRenderer(this.lazyLoadQueue, CHAT_ANIMATION_GROUP);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport { SEND_WHEN_ONLINE_TIMESTAMP } from \"../../lib/mtproto/constants\";\r\nimport Button from \"../button\";\r\nimport PopupDatePicker from \"./datePicker\";\r\n\r\nconst getMinDate = () => {\r\n const date = new Date();\r\n //date.setDate(date.getDate() - 1);\r\n date.setHours(0, 0, 0, 0);\r\n return date;\r\n};\r\n\r\nconst getMaxDate = () => {\r\n const date = new Date();\r\n date.setFullYear(date.getFullYear() + 1);\r\n date.setDate(date.getDate() - 1);\r\n return date;\r\n};\r\n\r\nconst checkDate = (date: Date) => {\r\n return date.getTime() > getMaxDate().getTime() ? new Date() : date;\r\n};\r\n\r\nexport default class PopupSchedule extends PopupDatePicker {\r\n constructor(initDate: Date, onPick: (timestamp: number) => void, canSendWhenOnline: boolean) {\r\n super(checkDate(initDate), onPick, {\r\n noButtons: true,\r\n noTitle: true,\r\n closable: true,\r\n withConfirm: true,\r\n minDate: getMinDate(),\r\n maxDate: getMaxDate(),\r\n withTime: true,\r\n showOverflowMonths: true,\r\n confirmShortcutIsSendShortcut: true\r\n });\r\n\r\n this.element.classList.add('popup-schedule');\r\n this.header.append(this.controlsDiv);\r\n this.title.replaceWith(this.monthTitle);\r\n this.body.append(this.btnConfirm);\r\n\r\n if(canSendWhenOnline) {\r\n const btnSendWhenOnline = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'Schedule.SendWhenOnline'});\r\n this.body.append(btnSendWhenOnline);\r\n\r\n attachClickEvent(btnSendWhenOnline, () => {\r\n onPick(SEND_WHEN_ONLINE_TIMESTAMP);\r\n this.hide();\r\n });\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MessageEntity } from \"../../layer\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport getRichElementValue from \"./getRichElementValue\";\r\n\r\nexport default function getRichValueWithCaret(field: HTMLElement, withEntities = true) {\r\n const lines: string[] = [];\r\n const line: string[] = [];\r\n\r\n const sel = window.getSelection();\r\n let selNode: Node;\r\n let selOffset: number;\r\n if(sel && sel.rangeCount) {\r\n const range = sel.getRangeAt(0);\r\n if(range.startContainer &&\r\n range.startContainer == range.endContainer &&\r\n range.startOffset == range.endOffset) {\r\n selNode = range.startContainer;\r\n selOffset = range.startOffset;\r\n }\r\n }\r\n\r\n const entities: MessageEntity[] = withEntities ? [] : undefined;\r\n getRichElementValue(field, lines, line, selNode, selOffset, entities);\r\n\r\n if(line.length) {\r\n lines.push(line.join(''));\r\n }\r\n\r\n let value = lines.join('\\n');\r\n const caretPos = value.indexOf('\\x01');\r\n if(caretPos != -1) {\r\n value = value.substr(0, caretPos) + value.substr(caretPos + 1);\r\n }\r\n value = value.replace(/\\u00A0/g, ' ');\r\n\r\n if(entities) {\r\n RichTextProcessor.combineSameEntities(entities);\r\n }\r\n\r\n return {value, entities, caretPos};\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type ChatInput from \"./input\";\r\nimport type { AppEmojiManager } from \"../../lib/appManagers/appEmojiManager\";\r\nimport { appendEmoji, getEmojiFromElement } from \"../emoticonsDropdown/tabs/emoji\";\r\nimport { ScrollableX } from \"../scrollable\";\r\nimport AutocompleteHelper from \"./autocompleteHelper\";\r\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\r\n\r\nexport default class EmojiHelper extends AutocompleteHelper {\r\n private scrollable: ScrollableX;\r\n\r\n constructor(appendTo: HTMLElement, \r\n controller: AutocompleteHelperController, \r\n chatInput: ChatInput, \r\n private appEmojiManager: AppEmojiManager) {\r\n super({\r\n appendTo,\r\n controller, \r\n listType: 'x', \r\n onSelect: (target) => {\r\n chatInput.onEmojiSelected(getEmojiFromElement(target as any), true);\r\n }\r\n });\r\n\r\n this.container.classList.add('emoji-helper');\r\n }\r\n\r\n protected init() {\r\n this.list = document.createElement('div');\r\n this.list.classList.add('emoji-helper-emojis', 'super-emojis');\r\n\r\n this.container.append(this.list);\r\n\r\n this.scrollable = new ScrollableX(this.container);\r\n\r\n this.addEventListener('visible', () => {\r\n setTimeout(() => { // it is not rendered yet\r\n this.scrollable.container.scrollLeft = 0;\r\n }, 0);\r\n });\r\n }\r\n\r\n public render(emojis: string[], waitForKey: boolean) {\r\n if(this.init) {\r\n if(!emojis.length) {\r\n return;\r\n }\r\n\r\n this.init();\r\n this.init = null;\r\n }\r\n \r\n emojis = emojis.slice(0, 80);\r\n\r\n if(emojis.length) {\r\n this.list.innerHTML = '';\r\n emojis.forEach(emoji => {\r\n appendEmoji(emoji, this.list, false, true);\r\n });\r\n }\r\n\r\n this.waitForKey = waitForKey ? 'ArrowUp' : undefined;\r\n this.toggle(!emojis.length);\r\n\r\n /* window.requestAnimationFrame(() => {\r\n this.container.style.width = (3 * 2) + (emojis.length * 44) + 'px';\r\n }); */\r\n }\r\n\r\n public checkQuery(query: string, firstChar: string) {\r\n const middleware = this.controller.getMiddleware();\r\n this.appEmojiManager.getBothEmojiKeywords().then(() => {\r\n if(!middleware()) {\r\n return;\r\n }\r\n\r\n const q = query.replace(/^:/, '');\r\n const emojis = this.appEmojiManager.searchEmojis(q);\r\n this.render(emojis, firstChar !== ':');\r\n //console.log(emojis);\r\n });\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport AvatarElement from \"../avatar\";\r\nimport PeerTitle from \"../peerTitle\";\r\nimport Scrollable from \"../scrollable\";\r\nimport AutocompleteHelper from \"./autocompleteHelper\";\r\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\r\n\r\nexport default class AutocompletePeerHelper extends AutocompleteHelper {\r\n protected static BASE_CLASS = 'autocomplete-peer-helper';\r\n protected static BASE_CLASS_LIST_ELEMENT = AutocompletePeerHelper.BASE_CLASS + '-list-element';\r\n private scrollable: Scrollable;\r\n\r\n constructor(appendTo: HTMLElement, controller: AutocompleteHelperController, protected className: string, onSelect: (target: Element) => boolean | void) {\r\n super({\r\n appendTo, \r\n controller,\r\n listType: 'y', \r\n onSelect\r\n });\r\n\r\n this.container.classList.add(AutocompletePeerHelper.BASE_CLASS, className);\r\n }\r\n\r\n protected init() {\r\n this.list = document.createElement('div');\r\n this.list.classList.add(AutocompletePeerHelper.BASE_CLASS + '-list');\r\n\r\n this.container.append(this.list);\r\n\r\n this.scrollable = new Scrollable(this.container);\r\n\r\n this.addEventListener('visible', () => {\r\n setTimeout(() => { // it is not rendered yet\r\n this.scrollable.container.scrollTop = 0;\r\n }, 0);\r\n });\r\n }\r\n\r\n public render(data: {peerId: number, name?: string, description?: string}[]) {\r\n if(this.init) {\r\n if(!data.length) {\r\n return;\r\n }\r\n\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n if(data.length) {\r\n this.list.innerHTML = '';\r\n data.forEach(d => {\r\n const div = AutocompletePeerHelper.listElement({\r\n className: this.className,\r\n peerId: d.peerId,\r\n name: d.name,\r\n description: d.description\r\n });\r\n\r\n this.list.append(div);\r\n });\r\n }\r\n\r\n this.toggle(!data.length);\r\n }\r\n\r\n public static listElement(options: {\r\n className: string,\r\n peerId: number,\r\n name?: string,\r\n description?: string\r\n }) {\r\n const BASE = AutocompletePeerHelper.BASE_CLASS_LIST_ELEMENT;\r\n options.className += '-list-element';\r\n\r\n const div = document.createElement('div');\r\n div.classList.add(BASE, options.className);\r\n div.dataset.peerId = '' + options.peerId;\r\n \r\n const avatar = new AvatarElement();\r\n avatar.classList.add('avatar-30', BASE + '-avatar', options.className + '-avatar');\r\n avatar.setAttribute('dialog', '0');\r\n avatar.setAttribute('peer', '' + options.peerId);\r\n \r\n const name = document.createElement('div');\r\n name.classList.add(BASE + '-name', options.className + '-name');\r\n if(!options.name) {\r\n name.append(new PeerTitle({\r\n peerId: options.peerId,\r\n dialog: false,\r\n onlyFirstName: false,\r\n plainText: false\r\n }).element);\r\n } else {\r\n name.innerHTML = RichTextProcessor.wrapEmojiText(options.name);\r\n }\r\n \r\n div.append(avatar, name);\r\n\r\n if(options.description) {\r\n const description = document.createElement('div');\r\n description.classList.add(BASE + '-description', options.className + '-description');\r\n description.innerHTML = RichTextProcessor.wrapEmojiText(options.description);\r\n div.append(description);\r\n }\r\n \r\n return div;\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type ChatInput from \"./input\";\nimport type { AppProfileManager } from \"../../lib/appManagers/appProfileManager\";\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\nimport type { BotInfo } from \"../../layer\";\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\nimport AutocompletePeerHelper from \"./autocompletePeerHelper\";\nimport SearchIndex from \"../../lib/searchIndex\";\n\nexport default class CommandsHelper extends AutocompletePeerHelper {\n constructor(appendTo: HTMLElement, \n controller: AutocompleteHelperController, \n chatInput: ChatInput, \n private appProfileManager: AppProfileManager,\n private appUsersManager: AppUsersManager) {\n super(appendTo, \n controller,\n 'commands-helper',\n (target) => {\n const innerHTML = target.querySelector(`.${AutocompletePeerHelper.BASE_CLASS_LIST_ELEMENT}-name`).innerHTML;\n return chatInput.getReadyToSend(() => {\n chatInput.messageInput.innerHTML = innerHTML;\n chatInput.sendMessage(true);\n });\n }\n );\n }\n\n public checkQuery(query: string, peerId: number) {\n if(!this.appUsersManager.isBot(peerId)) {\n return false;\n }\n\n const middleware = this.controller.getMiddleware();\n this.appProfileManager.getProfileByPeerId(peerId).then(full => {\n if(!middleware()) {\n return;\n }\n\n const botInfos: BotInfo.botInfo[] = [].concat(full.bot_info);\n const index = new SearchIndex({\n ignoreCase: true\n });\n \n const commands: Map = new Map();\n botInfos.forEach(botInfo => {\n botInfo.commands.forEach(botCommand => {\n const c = '/' + botCommand.command;\n commands.set(botCommand.command, {\n peerId: botInfo.user_id, \n name: c, \n description: botCommand.description\n });\n\n index.indexObject(botCommand.command, c);\n });\n });\n\n const found = index.search(query);\n const filtered = Array.from(found).map(command => commands.get(command));\n this.render(filtered);\n // console.log('found commands', found, filtered);\n });\n\n return true;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { getMiddleware } from \"../../helpers/middleware\";\r\nimport AutocompleteHelper from \"./autocompleteHelper\";\r\n\r\nexport default class AutocompleteHelperController {\r\n private helpers: Set = new Set();\r\n private middleware = getMiddleware();\r\n /* private tempId = 0;\r\n\r\n public incrementToggleCount() {\r\n return ++this.tempId;\r\n }\r\n\r\n public getToggleCount() {\r\n return this.tempId;\r\n } */\r\n\r\n public getMiddleware() {\r\n this.middleware.clean();\r\n return this.middleware.get();\r\n }\r\n\r\n public addHelper(helper: AutocompleteHelper) {\r\n this.helpers.add(helper);\r\n }\r\n\r\n public hideOtherHelpers(preserveHelper?: AutocompleteHelper) {\r\n this.helpers.forEach(helper => {\r\n if(helper !== preserveHelper) {\r\n helper.toggle(true, true);\r\n }\r\n });\r\n\r\n if(!preserveHelper) {\r\n this.middleware.clean();\r\n }\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type ChatInput from \"./input\";\nimport type { MessageEntity } from \"../../layer\";\nimport type { AppProfileManager } from \"../../lib/appManagers/appProfileManager\";\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\nimport AutocompletePeerHelper from \"./autocompletePeerHelper\";\n\nexport default class MentionsHelper extends AutocompletePeerHelper {\n constructor(appendTo: HTMLElement, \n controller: AutocompleteHelperController, \n chatInput: ChatInput, \n private appProfileManager: AppProfileManager,\n private appUsersManager: AppUsersManager) {\n super(appendTo, \n controller,\n 'mentions-helper',\n (target) => {\n const user = appUsersManager.getUser(+(target as HTMLElement).dataset.peerId);\n let str = '', entity: MessageEntity;\n if(user.username) {\n str = '@' + user.username;\n } else {\n str = user.first_name || user.last_name;\n entity = {\n _: 'messageEntityMentionName',\n length: str.length,\n offset: 0,\n user_id: user.id\n };\n }\n\n str += ' ';\n chatInput.insertAtCaret(str, entity);\n }\n );\n }\n\n public checkQuery(query: string, peerId: number, topMsgId: number) {\n const trimmed = query.trim(); // check that there is no whitespace\n if(query.length !== trimmed.length) return false;\n\n const middleware = this.controller.getMiddleware();\n this.appProfileManager.getMentions(peerId ? -peerId : 0, trimmed, topMsgId).then(peerIds => {\n if(!middleware()) return;\n \n const username = trimmed.slice(1).toLowerCase();\n this.render(peerIds.map(peerId => {\n const user = this.appUsersManager.getUser(peerId);\n if(user.username && user.username.toLowerCase() === username) { // hide full matched suggestion\n return;\n }\n\n return {\n peerId,\n description: user.username ? '@' + user.username : undefined\n };\n }).filter(Boolean));\n });\n\n return true;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type ChatInput from \"./input\";\r\nimport DropdownHover from \"../../helpers/dropdownHover\";\r\nimport { ReplyMarkup } from \"../../layer\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport { safeAssign } from \"../../helpers/object\";\r\nimport ListenerSetter, { Listener } from \"../../helpers/listenerSetter\";\r\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport findUpAsChild from \"../../helpers/dom/findUpAsChild\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { getHeavyAnimationPromise } from \"../../hooks/useHeavyAnimationCheck\";\r\n\r\nexport default class ReplyKeyboard extends DropdownHover {\r\n private static BASE_CLASS = 'reply-keyboard';\r\n private appendTo: HTMLElement;\r\n private listenerSetter: ListenerSetter;\r\n private appMessagesManager: AppMessagesManager;\r\n private btnHover: HTMLElement;\r\n private peerId: number;\r\n private touchListener: Listener;\r\n private chatInput: ChatInput;\r\n\r\n constructor(options: {\r\n listenerSetter: ListenerSetter,\r\n appMessagesManager: AppMessagesManager,\r\n appendTo: HTMLElement,\r\n btnHover: HTMLElement,\r\n chatInput: ChatInput\r\n }) {\r\n super({\r\n element: document.createElement('div')\r\n });\r\n\r\n safeAssign(this, options);\r\n\r\n this.element.classList.add(ReplyKeyboard.BASE_CLASS);\r\n this.element.style.display = 'none';\r\n\r\n this.attachButtonListener(this.btnHover, this.listenerSetter);\r\n this.listenerSetter.add(rootScope)('history_reply_markup', ({peerId}) => {\r\n if(this.peerId === peerId) {\r\n if(this.checkAvailability() && this.isActive()) {\r\n this.render();\r\n }\r\n\r\n getHeavyAnimationPromise().then(() => {\r\n this.checkForceReply();\r\n });\r\n }\r\n });\r\n }\r\n\r\n protected init() {\r\n this.appendTo.append(this.element);\r\n\r\n this.listenerSetter.add(this)('open', () => {\r\n this.render();\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n this.touchListener = this.listenerSetter.add(document.body)('touchstart', this.onBodyTouchStart, {passive: false, capture: true}) as any as Listener;\r\n this.listenerSetter.add(this)('close', () => {\r\n this.listenerSetter.remove(this.touchListener);\r\n }, {once: true});\r\n }\r\n });\r\n \r\n this.listenerSetter.add(this.element)('click', (e) => {\r\n const target = findUpClassName(e.target, 'btn');\r\n if(!target) {\r\n return;\r\n }\r\n\r\n this.appMessagesManager.sendText(this.peerId, target.dataset.text);\r\n this.toggle(false);\r\n });\r\n\r\n return super.init();\r\n }\r\n\r\n private onBodyTouchStart = (e: TouchEvent) => {\r\n const target = e.touches[0].target as HTMLElement;\r\n if(!findUpAsChild(target, this.element) && target !== this.btnHover) {\r\n cancelEvent(e);\r\n this.toggle(false);\r\n }\r\n };\r\n\r\n public checkForceReply() {\r\n const replyMarkup = this.getReplyMarkup();\r\n if(replyMarkup._ === 'replyKeyboardForceReply' &&\r\n !replyMarkup.pFlags.hidden && \r\n !replyMarkup.pFlags.used) {\r\n replyMarkup.pFlags.used = true;\r\n this.chatInput.initMessageReply(replyMarkup.mid);\r\n }\r\n }\r\n\r\n private getReplyMarkup(): ReplyMarkup {\r\n return this.appMessagesManager.getHistoryStorage(this.peerId).replyMarkup ?? {\r\n _: 'replyKeyboardHide'\r\n };\r\n }\r\n\r\n public render(replyMarkup: ReplyMarkup.replyKeyboardMarkup = this.getReplyMarkup() as any) {\r\n this.element.innerHTML = '';\r\n\r\n for(const row of replyMarkup.rows) {\r\n const div = document.createElement('div');\r\n div.classList.add(ReplyKeyboard.BASE_CLASS + '-row');\r\n\r\n for(const button of row.buttons) {\r\n const btn = document.createElement('button');\r\n btn.classList.add(ReplyKeyboard.BASE_CLASS + '-button', 'btn');\r\n btn.innerHTML = RichTextProcessor.wrapEmojiText(button.text);\r\n btn.dataset.text = button.text;\r\n div.append(btn);\r\n }\r\n\r\n this.element.append(div);\r\n }\r\n }\r\n\r\n public checkAvailability(replyMarkup: ReplyMarkup = this.getReplyMarkup()) {\r\n const hide = replyMarkup._ === 'replyKeyboardHide' || !(replyMarkup as ReplyMarkup.replyInlineMarkup).rows?.length;\r\n this.btnHover.classList.toggle('hide', hide);\r\n\r\n if(hide) {\r\n this.toggle(false);\r\n }\r\n\r\n return !hide;\r\n }\r\n\r\n public setPeer(peerId: number) {\r\n this.peerId = peerId;\r\n\r\n this.checkAvailability();\r\n this.checkForceReply();\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInlineBotsManager } from \"../../lib/appManagers/appInlineBotsManager\";\r\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\r\nimport type Chat from \"./chat\";\r\nimport debounce from \"../../helpers/schedulers/debounce\";\r\nimport { WebDocument } from \"../../layer\";\r\nimport { MyDocument } from \"../../lib/appManagers/appDocsManager\";\r\nimport appDownloadManager from \"../../lib/appManagers/appDownloadManager\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport LazyLoadQueue from \"../lazyLoadQueue\";\r\nimport Scrollable from \"../scrollable\";\r\nimport { renderImageWithFadeIn, wrapPhoto } from \"../wrappers\";\r\nimport AutocompleteHelper from \"./autocompleteHelper\";\r\nimport AutocompleteHelperController from \"./autocompleteHelperController\";\r\nimport Button from \"../button\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport { MyPhoto } from \"../../lib/appManagers/appPhotosManager\";\r\nimport { readBlobAsDataURL } from \"../../helpers/blob\";\r\nimport assumeType from \"../../helpers/assumeType\";\r\nimport GifsMasonry from \"../gifsMasonry\";\r\nimport { SuperStickerRenderer } from \"../emoticonsDropdown/tabs/stickers\";\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\n\r\nconst ANIMATION_GROUP = 'INLINE-HELPER';\r\n// const GRID_ITEMS = 5;\r\n\r\nexport default class InlineHelper extends AutocompleteHelper {\r\n private scrollable: Scrollable;\r\n private lazyLoadQueue: LazyLoadQueue;\r\n private gifsMasonry: GifsMasonry;\r\n private superStickerRenderer: SuperStickerRenderer;\r\n private onChangeScreen: () => void;\r\n public checkQuery: (peerId: number, username: string, query: string) => ReturnType;\r\n\r\n constructor(appendTo: HTMLElement, \r\n controller: AutocompleteHelperController,\r\n private chat: Chat,\r\n private appUsersManager: AppUsersManager,\r\n private appInlineBotsManager: AppInlineBotsManager) {\r\n super({\r\n appendTo, \r\n controller,\r\n listType: 'xy', \r\n onSelect: (target) => {\r\n const {peerId, botId, queryId} = this.list.dataset;\r\n return this.chat.input.getReadyToSend(() => {\r\n const queryAndResultIds = this.appInlineBotsManager.generateQId(queryId, (target as HTMLElement).dataset.resultId);\r\n this.appInlineBotsManager.sendInlineResult(+peerId, +botId, queryAndResultIds, {\r\n clearDraft: true,\r\n scheduleDate: this.chat.input.scheduleDate,\r\n silent: this.chat.input.sendSilent,\r\n replyToMsgId: this.chat.input.replyToMsgId\r\n });\r\n\r\n this.chat.input.onMessageSent(true, true);\r\n });\r\n }\r\n });\r\n\r\n this.container.classList.add('inline-helper');\r\n\r\n this.addEventListener('visible', () => {\r\n setTimeout(() => { // it is not rendered yet\r\n this.scrollable.container.scrollTop = 0;\r\n }, 0); \r\n });\r\n\r\n this.checkQuery = debounce(this._checkQuery, 200, true, true);\r\n\r\n this.addEventListener('hidden', () => {\r\n if(this.onChangeScreen) {\r\n mediaSizes.removeEventListener('changeScreen', this.onChangeScreen);\r\n this.onChangeScreen = undefined;\r\n }\r\n });\r\n }\r\n\r\n public _checkQuery = async(peerId: number, username: string, query: string) => {\r\n const middleware = this.controller.getMiddleware();\r\n\r\n const peer = await this.appUsersManager.resolveUsername(username);\r\n if(!middleware()) {\r\n throw 'PEER_CHANGED';\r\n }\r\n\r\n if(peer._ !== 'user') {\r\n throw 'NOT_A_BOT';\r\n }\r\n\r\n const renderPromise = this.appInlineBotsManager.getInlineResults(peerId, peer.id, query).then(botResults => {\r\n if(!middleware()) {\r\n throw 'PEER_CHANGED';\r\n }\r\n\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n const list = this.list.cloneNode() as HTMLElement;\r\n list.dataset.peerId = '' + peerId;\r\n list.dataset.botId = '' + peer.id;\r\n list.dataset.queryId = botResults.query_id;\r\n\r\n const gifsMasonry = new GifsMasonry(null, ANIMATION_GROUP, this.scrollable, false);\r\n\r\n this.lazyLoadQueue.clear();\r\n this.superStickerRenderer.clear();\r\n \r\n const loadPromises: Promise[] = [];\r\n const isGallery = !!botResults.pFlags.gallery;\r\n // botResults.results.length = 3;\r\n for(const item of botResults.results) {\r\n const container = document.createElement('div');\r\n container.classList.add('inline-helper-result');\r\n container.dataset.resultId = item.id;\r\n \r\n const preview = isGallery ? undefined : document.createElement('div');\r\n if(preview) {\r\n preview.classList.add('inline-helper-result-preview');\r\n\r\n container.append(preview);\r\n }\r\n\r\n list.append(container);\r\n\r\n if(!isGallery) {\r\n preview.classList.add('empty');\r\n preview.innerHTML = RichTextProcessor.wrapEmojiText([...item.title.trim()][0]);\r\n\r\n const title = document.createElement('div');\r\n title.classList.add('inline-helper-result-title');\r\n title.innerHTML = RichTextProcessor.wrapEmojiText(item.title);\r\n \r\n const description = document.createElement('div');\r\n description.classList.add('inline-helper-result-description');\r\n description.innerHTML = RichTextProcessor.wrapRichText(item.description, {\r\n noCommands: true,\r\n noLinks: true\r\n });\r\n \r\n container.append(title, description);\r\n \r\n const separator = document.createElement('div');\r\n separator.classList.add('inline-helper-separator');\r\n \r\n list.append(separator);\r\n } else {\r\n container.classList.add('grid-item');\r\n }\r\n \r\n if(item._ === 'botInlineResult') {\r\n if(item.thumb && item.thumb.mime_type.indexOf('image/') === 0) {\r\n let mediaContainer: HTMLElement;\r\n if(preview) {\r\n mediaContainer = document.createElement('div');\r\n preview.append(mediaContainer);\r\n } else {\r\n mediaContainer = container;\r\n }\r\n\r\n mediaContainer.classList.add('media-container'); \r\n isGallery && mediaContainer.classList.add('no-border-radius');\r\n\r\n this.lazyLoadQueue.push({\r\n div: container,\r\n load: () => {\r\n return appDownloadManager.download({\r\n dcId: 4,\r\n location: {\r\n _: 'inputWebFileLocation',\r\n access_hash: (item.thumb as WebDocument.webDocument).access_hash,\r\n url: item.thumb.url\r\n },\r\n size: item.thumb.size,\r\n mimeType: item.thumb.mime_type\r\n }).then(blob => {\r\n const image = new Image();\r\n image.classList.add('media-photo');\r\n readBlobAsDataURL(blob).then(dataURL => {\r\n renderImageWithFadeIn(mediaContainer, image, dataURL, true);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n } else {\r\n const media = item.document as MyDocument || item.photo as MyPhoto;\r\n if((['sticker', 'gif'] as MyDocument['type'][]).includes((media as MyDocument)?.type) && isGallery) {\r\n assumeType(media);\r\n\r\n if(media.type === 'gif') {\r\n gifsMasonry.add(media, container);\r\n } else if(media.type === 'sticker') {\r\n container.classList.add('super-sticker');\r\n this.superStickerRenderer.renderSticker(media, container, loadPromises);\r\n if(media.sticker === 2) {\r\n this.superStickerRenderer.observeAnimatedDiv(container);\r\n }\r\n }\r\n } else if(media) {\r\n const size = isGallery ? 48 : undefined;\r\n isGallery && container.classList.add('no-border-radius');\r\n wrapPhoto({\r\n photo: media,\r\n container: isGallery ? container : preview,\r\n boxWidth: size,\r\n boxHeight: size,\r\n middleware,\r\n lazyLoadQueue: this.lazyLoadQueue,\r\n loadPromises\r\n });\r\n }\r\n }\r\n }\r\n\r\n return Promise.all(loadPromises).then(() => {\r\n if(!middleware()) {\r\n gifsMasonry.clear();\r\n return;\r\n }\r\n\r\n list.classList.toggle('is-gallery', isGallery);\r\n list.classList.toggle('super-stickers', isGallery);\r\n this.container.classList.toggle('is-gallery', isGallery);\r\n\r\n /* if(isGallery) {\r\n list.style.gridTemplateColumns = `repeat(${Math.min(botResults.results.length, 4)}, 1fr)`;\r\n }\r\n\r\n this.container.style.setProperty('width', isGallery ? `${Math.min(botResults.results.length, 4) * 25}%` : '', 'important'); */\r\n\r\n const parent = this.list.parentElement;\r\n parent.textContent = '';\r\n if(botResults.switch_pm) {\r\n const btnSwitchToPM = Button('btn-primary btn-secondary btn-primary-transparent primary');\r\n btnSwitchToPM.insertAdjacentHTML('beforeend', RichTextProcessor.wrapEmojiText(botResults.switch_pm.text));\r\n attachClickEvent(btnSwitchToPM, (e) => {\r\n this.appInlineBotsManager.switchToPM(peerId, peer.id, botResults.switch_pm.start_param);\r\n });\r\n parent.append(btnSwitchToPM);\r\n }\r\n parent.append(this.list = list);\r\n\r\n if(this.gifsMasonry) {\r\n this.gifsMasonry.detach();\r\n }\r\n this.gifsMasonry = gifsMasonry;\r\n gifsMasonry.attach();\r\n\r\n if(!this.onChangeScreen) {\r\n this.onChangeScreen = () => {\r\n if(this.list.classList.contains('is-gallery')) {\r\n const width = (this.list.childElementCount * mediaSizes.active.esgSticker.width) + (this.list.childElementCount - 1 * 1);\r\n this.list.style.width = width + 'px';\r\n } else {\r\n this.list.style.width = '';\r\n }\r\n };\r\n mediaSizes.addEventListener('changeScreen', this.onChangeScreen);\r\n }\r\n\r\n this.onChangeScreen();\r\n \r\n this.toggle(!botResults.results.length && !botResults.switch_pm);\r\n this.scrollable.scrollTop = 0;\r\n });\r\n });\r\n\r\n return {user: peer, renderPromise};\r\n };\r\n\r\n protected init() {\r\n this.list = document.createElement('div');\r\n this.list.classList.add('inline-helper-results');\r\n\r\n this.container.append(this.list);\r\n\r\n this.scrollable = new Scrollable(this.container);\r\n this.lazyLoadQueue = new LazyLoadQueue();\r\n this.superStickerRenderer = new SuperStickerRenderer(this.lazyLoadQueue, ANIMATION_GROUP);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppNotificationsManager } from '../../lib/appManagers/appNotificationsManager';\r\nimport type { AppChatsManager } from '../../lib/appManagers/appChatsManager';\r\nimport type { AppDocsManager, MyDocument } from \"../../lib/appManagers/appDocsManager\";\r\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type { AppPeersManager } from '../../lib/appManagers/appPeersManager';\r\nimport type { AppWebPagesManager } from \"../../lib/appManagers/appWebPagesManager\";\r\nimport type { AppImManager } from '../../lib/appManagers/appImManager';\r\nimport type { AppDraftsManager, MyDraftMessage } from '../../lib/appManagers/appDraftsManager';\r\nimport type { AppEmojiManager } from '../../lib/appManagers/appEmojiManager';\r\nimport type { ServerTimeManager } from '../../lib/mtproto/serverTimeManager';\r\nimport type { AppUsersManager } from '../../lib/appManagers/appUsersManager';\r\nimport type { AppInlineBotsManager } from '../../lib/appManagers/appInlineBotsManager';\r\nimport type { AppMessagesIdsManager } from '../../lib/appManagers/appMessagesIdsManager';\r\nimport type Chat from './chat';\r\nimport Recorder from '../../../public/recorder.min';\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport apiManager from \"../../lib/mtproto/mtprotoworker\";\r\n//import Recorder from '../opus-recorder/dist/recorder.min';\r\nimport opusDecodeController from \"../../lib/opusDecodeController\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport { ButtonMenuItemOptions } from '../buttonMenu';\r\nimport emoticonsDropdown from \"../emoticonsDropdown\";\r\nimport PopupCreatePoll from \"../popups/createPoll\";\r\nimport PopupForward from '../popups/forward';\r\nimport PopupNewMedia from '../popups/newMedia';\r\nimport { toast } from \"../toast\";\r\nimport { wrapReply } from \"../wrappers\";\r\nimport InputField from '../inputField';\r\nimport { MessageEntity, DraftMessage, WebPage, Message } from '../../layer';\r\nimport StickersHelper from './stickersHelper';\r\nimport ButtonIcon from '../buttonIcon';\r\nimport ButtonMenuToggle from '../buttonMenuToggle';\r\nimport ListenerSetter, { Listener } from '../../helpers/listenerSetter';\r\nimport Button from '../button';\r\nimport PopupSchedule from '../popups/schedule';\r\nimport SendMenu from './sendContextMenu';\r\nimport rootScope from '../../lib/rootScope';\r\nimport PopupPinMessage from '../popups/unpinMessage';\r\nimport { tsNow } from '../../helpers/date';\r\nimport appNavigationController, { NavigationItem } from '../appNavigationController';\r\nimport { IS_MOBILE, IS_MOBILE_SAFARI } from '../../environment/userAgent';\r\nimport I18n, { i18n, join, LangPackKey } from '../../lib/langPack';\r\nimport { generateTail } from './bubbles';\r\nimport findUpClassName from '../../helpers/dom/findUpClassName';\r\nimport ButtonCorner from '../buttonCorner';\r\nimport blurActiveElement from '../../helpers/dom/blurActiveElement';\r\nimport { cancelEvent } from '../../helpers/dom/cancelEvent';\r\nimport cancelSelection from '../../helpers/dom/cancelSelection';\r\nimport { attachClickEvent, simulateClickEvent } from '../../helpers/dom/clickEvent';\r\nimport getRichValue from '../../helpers/dom/getRichValue';\r\nimport isInputEmpty from '../../helpers/dom/isInputEmpty';\r\nimport isSendShortcutPressed from '../../helpers/dom/isSendShortcutPressed';\r\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\r\nimport { MarkdownType, markdownTags } from '../../helpers/dom/getRichElementValue';\r\nimport getRichValueWithCaret from '../../helpers/dom/getRichValueWithCaret';\r\nimport EmojiHelper from './emojiHelper';\r\nimport setRichFocus from '../../helpers/dom/setRichFocus';\r\nimport CommandsHelper from './commandsHelper';\r\nimport AutocompleteHelperController from './autocompleteHelperController';\r\nimport AutocompleteHelper from './autocompleteHelper';\r\nimport MentionsHelper from './mentionsHelper';\r\nimport fixSafariStickyInput from '../../helpers/dom/fixSafariStickyInput';\r\nimport { emojiFromCodePoints } from '../../vendor/emoji';\r\nimport ReplyKeyboard from './replyKeyboard';\r\nimport InlineHelper from './inlineHelper';\r\nimport debounce from '../../helpers/schedulers/debounce';\r\nimport noop from '../../helpers/noop';\r\nimport { putPreloader } from '../misc';\r\nimport SetTransition from '../singleTransition';\r\nimport PeerTitle from '../peerTitle';\r\nimport { fastRaf } from '../../helpers/schedulers';\r\nimport PopupDeleteMessages from '../popups/deleteMessages';\r\nimport fixSafariStickyInputFocusing, { IS_STICKY_INPUT_BUGGED } from '../../helpers/dom/fixSafariStickyInputFocusing';\r\nimport { copy } from '../../helpers/object';\r\nimport PopupPeer from '../popups/peer';\r\nimport MEDIA_MIME_TYPES_SUPPORTED from '../../environment/mediaMimeTypesSupport';\r\nimport appMediaPlaybackController from '../appMediaPlaybackController';\r\n\r\nconst RECORD_MIN_TIME = 500;\r\nconst POSTING_MEDIA_NOT_ALLOWED = 'Posting media content isn\\'t allowed in this group.';\r\n\r\ntype ChatInputHelperType = 'edit' | 'webpage' | 'forward' | 'reply';\r\n\r\nexport default class ChatInput {\r\n // private static AUTO_COMPLETE_REG_EXP = /(\\s|^)((?::|.)(?!.*[:@]).*|(?:[@\\/]\\S*))$/;\r\n private static AUTO_COMPLETE_REG_EXP = /(\\s|^)((?:(?:@|^\\/)\\S*)|(?::|^[^:@\\/])(?!.*[:@\\/]).*)$/;\r\n public messageInput: HTMLElement;\r\n public messageInputField: InputField;\r\n private fileInput: HTMLInputElement;\r\n private inputMessageContainer: HTMLDivElement;\r\n private btnSend: HTMLButtonElement;\r\n private btnCancelRecord: HTMLButtonElement;\r\n private lastUrl = '';\r\n private lastTimeType = 0;\r\n\r\n public chatInput: HTMLElement;\r\n private inputContainer: HTMLElement;\r\n public rowsWrapper: HTMLDivElement;\r\n private newMessageWrapper: HTMLDivElement;\r\n private btnToggleEmoticons: HTMLButtonElement;\r\n private btnToggleReplyMarkup: HTMLButtonElement;\r\n private btnSendContainer: HTMLDivElement;\r\n\r\n private replyKeyboard: ReplyKeyboard;\r\n\r\n private attachMenu: HTMLButtonElement;\r\n private attachMenuButtons: (ButtonMenuItemOptions & {verify: (peerId: number, threadId: number) => boolean})[];\r\n\r\n private sendMenu: SendMenu;\r\n\r\n private replyElements: {\r\n container: HTMLElement,\r\n cancelBtn: HTMLButtonElement\r\n } = {} as any;\r\n\r\n private getWebPagePromise: Promise;\r\n private willSendWebPage: WebPage = null;\r\n private forwarding: {[fromPeerId: number]: number[]};\r\n public replyToMsgId: number;\r\n public editMsgId: number;\r\n private noWebPage: true;\r\n public scheduleDate: number;\r\n public sendSilent: true;\r\n\r\n private recorder: any;\r\n public recording = false;\r\n private recordCanceled = false;\r\n private recordTimeEl: HTMLElement;\r\n private recordRippleEl: HTMLElement;\r\n private recordStartTime = 0;\r\n private recordingOverlayListener: Listener;\r\n private recordingNavigationItem: NavigationItem;\r\n\r\n // private scrollTop = 0;\r\n // private scrollOffsetTop = 0;\r\n // private scrollDiff = 0;\r\n\r\n public helperType: Exclude;\r\n private helperFunc: () => void;\r\n private helperWaitingForward: boolean;\r\n\r\n public willAttachType: 'document' | 'media';\r\n\r\n private lockRedo = false;\r\n private canRedoFromHTML = '';\r\n private readonly undoHistory: string[] = [];\r\n private readonly executedHistory: string[] = [];\r\n private canUndoFromHTML = '';\r\n\r\n private autocompleteHelperController: AutocompleteHelperController;\r\n private stickersHelper: StickersHelper;\r\n private emojiHelper: EmojiHelper;\r\n private commandsHelper: CommandsHelper;\r\n private mentionsHelper: MentionsHelper;\r\n private inlineHelper: InlineHelper;\r\n private listenerSetter: ListenerSetter;\r\n\r\n private pinnedControlBtn: HTMLButtonElement;\r\n\r\n private goDownBtn: HTMLButtonElement;\r\n private goDownUnreadBadge: HTMLElement;\r\n private goMentionBtn: HTMLButtonElement;\r\n private goMentionUnreadBadge: HTMLSpanElement;\r\n private btnScheduled: HTMLButtonElement;\r\n\r\n private btnPreloader: HTMLButtonElement;\r\n\r\n private saveDraftDebounced: () => void;\r\n\r\n private fakeRowsWrapper: HTMLDivElement;\r\n private fakePinnedControlBtn: HTMLElement;\r\n\r\n private previousQuery: string;\r\n \r\n private releaseMediaPlayback: () => void;\r\n\r\n constructor(private chat: Chat, \r\n private appMessagesManager: AppMessagesManager, \r\n private appMessagesIdsManager: AppMessagesIdsManager, \r\n private appDocsManager: AppDocsManager, \r\n private appChatsManager: AppChatsManager, \r\n private appPeersManager: AppPeersManager, \r\n private appWebPagesManager: AppWebPagesManager, \r\n private appImManager: AppImManager, \r\n private appDraftsManager: AppDraftsManager, \r\n private serverTimeManager: ServerTimeManager, \r\n private appNotificationsManager: AppNotificationsManager,\r\n private appEmojiManager: AppEmojiManager,\r\n private appUsersManager: AppUsersManager,\r\n private appInlineBotsManager: AppInlineBotsManager\r\n ) {\r\n this.listenerSetter = new ListenerSetter();\r\n }\r\n\r\n public construct() {\r\n this.chatInput = document.createElement('div');\r\n this.chatInput.classList.add('chat-input');\r\n this.chatInput.style.display = 'none';\r\n\r\n this.inputContainer = document.createElement('div');\r\n this.inputContainer.classList.add('chat-input-container');\r\n\r\n this.rowsWrapper = document.createElement('div');\r\n this.rowsWrapper.classList.add('rows-wrapper', 'chat-input-wrapper');\r\n\r\n const tail = generateTail();\r\n this.rowsWrapper.append(tail);\r\n\r\n const fakeRowsWrapper = this.fakeRowsWrapper = document.createElement('div');\r\n fakeRowsWrapper.classList.add('fake-wrapper', 'fake-rows-wrapper');\r\n\r\n const fakeSelectionWrapper = document.createElement('div');\r\n fakeSelectionWrapper.classList.add('fake-wrapper', 'fake-selection-wrapper');\r\n\r\n this.inputContainer.append(this.rowsWrapper, fakeRowsWrapper, fakeSelectionWrapper);\r\n this.chatInput.append(this.inputContainer);\r\n\r\n this.goDownBtn = ButtonCorner({icon: 'arrow_down', className: 'bubbles-corner-button bubbles-go-down hide'});\r\n this.inputContainer.append(this.goDownBtn);\r\n\r\n attachClickEvent(this.goDownBtn, (e) => {\r\n cancelEvent(e);\r\n this.chat.bubbles.onGoDownClick();\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n // * constructor end\r\n\r\n /* let setScrollTopTimeout: number;\r\n // @ts-ignore\r\n let height = window.visualViewport.height; */\r\n // @ts-ignore\r\n // this.listenerSetter.add(window.visualViewport)('resize', () => {\r\n // const scrollable = this.chat.bubbles.scrollable;\r\n // const wasScrolledDown = scrollable.isScrolledDown;\r\n \r\n // /* if(wasScrolledDown) {\r\n // this.saveScroll();\r\n // } */\r\n \r\n // // @ts-ignore\r\n // let newHeight = window.visualViewport.height;\r\n // const diff = height - newHeight;\r\n // const scrollTop = scrollable.scrollTop;\r\n // const needScrollTop = wasScrolledDown ? scrollable.scrollHeight : scrollTop + diff; // * wasScrolledDown это проверка для десктоп хрома, когда пропадает панель загрузок снизу\r\n\r\n // console.log('resize before', scrollable.scrollTop, scrollable.container.clientHeight, scrollable.scrollHeight, wasScrolledDown, scrollable.lastScrollTop, diff, needScrollTop);\r\n\r\n // scrollable.scrollTop = needScrollTop;\r\n\r\n // if(setScrollTopTimeout) clearTimeout(setScrollTopTimeout);\r\n // setScrollTopTimeout = window.setTimeout(() => {\r\n // const diff = height - newHeight;\r\n // const isScrolledDown = scrollable.scrollHeight - Math.round(scrollable.scrollTop + scrollable.container.offsetHeight + diff) <= 1;\r\n // height = newHeight;\r\n\r\n // scrollable.scrollTop = needScrollTop;\r\n \r\n // console.log('resize after', scrollable.scrollTop, scrollable.container.clientHeight, scrollable.scrollHeight, scrollable.isScrolledDown, scrollable.lastScrollTop, isScrolledDown);\r\n\r\n // /* if(isScrolledDown) {\r\n // scrollable.scrollTop = scrollable.scrollHeight;\r\n // } */\r\n\r\n // //scrollable.scrollTop += diff;\r\n // setScrollTopTimeout = 0;\r\n // }, 0);\r\n // });\r\n\r\n // ! Can't use it with resizeObserver\r\n /* this.listenerSetter.add(window.visualViewport)('resize', () => {\r\n const scrollable = this.chat.bubbles.scrollable;\r\n const wasScrolledDown = scrollable.isScrolledDown;\r\n\r\n // @ts-ignore\r\n let newHeight = window.visualViewport.height;\r\n const diff = height - newHeight;\r\n const needScrollTop = wasScrolledDown ? scrollable.scrollHeight : scrollable.scrollTop + diff; // * wasScrolledDown это проверка для десктоп хрома, когда пропадает панель загрузок снизу\r\n\r\n //console.log('resize before', scrollable.scrollTop, scrollable.container.clientHeight, scrollable.scrollHeight, wasScrolledDown, scrollable.lastScrollTop, diff, needScrollTop);\r\n\r\n scrollable.scrollTop = needScrollTop;\r\n height = newHeight;\r\n\r\n if(setScrollTopTimeout) clearTimeout(setScrollTopTimeout);\r\n setScrollTopTimeout = window.setTimeout(() => { // * try again for scrolled down Android Chrome\r\n scrollable.scrollTop = needScrollTop;\r\n \r\n //console.log('resize after', scrollable.scrollTop, scrollable.container.clientHeight, scrollable.scrollHeight, scrollable.isScrolledDown, scrollable.lastScrollTop, isScrolledDown);\r\n setScrollTopTimeout = 0;\r\n }, 0);\r\n }); */\r\n }\r\n\r\n public constructPeerHelpers() {\r\n this.replyElements.container = document.createElement('div');\r\n this.replyElements.container.classList.add('reply-wrapper');\r\n\r\n this.replyElements.cancelBtn = ButtonIcon('close reply-cancel');\r\n\r\n this.replyElements.container.append(this.replyElements.cancelBtn);\r\n\r\n this.newMessageWrapper = document.createElement('div');\r\n this.newMessageWrapper.classList.add('new-message-wrapper');\r\n\r\n this.btnToggleEmoticons = ButtonIcon('none toggle-emoticons', {noRipple: true});\r\n\r\n this.inputMessageContainer = document.createElement('div');\r\n this.inputMessageContainer.classList.add('input-message-container');\r\n\r\n if(this.chat.type === 'chat') {\r\n this.goDownUnreadBadge = document.createElement('span');\r\n this.goDownUnreadBadge.classList.add('badge', 'badge-24', 'badge-primary');\r\n this.goDownBtn.append(this.goDownUnreadBadge);\r\n\r\n this.goMentionBtn = ButtonCorner({icon: 'mention', className: 'bubbles-corner-button bubbles-go-mention'});\r\n this.goMentionUnreadBadge = document.createElement('span');\r\n this.goMentionUnreadBadge.classList.add('badge', 'badge-24', 'badge-primary');\r\n this.goMentionBtn.append(this.goMentionUnreadBadge);\r\n this.inputContainer.append(this.goMentionBtn);\r\n\r\n attachClickEvent(this.goMentionBtn, (e) => {\r\n cancelEvent(e);\r\n this.appMessagesManager.goToNextMention(this.chat.peerId);\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n this.btnScheduled = ButtonIcon('scheduled btn-scheduled float hide', {noRipple: true});\r\n\r\n attachClickEvent(this.btnScheduled, (e) => {\r\n this.appImManager.openScheduled(this.chat.peerId);\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n this.listenerSetter.add(rootScope)('scheduled_new', ({peerId}) => {\r\n if(this.chat.peerId !== peerId) {\r\n return;\r\n }\r\n\r\n this.btnScheduled.classList.remove('hide');\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('scheduled_delete', ({peerId}) => {\r\n if(this.chat.peerId !== peerId) {\r\n return;\r\n }\r\n\r\n this.appMessagesManager.getScheduledMessages(this.chat.peerId).then(value => {\r\n this.btnScheduled.classList.toggle('hide', !value.length);\r\n });\r\n });\r\n\r\n this.btnToggleReplyMarkup = ButtonIcon('botcom toggle-reply-markup float hide', {noRipple: true});\r\n this.replyKeyboard = new ReplyKeyboard({\r\n appendTo: this.rowsWrapper,\r\n listenerSetter: this.listenerSetter,\r\n appMessagesManager: this.appMessagesManager,\r\n btnHover: this.btnToggleReplyMarkup,\r\n chatInput: this\r\n });\r\n this.listenerSetter.add(this.replyKeyboard)('open', () => this.btnToggleReplyMarkup.classList.add('active'));\r\n this.listenerSetter.add(this.replyKeyboard)('close', () => this.btnToggleReplyMarkup.classList.remove('active'));\r\n }\r\n\r\n this.attachMenuButtons = [{\r\n icon: 'image',\r\n text: 'Chat.Input.Attach.PhotoOrVideo',\r\n onClick: () => {\r\n this.fileInput.value = '';\r\n const accept = [...MEDIA_MIME_TYPES_SUPPORTED].join(', ');\r\n this.fileInput.setAttribute('accept', accept);\r\n this.willAttachType = 'media';\r\n this.fileInput.click();\r\n },\r\n verify: (peerId, threadId) => this.appMessagesManager.canSendToPeer(peerId, threadId, 'send_media')\r\n }, {\r\n icon: 'document',\r\n text: 'Chat.Input.Attach.Document',\r\n onClick: () => {\r\n this.fileInput.value = '';\r\n this.fileInput.removeAttribute('accept');\r\n this.willAttachType = 'document';\r\n this.fileInput.click();\r\n },\r\n verify: (peerId, threadId) => this.appMessagesManager.canSendToPeer(peerId, threadId, 'send_media')\r\n }, {\r\n icon: 'poll',\r\n text: 'Poll',\r\n onClick: () => {\r\n new PopupCreatePoll(this.chat).show();\r\n },\r\n verify: (peerId, threadId) => peerId < 0 && this.appMessagesManager.canSendToPeer(peerId, threadId, 'send_polls')\r\n }];\r\n\r\n this.attachMenu = ButtonMenuToggle({noRipple: true, listenerSetter: this.listenerSetter}, 'top-left', this.attachMenuButtons);\r\n this.attachMenu.classList.add('attach-file', 'tgico-attach');\r\n this.attachMenu.classList.remove('tgico-more');\r\n\r\n //this.inputContainer.append(this.sendMenu);\r\n\r\n this.recordTimeEl = document.createElement('div');\r\n this.recordTimeEl.classList.add('record-time');\r\n\r\n this.fileInput = document.createElement('input');\r\n this.fileInput.type = 'file';\r\n this.fileInput.multiple = true;\r\n this.fileInput.style.display = 'none';\r\n\r\n this.newMessageWrapper.append(...[this.btnToggleEmoticons, this.inputMessageContainer, this.btnScheduled, this.btnToggleReplyMarkup, this.attachMenu, this.recordTimeEl, this.fileInput].filter(Boolean));\r\n\r\n this.rowsWrapper.append(this.replyElements.container);\r\n this.autocompleteHelperController = new AutocompleteHelperController();\r\n this.stickersHelper = new StickersHelper(this.rowsWrapper, this.autocompleteHelperController);\r\n this.emojiHelper = new EmojiHelper(this.rowsWrapper, this.autocompleteHelperController, this, this.appEmojiManager);\r\n this.commandsHelper = new CommandsHelper(this.rowsWrapper, this.autocompleteHelperController, this, this.chat.appProfileManager, this.chat.appUsersManager);\r\n this.mentionsHelper = new MentionsHelper(this.rowsWrapper, this.autocompleteHelperController, this, this.chat.appProfileManager, this.chat.appUsersManager);\r\n this.inlineHelper = new InlineHelper(this.rowsWrapper, this.autocompleteHelperController, this.chat, this.appUsersManager, this.appInlineBotsManager);\r\n this.rowsWrapper.append(this.newMessageWrapper);\r\n\r\n this.btnCancelRecord = ButtonIcon('delete danger btn-circle z-depth-1 btn-record-cancel');\r\n\r\n this.btnSendContainer = document.createElement('div');\r\n this.btnSendContainer.classList.add('btn-send-container');\r\n\r\n this.recordRippleEl = document.createElement('div');\r\n this.recordRippleEl.classList.add('record-ripple');\r\n\r\n this.btnSend = ButtonIcon('none btn-circle z-depth-1 btn-send animated-button-icon');\r\n this.btnSend.insertAdjacentHTML('afterbegin', `\r\n \r\n \r\n \r\n \r\n `);\r\n\r\n this.btnSendContainer.append(this.recordRippleEl, this.btnSend);\r\n\r\n if(this.chat.type !== 'scheduled') {\r\n this.sendMenu = new SendMenu({\r\n onSilentClick: () => {\r\n this.sendSilent = true;\r\n this.sendMessage();\r\n },\r\n onScheduleClick: () => {\r\n this.scheduleSending(undefined);\r\n },\r\n listenerSetter: this.listenerSetter,\r\n openSide: 'top-left',\r\n onContextElement: this.btnSend,\r\n onOpen: () => {\r\n return !this.isInputEmpty();\r\n }\r\n });\r\n \r\n this.btnSendContainer.append(this.sendMenu.sendMenu);\r\n }\r\n\r\n this.inputContainer.append(this.btnCancelRecord, this.btnSendContainer);\r\n\r\n emoticonsDropdown.attachButtonListener(this.btnToggleEmoticons, this.listenerSetter);\r\n this.listenerSetter.add(emoticonsDropdown)('open', this.onEmoticonsOpen);\r\n this.listenerSetter.add(emoticonsDropdown)('close', this.onEmoticonsClose);\r\n\r\n this.attachMessageInputField();\r\n\r\n /* this.attachMenu.addEventListener('mousedown', (e) => {\r\n const hidden = this.attachMenu.querySelectorAll('.hide');\r\n if(hidden.length === this.attachMenuButtons.length) {\r\n toast(POSTING_MEDIA_NOT_ALLOWED);\r\n cancelEvent(e);\r\n return false;\r\n }\r\n }, {passive: false, capture: true}); */\r\n\r\n this.listenerSetter.add(rootScope)('settings_updated', () => {\r\n if(this.stickersHelper || this.emojiHelper) {\r\n // this.previousQuery = undefined;\r\n this.previousQuery = '';\r\n this.checkAutocomplete();\r\n /* if(!rootScope.settings.stickers.suggest) {\r\n this.stickersHelper.checkEmoticon('');\r\n } else {\r\n this.onMessageInput();\r\n } */\r\n }\r\n\r\n if(this.messageInputField) {\r\n this.messageInputField.onFakeInput();\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('draft_updated', ({peerId, threadId, draft, force}) => {\r\n if(this.chat.threadId !== threadId || this.chat.peerId !== peerId) return;\r\n this.setDraft(draft, true, force);\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('peer_changing', (chat) => {\r\n if(this.chat === chat) {\r\n this.saveDraft();\r\n }\r\n });\r\n\r\n if(this.chat.type === 'scheduled') {\r\n this.listenerSetter.add(rootScope)('scheduled_delete', ({peerId, mids}) => {\r\n if(this.chat.peerId === peerId && mids.includes(this.editMsgId)) {\r\n this.onMessageSent();\r\n }\r\n });\r\n } else {\r\n this.listenerSetter.add(rootScope)('history_delete', ({peerId, msgs}) => {\r\n if(this.chat.peerId === peerId) {\r\n if(msgs.has(this.editMsgId)) {\r\n this.onMessageSent();\r\n }\r\n\r\n if(this.replyToMsgId && msgs.has(this.replyToMsgId)) {\r\n this.clearHelper('reply');\r\n }\r\n }\r\n });\r\n }\r\n\r\n try {\r\n this.recorder = new Recorder({\r\n //encoderBitRate: 32,\r\n //encoderPath: \"../dist/encoderWorker.min.js\",\r\n encoderSampleRate: 48000,\r\n monitorGain: 0,\r\n numberOfChannels: 1,\r\n recordingGain: 1,\r\n reuseWorker: true\r\n });\r\n } catch(err) {\r\n console.error('Recorder constructor error:', err);\r\n }\r\n\r\n this.updateSendBtn();\r\n\r\n this.listenerSetter.add(this.fileInput)('change', (e) => {\r\n let files = (e.target as HTMLInputElement & EventTarget).files;\r\n if(!files.length) {\r\n return;\r\n }\r\n \r\n new PopupNewMedia(this.chat, Array.from(files).slice(), this.willAttachType);\r\n this.fileInput.value = '';\r\n }, false);\r\n\r\n /* let time = Date.now();\r\n this.btnSend.addEventListener('touchstart', (e) => {\r\n time = Date.now();\r\n });\r\n\r\n let eventName1 = 'touchend';\r\n this.btnSend.addEventListener(eventName1, (e: Event) => {\r\n //cancelEvent(e);\r\n console.log(eventName1 + ', time: ' + (Date.now() - time));\r\n });\r\n\r\n let eventName = 'mousedown';\r\n this.btnSend.addEventListener(eventName, (e: Event) => {\r\n cancelEvent(e);\r\n console.log(eventName + ', time: ' + (Date.now() - time));\r\n }); */\r\n attachClickEvent(this.btnSend, this.onBtnSendClick, {listenerSetter: this.listenerSetter, touchMouseDown: true});\r\n\r\n if(this.recorder) {\r\n attachClickEvent(this.btnCancelRecord, this.onCancelRecordClick, {listenerSetter: this.listenerSetter});\r\n\r\n this.recorder.onstop = () => {\r\n this.recording = false;\r\n this.chatInput.classList.remove('is-recording', 'is-locked');\r\n this.updateSendBtn();\r\n this.recordRippleEl.style.transform = '';\r\n };\r\n \r\n this.recorder.ondataavailable = (typedArray: Uint8Array) => {\r\n if(this.releaseMediaPlayback) {\r\n this.releaseMediaPlayback();\r\n this.releaseMediaPlayback = undefined;\r\n }\r\n\r\n if(this.recordingOverlayListener) {\r\n this.listenerSetter.remove(this.recordingOverlayListener);\r\n this.recordingOverlayListener = undefined;\r\n }\r\n\r\n if(this.recordingNavigationItem) {\r\n appNavigationController.removeItem(this.recordingNavigationItem);\r\n this.recordingNavigationItem = undefined;\r\n }\r\n\r\n if(this.recordCanceled) {\r\n return;\r\n }\r\n\r\n const {peerId, threadId} = this.chat;\r\n const replyToMsgId = this.replyToMsgId;\r\n \r\n const duration = (Date.now() - this.recordStartTime) / 1000 | 0;\r\n const dataBlob = new Blob([typedArray], {type: 'audio/ogg'});\r\n /* const fileName = new Date().toISOString() + \".opus\";\r\n console.log('Recorder data received', typedArray, dataBlob); */\r\n\r\n //let perf = performance.now();\r\n opusDecodeController.decode(typedArray, true).then(result => {\r\n //console.log('WAVEFORM!:', /* waveform, */performance.now() - perf);\r\n \r\n opusDecodeController.setKeepAlive(false);\r\n \r\n // тут objectURL ставится уже с audio/wav\r\n this.appMessagesManager.sendFile(peerId, dataBlob, {\r\n isVoiceMessage: true,\r\n isMedia: true,\r\n duration,\r\n waveform: result.waveform,\r\n objectURL: result.url,\r\n replyToMsgId,\r\n threadId,\r\n clearDraft: true\r\n });\r\n\r\n this.onMessageSent(false, true);\r\n });\r\n };\r\n }\r\n\r\n attachClickEvent(this.replyElements.cancelBtn, this.onHelperCancel, {listenerSetter: this.listenerSetter});\r\n attachClickEvent(this.replyElements.container, this.onHelperClick, {listenerSetter: this.listenerSetter});\r\n\r\n this.saveDraftDebounced = debounce(() => this.saveDraft(), 2500, false, true);\r\n }\r\n\r\n public constructPinnedHelpers() {\r\n const container = document.createElement('div');\r\n container.classList.add('pinned-container');\r\n\r\n this.pinnedControlBtn = Button('btn-primary btn-transparent text-bold pinned-container-button', {icon: 'unpin'});\r\n container.append(this.pinnedControlBtn);\r\n\r\n const fakeContainer = container.cloneNode(true);\r\n this.fakePinnedControlBtn = fakeContainer.firstChild as HTMLElement;\r\n this.fakeRowsWrapper.append(fakeContainer);\r\n\r\n this.listenerSetter.add(this.pinnedControlBtn)('click', () => {\r\n const peerId = this.chat.peerId;\r\n\r\n new PopupPinMessage(peerId, 0, true, () => {\r\n this.chat.appImManager.setPeer(0); // * close tab\r\n\r\n // ! костыль, это скроет закреплённые сообщения сразу, вместо того, чтобы ждать пока анимация перехода закончится\r\n const originalChat = this.chat.appImManager.chat;\r\n if(originalChat.topbar.pinnedMessage) {\r\n originalChat.topbar.pinnedMessage.pinnedMessageContainer.toggle(true);\r\n }\r\n });\r\n });\r\n\r\n this.rowsWrapper.append(container);\r\n\r\n this.chatInput.classList.add('type-pinned');\r\n this.rowsWrapper.classList.add('is-centered');\r\n }\r\n\r\n private onCancelRecordClick = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n \r\n this.recordCanceled = true;\r\n this.recorder.stop();\r\n opusDecodeController.setKeepAlive(false);\r\n };\r\n\r\n private onEmoticonsOpen = () => {\r\n const toggleClass = IS_TOUCH_SUPPORTED ? 'flip-icon' : 'active';\r\n this.btnToggleEmoticons.classList.toggle(toggleClass, true);\r\n };\r\n\r\n private onEmoticonsClose = () => {\r\n const toggleClass = IS_TOUCH_SUPPORTED ? 'flip-icon' : 'active';\r\n this.btnToggleEmoticons.classList.toggle(toggleClass, false);\r\n };\r\n\r\n public getReadyToSend(callback: () => void) {\r\n return this.chat.type === 'scheduled' ? (this.scheduleSending(callback), true) : (callback(), false);\r\n }\r\n\r\n public scheduleSending = (callback: () => void = this.sendMessage.bind(this, true), initDate = new Date()) => {\r\n const canSendWhenOnline = this.chat.peerId > 0 && this.appUsersManager.isUserOnlineVisible(this.chat.peerId);\r\n\r\n new PopupSchedule(initDate, (timestamp) => {\r\n const minTimestamp = (Date.now() / 1000 | 0) + 10;\r\n if(timestamp <= minTimestamp) {\r\n timestamp = undefined;\r\n }\r\n\r\n this.scheduleDate = timestamp;\r\n callback();\r\n\r\n if(this.chat.type !== 'scheduled' && timestamp) {\r\n this.appImManager.openScheduled(this.chat.peerId);\r\n }\r\n }, canSendWhenOnline).show();\r\n };\r\n\r\n public setUnreadCount() {\r\n const dialog = this.appMessagesManager.getDialogOnly(this.chat.peerId);\r\n const count = dialog?.unread_count;\r\n this.goDownUnreadBadge.innerText = '' + (count || '');\r\n this.goDownUnreadBadge.classList.toggle('badge-gray', this.appNotificationsManager.isPeerLocalMuted(this.chat.peerId, true));\r\n\r\n if(this.goMentionUnreadBadge && this.chat.type === 'chat') {\r\n const hasMentions = !!dialog?.unread_mentions_count;\r\n this.goMentionUnreadBadge.innerText = hasMentions ? '' + (dialog.unread_mentions_count) : '';\r\n this.goMentionBtn.classList.toggle('is-visible', hasMentions);\r\n }\r\n }\r\n\r\n public saveDraft() {\r\n if(!this.chat.peerId || this.editMsgId || this.chat.type === 'scheduled') return;\r\n \r\n const {value, entities} = getRichValue(this.messageInputField.input);\r\n\r\n let draft: DraftMessage.draftMessage;\r\n if(value.length || this.replyToMsgId) {\r\n draft = {\r\n _: 'draftMessage',\r\n date: tsNow(true) + this.serverTimeManager.serverTimeOffset,\r\n message: value,\r\n entities: entities.length ? entities : undefined,\r\n pFlags: {\r\n no_webpage: this.noWebPage\r\n },\r\n reply_to_msg_id: this.replyToMsgId\r\n };\r\n }\r\n\r\n this.appDraftsManager.syncDraft(this.chat.peerId, this.chat.threadId, draft);\r\n }\r\n\r\n public destroy() {\r\n //this.chat.log.error('Input destroying');\r\n\r\n this.listenerSetter.removeAll();\r\n }\r\n\r\n public cleanup(helperToo = true) {\r\n if(!this.chat.peerId) {\r\n this.chatInput.style.display = 'none';\r\n this.goDownBtn.classList.add('hide');\r\n }\r\n\r\n cancelSelection();\r\n\r\n this.lastTimeType = 0;\r\n\r\n if(this.messageInput) {\r\n this.clearInput();\r\n helperToo && this.clearHelper();\r\n }\r\n }\r\n\r\n public setDraft(draft?: MyDraftMessage, fromUpdate = true, force = false) {\r\n if((!force && !isInputEmpty(this.messageInput)) || this.chat.type === 'scheduled') return false;\r\n \r\n if(!draft) {\r\n draft = this.appDraftsManager.getDraft(this.chat.peerId, this.chat.threadId);\r\n\r\n if(!draft) {\r\n return false;\r\n }\r\n }\r\n\r\n if(this.messageInputField.value === draft.rMessage && this.replyToMsgId === draft.reply_to_msg_id) return false;\r\n\r\n this.clearHelper();\r\n this.noWebPage = draft.pFlags.no_webpage;\r\n if(draft.reply_to_msg_id) {\r\n this.initMessageReply(draft.reply_to_msg_id);\r\n }\r\n\r\n this.setInputValue(draft.rMessage, fromUpdate, fromUpdate);\r\n return true;\r\n }\r\n\r\n public finishPeerChange() {\r\n const peerId = this.chat.peerId;\r\n\r\n this.chatInput.style.display = '';\r\n \r\n const isBroadcast = this.appPeersManager.isBroadcast(peerId);\r\n this.goDownBtn.classList.toggle('is-broadcast', isBroadcast);\r\n this.goDownBtn.classList.remove('hide');\r\n\r\n if(this.goDownUnreadBadge) {\r\n this.setUnreadCount();\r\n }\r\n\r\n if(this.chat.type === 'pinned') {\r\n this.chatInput.classList.toggle('can-pin', this.appPeersManager.canPinMessage(peerId));\r\n }/* else if(this.chat.type === 'chat') {\r\n } */\r\n\r\n if(this.btnScheduled) {\r\n this.btnScheduled.classList.add('hide');\r\n const middleware = this.chat.bubbles.getMiddleware();\r\n this.appMessagesManager.getScheduledMessages(peerId).then(mids => {\r\n if(!middleware()) return;\r\n this.btnScheduled.classList.toggle('hide', !mids.length);\r\n });\r\n }\r\n\r\n if(this.replyKeyboard) {\r\n this.replyKeyboard.setPeer(peerId);\r\n }\r\n\r\n if(this.sendMenu) {\r\n this.sendMenu.setPeerId(peerId);\r\n }\r\n\r\n if(this.messageInput) {\r\n this.updateMessageInput();\r\n } else if(this.pinnedControlBtn) {\r\n if(this.appPeersManager.canPinMessage(this.chat.peerId)) {\r\n this.pinnedControlBtn.append(i18n('Chat.Input.UnpinAll'));\r\n this.fakePinnedControlBtn.append(i18n('Chat.Input.UnpinAll'));\r\n } else {\r\n this.pinnedControlBtn.append(i18n('Chat.Pinned.DontShow'));\r\n this.fakePinnedControlBtn.append(i18n('Chat.Pinned.DontShow'));\r\n }\r\n }\r\n }\r\n\r\n public updateMessageInput() {\r\n const {peerId, threadId} = this.chat;\r\n const canWrite = this.appMessagesManager.canSendToPeer(peerId, threadId);\r\n this.chatInput.classList.add('no-transition');\r\n this.chatInput.classList.toggle('is-hidden', !canWrite);\r\n void this.chatInput.offsetLeft; // reflow\r\n this.chatInput.classList.remove('no-transition');\r\n\r\n const i = I18n.weakMap.get(this.messageInput) as I18n.IntlElement;\r\n if(i) {\r\n let key: LangPackKey;\r\n if(threadId) {\r\n key = 'Comment';\r\n } else if(this.appPeersManager.isBroadcast(peerId)) {\r\n key = 'ChannelBroadcast';\r\n } else if(this.appMessagesManager.isAnonymousSending(peerId)) {\r\n key = 'SendAnonymously';\r\n } else {\r\n key = 'Message';\r\n }\r\n\r\n if(i.key !== key) {\r\n i.key = key;\r\n i.update();\r\n }\r\n }\r\n\r\n const visible = this.attachMenuButtons.filter(button => {\r\n const good = button.verify(peerId, threadId);\r\n button.element.classList.toggle('hide', !good);\r\n return good;\r\n });\r\n\r\n if(!canWrite) {\r\n this.messageInput.removeAttribute('contenteditable');\r\n } else {\r\n this.messageInput.setAttribute('contenteditable', 'true');\r\n this.setDraft(undefined, false);\r\n\r\n if(!this.messageInput.innerHTML) {\r\n this.messageInputField.onFakeInput();\r\n }\r\n }\r\n \r\n this.attachMenu.toggleAttribute('disabled', !visible.length);\r\n this.attachMenu.classList.toggle('btn-disabled', !visible.length);\r\n this.updateSendBtn();\r\n }\r\n\r\n private attachMessageInputField() {\r\n const oldInputField = this.messageInputField;\r\n this.messageInputField = new InputField({\r\n placeholder: 'Message',\r\n name: 'message',\r\n animate: true\r\n });\r\n\r\n this.messageInputField.input.classList.replace('input-field-input', 'input-message-input');\r\n this.messageInputField.inputFake.classList.replace('input-field-input', 'input-message-input');\r\n this.messageInput = this.messageInputField.input;\r\n this.messageInput.classList.add('no-scrollbar');\r\n this.attachMessageInputListeners();\r\n \r\n if(IS_STICKY_INPUT_BUGGED) {\r\n fixSafariStickyInputFocusing(this.messageInput);\r\n }\r\n\r\n if(oldInputField) {\r\n oldInputField.input.replaceWith(this.messageInputField.input);\r\n oldInputField.inputFake.replaceWith(this.messageInputField.inputFake);\r\n } else {\r\n this.inputMessageContainer.append(this.messageInputField.input, this.messageInputField.inputFake);\r\n }\r\n }\r\n\r\n private attachMessageInputListeners() {\r\n this.listenerSetter.add(this.messageInput)('keydown', (e: KeyboardEvent) => {\r\n if(isSendShortcutPressed(e)) {\r\n this.sendMessage();\r\n } else if(e.ctrlKey || e.metaKey) {\r\n this.handleMarkdownShortcut(e);\r\n } else if((e.key === 'PageUp' || e.key === 'PageDown') && !e.shiftKey) { // * fix pushing page to left (Chrome Windows)\r\n e.preventDefault();\r\n\r\n if(e.key === 'PageUp') {\r\n const range = document.createRange();\r\n const sel = window.getSelection();\r\n \r\n range.setStart(this.messageInput.childNodes[0] || this.messageInput, 0);\r\n range.collapse(true);\r\n \r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n } else {\r\n placeCaretAtEnd(this.messageInput);\r\n }\r\n }\r\n });\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n attachClickEvent(this.messageInput, (e) => {\r\n this.appImManager.selectTab(1); // * set chat tab for album orientation\r\n //this.saveScroll();\r\n emoticonsDropdown.toggle(false);\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n /* this.listenerSetter.add(window)('resize', () => {\r\n this.restoreScroll();\r\n }); */\r\n\r\n /* if(isSafari) { \r\n this.listenerSetter.add(this.messageInput)('mousedown', () => {\r\n window.requestAnimationFrame(() => {\r\n window.requestAnimationFrame(() => {\r\n emoticonsDropdown.toggle(false);\r\n });\r\n });\r\n });\r\n } */\r\n }\r\n\r\n /* this.listenerSetter.add(this.messageInput)('beforeinput', (e: Event) => {\r\n // * validate due to manual formatting through browser's context menu\r\n const inputType = (e as InputEvent).inputType;\r\n //console.log('message beforeinput event', e);\r\n\r\n if(inputType.indexOf('format') === 0) {\r\n //console.log('message beforeinput format', e, inputType, this.messageInput.innerHTML);\r\n const markdownType = inputType.split('format')[1].toLowerCase() as MarkdownType;\r\n if(this.applyMarkdown(markdownType)) {\r\n cancelEvent(e); // * cancel legacy markdown event\r\n }\r\n }\r\n }); */\r\n this.listenerSetter.add(this.messageInput)('input', this.onMessageInput);\r\n this.listenerSetter.add(this.messageInput)('keyup', () => {\r\n this.checkAutocomplete();\r\n });\r\n\r\n if(this.chat.type === 'chat' || this.chat.type === 'discussion') {\r\n this.listenerSetter.add(this.messageInput)('focusin', () => {\r\n if(this.chat.bubbles.scrollable.loadedAll.bottom) {\r\n this.appMessagesManager.readAllHistory(this.chat.peerId, this.chat.threadId);\r\n }\r\n }); \r\n }\r\n }\r\n\r\n private prepareDocumentExecute = () => {\r\n this.executedHistory.push(this.messageInput.innerHTML);\r\n return () => this.canUndoFromHTML = this.messageInput.innerHTML;\r\n };\r\n\r\n private undoRedo = (e: Event, type: 'undo' | 'redo', needHTML: string) => {\r\n cancelEvent(e); // cancel legacy event\r\n\r\n let html = this.messageInput.innerHTML;\r\n if(html && html !== needHTML) {\r\n this.lockRedo = true;\r\n\r\n let sameHTMLTimes = 0;\r\n do {\r\n document.execCommand(type, false, null);\r\n const currentHTML = this.messageInput.innerHTML;\r\n if(html === currentHTML) {\r\n if(++sameHTMLTimes > 2) { // * unlink, removeFormat (а может и нет, случай: заболдить подчёркнутый текст (выделить ровно его), попробовать отменить)\r\n break;\r\n }\r\n } else {\r\n sameHTMLTimes = 0;\r\n }\r\n\r\n html = currentHTML;\r\n } while(html !== needHTML);\r\n\r\n this.lockRedo = false;\r\n }\r\n };\r\n\r\n public applyMarkdown(type: MarkdownType, href?: string) {\r\n const commandsMap: Partial<{[key in typeof type]: string | (() => void)}> = {\r\n bold: 'Bold',\r\n italic: 'Italic',\r\n underline: 'Underline',\r\n strikethrough: 'Strikethrough',\r\n monospace: () => document.execCommand('fontName', false, 'monospace'),\r\n link: href ? () => document.execCommand('createLink', false, href) : () => document.execCommand('unlink', false, null)\r\n };\r\n\r\n if(!commandsMap[type]) {\r\n return false;\r\n }\r\n\r\n const command = commandsMap[type];\r\n\r\n //type = 'monospace';\r\n\r\n const saveExecuted = this.prepareDocumentExecute();\r\n const executed: any[] = [];\r\n /**\r\n * * clear previous formatting, due to Telegram's inability to handle several entities\r\n */\r\n /* const checkForSingle = () => {\r\n const nodes = getSelectedNodes();\r\n //console.log('Using formatting:', commandsMap[type], nodes, this.executedHistory);\r\n\r\n const parents = [...new Set(nodes.map(node => node.parentNode))];\r\n //const differentParents = !!nodes.find(node => node.parentNode !== firstParent);\r\n const differentParents = parents.length > 1;\r\n\r\n let notSingle = false;\r\n if(differentParents) {\r\n notSingle = true;\r\n } else {\r\n const node = nodes[0];\r\n if(node && (node.parentNode as HTMLElement) !== this.messageInput && (node.parentNode.parentNode as HTMLElement) !== this.messageInput) {\r\n notSingle = true;\r\n }\r\n }\r\n\r\n if(notSingle) {\r\n //if(type === 'monospace') {\r\n executed.push(document.execCommand('styleWithCSS', false, 'true'));\r\n //}\r\n\r\n executed.push(document.execCommand('unlink', false, null));\r\n executed.push(document.execCommand('removeFormat', false, null));\r\n executed.push(typeof(command) === 'function' ? command() : document.execCommand(command, false, null));\r\n\r\n //if(type === 'monospace') {\r\n executed.push(document.execCommand('styleWithCSS', false, 'false'));\r\n //}\r\n }\r\n }; */\r\n\r\n executed.push(document.execCommand('styleWithCSS', false, 'true'));\r\n \r\n if(type === 'monospace') {\r\n let haveThisType = false;\r\n //executed.push(document.execCommand('styleWithCSS', false, 'true'));\r\n\r\n const selection = window.getSelection();\r\n if(!selection.isCollapsed) {\r\n const range = selection.getRangeAt(0);\r\n const tag = markdownTags[type];\r\n\r\n const node = range.commonAncestorContainer;\r\n if((node.parentNode as HTMLElement).matches(tag.match) || (node instanceof HTMLElement && node.matches(tag.match))) {\r\n haveThisType = true;\r\n }\r\n }\r\n\r\n //executed.push(document.execCommand('removeFormat', false, null));\r\n\r\n if(haveThisType) {\r\n executed.push(document.execCommand('fontName', false, 'Roboto'));\r\n } else {\r\n executed.push(typeof(command) === 'function' ? command() : document.execCommand(command, false, null));\r\n }\r\n } else {\r\n executed.push(typeof(command) === 'function' ? command() : document.execCommand(command, false, null));\r\n }\r\n\r\n executed.push(document.execCommand('styleWithCSS', false, 'false'));\r\n\r\n //checkForSingle();\r\n saveExecuted();\r\n if(this.appImManager.markupTooltip) {\r\n this.appImManager.markupTooltip.setActiveMarkupButton();\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private handleMarkdownShortcut = (e: KeyboardEvent) => {\r\n // console.log('handleMarkdownShortcut', e);\r\n const formatKeys: {[key: string]: MarkdownType} = {\r\n 'B': 'bold',\r\n 'I': 'italic',\r\n 'U': 'underline',\r\n 'S': 'strikethrough',\r\n 'M': 'monospace',\r\n 'K': 'link'\r\n };\r\n\r\n const selection = document.getSelection();\r\n if(selection.toString().trim().length) {\r\n for(const key in formatKeys) {\r\n const good = e.code === ('Key' + key);\r\n \r\n if(good) {\r\n // * костыльчик\r\n if(key === 'K' && this.appImManager.markupTooltip) {\r\n this.appImManager.markupTooltip.showLinkEditor();\r\n cancelEvent(e);\r\n break;\r\n }\r\n \r\n this.applyMarkdown(formatKeys[key]);\r\n cancelEvent(e); // cancel legacy event\r\n break;\r\n }\r\n }\r\n }\r\n\r\n //return;\r\n if(e.code === 'KeyZ') {\r\n let html = this.messageInput.innerHTML;\r\n\r\n if(e.shiftKey) {\r\n if(this.undoHistory.length) {\r\n this.executedHistory.push(html);\r\n html = this.undoHistory.pop();\r\n this.undoRedo(e, 'redo', html);\r\n html = this.messageInput.innerHTML;\r\n this.canRedoFromHTML = this.undoHistory.length ? html : '';\r\n this.canUndoFromHTML = html;\r\n }\r\n } else {\r\n // * подождём, когда пользователь сам восстановит поле до нужного состояния, которое стало сразу после saveExecuted\r\n if(this.executedHistory.length && (!this.canUndoFromHTML || html === this.canUndoFromHTML)) {\r\n this.undoHistory.push(html);\r\n html = this.executedHistory.pop();\r\n this.undoRedo(e, 'undo', html);\r\n\r\n // * поставим новое состояние чтобы снова подождать, если пользователь изменит что-то, и потом попробует откатить до предыдущего состояния\r\n this.canUndoFromHTML = this.canRedoFromHTML = this.messageInput.innerHTML;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private onMessageInput = (e?: Event) => {\r\n // * validate due to manual formatting through browser's context menu\r\n /* const inputType = (e as InputEvent).inputType;\r\n console.log('message input event', e);\r\n if(inputType === 'formatBold') {\r\n console.log('message input format', this.messageInput.innerHTML);\r\n cancelEvent(e);\r\n }\r\n\r\n if(!isSelectionSingle()) {\r\n alert('not single');\r\n } */\r\n\r\n //console.log('messageInput input', this.messageInput.innerText);\r\n //const value = this.messageInput.innerText;\r\n const {value: richValue, entities: markdownEntities, caretPos} = getRichValueWithCaret(this.messageInputField.input);\r\n \r\n //const entities = RichTextProcessor.parseEntities(value);\r\n const value = RichTextProcessor.parseMarkdown(richValue, markdownEntities, true);\r\n const entities = RichTextProcessor.mergeEntities(markdownEntities, RichTextProcessor.parseEntities(value));\r\n\r\n //this.chat.log('messageInput entities', richValue, value, markdownEntities, caretPos);\r\n\r\n if(this.canRedoFromHTML && !this.lockRedo && this.messageInput.innerHTML !== this.canRedoFromHTML) {\r\n this.canRedoFromHTML = '';\r\n this.undoHistory.length = 0;\r\n }\r\n\r\n const urlEntities: Array = entities.filter(e => e._ === 'messageEntityUrl' || e._ === 'messageEntityTextUrl') as any;\r\n if(urlEntities.length) {\r\n for(const entity of urlEntities) {\r\n let url: string;\r\n if(entity._ === 'messageEntityTextUrl') {\r\n url = entity.url;\r\n } else {\r\n url = richValue.slice(entity.offset, entity.offset + entity.length);\r\n\r\n if(!(url.includes('http://') || url.includes('https://'))) {\r\n continue;\r\n }\r\n }\r\n\r\n //console.log('messageInput url:', url);\r\n\r\n if(this.lastUrl !== url) {\r\n this.lastUrl = url;\r\n // this.willSendWebPage = null;\r\n const promise = this.getWebPagePromise = apiManager.invokeApiHashable('messages.getWebPage', {\r\n url,\r\n }).then((webpage) => {\r\n webpage = this.appWebPagesManager.saveWebPage(webpage);\r\n if(this.getWebPagePromise === promise) this.getWebPagePromise = undefined;\r\n if(this.lastUrl !== url) return;\r\n if(webpage._ === 'webPage') {\r\n //console.log('got webpage: ', webpage);\r\n\r\n this.setTopInfo('webpage', () => {}, webpage.site_name || webpage.title || 'Webpage', webpage.description || webpage.url || '');\r\n delete this.noWebPage;\r\n this.willSendWebPage = webpage;\r\n } else if(this.willSendWebPage) {\r\n this.onHelperCancel();\r\n }\r\n });\r\n }\r\n\r\n break;\r\n }\r\n } else if(this.lastUrl) {\r\n this.lastUrl = '';\r\n delete this.noWebPage;\r\n this.willSendWebPage = null;\r\n \r\n if(this.helperType) {\r\n this.helperFunc();\r\n } else {\r\n this.clearHelper();\r\n }\r\n }\r\n\r\n if(!richValue.trim()) {\r\n if(this.lastTimeType) {\r\n this.appMessagesManager.setTyping(this.chat.peerId, {_: 'sendMessageCancelAction'});\r\n }\r\n\r\n if(this.appImManager.markupTooltip) {\r\n this.appImManager.markupTooltip.hide();\r\n }\r\n } else {\r\n const time = Date.now();\r\n if(time - this.lastTimeType >= 6000) {\r\n this.lastTimeType = time;\r\n this.appMessagesManager.setTyping(this.chat.peerId, {_: 'sendMessageTypingAction'});\r\n }\r\n }\r\n\r\n if(!this.editMsgId) {\r\n this.saveDraftDebounced();\r\n }\r\n\r\n this.checkAutocomplete(richValue, caretPos, entities);\r\n\r\n this.updateSendBtn();\r\n };\r\n\r\n public insertAtCaret(insertText: string, insertEntity?: MessageEntity, isHelper = true) {\r\n const {value: fullValue, caretPos, entities} = getRichValueWithCaret(this.messageInput);\r\n const pos = caretPos >= 0 ? caretPos : fullValue.length;\r\n const prefix = fullValue.substr(0, pos);\r\n const suffix = fullValue.substr(pos);\r\n\r\n const matches = isHelper ? prefix.match(ChatInput.AUTO_COMPLETE_REG_EXP) : null;\r\n\r\n const matchIndex = matches ? matches.index + (matches[0].length - matches[2].length) : prefix.length;\r\n const newPrefix = prefix.slice(0, matchIndex);\r\n const newValue = newPrefix + insertText + suffix;\r\n\r\n // merge emojis\r\n const hadEntities = RichTextProcessor.parseEntities(fullValue);\r\n RichTextProcessor.mergeEntities(entities, hadEntities);\r\n\r\n // max for additional whitespace\r\n const insertLength = insertEntity ? Math.max(insertEntity.length, insertText.length) : insertText.length;\r\n const addEntities: MessageEntity[] = [];\r\n if(insertEntity) {\r\n addEntities.push(insertEntity);\r\n insertEntity.offset = matchIndex;\r\n }\r\n\r\n addEntities.push({\r\n _: 'messageEntityCaret',\r\n length: 0,\r\n offset: matchIndex + insertLength\r\n });\r\n \r\n // add offset to entities next to emoji\r\n const diff = insertLength - (matches ? matches[2].length : prefix.length);\r\n entities.forEach(entity => {\r\n if(entity.offset >= matchIndex) {\r\n entity.offset += diff;\r\n }\r\n });\r\n\r\n RichTextProcessor.mergeEntities(entities, addEntities);\r\n\r\n //const saveExecuted = this.prepareDocumentExecute();\r\n // can't exec .value here because it will instantly check for autocomplete\r\n this.messageInputField.setValueSilently(RichTextProcessor.wrapDraftText(newValue, {entities}), true);\r\n\r\n const caret = this.messageInput.querySelector('.composer-sel');\r\n setRichFocus(this.messageInput, caret);\r\n caret.remove();\r\n\r\n // but it's needed to be checked only here\r\n this.onMessageInput();\r\n\r\n //saveExecuted();\r\n\r\n //document.execCommand('insertHTML', true, RichTextProcessor.wrapEmojiText(emoji));\r\n }\r\n\r\n public onEmojiSelected = (emoji: string, autocomplete: boolean) => {\r\n if(autocomplete) {\r\n this.insertAtCaret(emoji, RichTextProcessor.getEmojiEntityFromEmoji(emoji));\r\n }\r\n };\r\n\r\n private checkAutocomplete(value?: string, caretPos?: number, entities?: MessageEntity[]) {\r\n //return;\r\n\r\n if(value === undefined) {\r\n const r = getRichValueWithCaret(this.messageInputField.input, true);\r\n value = r.value;\r\n caretPos = r.caretPos;\r\n entities = r.entities;\r\n }\r\n\r\n if(caretPos === -1) {\r\n caretPos = value.length;\r\n }\r\n\r\n if(entities === undefined) {\r\n const _value = RichTextProcessor.parseMarkdown(value, entities, true);\r\n entities = RichTextProcessor.mergeEntities(entities, RichTextProcessor.parseEntities(_value));\r\n }\r\n\r\n value = value.substr(0, caretPos);\r\n\r\n if(this.previousQuery === value) {\r\n return;\r\n }\r\n\r\n this.previousQuery = value;\r\n \r\n const matches = value.match(ChatInput.AUTO_COMPLETE_REG_EXP);\r\n let foundHelper: AutocompleteHelper;\r\n if(matches) {\r\n const entity = entities[0];\r\n\r\n let query = matches[2];\r\n const firstChar = query[0];\r\n\r\n if(this.stickersHelper && \r\n rootScope.settings.stickers.suggest && \r\n this.appMessagesManager.canSendToPeer(this.chat.peerId, this.chat.threadId, 'send_stickers') &&\r\n entity?._ === 'messageEntityEmoji' && entity.length === value.length && !entity.offset) {\r\n foundHelper = this.stickersHelper;\r\n this.stickersHelper.checkEmoticon(value);\r\n } else if(firstChar === '@') { // mentions\r\n const topMsgId = this.chat.threadId ? this.appMessagesIdsManager.getServerMessageId(this.chat.threadId) : undefined;\r\n if(this.mentionsHelper.checkQuery(query, this.chat.peerId > 0 ? 0 : this.chat.peerId, topMsgId)) {\r\n foundHelper = this.mentionsHelper;\r\n }\r\n } else if(!matches[1] && firstChar === '/') { // commands\r\n if(this.commandsHelper.checkQuery(query, this.chat.peerId)) {\r\n foundHelper = this.commandsHelper;\r\n }\r\n } else if(rootScope.settings.emoji.suggest) { // emoji\r\n query = query.replace(/^\\s*/, '');\r\n if(!value.match(/^\\s*:(.+):\\s*$/) && !value.match(/:[;!@#$%^&*()-=|]/) && query) {\r\n foundHelper = this.emojiHelper;\r\n this.emojiHelper.checkQuery(query, firstChar);\r\n }\r\n }\r\n }\r\n \r\n foundHelper = this.checkInlineAutocomplete(value, foundHelper);\r\n\r\n this.autocompleteHelperController.hideOtherHelpers(foundHelper);\r\n }\r\n\r\n private checkInlineAutocomplete(value: string, foundHelper?: AutocompleteHelper): AutocompleteHelper {\r\n let needPlaceholder = false;\r\n\r\n if(!foundHelper) {\r\n const inlineMatch = value.match(/^@([a-zA-Z\\\\d_]{3,32})\\s/);\r\n if(inlineMatch) {\r\n const username = inlineMatch[1];\r\n const query = value.slice(inlineMatch[0].length);\r\n needPlaceholder = inlineMatch[0].length === value.length;\r\n \r\n foundHelper = this.inlineHelper;\r\n\r\n if(!this.btnPreloader) {\r\n this.btnPreloader = ButtonIcon('none btn-preloader float show disable-hover', {noRipple: true});\r\n putPreloader(this.btnPreloader, true);\r\n this.inputMessageContainer.parentElement.insertBefore(this.btnPreloader, this.inputMessageContainer.nextSibling);\r\n } else {\r\n SetTransition(this.btnPreloader, 'show', true, 400);\r\n }\r\n \r\n this.inlineHelper.checkQuery(this.chat.peerId, username, query).then(({user, renderPromise}) => {\r\n if(needPlaceholder && user.bot_inline_placeholder) {\r\n this.messageInput.dataset.inlinePlaceholder = user.bot_inline_placeholder;\r\n }\r\n\r\n renderPromise.then(() => {\r\n SetTransition(this.btnPreloader, 'show', false, 400);\r\n });\r\n }).catch(noop);\r\n }\r\n }\r\n \r\n if(!needPlaceholder) {\r\n delete this.messageInput.dataset.inlinePlaceholder;\r\n }\r\n\r\n if(foundHelper !== this.inlineHelper) {\r\n if(this.btnPreloader) {\r\n SetTransition(this.btnPreloader, 'show', false, 400);\r\n }\r\n }\r\n\r\n return foundHelper;\r\n }\r\n\r\n private onBtnSendClick = (e: Event) => {\r\n cancelEvent(e);\r\n\r\n if(!this.recorder || this.recording || !this.isInputEmpty() || this.forwarding || this.editMsgId) {\r\n if(this.recording) {\r\n if((Date.now() - this.recordStartTime) < RECORD_MIN_TIME) {\r\n this.onCancelRecordClick();\r\n } else {\r\n this.recorder.stop();\r\n }\r\n } else {\r\n this.sendMessage();\r\n }\r\n } else {\r\n if(this.chat.peerId < 0 && !this.appMessagesManager.canSendToPeer(this.chat.peerId, this.chat.threadId, 'send_media')) {\r\n toast(POSTING_MEDIA_NOT_ALLOWED);\r\n return;\r\n }\r\n\r\n this.chatInput.classList.add('is-locked');\r\n blurActiveElement();\r\n\r\n this.recorder.start().then(() => {\r\n this.releaseMediaPlayback = appMediaPlaybackController.setSingleMedia();\r\n this.recordCanceled = false;\r\n \r\n this.chatInput.classList.add('is-recording');\r\n this.recording = true;\r\n this.updateSendBtn();\r\n opusDecodeController.setKeepAlive(true);\r\n \r\n const showDiscardPopup = () => {\r\n new PopupPeer('popup-cancel-record', {\r\n titleLangKey: 'DiscardVoiceMessageTitle',\r\n descriptionLangKey: 'DiscardVoiceMessageDescription',\r\n buttons: [{\r\n langKey: 'DiscardVoiceMessageAction',\r\n callback: () => {\r\n simulateClickEvent(this.btnCancelRecord);\r\n }\r\n }, {\r\n langKey: 'Continue',\r\n isCancel: true\r\n }]\r\n }).show();\r\n };\r\n\r\n this.recordingOverlayListener = this.listenerSetter.add(document.body)('mousedown', (e) => {\r\n if(!findUpClassName(e.target, 'chat-input') && !findUpClassName(e.target, 'popup-cancel-record')) {\r\n cancelEvent(e);\r\n showDiscardPopup();\r\n }\r\n }, {capture: true, passive: false}) as any;\r\n\r\n appNavigationController.pushItem(this.recordingNavigationItem = {\r\n type: 'voice',\r\n onPop: () => {\r\n setTimeout(() => {\r\n showDiscardPopup();\r\n }, 0);\r\n\r\n return false;\r\n }\r\n });\r\n\r\n this.recordStartTime = Date.now();\r\n\r\n const sourceNode: MediaStreamAudioSourceNode = this.recorder.sourceNode;\r\n const context = sourceNode.context;\r\n\r\n const analyser = context.createAnalyser();\r\n sourceNode.connect(analyser);\r\n //analyser.connect(context.destination);\r\n analyser.fftSize = 32;\r\n\r\n const frequencyData = new Uint8Array(analyser.frequencyBinCount);\r\n const max = frequencyData.length * 255;\r\n const min = 54 / 150;\r\n let r = () => {\r\n if(!this.recording) return;\r\n\r\n analyser.getByteFrequencyData(frequencyData);\r\n\r\n let sum = 0;\r\n frequencyData.forEach(value => {\r\n sum += value;\r\n });\r\n \r\n let percents = Math.min(1, (sum / max) + min);\r\n //console.log('frequencyData', frequencyData, percents);\r\n\r\n this.recordRippleEl.style.transform = `scale(${percents})`;\r\n\r\n let diff = Date.now() - this.recordStartTime;\r\n let ms = diff % 1000;\r\n\r\n let formatted = ('' + (diff / 1000)).toHHMMSS() + ',' + ('00' + Math.round(ms / 10)).slice(-2);\r\n\r\n this.recordTimeEl.innerText = formatted;\r\n\r\n fastRaf(r);\r\n };\r\n\r\n r();\r\n }).catch((e: Error) => {\r\n switch(e.name as string) {\r\n case 'NotAllowedError': {\r\n toast('Please allow access to your microphone');\r\n break;\r\n }\r\n\r\n case 'NotReadableError': {\r\n toast(e.message);\r\n break;\r\n }\r\n\r\n default:\r\n console.error('Recorder start error:', e, e.name, e.message);\r\n toast(e.message);\r\n break;\r\n }\r\n\r\n this.chatInput.classList.remove('is-recording', 'is-locked');\r\n });\r\n }\r\n };\r\n\r\n private onHelperCancel = (e?: Event) => {\r\n if(e) {\r\n cancelEvent(e);\r\n }\r\n\r\n if(this.willSendWebPage) {\r\n const lastUrl = this.lastUrl;\r\n let needReturn = false;\r\n if(this.helperType) {\r\n //if(this.helperFunc) {\r\n this.helperFunc();\r\n //}\r\n\r\n needReturn = true;\r\n }\r\n\r\n // * restore values\r\n this.lastUrl = lastUrl;\r\n this.noWebPage = true;\r\n this.willSendWebPage = null;\r\n\r\n if(needReturn) return;\r\n }\r\n\r\n this.clearHelper();\r\n this.updateSendBtn();\r\n };\r\n\r\n private onHelperClick = (e: Event) => {\r\n cancelEvent(e);\r\n \r\n if(!findUpClassName(e.target, 'reply-wrapper')) return;\r\n if(this.helperType === 'forward') {\r\n if(this.helperWaitingForward) return;\r\n this.helperWaitingForward = true;\r\n\r\n const helperFunc = this.helperFunc;\r\n this.clearHelper();\r\n this.updateSendBtn();\r\n let selected = false;\r\n new PopupForward(copy(this.forwarding), () => {\r\n selected = true;\r\n }, () => {\r\n this.helperWaitingForward = false;\r\n\r\n if(!selected) {\r\n helperFunc();\r\n }\r\n });\r\n } else if(this.helperType === 'reply') {\r\n this.chat.setMessageId(this.replyToMsgId);\r\n } else if(this.helperType === 'edit') {\r\n this.chat.setMessageId(this.editMsgId);\r\n }\r\n };\r\n\r\n public clearInput(canSetDraft = true, fireEvent = true, clearValue = '') {\r\n if(document.activeElement === this.messageInput && IS_MOBILE_SAFARI) { // fix first char uppercase\r\n const i = document.createElement('input');\r\n document.body.append(i);\r\n fixSafariStickyInput(i);\r\n this.messageInputField.setValueSilently(clearValue);\r\n fixSafariStickyInput(this.messageInput);\r\n i.remove();\r\n } else {\r\n this.messageInputField.setValueSilently(clearValue);\r\n }\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n //this.messageInput.innerText = '';\r\n } else {\r\n //this.attachMessageInputField();\r\n //this.messageInput.innerText = '';\r\n\r\n // clear executions\r\n this.canRedoFromHTML = '';\r\n this.undoHistory.length = 0;\r\n this.executedHistory.length = 0;\r\n this.canUndoFromHTML = '';\r\n }\r\n\r\n let set = false;\r\n if(canSetDraft) {\r\n set = this.setDraft(undefined, false);\r\n }\r\n\r\n if(!set && fireEvent) {\r\n this.onMessageInput();\r\n }\r\n }\r\n\r\n public isInputEmpty() {\r\n return isInputEmpty(this.messageInput);\r\n }\r\n\r\n public updateSendBtn() {\r\n let icon: 'send' | 'record' | 'edit' | 'schedule';\r\n\r\n const isInputEmpty = this.isInputEmpty();\r\n\r\n if(this.editMsgId) icon = 'edit';\r\n else if(!this.recorder || this.recording || !isInputEmpty || this.forwarding) icon = this.chat.type === 'scheduled' ? 'schedule' : 'send';\r\n else icon = 'record';\r\n\r\n ['send', 'record', 'edit', 'schedule'].forEach(i => {\r\n this.btnSend.classList.toggle(i, icon === i);\r\n });\r\n\r\n if(this.btnScheduled) {\r\n this.btnScheduled.classList.toggle('show', isInputEmpty);\r\n }\r\n\r\n if(this.btnToggleReplyMarkup) {\r\n this.btnToggleReplyMarkup.classList.toggle('show', isInputEmpty);\r\n }\r\n }\r\n\r\n public onMessageSent(clearInput = true, clearReply?: boolean) {\r\n if(this.chat.type !== 'scheduled') {\r\n this.appMessagesManager.readAllHistory(this.chat.peerId, this.chat.threadId, true);\r\n }\r\n\r\n this.scheduleDate = undefined;\r\n this.sendSilent = undefined;\r\n\r\n const value = this.messageInputField.value;\r\n const entities = RichTextProcessor.parseEntities(value);\r\n const emojiEntities: MessageEntity.messageEntityEmoji[] = entities.filter(entity => entity._ === 'messageEntityEmoji') as any;\r\n emojiEntities.forEach(entity => {\r\n const emoji = emojiFromCodePoints(entity.unicode);\r\n this.appEmojiManager.pushRecentEmoji(emoji);\r\n });\r\n\r\n if(clearInput) {\r\n this.lastUrl = '';\r\n delete this.noWebPage;\r\n this.willSendWebPage = null;\r\n this.clearInput();\r\n }\r\n\r\n if(clearReply || clearInput) {\r\n this.clearHelper();\r\n }\r\n\r\n this.updateSendBtn();\r\n }\r\n\r\n public sendMessage(force = false) {\r\n if(this.chat.type === 'scheduled' && !force && !this.editMsgId) {\r\n this.scheduleSending();\r\n return;\r\n }\r\n\r\n const {value, entities} = getRichValue(this.messageInputField.input);\r\n\r\n //return;\r\n if(this.editMsgId) {\r\n const message = this.chat.getMessage(this.editMsgId);\r\n if(!!value.trim() || message.media) {\r\n this.appMessagesManager.editMessage(message, value, {\r\n entities,\r\n noWebPage: this.noWebPage\r\n });\r\n } else {\r\n new PopupDeleteMessages(this.chat.peerId, [this.editMsgId], this.chat.type);\r\n\r\n return;\r\n }\r\n } else {\r\n this.appMessagesManager.sendText(this.chat.peerId, value, {\r\n entities,\r\n replyToMsgId: this.replyToMsgId,\r\n threadId: this.chat.threadId,\r\n noWebPage: this.noWebPage,\r\n webPage: this.getWebPagePromise ? undefined : this.willSendWebPage,\r\n scheduleDate: this.scheduleDate,\r\n silent: this.sendSilent,\r\n clearDraft: true\r\n });\r\n }\r\n\r\n // * wait for sendText set messageId for invokeAfterMsg\r\n if(this.forwarding) {\r\n const forwarding = copy(this.forwarding);\r\n const peerId = this.chat.peerId;\r\n const silent = this.sendSilent;\r\n const scheduleDate = this.scheduleDate;\r\n setTimeout(() => {\r\n for(const fromPeerId in forwarding) {\r\n this.appMessagesManager.forwardMessages(peerId, +fromPeerId, forwarding[fromPeerId], {\r\n silent,\r\n scheduleDate: scheduleDate\r\n });\r\n }\r\n }, 0);\r\n }\r\n\r\n this.onMessageSent();\r\n }\r\n\r\n public sendMessageWithDocument(document: MyDocument | string, force = false, clearDraft = false) {\r\n document = this.appDocsManager.getDoc(document);\r\n\r\n const flag = document.type === 'sticker' ? 'send_stickers' : (document.type === 'gif' ? 'send_gifs' : 'send_media');\r\n if(this.chat.peerId < 0 && !this.appMessagesManager.canSendToPeer(this.chat.peerId, this.chat.threadId, flag)) {\r\n toast(POSTING_MEDIA_NOT_ALLOWED);\r\n return false;\r\n }\r\n\r\n if(this.chat.type === 'scheduled' && !force) {\r\n this.scheduleSending(() => this.sendMessageWithDocument(document, true, clearDraft));\r\n return false;\r\n }\r\n\r\n if(document) {\r\n this.appMessagesManager.sendFile(this.chat.peerId, document, {\r\n isMedia: true, \r\n replyToMsgId: this.replyToMsgId, \r\n threadId: this.chat.threadId,\r\n silent: this.sendSilent, \r\n scheduleDate: this.scheduleDate,\r\n clearDraft: clearDraft || undefined\r\n });\r\n this.onMessageSent(clearDraft, true);\r\n\r\n if(document.type === 'sticker') {\r\n emoticonsDropdown.stickersTab?.pushRecentSticker(document);\r\n }\r\n\r\n return true;\r\n }\r\n \r\n return false;\r\n }\r\n\r\n /* public sendSomething(callback: () => void, force = false) {\r\n if(this.chat.type === 'scheduled' && !force) {\r\n this.scheduleSending(() => this.sendSomething(callback, true));\r\n return false;\r\n }\r\n\r\n callback();\r\n this.onMessageSent(false, true);\r\n\r\n return true;\r\n } */\r\n\r\n public initMessageEditing(mid: number) {\r\n const message = this.chat.getMessage(mid);\r\n\r\n let input = RichTextProcessor.wrapDraftText(message.message, {entities: message.totalEntities});\r\n const f = () => {\r\n const replyFragment = this.appMessagesManager.wrapMessageForReply(message, undefined, [message.mid]);\r\n this.setTopInfo('edit', f, i18n('AccDescrEditing'), replyFragment, input, message);\r\n\r\n this.editMsgId = mid;\r\n input = undefined;\r\n };\r\n f();\r\n }\r\n\r\n public initMessagesForward(fromPeerIdsMids: {[fromPeerId: number]: number[]}) {\r\n const f = () => {\r\n //const peerTitles: string[]\r\n const fromPeerIds = Object.keys(fromPeerIdsMids).map(str => +str);\r\n const smth: Set = new Set();\r\n let length = 0;\r\n\r\n fromPeerIds.forEach(fromPeerId => {\r\n const mids = fromPeerIdsMids[fromPeerId];\r\n mids.forEach(mid => {\r\n const message = this.appMessagesManager.getMessageByPeer(fromPeerId, mid);\r\n if(message.fwd_from?.from_name && !message.fromId && !message.fwdFromId) {\r\n smth.add(message.fwd_from.from_name);\r\n } else {\r\n smth.add(message.fromId);\r\n }\r\n });\r\n\r\n length += mids.length;\r\n });\r\n\r\n const onlyFirstName = smth.size > 2;\r\n const peerTitles = [...smth].map(smth => {\r\n return typeof(smth) === 'number' ? \r\n new PeerTitle({peerId: smth, dialog: false, onlyFirstName}).element : \r\n (onlyFirstName ? smth.split(' ')[0] : smth);\r\n });\r\n\r\n const title = document.createDocumentFragment();\r\n if(peerTitles.length < 3) {\r\n title.append(...join(peerTitles, false));\r\n } else {\r\n title.append(peerTitles[0], i18n('AndOther', [peerTitles.length - 1]));\r\n }\r\n \r\n let firstMessage: any, usingFullAlbum: boolean;\r\n if(fromPeerIds.length === 1) {\r\n const fromPeerId = fromPeerIds[0];\r\n const mids = fromPeerIdsMids[fromPeerId];\r\n firstMessage = this.appMessagesManager.getMessageByPeer(fromPeerId, mids[0]);\r\n \r\n usingFullAlbum = !!firstMessage.grouped_id;\r\n if(usingFullAlbum) {\r\n const albumMids = this.appMessagesManager.getMidsByMessage(firstMessage);\r\n if(albumMids.length !== length || albumMids.find(mid => !mids.includes(mid))) {\r\n usingFullAlbum = false;\r\n }\r\n }\r\n }\r\n \r\n if(usingFullAlbum || length === 1) {\r\n const mids = fromPeerIdsMids[fromPeerIds[0]];\r\n const replyFragment = this.appMessagesManager.wrapMessageForReply(firstMessage, undefined, mids);\r\n this.setTopInfo('forward', f, title, replyFragment);\r\n } else {\r\n this.setTopInfo('forward', f, title, i18n('ForwardedMessageCount', [length]));\r\n }\r\n\r\n this.forwarding = fromPeerIdsMids;\r\n };\r\n \r\n f();\r\n }\r\n\r\n public initMessageReply(mid: number) {\r\n let message: Message = this.chat.getMessage(mid);\r\n const f = () => {\r\n let peerTitleEl: HTMLElement;\r\n if(message._ === 'messageEmpty') { // load missing replying message\r\n peerTitleEl = i18n('Loading');\r\n\r\n this.chat.appMessagesManager.wrapSingleMessage(this.chat.peerId, mid).then(() => {\r\n if(this.replyToMsgId !== mid) {\r\n return;\r\n }\r\n\r\n message = this.chat.getMessage(mid);\r\n if(message._ === 'messageEmpty') {\r\n this.clearHelper('reply');\r\n } else {\r\n f();\r\n }\r\n });\r\n } else {\r\n peerTitleEl = new PeerTitle({\r\n peerId: message.fromId,\r\n dialog: false\r\n }).element;\r\n }\r\n\r\n this.setTopInfo('reply', f, peerTitleEl, message && (message as Message.message).message, undefined, message);\r\n this.replyToMsgId = mid;\r\n };\r\n f();\r\n }\r\n\r\n public clearHelper(type?: ChatInputHelperType) {\r\n if(this.helperType === 'edit' && type !== 'edit') {\r\n this.clearInput();\r\n }\r\n\r\n if(type) {\r\n this.lastUrl = '';\r\n delete this.noWebPage;\r\n this.willSendWebPage = null;\r\n }\r\n \r\n this.replyToMsgId = undefined;\r\n this.forwarding = undefined;\r\n this.editMsgId = undefined;\r\n this.helperType = this.helperFunc = undefined;\r\n\r\n if(this.chat.container.classList.contains('is-helper-active')) {\r\n appNavigationController.removeByType('input-helper');\r\n this.chat.container.classList.remove('is-helper-active');\r\n }\r\n }\r\n\r\n public setInputValue(value: string, clear = true, focus = true) {\r\n if(!value) value = '';\r\n\r\n if(clear) this.clearInput(false, false, value);\r\n else this.messageInputField.setValueSilently(value);\r\n\r\n fastRaf(() => {\r\n focus && placeCaretAtEnd(this.messageInput);\r\n this.onMessageInput();\r\n this.messageInput.scrollTop = this.messageInput.scrollHeight;\r\n });\r\n }\r\n\r\n public setTopInfo(type: ChatInputHelperType, \r\n callerFunc: () => void, \r\n title: Parameters[0] = '', \r\n subtitle: Parameters[1] = '', \r\n input?: string, \r\n message?: any) {\r\n if(type !== 'webpage') {\r\n this.clearHelper(type);\r\n this.helperType = type;\r\n this.helperFunc = callerFunc;\r\n }\r\n\r\n const replyParent = this.replyElements.container;\r\n if(replyParent.lastElementChild.tagName === 'DIV') {\r\n replyParent.lastElementChild.remove();\r\n }\r\n\r\n replyParent.append(wrapReply(title, subtitle, message));\r\n\r\n this.chat.container.classList.add('is-helper-active');\r\n /* const scroll = appImManager.scrollable;\r\n if(scroll.isScrolledDown && !scroll.scrollLocked && !appImManager.messagesQueuePromise && !appImManager.setPeerPromise) {\r\n scroll.scrollTo(scroll.scrollHeight, 'top', true, true, 200);\r\n } */\r\n\r\n if(!IS_MOBILE) {\r\n appNavigationController.pushItem({\r\n type: 'input-helper',\r\n onPop: () => {\r\n this.onHelperCancel();\r\n }\r\n });\r\n }\r\n\r\n if(input !== undefined) {\r\n this.setInputValue(input);\r\n }\r\n\r\n setTimeout(() => {\r\n this.updateSendBtn();\r\n }, 0);\r\n }\r\n\r\n // public saveScroll() {\r\n // this.scrollTop = this.chat.bubbles.scrollable.container.scrollTop;\r\n // this.scrollOffsetTop = this.chatInput.offsetTop;\r\n // }\r\n\r\n // public restoreScroll() {\r\n // if(this.chatInput.style.display) return;\r\n // //console.log('input resize', offsetTop, this.chatInput.offsetTop);\r\n // let newOffsetTop = this.chatInput.offsetTop;\r\n // let container = this.chat.bubbles.scrollable.container;\r\n // let scrollTop = container.scrollTop;\r\n // let clientHeight = container.clientHeight;\r\n // let maxScrollTop = container.scrollHeight;\r\n\r\n // if(newOffsetTop < this.scrollOffsetTop) {\r\n // this.scrollDiff = this.scrollOffsetTop - newOffsetTop;\r\n // container.scrollTop += this.scrollDiff;\r\n // } else if(scrollTop !== this.scrollTop) {\r\n // let endDiff = maxScrollTop - (scrollTop + clientHeight);\r\n // if(endDiff < this.scrollDiff/* && false */) {\r\n // //container.scrollTop -= endDiff;\r\n // } else {\r\n // container.scrollTop -= this.scrollDiff;\r\n // }\r\n // }\r\n // }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport default function setRichFocus(field: HTMLElement, selectNode: Node, noCollapse?: boolean) {\r\n field.focus();\r\n if(selectNode &&\r\n selectNode.parentNode == field &&\r\n !selectNode.nextSibling &&\r\n !noCollapse) {\r\n field.removeChild(selectNode);\r\n selectNode = null;\r\n }\r\n\r\n if(window.getSelection && document.createRange) {\r\n const range = document.createRange();\r\n if(selectNode) {\r\n range.selectNode(selectNode);\r\n } else {\r\n range.selectNodeContents(field);\r\n }\r\n\r\n if(!noCollapse) {\r\n range.collapse(false);\r\n }\r\n\r\n const sel = window.getSelection();\r\n sel.removeAllRanges();\r\n sel.addRange(range);\r\n }\r\n /* else if (document.body.createTextRange !== undefined) {\r\n var textRange = document.body.createTextRange()\r\n textRange.moveToElementText(selectNode || field)\r\n if (!noCollapse) {\r\n textRange.collapse(false)\r\n }\r\n textRange.select()\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type Chat from \"./chat\";\r\nimport type ChatTopbar from \"./topbar\";\r\nimport mediaSizes from \"../../helpers/mediaSizes\";\r\nimport DivAndCaption from \"../divAndCaption\";\r\nimport { ripple } from \"../ripple\";\r\nimport ListenerSetter from \"../../helpers/listenerSetter\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport { safeAssign } from \"../../helpers/object\";\r\nimport { Message } from \"../../layer\";\r\n\r\nconst classNames: string[] = ['is-pinned-message-shown', 'is-pinned-audio-shown'];\r\nconst CLASSNAME_BASE = 'pinned-container';\r\nconst HEIGHT = 52;\r\n\r\nexport default class PinnedContainer {\r\n public wrapperUtils: HTMLElement;\r\n public btnClose: HTMLElement;\r\n protected wrapper: HTMLElement;\r\n\r\n protected topbar: ChatTopbar;\r\n protected chat: Chat;\r\n protected listenerSetter: ListenerSetter;\r\n public className: string;\r\n public divAndCaption: DivAndCaption<(title: string | HTMLElement | DocumentFragment, subtitle: string | HTMLElement | DocumentFragment, message?: any) => void>;\r\n \r\n protected floating = false;\r\n\r\n public onClose?: () => void | Promise;\r\n\r\n constructor(options: {\r\n topbar: PinnedContainer['topbar'],\r\n chat: PinnedContainer['chat'],\r\n listenerSetter: PinnedContainer['listenerSetter'],\r\n className: PinnedContainer['className'],\r\n divAndCaption: PinnedContainer['divAndCaption'],\r\n onClose?: PinnedContainer['onClose'],\r\n floating?: PinnedContainer['floating']\r\n }) {\r\n safeAssign(this, options);\r\n\r\n const {divAndCaption, className} = this;\r\n divAndCaption.container.classList.add(CLASSNAME_BASE, 'hide');\r\n divAndCaption.title.classList.add(CLASSNAME_BASE + '-title');\r\n divAndCaption.subtitle.classList.add(CLASSNAME_BASE + '-subtitle');\r\n divAndCaption.content.classList.add(CLASSNAME_BASE + '-content');\r\n \r\n this.btnClose = document.createElement('button');\r\n this.btnClose.classList.add(CLASSNAME_BASE + '-close', `pinned-${className}-close`, 'btn-icon', 'tgico-close');\r\n \r\n this.wrapper = document.createElement('div');\r\n this.wrapper.classList.add(CLASSNAME_BASE + '-wrapper');\r\n ripple(this.wrapper);\r\n\r\n this.wrapperUtils = document.createElement('div');\r\n this.wrapperUtils.classList.add(CLASSNAME_BASE + '-wrapper-utils');\r\n this.wrapperUtils.append(this.btnClose);\r\n\r\n this.wrapper.append(...Array.from(divAndCaption.container.children), this.wrapperUtils);\r\n\r\n divAndCaption.container.append(this.wrapper/* , this.close */);\r\n\r\n this.attachOnCloseEvent(this.btnClose);\r\n }\r\n\r\n public attachOnCloseEvent(elem: HTMLElement) {\r\n attachClickEvent(elem, (e) => {\r\n cancelEvent(e);\r\n\r\n ((this.onClose ? this.onClose() : null) || Promise.resolve(true)).then(needClose => {\r\n if(needClose) {\r\n this.toggle(true);\r\n }\r\n });\r\n }, {listenerSetter: this.listenerSetter});\r\n }\r\n\r\n public toggle(hide?: boolean) {\r\n const isHidden = this.divAndCaption.container.classList.contains('hide');\r\n if(hide === undefined) {\r\n hide = !isHidden;\r\n } else if(hide === isHidden) {\r\n return;\r\n }\r\n\r\n const scrollable = this.chat.bubbles.scrollable;\r\n \r\n const isFloating = (this.floating || mediaSizes.isMobile) && !hide;\r\n const scrollTop = isFloating || this.divAndCaption.container.classList.contains('is-floating') ? scrollable.scrollTop : undefined;\r\n\r\n this.divAndCaption.container.classList.toggle('is-floating', isFloating);\r\n this.divAndCaption.container.classList.toggle('hide', hide);\r\n \r\n this.topbar.container.classList.toggle('is-pinned-floating', isFloating);\r\n this.topbar.container.classList.toggle(`is-pinned-${this.className}-shown`, !hide);\r\n \r\n const active = classNames.filter(className => this.topbar.container.classList.contains(className));\r\n const maxActive = hide ? 0 : 1;\r\n \r\n if(scrollTop !== undefined && active.length <= maxActive/* && !scrollable.isScrolledDown */) {\r\n scrollable.scrollTop = scrollTop + ((hide ? -1 : 1) * HEIGHT);\r\n }\r\n \r\n this.topbar.setFloating();\r\n this.topbar.setUtilsWidth();\r\n }\r\n\r\n public fill(title: string | HTMLElement | DocumentFragment, subtitle: string | HTMLElement | DocumentFragment, message: Message.message) {\r\n this.divAndCaption.container.dataset.peerId = '' + message.peerId;\r\n this.divAndCaption.container.dataset.mid = '' + message.mid;\r\n this.divAndCaption.fill(title, subtitle, message);\r\n this.topbar.setUtilsWidth();\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\nimport type ChatTopbar from \"./topbar\";\nimport rootScope from \"../../lib/rootScope\";\nimport appMediaPlaybackController from \"../appMediaPlaybackController\";\nimport DivAndCaption from \"../divAndCaption\";\nimport PinnedContainer from \"./pinnedContainer\";\nimport Chat from \"./chat\";\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport replaceContent from \"../../helpers/dom/replaceContent\";\nimport PeerTitle from \"../peerTitle\";\nimport { i18n } from \"../../lib/langPack\";\nimport { formatFullSentTime } from \"../../helpers/date\";\nimport { MediaProgressLine, VolumeSelector } from \"../../lib/mediaPlayer\";\nimport ButtonIcon from \"../buttonIcon\";\n\nexport default class ChatAudio extends PinnedContainer {\n private toggleEl: HTMLElement;\n private progressLine: MediaProgressLine;\n private volumeSelector: VolumeSelector;\n\n constructor(protected topbar: ChatTopbar, protected chat: Chat, protected appMessagesManager: AppMessagesManager) {\n super({\n topbar, \n chat, \n listenerSetter: topbar.listenerSetter, \n className: 'audio', \n divAndCaption: new DivAndCaption(\n 'pinned-audio', \n (title: string | HTMLElement | DocumentFragment, subtitle: string | HTMLElement | DocumentFragment) => {\n replaceContent(this.divAndCaption.title, title);\n replaceContent(this.divAndCaption.subtitle, subtitle);\n }\n ), \n onClose: () => {\n appMediaPlaybackController.stop();\n },\n floating: true\n });\n\n this.divAndCaption.border.remove();\n\n const prevEl = ButtonIcon('pprevious active', {noRipple: true});\n const nextEl = ButtonIcon('nnext active', {noRipple: true});\n\n prevEl.innerHTML = ``;\n nextEl.innerHTML = ``;\n\n const attachClick = (elem: HTMLElement, callback: () => void) => {\n attachClickEvent(elem, (e) => {\n cancelEvent(e);\n callback();\n }, {listenerSetter: this.topbar.listenerSetter});\n };\n\n attachClick(prevEl, () => {\n appMediaPlaybackController.previous();\n });\n\n attachClick(nextEl, () => {\n appMediaPlaybackController.next();\n });\n\n this.toggleEl = ButtonIcon('', {noRipple: true});\n this.toggleEl.classList.add('active', 'pinned-audio-ico', 'tgico');\n attachClick(this.toggleEl, () => {\n appMediaPlaybackController.toggle();\n });\n this.wrapper.prepend(this.wrapper.firstElementChild, prevEl, this.toggleEl, nextEl);\n\n this.volumeSelector = new VolumeSelector(this.listenerSetter, true);\n const volumeProgressLineContainer = document.createElement('div');\n volumeProgressLineContainer.classList.add('progress-line-container');\n volumeProgressLineContainer.append(this.volumeSelector.container);\n const tunnel = document.createElement('div');\n tunnel.classList.add('pinned-audio-volume-tunnel');\n this.volumeSelector.btn.classList.add('pinned-audio-volume', 'active');\n this.volumeSelector.btn.prepend(tunnel);\n this.volumeSelector.btn.append(volumeProgressLineContainer);\n this.wrapperUtils.prepend(this.volumeSelector.btn);\n\n const progressWrapper = document.createElement('div');\n progressWrapper.classList.add('pinned-audio-progress-wrapper');\n\n this.progressLine = new MediaProgressLine(undefined, undefined, true, true);\n this.progressLine.container.classList.add('pinned-audio-progress');\n progressWrapper.append(this.progressLine.container);\n this.wrapper.insertBefore(progressWrapper, this.wrapperUtils);\n\n this.topbar.listenerSetter.add(rootScope)('media_play', ({doc, message, media}) => {\n let title: string | HTMLElement, subtitle: string | HTMLElement | DocumentFragment;\n if(doc.type === 'voice' || doc.type === 'round') {\n title = new PeerTitle({peerId: message.fromId}).element;\n\n //subtitle = 'Voice message';\n subtitle = formatFullSentTime(message.date);\n } else {\n title = doc.audioTitle || doc.fileName;\n subtitle = doc.audioPerformer || i18n('AudioUnknownArtist');\n }\n\n this.progressLine.setMedia(media);\n\n this.fill(title, subtitle, message);\n this.toggleEl.classList.add('flip-icon');\n this.toggle(false);\n });\n\n this.topbar.listenerSetter.add(rootScope)('media_pause', () => {\n this.toggleEl.classList.remove('flip-icon');\n });\n\n this.topbar.listenerSetter.add(rootScope)('media_stop', () => {\n this.toggle(true);\n });\n }\n}\n","// https://github.com/evgeny-nadymov/telegram-react/blob/master/src/Components/ColumnMiddle/PinnedMessageBorder.js\n\nenum BAR_HEIGHTS {\n ONE = 32,\n TWO = 15,\n THREE = 10,\n FOUR = 8,\n MORE = 8\n};\n\nconst GAP = 1;\nconst WIDTH = 2;\nconst BASE_CLASS = 'pinned-message-border';\n\nexport default class PinnedMessageBorder {\n private border: HTMLElement;\n private wrapper: HTMLElement;\n private svg: SVGSVGElement;\n private defs: SVGDefsElement;\n private clipPath: SVGClipPathElement;\n private path: SVGPathElement;\n private mark: HTMLElement;\n\n private count: number;\n private index: number;\n\n private drawRect = (x: number, y: number, width: number, height: number, radius: number) => {\n return `M${x},${y + radius}a${radius},${radius},0,0,1,${width},0v${height - 2 * radius}a${radius},${radius},0,0,1,${-width},0Z`;\n };\n\n private getClipPath = (id: string, barHeight: number, count: number) => {\n const radius = 1;\n\n let d = '';\n /* if(count === 3) {\n d = this.drawRect(0, 0, WIDTH, barHeight, radius)\n + this.drawRect(0, barHeight + GAP, WIDTH, barHeight + 1, radius)\n + this.drawRect(0, barHeight * 2 + GAP * 2 + 1, WIDTH, barHeight, radius);\n } */if(count === 2) {\n d = this.drawRect(0, 0, WIDTH, barHeight, radius) + this.drawRect(0, barHeight + GAP * 2, WIDTH, barHeight, radius);\n } else {\n for(let i = 0; i < count; ++i) {\n d += this.drawRect(0, (barHeight + GAP) * i, WIDTH, barHeight, radius);\n }\n }\n\n if(!this.clipPath) {\n this.clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');\n this.path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n\n this.clipPath.append(this.path);\n }\n\n this.clipPath.id = id;\n this.path.setAttributeNS(null, 'd', d);\n\n return this.clipPath;\n };\n\n private getBarHeight = (count: number, index: number) => {\n let barHeight: number;\n if(count <= 1) {\n barHeight = BAR_HEIGHTS.ONE;\n } else if(count === 2) {\n barHeight = BAR_HEIGHTS.TWO;\n } else if(count === 3) {\n barHeight = BAR_HEIGHTS.THREE;\n } else if(count === 4) {\n barHeight = BAR_HEIGHTS.FOUR;\n } else if(count > 3) {\n barHeight = BAR_HEIGHTS.MORE;\n }\n\n return barHeight;\n };\n\n private getMarkHeight = (count: number, index: number) => {\n let markHeight: number;\n if(count <= 1) {\n markHeight = BAR_HEIGHTS.ONE;\n } else if(count === 2) {\n markHeight = BAR_HEIGHTS.TWO;\n } else if(count === 3) {\n markHeight = BAR_HEIGHTS.THREE;\n } else if(count === 4) {\n markHeight = BAR_HEIGHTS.FOUR;\n } else if(count > 3) {\n markHeight = BAR_HEIGHTS.MORE;\n }\n\n return markHeight;\n };\n\n private getMarkTranslateY = (index: number, barHeight: number, count: number) => {\n if(count === 1) {\n return 0;\n } else if(count === 2) {\n return !index ? 0 : barHeight + GAP;\n }\n\n if(count === 3) {\n if(!index) {\n return 0;\n } else if(index === 1) {\n return barHeight + GAP;\n }\n\n return barHeight * 2 + GAP * 2 + 1;\n } else {\n return (barHeight + GAP) * index;\n }\n };\n\n private getTrackTranslateY = (index: number, count: number, barHeight: number, trackHeight: number) => {\n if(count <= 4) {\n return 0;\n }\n\n if(index <= 1) {\n return 0;\n } else if(index >= (count - 2)) {\n return trackHeight - BAR_HEIGHTS.ONE - barHeight;\n }\n\n // return (index + 1) * barHeight + index * GAP;\n return (index - 2) * barHeight + index * GAP;\n //return (barHeight + GAP * 2) / 2 + (index - 2) * (barHeight + GAP);\n };\n\n private getTrackHeight = (count: number, barHeight: number) => {\n return count <= 3 ? BAR_HEIGHTS.ONE : barHeight * count + GAP * (count - 1);\n };\n\n public render(count: number, index: number) {\n if(!this.border) {\n this.border = document.createElement('div');\n this.border.classList.add(BASE_CLASS);\n\n this.wrapper = document.createElement('div');\n this.border.append(this.wrapper);\n }\n \n if(count === 1) {\n if(this.count !== count) {\n this.wrapper.className = BASE_CLASS + '-wrapper-1';\n this.border.classList.remove(BASE_CLASS + '-mask');\n this.wrapper.innerHTML = this.wrapper.style.cssText = '';\n }\n\n return this.border;\n }\n\n const barHeight = this.getBarHeight(count, index);\n const markHeight = this.getMarkHeight(count, index);\n const trackHeight = this.getTrackHeight(count, barHeight);\n\n const clipPathId = `clipPath_${count}`;\n const clipPath = this.getClipPath(clipPathId, barHeight, count);\n\n const markTranslateY = this.getMarkTranslateY(index, barHeight, count);\n const trackTranslateY = this.getTrackTranslateY(index, count, barHeight, trackHeight);\n\n this.border.classList.toggle(BASE_CLASS + '-mask', count > 4);\n\n if(index <= 1) {\n this.border.classList.add('mask-bottom');\n this.border.classList.remove('mask-top');\n } else if(index >= (count - 2)) {\n this.border.classList.add('mask-top');\n this.border.classList.remove('mask-bottom');\n } else {\n this.border.classList.add('mask-top', 'mask-bottom');\n }\n\n this.wrapper.className = BASE_CLASS + '-wrapper';\n this.wrapper.style.cssText = `clip-path: url(#${clipPathId}); width: 2px; height: ${trackHeight}px; transform: translateY(-${trackTranslateY}px);`;\n \n if(!this.svg) {\n this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.svg.setAttributeNS(null, 'height', '0');\n this.svg.setAttributeNS(null, 'width', '0');\n \n this.defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\n this.defs.append(clipPath);\n\n this.svg.append(this.defs);\n\n this.mark = document.createElement('div');\n this.mark.classList.add(BASE_CLASS + '-mark');\n }\n\n if(!this.svg.parentElement) {\n this.wrapper.append(this.svg, this.mark);\n }\n\n this.mark.style.cssText = `height: ${markHeight}px; transform: translateY(${markTranslateY}px);`;\n \n this.count = count;\n this.index = index;\n\n return this.border;\n }\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\r\nimport type { AppPeersManager } from \"../../lib/appManagers/appPeersManager\";\r\nimport type ChatTopbar from \"./topbar\";\r\nimport PopupPinMessage from \"../popups/unpinMessage\";\r\nimport PinnedContainer from \"./pinnedContainer\";\r\nimport PinnedMessageBorder from \"./pinnedMessageBorder\";\r\nimport ReplyContainer, { wrapReplyDivAndCaption } from \"./replyContainer\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport Chat from \"./chat\";\r\nimport ListenerSetter from \"../../helpers/listenerSetter\";\r\nimport ButtonIcon from \"../buttonIcon\";\r\nimport { getHeavyAnimationPromise } from \"../../hooks/useHeavyAnimationCheck\";\r\nimport { i18n } from \"../../lib/langPack\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport handleScrollSideEvent from \"../../helpers/dom/handleScrollSideEvent\";\r\nimport debounce from \"../../helpers/schedulers/debounce\";\r\n\r\nclass AnimatedSuper {\r\n static DURATION = 200;\r\n static BASE_CLASS = 'animated-super';\r\n container: HTMLDivElement;\r\n rows: {[index: string]: {element: HTMLElement, timeout?: number, new?: true}} = {};\r\n clearTimeout: number;\r\n\r\n constructor() {\r\n this.container = document.createElement('div');\r\n this.container.className = AnimatedSuper.BASE_CLASS;\r\n }\r\n\r\n public getRow(index: number, animateFirst = false) {\r\n if(this.rows[index]) return this.rows[index].element;\r\n const row = document.createElement('div');\r\n const isFirst = !Object.keys(this.rows).length && !animateFirst;\r\n row.className = AnimatedSuper.BASE_CLASS + '-row' + (isFirst ? '' : ' is-hiding hide');\r\n this.rows[index] = {element: row, new: true};\r\n this.container.append(row);\r\n return row;\r\n }\r\n\r\n public clearRow(index: number) {\r\n if(!this.rows[index]) return;\r\n this.rows[index].element.remove();\r\n delete this.rows[index];\r\n }\r\n\r\n public clearRows(currentIndex?: number) {\r\n if(this.clearTimeout) clearTimeout(this.clearTimeout);\r\n this.clearTimeout = window.setTimeout(() => {\r\n for(const i in this.rows) {\r\n if(+i === currentIndex) continue;\r\n this.clearRow(+i);\r\n }\r\n }, AnimatedSuper.DURATION);\r\n }\r\n\r\n public setNewRow(index: number, reflow = false) {\r\n const row = this.rows[index];\r\n if(row.new) {\r\n if(reflow) {\r\n row.element.classList.remove('hide');\r\n void row.element.offsetLeft; // reflow\r\n } else {\r\n row.element.classList.remove('is-hiding', 'hide');\r\n }\r\n\r\n delete row.new;\r\n }\r\n\r\n this.clearRows(index);\r\n }\r\n\r\n public animate(index: number, previousIndex: number, fromTop = index > previousIndex, ignorePrevious = false) {\r\n if(index === previousIndex) { // * handle if set index 0 and previousIndex 0\r\n return this.setNewRow(index);\r\n }\r\n\r\n const row = this.rows[index];\r\n const previousRow = this.rows[previousIndex];\r\n if(!previousRow && !ignorePrevious) {\r\n return this.setNewRow(index);\r\n }\r\n\r\n const sides = ['from-top', 'from-bottom'];\r\n if(!fromTop) sides.reverse();\r\n\r\n row.element.classList.add(sides[0]);\r\n row.element.classList.remove(sides[1]);\r\n if(previousRow) {\r\n previousRow.element.classList.add(sides[1]);\r\n previousRow.element.classList.remove(sides[0]);\r\n }\r\n\r\n if(row.new) {\r\n this.setNewRow(index, true);\r\n }\r\n\r\n row.element.classList.toggle('is-hiding', false);\r\n previousRow && previousRow.element.classList.toggle('is-hiding', true);\r\n\r\n /* const height = row.element.getBoundingClientRect().height;\r\n row.element.style.transform = `translateY(${fromTop ? height * -1 : height}px)`;\r\n if(previousRow) {\r\n previousRow.element.style.transform = `translateY(${fromTop ? height : height * -1}px)`;\r\n } */\r\n\r\n /* row.element.style.setProperty('--height', row.element.getBoundingClientRect().height + 'px');\r\n if(previousRow) {\r\n previousRow.element.style.setProperty('--height', previousRow.element.getBoundingClientRect().height + 'px');\r\n } */\r\n \r\n this.clearRows(index);\r\n }\r\n}\r\n\r\nclass AnimatedCounter {\r\n static EMPTY_INDEX = -1;\r\n static BASE_CLASS = 'animated-counter';\r\n container: HTMLElement;\r\n decimals: {\r\n container: HTMLElement,\r\n placeholder: HTMLElement,\r\n animatedSuper: AnimatedSuper\r\n }[] = [];\r\n previousNumber = 0;\r\n clearTimeout: number;\r\n\r\n constructor(private reverse = false) {\r\n this.container = document.createElement('div');\r\n this.container.className = AnimatedCounter.BASE_CLASS;\r\n }\r\n\r\n getDecimal(index: number) {\r\n if(this.decimals[index]) return this.decimals[index];\r\n const item = document.createElement('div');\r\n item.className = AnimatedCounter.BASE_CLASS + '-decimal';\r\n\r\n const placeholder = document.createElement('div');\r\n placeholder.className = AnimatedCounter.BASE_CLASS + '-decimal-placeholder';\r\n\r\n const animatedSuper = new AnimatedSuper();\r\n animatedSuper.container.className = AnimatedCounter.BASE_CLASS + '-decimal-wrapper';\r\n\r\n item.append(placeholder, animatedSuper.container);\r\n\r\n this.container.append(item);\r\n\r\n return this.decimals[index] = {container: item, placeholder, animatedSuper};\r\n }\r\n\r\n clear(number: number) {\r\n if(this.clearTimeout) clearTimeout(this.clearTimeout);\r\n\r\n const decimals = ('' + number).length;\r\n if(decimals >= this.decimals.length) {\r\n return;\r\n }\r\n\r\n this.clearTimeout = window.setTimeout(() => {\r\n const byDecimal = this.decimals.splice(decimals, this.decimals.length - decimals);\r\n byDecimal.forEach((decimal) => {\r\n decimal.container.remove();\r\n });\r\n }, AnimatedSuper.DURATION);\r\n }\r\n\r\n /* prepareNumber(number: number) {\r\n const decimals = ('' + number).length;\r\n if(this.decimals.length < decimals) {\r\n for(let i = this.decimals.length; i < decimals; ++i) {\r\n this.getDecimal(i);\r\n }\r\n }\r\n } */\r\n\r\n hideLeft(number: number) {\r\n const decimals = ('' + number).length;\r\n const byDecimal = this.decimals.slice(decimals);//this.decimals.splice(deleteCount, this.decimals.length - deleteCount);\r\n byDecimal.forEach((decimal) => {\r\n const previousDecimalNumber = +decimal.placeholder.innerText || 0;\r\n const row = decimal.animatedSuper.getRow(AnimatedCounter.EMPTY_INDEX, true);\r\n decimal.animatedSuper.animate(AnimatedCounter.EMPTY_INDEX, previousDecimalNumber, this.reverse ? number < this.previousNumber : number > this.previousNumber, true);\r\n });\r\n\r\n this.clear(number);\r\n }\r\n\r\n setCount(number: number) {\r\n //this.prepareNumber(number);\r\n\r\n const previousByDecimal = Array.from('' + this.previousNumber).map(n => +n);\r\n const byDecimal = Array.from('' + number).map(n => +n);\r\n byDecimal.forEach((decimalNumber, idx) => {\r\n const decimal = this.getDecimal(idx);\r\n //const row = decimal.animatedSuper.getRow(number, true);\r\n const row = decimal.animatedSuper.getRow(decimalNumber, true);\r\n const previousDecimalNumber = previousByDecimal[idx] ?? AnimatedCounter.EMPTY_INDEX;\r\n row.innerText = decimal.placeholder.innerText = '' + decimalNumber;\r\n //decimal.animatedSuper.animate(number, this.previousNumber, this.reverse ? number < this.previousNumber : number > this.previousNumber, true);\r\n decimal.animatedSuper.animate(decimalNumber, previousDecimalNumber, this.reverse ? number < this.previousNumber : number > this.previousNumber, true);\r\n });\r\n\r\n this.hideLeft(number);\r\n //this.clear(number);\r\n this.previousNumber = number;\r\n }\r\n}\r\n\r\nexport default class ChatPinnedMessage {\r\n public static LOAD_COUNT = 50;\r\n public static LOAD_OFFSET = 5;\r\n\r\n public pinnedMessageContainer: PinnedContainer;\r\n public pinnedMessageBorder: PinnedMessageBorder;\r\n\r\n public pinnedMaxMid = 0;\r\n public pinnedMid = 0;\r\n public pinnedIndex = -1;\r\n public wasPinnedIndex = 0;\r\n public wasPinnedMediaIndex = 0;\r\n \r\n public locked = false;\r\n public waitForScrollBottom = false;\r\n\r\n public count = 0;\r\n public mids: number[] = [];\r\n public offsetIndex = 0;\r\n\r\n public loading = false;\r\n public loadedBottom = false;\r\n public loadedTop = false;\r\n\r\n public animatedSubtitle: AnimatedSuper;\r\n public animatedMedia: AnimatedSuper;\r\n public animatedCounter: AnimatedCounter;\r\n\r\n public listenerSetter: ListenerSetter;\r\n public scrollDownListenerSetter: ListenerSetter = null;\r\n\r\n public hidden = false;\r\n\r\n public getCurrentIndexPromise: Promise = null;\r\n public btnOpen: HTMLButtonElement;\r\n \r\n public setPinnedMessage: () => void;\r\n\r\n private isStatic = false;\r\n\r\n private debug = false;\r\n \r\n constructor(private topbar: ChatTopbar, private chat: Chat, private appMessagesManager: AppMessagesManager, private appPeersManager: AppPeersManager) {\r\n this.listenerSetter = new ListenerSetter();\r\n\r\n const dAC = new ReplyContainer('pinned-message');\r\n this.pinnedMessageContainer = new PinnedContainer({\r\n topbar, \r\n chat, \r\n listenerSetter: this.listenerSetter, \r\n className: 'message', \r\n divAndCaption: dAC, \r\n onClose: async() => {\r\n if(appPeersManager.canPinMessage(this.topbar.peerId)) {\r\n new PopupPinMessage(this.topbar.peerId, this.pinnedMid, true);\r\n } else {\r\n new PopupPinMessage(this.topbar.peerId, 0, true);\r\n }\r\n\r\n return false;\r\n }\r\n });\r\n\r\n this.pinnedMessageBorder = new PinnedMessageBorder();\r\n dAC.border.replaceWith(this.pinnedMessageBorder.render(1, 0));\r\n\r\n this.animatedSubtitle = new AnimatedSuper();\r\n dAC.subtitle.append(this.animatedSubtitle.container);\r\n\r\n this.animatedMedia = new AnimatedSuper();\r\n this.animatedMedia.container.classList.add('pinned-message-media-container');\r\n dAC.content.prepend(this.animatedMedia.container);\r\n\r\n this.animatedCounter = new AnimatedCounter(true);\r\n dAC.title.append(i18n('PinnedMessage'), ' ', this.animatedCounter.container);\r\n\r\n const btnClose = this.pinnedMessageContainer.btnClose.cloneNode(true) as HTMLElement;\r\n this.pinnedMessageContainer.attachOnCloseEvent(btnClose);\r\n dAC.container.prepend(btnClose);\r\n\r\n this.btnOpen = ButtonIcon('pinlist pinned-container-close pinned-message-pinlist', {noRipple: true});\r\n\r\n this.pinnedMessageContainer.wrapperUtils.prepend(this.btnOpen);\r\n\r\n attachClickEvent(this.btnOpen, (e) => {\r\n cancelEvent(e);\r\n this.topbar.openPinned(true);\r\n }, {listenerSetter: this.listenerSetter});\r\n\r\n this.listenerSetter.add(rootScope)('peer_pinned_messages', ({peerId}) => {\r\n if(peerId === this.topbar.peerId) {\r\n //this.wasPinnedIndex = 0;\r\n //setTimeout(() => {\r\n if(this.hidden) {\r\n this.pinnedMessageContainer.toggle(this.hidden = false);\r\n }\r\n\r\n this.loadedTop = this.loadedBottom = false;\r\n this.pinnedIndex = -1;\r\n this.pinnedMid = 0;\r\n this.count = 0;\r\n this.mids = [];\r\n this.offsetIndex = 0;\r\n this.pinnedMaxMid = 0;\r\n this.setCorrectIndex(0);\r\n //}, 300);\r\n }\r\n });\r\n\r\n this.listenerSetter.add(rootScope)('peer_pinned_hidden', ({peerId}) => {\r\n if(peerId === this.topbar.peerId) {\r\n this.pinnedMessageContainer.toggle(this.hidden = true);\r\n }\r\n });\r\n\r\n // * 200 - no lags\r\n // * 100 - need test\r\n this.setPinnedMessage = debounce(() => this._setPinnedMessage(), 100, true, true);\r\n\r\n this.isStatic = this.chat.type === 'discussion';\r\n }\r\n\r\n public destroy() {\r\n this.pinnedMessageContainer.divAndCaption.container.remove();\r\n this.pinnedMessageContainer.toggle(true);\r\n this.listenerSetter.removeAll();\r\n this.unsetScrollDownListener(false);\r\n }\r\n\r\n public setCorrectIndex(lastScrollDirection?: number) {\r\n if(this.isStatic) return;\r\n //return;\r\n\r\n if(this.locked || this.hidden/* || this.chat.setPeerPromise || this.chat.bubbles.messagesQueuePromise */) {\r\n return;\r\n }\r\n\r\n if((this.loadedBottom || this.loadedTop) && !this.count) {\r\n return;\r\n }\r\n\r\n //const perf = performance.now();\r\n let el = this.chat.bubbles.getBubbleByPoint('bottom');\r\n //this.chat.log('[PM]: setCorrectIndex: get last element perf:', performance.now() - perf, el);\r\n if(!el) return;\r\n\r\n //return;\r\n\r\n const mid = el.dataset.mid;\r\n if(el && mid !== undefined) {\r\n //this.chat.log('[PM]: setCorrectIndex will test mid:', mid);\r\n this.testMid(+mid, lastScrollDirection);\r\n }\r\n }\r\n\r\n public testMid(mid: number, lastScrollDirection?: number) {\r\n if(this.isStatic) return;\r\n \r\n //if(lastScrollDirection !== undefined) return;\r\n if(this.hidden) return;\r\n\r\n //this.chat.log('[PM]: testMid', mid);\r\n\r\n let currentIndex: number = this.mids.findIndex(_mid => _mid <= mid);\r\n if(currentIndex !== -1 && !this.isNeededMore(currentIndex)) {\r\n currentIndex += this.offsetIndex;\r\n } else if(this.loadedTop && mid < this.mids[this.mids.length - 1]) {\r\n //currentIndex = 0;\r\n currentIndex = this.mids.length - 1 + this.offsetIndex;\r\n } else {\r\n if(!this.getCurrentIndexPromise) {\r\n this.getCurrentIndexPromise = this.getCurrentIndex(mid, lastScrollDirection !== undefined);\r\n }\r\n\r\n return;\r\n }\r\n\r\n //const idx = Math.max(0, this.mids.indexOf(mid));\r\n\r\n /* if(currentIndex === this.count) {\r\n currentIndex = 0;\r\n } */\r\n\r\n //this.chat.log('[PM]: testMid: pinned currentIndex', currentIndex, mid);\r\n\r\n const changed = this.pinnedIndex !== currentIndex;\r\n if(changed) {\r\n if(this.waitForScrollBottom && lastScrollDirection !== undefined) {\r\n if(this.pinnedIndex === 0 || this.pinnedIndex > currentIndex) { // если не скроллил вниз и пытается поставить нижний пиннед - выйти\r\n return;\r\n }\r\n }\r\n\r\n this.pinnedIndex = currentIndex;\r\n this.pinnedMid = this.mids.find(_mid => _mid <= mid) || this.mids[this.mids.length - 1];\r\n this.setPinnedMessage();\r\n }\r\n }\r\n\r\n private isNeededMore(currentIndex: number) {\r\n return (this.count > ChatPinnedMessage.LOAD_COUNT && \r\n (\r\n (!this.loadedBottom && currentIndex <= ChatPinnedMessage.LOAD_OFFSET) || \r\n (!this.loadedTop && (this.count - 1 - currentIndex) <= ChatPinnedMessage.LOAD_OFFSET)\r\n )\r\n );\r\n }\r\n\r\n private async getCurrentIndex(mid: number, correctAfter = true) {\r\n if(this.loading) return;\r\n this.loading = true;\r\n\r\n try {\r\n let gotRest = false;\r\n const promises = [\r\n this.appMessagesManager.getSearch({\r\n peerId: this.topbar.peerId, \r\n inputFilter: {_: 'inputMessagesFilterPinned'}, \r\n maxId: mid, \r\n limit: ChatPinnedMessage.LOAD_COUNT, \r\n backLimit: ChatPinnedMessage.LOAD_COUNT\r\n })\r\n .then(r => {\r\n gotRest = true;\r\n return r;\r\n })\r\n ];\r\n \r\n if(!this.pinnedMaxMid) {\r\n const promise = this.appMessagesManager.getPinnedMessage(this.topbar.peerId).then(p => {\r\n if(!p.maxId) return;\r\n this.pinnedMaxMid = p.maxId;\r\n\r\n if(!gotRest && correctAfter) {\r\n this.mids = [this.pinnedMaxMid];\r\n this.count = p.count;\r\n this.pinnedIndex = 0;\r\n this.pinnedMid = this.mids[0];\r\n this.setPinnedMessage();\r\n //this.pinnedMessageContainer.toggle(false);\r\n }\r\n });\r\n \r\n promises.push(promise as any);\r\n }\r\n \r\n const result = (await Promise.all(promises))[0];\r\n \r\n let backLimited = result.history.findIndex(message => message.mid <= mid);\r\n if(backLimited === -1) {\r\n backLimited = result.history.length;\r\n }/* else {\r\n backLimited -= 1;\r\n } */\r\n \r\n this.offsetIndex = result.offset_id_offset ? result.offset_id_offset - backLimited : 0;\r\n this.mids = result.history.map(message => message.mid).slice();\r\n this.count = result.count;\r\n\r\n if(!this.count) {\r\n this.pinnedMessageContainer.toggle(true);\r\n }\r\n \r\n this.loadedTop = (this.offsetIndex + this.mids.length) === this.count;\r\n this.loadedBottom = !this.offsetIndex;\r\n \r\n this.debug && this.chat.log('[PM]: getCurrentIndex result:', mid, result, backLimited, this.offsetIndex, this.loadedTop, this.loadedBottom);\r\n } catch(err) {\r\n this.chat.log.error('[PM]: getCurrentIndex error', err);\r\n }\r\n \r\n this.loading = false;\r\n\r\n if(this.locked) {\r\n this.testMid(mid);\r\n } else if(correctAfter) {\r\n this.setCorrectIndex(0);\r\n }\r\n\r\n this.getCurrentIndexPromise = null;\r\n //return result.offset_id_offset || 0;\r\n }\r\n\r\n public setScrollDownListener() {\r\n this.waitForScrollBottom = true;\r\n\r\n if(!this.scrollDownListenerSetter) {\r\n this.scrollDownListenerSetter = new ListenerSetter();\r\n handleScrollSideEvent(this.chat.bubbles.scrollable.container, 'bottom', () => {\r\n this.unsetScrollDownListener();\r\n }, this.scrollDownListenerSetter);\r\n }\r\n }\r\n\r\n public unsetScrollDownListener(refreshPosition = true) {\r\n this.waitForScrollBottom = false;\r\n\r\n if(this.scrollDownListenerSetter) {\r\n this.scrollDownListenerSetter.removeAll();\r\n this.scrollDownListenerSetter = null;\r\n }\r\n\r\n if(refreshPosition) {\r\n this.setCorrectIndex(0);\r\n }\r\n }\r\n\r\n public async handleFollowingPinnedMessage() {\r\n this.locked = true;\r\n\r\n this.debug && this.chat.log('[PM]: handleFollowingPinnedMessage');\r\n try {\r\n this.setScrollDownListener();\r\n\r\n const setPeerPromise = this.chat.setPeerPromise;\r\n if(setPeerPromise instanceof Promise) {\r\n await setPeerPromise;\r\n }\r\n \r\n //await this.chat.bubbles.scrollable.scrollLockedPromise;\r\n await getHeavyAnimationPromise();\r\n\r\n if(this.getCurrentIndexPromise) {\r\n await this.getCurrentIndexPromise;\r\n }\r\n\r\n this.debug && this.chat.log('[PM]: handleFollowingPinnedMessage: unlock');\r\n this.locked = false;\r\n\r\n /* // подождём, пока скролл остановится\r\n setTimeout(() => {\r\n this.chat.log('[PM]: handleFollowingPinnedMessage: unlock');\r\n this.locked = false;\r\n }, 50); */\r\n } catch(err) {\r\n this.chat.log.error('[PM]: handleFollowingPinnedMessage error:', err);\r\n\r\n this.locked = false;\r\n this.waitForScrollBottom = false;\r\n this.setCorrectIndex(0);\r\n }\r\n }\r\n\r\n public async followPinnedMessage(mid: number) {\r\n const message = this.chat.getMessage(mid);\r\n if(message && !message.deleted) {\r\n this.chat.setMessageId(mid);\r\n (this.chat.setPeerPromise || Promise.resolve()).then(() => { // * debounce fast clicker\r\n this.handleFollowingPinnedMessage();\r\n this.testMid(this.pinnedIndex >= (this.count - 1) ? this.pinnedMaxMid : mid - 1);\r\n });\r\n }\r\n }\r\n\r\n public async _setPinnedMessage() {\r\n /////this.log('setting pinned message', message);\r\n //return;\r\n /* const promise: Promise = this.chat.setPeerPromise || this.chat.bubbles.messagesQueuePromise || Promise.resolve();\r\n Promise.all([\r\n promise\r\n ]).then(() => { */\r\n //const mids = results[0];\r\n const count = this.count;\r\n if(count) {\r\n const pinnedIndex = this.pinnedIndex;\r\n const message = this.chat.getMessage(this.pinnedMid);\r\n\r\n //this.animatedCounter.prepareNumber(count);\r\n\r\n //setTimeout(() => {\r\n const isLast = pinnedIndex === 0;\r\n this.animatedCounter.container.classList.toggle('is-last', isLast);\r\n //SetTransition(this.animatedCounter.container, 'is-last', isLast, AnimatedSuper.DURATION);\r\n if(!isLast) {\r\n this.animatedCounter.setCount(count - pinnedIndex);\r\n }\r\n //}, 100);\r\n\r\n //this.pinnedMessageContainer.fill(undefined, message.message, message);\r\n this.pinnedMessageContainer.toggle(false);\r\n\r\n const fromTop = pinnedIndex > this.wasPinnedIndex;\r\n\r\n this.debug && this.chat.log('[PM]: setPinnedMessage: fromTop', fromTop, pinnedIndex, this.wasPinnedIndex);\r\n\r\n const writeTo = this.animatedSubtitle.getRow(pinnedIndex);\r\n const writeMediaTo = this.animatedMedia.getRow(pinnedIndex);\r\n writeMediaTo.classList.add('pinned-message-media');\r\n //writeMediaTo.innerHTML = writeMediaTo.style.cssText = writeMediaTo.dataset.docId = '';\r\n const loadPromises: Promise[] = [];\r\n const isMediaSet = wrapReplyDivAndCaption({\r\n title: undefined,\r\n titleEl: null,\r\n subtitle: message.message,\r\n subtitleEl: writeTo,\r\n message,\r\n mediaEl: writeMediaTo,\r\n loadPromises\r\n });\r\n\r\n await Promise.all(loadPromises);\r\n\r\n this.pinnedMessageContainer.divAndCaption.container.classList.toggle('is-media', isMediaSet);\r\n\r\n //if(this.wasPinnedIndex !== this.pinnedIndex) {\r\n this.animatedSubtitle.animate(pinnedIndex, this.wasPinnedIndex);\r\n if(isMediaSet) {\r\n this.animatedMedia.animate(pinnedIndex, this.wasPinnedMediaIndex); // * wasPinnedMediaIndex из-за того, что блок меняется с другим алгоритмом\r\n this.wasPinnedMediaIndex = pinnedIndex;\r\n } else {\r\n this.animatedMedia.clearRows();\r\n }\r\n //}\r\n\r\n this.pinnedMessageBorder.render(count, count - pinnedIndex - 1);\r\n this.wasPinnedIndex = pinnedIndex;\r\n this.pinnedMessageContainer.divAndCaption.container.dataset.mid = '' + message.mid;\r\n } else {\r\n this.pinnedMessageContainer.toggle(true);\r\n this.wasPinnedIndex = 0;\r\n }\r\n\r\n this.pinnedMessageContainer.divAndCaption.container.classList.toggle('is-many', this.count > 1);\r\n //});\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type ListenerSetter from \"../listenerSetter\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\n\r\nexport default function handleScrollSideEvent(elem: HTMLElement, side: 'top' | 'bottom', callback: () => void, listenerSetter: ListenerSetter) {\r\n if(IS_TOUCH_SUPPORTED) {\r\n let lastY: number;\r\n const options = {passive: true};\r\n listenerSetter.add(elem)('touchstart', (e) => {\r\n if(e.touches.length > 1) {\r\n onTouchEnd();\r\n return;\r\n }\r\n\r\n lastY = e.touches[0].clientY;\r\n\r\n listenerSetter.add(elem)('touchmove', onTouchMove, options);\r\n listenerSetter.add(elem)('touchend', onTouchEnd, options);\r\n }, options);\r\n\r\n const onTouchMove = (e: TouchEvent) => {\r\n const clientY = e.touches[0].clientY;\r\n\r\n const isDown = clientY < lastY;\r\n if(side === 'bottom' && isDown) callback();\r\n else if(side === 'top' && !isDown) callback();\r\n lastY = clientY;\r\n //alert('isDown: ' + !!isDown);\r\n };\r\n \r\n const onTouchEnd = () => {\r\n listenerSetter.removeManual(elem, 'touchmove', onTouchMove, options);\r\n listenerSetter.removeManual(elem, 'touchend', onTouchEnd, options);\r\n };\r\n } else {\r\n listenerSetter.add(elem)('wheel', (e) => {\r\n const isDown = e.deltaY > 0;\r\n //this.log('wheel', e, isDown);\r\n if(side === 'bottom' && isDown) callback();\r\n else if(side === 'top' && !isDown) callback();\r\n }, {passive: true});\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { AppNotificationsManager } from \"../../lib/appManagers/appNotificationsManager\";\nimport type { AppChatsManager, Channel } from \"../../lib/appManagers/appChatsManager\";\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\nimport type { AppPeersManager } from \"../../lib/appManagers/appPeersManager\";\nimport type { AppSidebarRight } from \"../sidebarRight\";\nimport type { AppProfileManager } from \"../../lib/appManagers/appProfileManager\";\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\nimport type Chat from \"./chat\";\nimport { RIGHT_COLUMN_ACTIVE_CLASSNAME } from \"../sidebarRight\";\nimport mediaSizes, { ScreenSize } from \"../../helpers/mediaSizes\";\nimport { IS_SAFARI } from \"../../environment/userAgent\";\nimport rootScope from \"../../lib/rootScope\";\nimport AvatarElement from \"../avatar\";\nimport Button from \"../button\";\nimport ButtonIcon from \"../buttonIcon\";\nimport ButtonMenuToggle from \"../buttonMenuToggle\";\nimport ChatAudio from \"./audio\";\nimport ChatPinnedMessage from \"./pinnedMessage\";\nimport { ButtonMenuItemOptions } from \"../buttonMenu\";\nimport ListenerSetter from \"../../helpers/listenerSetter\";\nimport appStateManager from \"../../lib/appManagers/appStateManager\";\nimport PopupDeleteDialog from \"../popups/deleteDialog\";\nimport appNavigationController from \"../appNavigationController\";\nimport { LEFT_COLUMN_ACTIVE_CLASSNAME } from \"../sidebarLeft\";\nimport PeerTitle from \"../peerTitle\";\nimport { i18n } from \"../../lib/langPack\";\nimport findUpClassName from \"../../helpers/dom/findUpClassName\";\nimport blurActiveElement from \"../../helpers/dom/blurActiveElement\";\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport findUpTag from \"../../helpers/dom/findUpTag\";\nimport { toast, toastNew } from \"../toast\";\nimport replaceContent from \"../../helpers/dom/replaceContent\";\nimport { ChatFull } from \"../../layer\";\nimport PopupPickUser from \"../popups/pickUser\";\nimport PopupPeer from \"../popups/peer\";\nimport generateVerifiedIcon from \"../generateVerifiedIcon\";\nimport { fastRaf } from \"../../helpers/schedulers\";\nimport AppEditContactTab from \"../sidebarRight/tabs/editContact\";\nimport appMediaPlaybackController from \"../appMediaPlaybackController\";\n\nexport default class ChatTopbar {\n public container: HTMLDivElement;\n private btnBack: HTMLButtonElement;\n private chatInfo: HTMLDivElement;\n private avatarElement: AvatarElement;\n private title: HTMLDivElement;\n private subtitle: HTMLDivElement;\n private chatUtils: HTMLDivElement;\n private btnJoin: HTMLButtonElement;\n private btnPinned: HTMLButtonElement;\n private btnMute: HTMLButtonElement;\n private btnSearch: HTMLButtonElement;\n private btnMore: HTMLButtonElement;\n \n private chatAudio: ChatAudio;\n public pinnedMessage: ChatPinnedMessage;\n\n private setUtilsRAF: number;\n public peerId: number;\n private wasPeerId: number;\n private setPeerStatusInterval: number;\n\n public listenerSetter: ListenerSetter;\n\n private menuButtons: (ButtonMenuItemOptions & {verify: () => boolean})[] = [];\n\n constructor(private chat: Chat, \n private appSidebarRight: AppSidebarRight, \n private appMessagesManager: AppMessagesManager, \n private appPeersManager: AppPeersManager, \n private appChatsManager: AppChatsManager, \n private appNotificationsManager: AppNotificationsManager,\n private appProfileManager: AppProfileManager,\n private appUsersManager: AppUsersManager\n ) {\n this.listenerSetter = new ListenerSetter();\n }\n\n public construct() {\n //this.chat.log.error('Topbar construction');\n\n this.container = document.createElement('div');\n this.container.classList.add('sidebar-header', 'topbar');\n this.container.dataset.floating = '0';\n\n this.btnBack = ButtonIcon('left sidebar-close-button', {noRipple: true});\n\n // * chat info section\n this.chatInfo = document.createElement('div');\n this.chatInfo.classList.add('chat-info');\n\n const person = document.createElement('div');\n person.classList.add('person');\n\n const content = document.createElement('div');\n content.classList.add('content');\n\n const top = document.createElement('div');\n top.classList.add('top');\n\n this.title = document.createElement('div');\n this.title.classList.add('user-title');\n\n top.append(this.title);\n\n const bottom = document.createElement('div');\n bottom.classList.add('bottom');\n\n if(this.subtitle) {\n bottom.append(this.subtitle);\n }\n\n content.append(top, bottom);\n if(this.avatarElement) {\n person.append(this.avatarElement);\n }\n\n person.append(content);\n this.chatInfo.append(person);\n\n // * chat utils section\n this.chatUtils = document.createElement('div');\n this.chatUtils.classList.add('chat-utils');\n\n this.chatAudio = new ChatAudio(this, this.chat, this.appMessagesManager);\n\n if(this.menuButtons.length) {\n this.btnMore = ButtonMenuToggle({listenerSetter: this.listenerSetter}, 'bottom-left', this.menuButtons, (e) => {\n cancelEvent(e);\n this.menuButtons.forEach(button => {\n button.element.classList.toggle('hide', !button.verify());\n });\n\n // delete button\n this.menuButtons[this.menuButtons.length - 1].element.lastChild.replaceWith(i18n(this.appPeersManager.getDeleteButtonText(this.peerId)));\n });\n }\n\n this.chatUtils.append(...[\n // this.chatAudio ? this.chatAudio.divAndCaption.container : null, \n this.pinnedMessage ? this.pinnedMessage.pinnedMessageContainer.divAndCaption.container : null, \n this.btnJoin, \n this.btnPinned, \n this.btnMute, \n this.btnSearch, \n this.btnMore\n ].filter(Boolean));\n\n this.container.append(this.btnBack, this.chatInfo, this.chatUtils);\n\n if(this.chatAudio) {\n this.container.append(this.chatAudio.divAndCaption.container, this.chatUtils);\n }\n\n // * construction end\n\n // * fix topbar overflow section\n\n this.listenerSetter.add(window)('resize', this.onResize);\n this.listenerSetter.add(mediaSizes)('changeScreen', this.onChangeScreen);\n\n attachClickEvent(this.container, (e) => {\n const container: HTMLElement = findUpClassName(e.target, 'pinned-container');\n blurActiveElement();\n if(container) {\n cancelEvent(e);\n\n if(findUpClassName(e.target, 'progress-line')) {\n return;\n }\n \n const mid = +container.dataset.mid;\n const peerId = +container.dataset.peerId;\n if(container.classList.contains('pinned-message')) {\n //if(!this.pinnedMessage.locked) {\n this.pinnedMessage.followPinnedMessage(mid);\n //}\n } else {\n const searchContext = appMediaPlaybackController.getSearchContext();\n this.chat.appImManager.setInnerPeer(\n peerId, \n mid, \n searchContext.isScheduled ? 'scheduled' : (searchContext.threadId ? 'discussion' : undefined), \n searchContext.threadId\n );\n }\n } else {\n if(mediaSizes.activeScreen === ScreenSize.medium && document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME)) {\n onBtnBackClick();\n } else if(findUpTag(e.target, 'AVATAR-ELEMENT')) {\n this.appSidebarRight.toggleSidebar(!document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME));\n } else {\n this.appSidebarRight.toggleSidebar(true);\n }\n }\n }, {listenerSetter: this.listenerSetter});\n\n const onBtnBackClick = (e?: Event) => {\n if(e) {\n cancelEvent(e);\n }\n\n //const item = appNavigationController.findItemByType('chat');\n // * return manually to chat by arrow, since can't get back to\n if(mediaSizes.activeScreen === ScreenSize.medium && document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME)) {\n this.chat.appImManager.setPeer(this.peerId);\n } else {\n const isFirstChat = this.chat.appImManager.chats.indexOf(this.chat) === 0;\n appNavigationController.back(isFirstChat ? 'im' : 'chat');\n return;\n\n if(mediaSizes.activeScreen === ScreenSize.medium && !appNavigationController.findItemByType('chat')) {\n this.chat.appImManager.setPeer(0);\n blurActiveElement();\n } else {\n appNavigationController.back('chat');\n }\n }\n };\n\n attachClickEvent(this.btnBack, onBtnBackClick, {listenerSetter: this.listenerSetter});\n }\n\n public constructUtils() {\n this.menuButtons = [{\n icon: 'search',\n text: 'Search',\n onClick: () => {\n this.chat.initSearch()\n },\n verify: () => mediaSizes.isMobile\n }, /* {\n icon: 'pinlist',\n text: 'Pinned Messages',\n onClick: () => this.openPinned(false),\n verify: () => mediaSizes.isMobile\n }, */{\n icon: 'mute',\n text: 'ChatList.Context.Mute',\n onClick: () => {\n this.appMessagesManager.mutePeer(this.peerId);\n },\n verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && !this.appNotificationsManager.isPeerLocalMuted(this.peerId, false)\n }, {\n icon: 'unmute',\n text: 'ChatList.Context.Unmute',\n onClick: () => {\n this.appMessagesManager.mutePeer(this.peerId);\n },\n verify: () => this.chat.type === 'chat' && rootScope.myId !== this.peerId && this.appNotificationsManager.isPeerLocalMuted(this.peerId, false)\n }, {\n icon: 'comments',\n text: 'ViewDiscussion',\n onClick: () => {\n this.appProfileManager.getChannelFull(-this.peerId).then(channelFull => {\n if(channelFull.linked_chat_id) {\n this.chat.appImManager.setInnerPeer(-channelFull.linked_chat_id);\n }\n });\n },\n verify: () => {\n const chatFull = this.appProfileManager.chatsFull[-this.peerId];\n return this.chat.type === 'chat' && this.appPeersManager.isBroadcast(this.peerId) && !!(chatFull as ChatFull.channelFull)?.linked_chat_id;\n }\n }, {\n icon: 'select',\n text: 'Chat.Menu.SelectMessages',\n onClick: () => {\n const selection = this.chat.selection;\n selection.toggleSelection(true, true);\n appStateManager.getState().then(state => {\n if(state.chatContextMenuHintWasShown) {\n return;\n }\n\n const original = selection.toggleByElement.bind(selection);\n selection.toggleByElement = (bubble) => {\n appStateManager.pushToState('chatContextMenuHintWasShown', true);\n toast(i18n('Chat.Menu.Hint'));\n\n selection.toggleByElement = original;\n selection.toggleByElement(bubble);\n };\n });\n },\n verify: () => !this.chat.selection.isSelecting && !!Object.keys(this.chat.bubbles.bubbles).length\n }, {\n icon: 'select',\n text: 'Chat.Menu.ClearSelection',\n onClick: () => {\n this.chat.selection.cancelSelection();\n },\n verify: () => this.chat.selection.isSelecting\n }, {\n icon: 'adduser',\n text: 'AddContact',\n onClick: () => {\n if(!this.appSidebarRight.isTabExists(AppEditContactTab)) {\n const tab = new AppEditContactTab(this.appSidebarRight);\n tab.peerId = this.peerId;\n tab.open();\n\n this.appSidebarRight.toggleSidebar(true);\n }\n },\n verify: () => this.peerId > 0 && !this.appUsersManager.isContact(this.peerId)\n }, {\n icon: 'forward',\n text: 'ShareContact',\n onClick: () => {\n const contactPeerId = this.peerId;\n new PopupPickUser({\n peerTypes: ['dialogs', 'contacts'],\n onSelect: (peerId) => {\n return new Promise((resolve, reject) => {\n new PopupPeer('', {\n titleLangKey: 'SendMessageTitle',\n descriptionLangKey: 'SendContactToGroupText',\n descriptionLangArgs: [new PeerTitle({peerId, dialog: true}).element],\n buttons: [{\n langKey: 'Send',\n callback: () => {\n resolve();\n\n this.appMessagesManager.sendOther(peerId, this.appUsersManager.getContactMediaInput(contactPeerId));\n this.chat.appImManager.setInnerPeer(peerId);\n }\n }, {\n langKey: 'Cancel',\n callback: () => {\n reject();\n },\n isCancel: true,\n }],\n peerId,\n overlayClosable: true\n }).show();\n });\n },\n placeholder: 'ShareModal.Search.Placeholder',\n chatRightsAction: 'send_messages',\n selfPresence: 'ChatYourSelf'\n });\n },\n verify: () => rootScope.myId !== this.peerId && this.peerId > 0 && this.appUsersManager.isContact(this.peerId)\n }, {\n icon: 'lock',\n text: 'BlockUser',\n onClick: () => {\n new PopupPeer('', {\n peerId: this.peerId,\n titleLangKey: 'BlockUser',\n descriptionLangKey: 'AreYouSureBlockContact2',\n descriptionLangArgs: [new PeerTitle({peerId: this.peerId}).element],\n buttons: [{\n langKey: 'BlockUser',\n isDanger: true,\n callback: () => {\n this.appUsersManager.toggleBlock(this.peerId, true).then(value => {\n if(value) {\n toastNew({langPackKey: 'UserBlocked'});\n }\n });\n }\n }]\n }).show();\n },\n verify: () => {\n const userFull = this.appProfileManager.usersFull[this.peerId];\n return this.peerId > 0 && this.peerId !== rootScope.myId && userFull && !userFull.pFlags?.blocked;\n }\n }, {\n icon: 'lockoff',\n text: 'Unblock',\n onClick: () => {\n this.appUsersManager.toggleBlock(this.peerId, false).then(value => {\n if(value) {\n toastNew({langPackKey: 'UserUnblocked'});\n }\n });\n },\n verify: () => {\n const userFull = this.appProfileManager.usersFull[this.peerId];\n return this.peerId > 0 && !!userFull?.pFlags?.blocked;\n }\n }, {\n icon: 'delete danger',\n text: 'Delete',\n onClick: () => {\n new PopupDeleteDialog(this.peerId/* , 'leave' */);\n },\n verify: () => this.chat.type === 'chat' && !!this.appMessagesManager.getDialogOnly(this.peerId)\n }];\n\n this.btnSearch = ButtonIcon('search');\n attachClickEvent(this.btnSearch, (e) => {\n cancelEvent(e);\n this.chat.initSearch();\n }, {listenerSetter: this.listenerSetter});\n }\n\n public constructPeerHelpers() {\n this.avatarElement = new AvatarElement();\n this.avatarElement.setAttribute('dialog', '1');\n //this.avatarElement.setAttribute('clickable', '');\n this.avatarElement.classList.add('avatar-42', 'person-avatar');\n\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add('info');\n\n this.pinnedMessage = new ChatPinnedMessage(this, this.chat, this.appMessagesManager, this.appPeersManager);\n\n this.btnJoin = Button('btn-primary btn-color-primary chat-join hide');\n this.btnPinned = ButtonIcon('pinlist');\n this.btnMute = ButtonIcon('mute');\n\n attachClickEvent(this.btnPinned, (e) => {\n cancelEvent(e);\n blurActiveElement();\n this.openPinned(true);\n }, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(this.btnMute, (e) => {\n cancelEvent(e);\n blurActiveElement();\n this.appMessagesManager.mutePeer(this.peerId);\n }, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(this.btnJoin, (e) => {\n cancelEvent(e);\n\n blurActiveElement();\n const middleware = this.chat.bubbles.getMiddleware();\n this.btnJoin.setAttribute('disabled', 'true');\n\n const chatId = -this.peerId;\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.appChatsManager.joinChannel(chatId);\n } else {\n promise = this.appChatsManager.addChatUser(chatId, rootScope.myId);\n }\n\n promise.finally(() => {\n if(!middleware()) {\n return;\n }\n\n this.btnJoin.removeAttribute('disabled');\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\n if(this.peerId === -chatId) {\n const chat = this.appChatsManager.getChat(chatId) as Channel/* | Chat */;\n \n this.btnJoin.classList.toggle('hide', !(chat as Channel)?.pFlags?.left);\n this.setUtilsWidth();\n }\n });\n\n this.listenerSetter.add(rootScope)('dialog_notify_settings', (dialog) => {\n if(dialog.peerId === this.peerId) {\n this.setMutedState();\n }\n });\n\n this.listenerSetter.add(rootScope)('peer_typings', ({peerId}) => {\n if(this.peerId === peerId) {\n this.setPeerStatus();\n }\n });\n\n this.listenerSetter.add(rootScope)('user_update', (userId) => {\n if(this.peerId === userId) {\n this.setPeerStatus();\n }\n });\n\n if(this.pinnedMessage) {\n this.chat.addEventListener('setPeer', (mid, isTopMessage) => {\n const middleware = this.chat.bubbles.getMiddleware();\n appStateManager.getState().then((state) => {\n if(!middleware()) return;\n \n this.pinnedMessage.hidden = !!state.hiddenPinnedMessages[this.chat.peerId];\n \n if(isTopMessage) {\n this.pinnedMessage.unsetScrollDownListener();\n this.pinnedMessage.testMid(mid, 0); // * because slider will not let get bubble by document.elementFromPoint\n } else if(!this.pinnedMessage.locked) {\n this.pinnedMessage.handleFollowingPinnedMessage();\n this.pinnedMessage.testMid(mid);\n }\n });\n });\n }\n\n this.setPeerStatusInterval = window.setInterval(this.setPeerStatus, 60e3);\n\n return this;\n }\n\n public constructPinnedHelpers() {\n this.listenerSetter.add(rootScope)('peer_pinned_messages', (e) => {\n const {peerId, mids, pinned} = e;\n\n if(peerId !== this.peerId) return;\n\n if(mids) {\n this.setTitle();\n }\n });\n }\n \n public constructDiscussionHelpers() {\n this.pinnedMessage = new ChatPinnedMessage(this, this.chat, this.appMessagesManager, this.appPeersManager);\n }\n\n public openPinned(byCurrent: boolean) {\n this.chat.appImManager.setInnerPeer(this.peerId, byCurrent ? +this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.dataset.mid : 0, 'pinned');\n }\n\n private onResize = () => {\n this.setUtilsWidth(true);\n this.setFloating();\n };\n\n private onChangeScreen = (from: ScreenSize, to: ScreenSize) => {\n this.container.classList.toggle('is-pinned-floating', mediaSizes.isMobile);\n // this.chatAudio && this.chatAudio.divAndCaption.container.classList.toggle('is-floating', to === ScreenSize.mobile);\n this.pinnedMessage && this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.classList.toggle('is-floating', to === ScreenSize.mobile);\n this.onResize();\n };\n\n public destroy() {\n //this.chat.log.error('Topbar destroying');\n\n this.listenerSetter.removeAll();\n window.clearInterval(this.setPeerStatusInterval);\n \n if(this.pinnedMessage) {\n this.pinnedMessage.destroy(); // * возможно это можно не делать\n }\n\n delete this.chatAudio;\n delete this.pinnedMessage;\n }\n\n public setPeer(peerId: number) {\n this.wasPeerId = this.peerId;\n this.peerId = peerId;\n\n this.container.style.display = peerId ? '' : 'none';\n }\n\n public finishPeerChange(isTarget: boolean, isJump: boolean, lastMsgId: number) {\n const peerId = this.peerId;\n\n if(this.avatarElement) {\n this.avatarElement.setAttribute('peer', '' + peerId);\n this.avatarElement.update();\n }\n\n const isBroadcast = this.appPeersManager.isBroadcast(peerId);\n\n this.btnMute && this.btnMute.classList.toggle('hide', !isBroadcast);\n if(this.btnJoin) {\n replaceContent(this.btnJoin, i18n(this.appChatsManager.isChannel(-peerId) ? 'Chat.Subscribe' : 'ChannelJoin'));\n this.btnJoin.classList.toggle('hide', !this.appChatsManager.getChat(-peerId)?.pFlags?.left);\n }\n this.setUtilsWidth();\n\n const middleware = this.chat.bubbles.getMiddleware();\n if(this.pinnedMessage) { // * replace with new one\n if(this.chat.type === 'chat') {\n if(this.wasPeerId !== undefined) { // * change\n const newPinnedMessage = new ChatPinnedMessage(this, this.chat, this.appMessagesManager, this.appPeersManager);\n this.pinnedMessage.pinnedMessageContainer.divAndCaption.container.replaceWith(newPinnedMessage.pinnedMessageContainer.divAndCaption.container);\n this.pinnedMessage.destroy();\n //this.pinnedMessage.pinnedMessageContainer.toggle(true);\n this.pinnedMessage = newPinnedMessage;\n }\n \n appStateManager.getState().then((state) => {\n if(!middleware()) return;\n \n this.pinnedMessage.hidden = !!state.hiddenPinnedMessages[peerId];\n \n if(!isTarget) {\n this.pinnedMessage.setCorrectIndex(0);\n }\n });\n } else if(this.chat.type === 'discussion') {\n this.pinnedMessage.pinnedMid = this.chat.threadId;\n this.pinnedMessage.count = 1;\n this.pinnedMessage.pinnedIndex = 0;\n this.pinnedMessage._setPinnedMessage();\n }\n }\n\n fastRaf(() => {\n this.setTitle();\n this.setPeerStatus(true);\n this.setMutedState();\n });\n }\n\n public setTitle(count?: number) {\n let titleEl: HTMLElement;\n if(this.chat.type === 'pinned') {\n if(count === undefined) titleEl = i18n('Loading');\n else titleEl = i18n('PinnedMessagesCount', [count]);\n\n if(count === undefined) {\n this.appMessagesManager.getSearchCounters(this.peerId, [{_: 'inputMessagesFilterPinned'}], false).then(result => {\n const count = result[0].count;\n this.setTitle(count);\n\n // ! костыль х2, это нужно делать в другом месте\n if(!count) {\n this.chat.appImManager.setPeer(0); // * close tab\n\n // ! костыль, это скроет закреплённые сообщения сразу, вместо того, чтобы ждать пока анимация перехода закончится\n const originalChat = this.chat.appImManager.chat;\n if(originalChat.topbar.pinnedMessage) {\n originalChat.topbar.pinnedMessage.pinnedMessageContainer.toggle(true);\n }\n }\n });\n }\n } else if(this.chat.type === 'scheduled') {\n if(this.peerId === rootScope.myId) {\n //title = [count > 1 ? count : false, 'Reminders'].filter(Boolean).join(' ');\n titleEl = i18n('Reminders');\n } else {\n titleEl = i18n('ScheduledMessages');\n //title = [count > 1 ? count : false, 'Scheduled Messages'].filter(Boolean).join(' ');\n }\n \n if(count === undefined) {\n this.appMessagesManager.getScheduledMessages(this.peerId).then(mids => {\n this.setTitle(mids.length);\n });\n }\n } else if(this.chat.type === 'discussion') {\n if(count === undefined) titleEl = i18n('Loading');\n else titleEl = i18n('Chat.Title.Comments', [count]);\n\n if(count === undefined) {\n Promise.all([\n this.appMessagesManager.getHistory(this.peerId, 0, 1, 0, this.chat.threadId),\n Promise.resolve()\n ]).then(() => {\n const count = this.appMessagesManager.getHistoryStorage(this.peerId, this.chat.threadId).count;\n if(count === null) {\n setTimeout(() => {\n this.setTitle();\n }, 30);\n } else {\n this.setTitle(count);\n }\n });\n }\n } else if(this.chat.type === 'chat') {\n titleEl = new PeerTitle({\n peerId: this.peerId,\n dialog: true,\n }).element;\n }\n \n replaceContent(this.title, titleEl);\n\n if(this.chat.type === 'chat') {\n const peer = this.appPeersManager.getPeer(this.peerId);\n if(peer?.pFlags?.verified) {\n this.title.append(generateVerifiedIcon());\n }\n }\n }\n\n public setMutedState() {\n if(!this.btnMute) return;\n\n const peerId = this.peerId;\n let muted = this.appNotificationsManager.isPeerLocalMuted(peerId, false);\n if(this.appPeersManager.isBroadcast(peerId)) { // not human\n this.btnMute.classList.remove('tgico-mute', 'tgico-unmute');\n this.btnMute.classList.add(muted ? 'tgico-unmute' : 'tgico-mute');\n this.btnMute.style.display = '';\n } else {\n this.btnMute.style.display = 'none';\n }\n }\n\n // ! У МЕНЯ ПРОСТО СГОРЕЛО, САФАРИ КОНЧЕННЫЙ БРАУЗЕР - ЕСЛИ НЕ СКРЫВАТЬ БЛОК, ТО ПРИ ПЕРЕВОРОТЕ ЭКРАНА НА АЙФОНЕ БЛОК БУДЕТ НЕПРАВИЛЬНО ШИРИНЫ, ДАЖЕ БЕЗ ЭТОЙ ФУНКЦИИ!\n public setUtilsWidth = (resize = false) => {\n //return;\n if(this.setUtilsRAF) window.cancelAnimationFrame(this.setUtilsRAF);\n\n if(IS_SAFARI && resize) {\n this.chatUtils.classList.add('hide');\n }\n\n //mutationObserver.disconnect();\n this.setUtilsRAF = window.requestAnimationFrame(() => {\n \n //mutationRAF = window.requestAnimationFrame(() => {\n \n //setTimeout(() => {\n if(IS_SAFARI && resize) {\n this.chatUtils.classList.remove('hide');\n }\n /* this.chatInfo.style.removeProperty('--utils-width');\n void this.chatInfo.offsetLeft; // reflow */\n const width = /* chatUtils.scrollWidth */this.chatUtils.getBoundingClientRect().width;\n this.chat.log('utils width:', width);\n this.chatInfo.style.setProperty('--utils-width', width + 'px');\n //this.chatInfo.classList.toggle('have-utils-width', !!width);\n //}, 0);\n \n this.setUtilsRAF = 0;\n\n //mutationObserver.observe(chatUtils, observeOptions);\n //});\n });\n };\n\n public setFloating = () => {\n const containers = [this.chatAudio, this.pinnedMessage && this.pinnedMessage.pinnedMessageContainer].filter(Boolean);\n const count = containers.reduce((acc, container) => {\n const isFloating = container.divAndCaption.container.classList.contains('is-floating');\n this.container.classList.toggle(`is-pinned-${container.className}-floating`, isFloating);\n return acc + +isFloating;\n }, 0);\n this.container.dataset.floating = '' + count;\n };\n\n public setPeerStatus = (needClear = false) => {\n if(!this.subtitle) return;\n\n const peerId = this.peerId;\n this.chat.appImManager.setPeerStatus(this.peerId, this.subtitle, needClear, false, () => peerId === this.peerId);\n };\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appSidebarRight from \"..\";\r\nimport { attachClickEvent } from \"../../../helpers/dom/clickEvent\";\r\nimport AppSearch, { SearchGroup } from \"../../appSearch\";\r\nimport ButtonIcon from \"../../buttonIcon\";\r\nimport InputSearch from \"../../inputSearch\";\r\nimport PopupDatePicker from \"../../popups/datePicker\";\r\nimport { SliderSuperTab } from \"../../slider\";\r\n\r\nexport default class AppPrivateSearchTab extends SliderSuperTab {\r\n private inputSearch: InputSearch;\r\n private appSearch: AppSearch;\r\n private btnPickDate: HTMLElement;\r\n\r\n private peerId = 0;\r\n private threadId = 0;\r\n private query = '';\r\n private onDatePick: (timestamp: number) => void;\r\n\r\n onOpenAfterTimeout() {\r\n this.appSearch.beginSearch(this.peerId, this.threadId, this.query);\r\n }\r\n\r\n protected init() {\r\n this.container.id = 'search-private-container';\r\n this.container.classList.add('chatlist-container');\r\n this.inputSearch = new InputSearch('Search');\r\n this.title.replaceWith(this.inputSearch.container);\r\n\r\n this.btnPickDate = ButtonIcon('calendar sidebar-header-right');\r\n this.header.append(this.btnPickDate);\r\n\r\n const c = document.createElement('div');\r\n c.classList.add('chatlist-container');\r\n this.scrollable.container.replaceWith(c);\r\n this.appSearch = new AppSearch(c, this.inputSearch, {\r\n messages: new SearchGroup('Chat.Search.PrivateSearch', 'messages')\r\n });\r\n }\r\n\r\n open(peerId: number, threadId?: number, onDatePick?: AppPrivateSearchTab['onDatePick'], query?: string) {\r\n const ret = super.open();\r\n\r\n if(!this.peerId) {\r\n this.query = query;\r\n this.peerId = peerId;\r\n this.threadId = threadId;\r\n this.onDatePick = onDatePick;\r\n \r\n this.btnPickDate.classList.toggle('hide', !this.onDatePick);\r\n if(this.onDatePick) {\r\n attachClickEvent(this.btnPickDate, () => {\r\n new PopupDatePicker(new Date(), this.onDatePick).show();\r\n });\r\n }\r\n\r\n query && this.appSearch.searchInput.inputField.setValueSilently(query);\r\n \r\n appSidebarRight.toggleSidebar(true);\r\n } else {\r\n this.appSearch.beginSearch(this.peerId, this.threadId, query);\r\n }\r\n\r\n return ret;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type ChatTopbar from \"./topbar\";\r\nimport AppSearch, { SearchGroup } from \"../appSearch\";\r\nimport PopupDatePicker from \"../popups/datePicker\";\r\nimport { ripple } from \"../ripple\";\r\nimport InputSearch from \"../inputSearch\";\r\nimport type Chat from \"./chat\";\r\nimport findUpTag from \"../../helpers/dom/findUpTag\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport whichChild from \"../../helpers/dom/whichChild\";\r\nimport replaceContent from \"../../helpers/dom/replaceContent\";\r\nimport { i18n } from \"../../lib/langPack\";\r\n\r\nexport default class ChatSearch {\r\n private element: HTMLElement;\r\n private backBtn: HTMLElement;\r\n private inputSearch: InputSearch;\r\n\r\n private results: HTMLElement;\r\n\r\n private footer: HTMLElement;\r\n private dateBtn: HTMLElement;\r\n private foundCountEl: HTMLElement;\r\n private controls: HTMLElement;\r\n private downBtn: HTMLElement;\r\n private upBtn: HTMLElement;\r\n\r\n private appSearch: AppSearch;\r\n private searchGroup: SearchGroup;\r\n\r\n private foundCount = 0;\r\n private selectedIndex = 0;\r\n private setPeerPromise: Promise;\r\n\r\n constructor(private topbar: ChatTopbar, private chat: Chat, private query?: string) {\r\n this.element = document.createElement('div');\r\n this.element.classList.add('sidebar-header', 'chat-search', 'chatlist-container');\r\n\r\n this.backBtn = document.createElement('button');\r\n this.backBtn.classList.add('btn-icon', 'tgico-left', 'sidebar-close-button');\r\n ripple(this.backBtn);\r\n \r\n this.backBtn.addEventListener('click', () => {\r\n this.topbar.container.classList.remove('hide-pinned');\r\n this.element.remove();\r\n this.inputSearch.remove();\r\n this.results.remove();\r\n this.footer.remove();\r\n this.footer.removeEventListener('click', this.onFooterClick);\r\n this.dateBtn.removeEventListener('click', this.onDateClick);\r\n this.upBtn.removeEventListener('click', this.onUpClick);\r\n this.downBtn.removeEventListener('click', this.onDownClick);\r\n this.searchGroup.list.removeEventListener('click', this.onResultsClick);\r\n this.chat.bubbles.bubblesContainer.classList.remove('search-results-active');\r\n }, {once: true});\r\n\r\n this.inputSearch = new InputSearch('Search');\r\n \r\n // Results\r\n this.results = document.createElement('div');\r\n this.results.classList.add('chat-search-results', 'chatlist-container');\r\n\r\n this.searchGroup = new SearchGroup(false, 'messages', undefined, '', false);\r\n this.searchGroup.list.addEventListener('click', this.onResultsClick);\r\n\r\n this.appSearch = new AppSearch(this.results, this.inputSearch, {\r\n messages: this.searchGroup\r\n }, (count) => {\r\n this.foundCount = count;\r\n\r\n if(!this.foundCount) {\r\n this.foundCountEl.replaceWith(this.inputSearch.value ? i18n('NoResult') : '');\r\n this.results.classList.remove('active');\r\n this.chat.bubbles.bubblesContainer.classList.remove('search-results-active');\r\n this.upBtn.setAttribute('disabled', 'true');\r\n this.downBtn.setAttribute('disabled', 'true');\r\n } else {\r\n this.selectResult(this.searchGroup.list.children[0] as HTMLElement);\r\n }\r\n });\r\n this.appSearch.beginSearch(this.chat.peerId, this.chat.threadId);\r\n\r\n //appImManager.topbar.parentElement.insertBefore(this.results, appImManager.bubblesContainer);\r\n this.chat.bubbles.bubblesContainer.append(this.results);\r\n\r\n // Footer\r\n this.footer = document.createElement('div');\r\n this.footer.classList.add('chat-search-footer');\r\n\r\n this.footer.addEventListener('click', this.onFooterClick);\r\n ripple(this.footer);\r\n\r\n this.foundCountEl = document.createElement('span');\r\n this.foundCountEl.classList.add('chat-search-count');\r\n\r\n this.dateBtn = document.createElement('button');\r\n this.dateBtn.classList.add('btn-icon', 'tgico-calendar');\r\n\r\n this.controls = document.createElement('div');\r\n this.controls.classList.add('chat-search-controls');\r\n\r\n this.upBtn = document.createElement('button');\r\n this.upBtn.classList.add('btn-icon', 'tgico-up');\r\n this.downBtn = document.createElement('button');\r\n this.downBtn.classList.add('btn-icon', 'tgico-down');\r\n\r\n this.upBtn.setAttribute('disabled', 'true');\r\n this.downBtn.setAttribute('disabled', 'true');\r\n\r\n this.dateBtn.addEventListener('click', this.onDateClick);\r\n this.upBtn.addEventListener('click', this.onUpClick);\r\n this.downBtn.addEventListener('click', this.onDownClick);\r\n this.controls.append(this.upBtn, this.downBtn);\r\n\r\n this.footer.append(this.foundCountEl, this.dateBtn, this.controls);\r\n \r\n this.topbar.container.parentElement.insertBefore(this.footer, chat.input.chatInput);\r\n\r\n // Append container\r\n this.element.append(this.backBtn, this.inputSearch.container);\r\n\r\n this.topbar.container.classList.add('hide-pinned');\r\n this.topbar.container.parentElement.append(this.element);\r\n\r\n this.inputSearch.input.focus();\r\n\r\n query && (this.inputSearch.inputField.value = query);\r\n }\r\n\r\n onDateClick = (e: MouseEvent) => {\r\n cancelEvent(e);\r\n new PopupDatePicker(new Date(), this.chat.bubbles.onDatePick).show();\r\n };\r\n\r\n selectResult = (elem: HTMLElement) => {\r\n if(this.setPeerPromise) return this.setPeerPromise;\r\n\r\n const peerId = +elem.dataset.peerId;\r\n const lastMsgId = +elem.dataset.mid || undefined;\r\n\r\n const index = whichChild(elem);\r\n\r\n if(index === (this.foundCount - 1)) {\r\n this.upBtn.setAttribute('disabled', 'true');\r\n } else {\r\n this.upBtn.removeAttribute('disabled');\r\n }\r\n\r\n if(!index) {\r\n this.downBtn.setAttribute('disabled', 'true');\r\n } else {\r\n this.downBtn.removeAttribute('disabled');\r\n }\r\n\r\n this.results.classList.remove('active');\r\n this.chat.bubbles.bubblesContainer.classList.remove('search-results-active');\r\n\r\n const res = this.chat.setPeer(peerId, lastMsgId);\r\n this.setPeerPromise = ((res instanceof Promise ? res : Promise.resolve(res)) as Promise).then(() => {\r\n this.selectedIndex = index;\r\n replaceContent(this.foundCountEl, i18n('Of', [index + 1, this.foundCount]));\r\n\r\n const renderedCount = this.searchGroup.list.childElementCount;\r\n if(this.selectedIndex >= (renderedCount - 6)) {\r\n this.appSearch.searchMore();\r\n }\r\n }).finally(() => {\r\n this.setPeerPromise = null;\r\n });\r\n };\r\n\r\n onResultsClick = (e: MouseEvent) => {\r\n const target = findUpTag(e.target, 'LI');\r\n if(target) {\r\n this.selectResult(target);\r\n }\r\n };\r\n\r\n onFooterClick = (e: MouseEvent) => {\r\n if(this.foundCount) {\r\n this.chat.bubbles.bubblesContainer.classList.toggle('search-results-active');\r\n this.results.classList.toggle('active');\r\n }\r\n };\r\n\r\n onUpClick = (e: MouseEvent) => {\r\n cancelEvent(e);\r\n this.selectResult(this.searchGroup.list.children[this.selectedIndex + 1] as HTMLElement);\r\n };\r\n\r\n onDownClick = (e: MouseEvent) => {\r\n cancelEvent(e);\r\n this.selectResult(this.searchGroup.list.children[this.selectedIndex - 1] as HTMLElement);\r\n };\r\n}","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { AppNotificationsManager } from \"../../lib/appManagers/appNotificationsManager\";\nimport type { AppChatsManager } from \"../../lib/appManagers/appChatsManager\";\nimport type { AppDocsManager } from \"../../lib/appManagers/appDocsManager\";\nimport type { AppImManager } from \"../../lib/appManagers/appImManager\";\nimport type { AppInlineBotsManager } from \"../../lib/appManagers/appInlineBotsManager\";\nimport type { AppMessagesManager } from \"../../lib/appManagers/appMessagesManager\";\nimport type { AppPeersManager } from \"../../lib/appManagers/appPeersManager\";\nimport type { AppPhotosManager } from \"../../lib/appManagers/appPhotosManager\";\nimport type { AppPollsManager } from \"../../lib/appManagers/appPollsManager\";\nimport type { AppProfileManager } from \"../../lib/appManagers/appProfileManager\";\nimport type { AppStickersManager } from \"../../lib/appManagers/appStickersManager\";\nimport type { AppUsersManager } from \"../../lib/appManagers/appUsersManager\";\nimport type { AppWebPagesManager } from \"../../lib/appManagers/appWebPagesManager\";\nimport type { ApiManagerProxy } from \"../../lib/mtproto/mtprotoworker\";\nimport type { AppDraftsManager } from \"../../lib/appManagers/appDraftsManager\";\nimport type { AppEmojiManager } from \"../../lib/appManagers/appEmojiManager\";\nimport type { ServerTimeManager } from \"../../lib/mtproto/serverTimeManager\";\nimport type { AppMessagesIdsManager } from \"../../lib/appManagers/appMessagesIdsManager\";\nimport type { State } from \"../../lib/appManagers/appStateManager\";\nimport type stateStorage from '../../lib/stateStorage';\nimport EventListenerBase from \"../../helpers/eventListenerBase\";\nimport { logger, LogTypes } from \"../../lib/logger\";\nimport rootScope from \"../../lib/rootScope\";\nimport appSidebarRight from \"../sidebarRight\";\nimport ChatBubbles from \"./bubbles\";\nimport ChatContextMenu from \"./contextMenu\";\nimport ChatInput from \"./input\";\nimport ChatSelection from \"./selection\";\nimport ChatTopbar from \"./topbar\";\nimport { REPLIES_PEER_ID } from \"../../lib/mtproto/mtproto_config\";\nimport SetTransition from \"../singleTransition\";\nimport { fastRaf } from \"../../helpers/schedulers\";\nimport AppPrivateSearchTab from \"../sidebarRight/tabs/search\";\nimport renderImageFromUrl from \"../../helpers/dom/renderImageFromUrl\";\nimport mediaSizes from \"../../helpers/mediaSizes\";\nimport ChatSearch from \"./search\";\n\nexport type ChatType = 'chat' | 'pinned' | 'replies' | 'discussion' | 'scheduled';\n\nexport default class Chat extends EventListenerBase<{\n setPeer: (mid: number, isTopMessage: boolean) => void\n}> {\n public container: HTMLElement;\n public backgroundEl: HTMLElement;\n\n public topbar: ChatTopbar;\n public bubbles: ChatBubbles;\n public input: ChatInput;\n public selection: ChatSelection;\n public contextMenu: ChatContextMenu;\n\n public wasAlreadyUsed = false;\n // public initPeerId = 0;\n public peerId = 0;\n public threadId: number;\n public setPeerPromise: Promise;\n public peerChanged: boolean;\n\n public log: ReturnType;\n\n public type: ChatType = 'chat';\n\n public noAutoDownloadMedia: boolean;\n\n public inited = false;\n \n constructor(public appImManager: AppImManager, \n public appChatsManager: AppChatsManager, \n public appDocsManager: AppDocsManager, \n public appInlineBotsManager: AppInlineBotsManager, \n public appMessagesManager: AppMessagesManager, \n public appPeersManager: AppPeersManager, \n public appPhotosManager: AppPhotosManager, \n public appProfileManager: AppProfileManager, \n public appStickersManager: AppStickersManager, \n public appUsersManager: AppUsersManager, \n public appWebPagesManager: AppWebPagesManager, \n public appPollsManager: AppPollsManager, \n public apiManager: ApiManagerProxy, \n public appDraftsManager: AppDraftsManager, \n public serverTimeManager: ServerTimeManager, \n public storage: typeof stateStorage, \n public appNotificationsManager: AppNotificationsManager,\n public appEmojiManager: AppEmojiManager,\n public appMessagesIdsManager: AppMessagesIdsManager\n ) {\n super();\n\n this.container = document.createElement('div');\n this.container.classList.add('chat', 'tabs-tab');\n\n this.backgroundEl = document.createElement('div');\n this.backgroundEl.classList.add('chat-background');\n\n // * constructor end\n\n this.log = logger('CHAT', LogTypes.Log | LogTypes.Warn | LogTypes.Debug | LogTypes.Error);\n //this.log.error('Chat construction');\n\n this.container.append(this.backgroundEl);\n this.appImManager.chatsContainer.append(this.container);\n }\n\n public setBackground(url: string): Promise {\n const theme = rootScope.getTheme();\n\n let item: HTMLElement;\n if(theme.background.type === 'color' && document.documentElement.style.cursor === 'grabbing') {\n const _item = this.backgroundEl.lastElementChild as HTMLElement;\n if(_item && _item.dataset.type === theme.background.type) {\n item = _item;\n }\n }\n \n if(!item) {\n item = document.createElement('div');\n item.classList.add('chat-background-item');\n item.dataset.type = theme.background.type;\n }\n\n if(theme.background.type === 'color') {\n item.style.backgroundColor = theme.background.color;\n item.style.backgroundImage = 'none';\n }\n\n return new Promise((resolve) => {\n const cb = () => {\n const prev = this.backgroundEl.lastElementChild as HTMLElement;\n\n if(prev === item) {\n resolve();\n return;\n }\n\n this.backgroundEl.append(item);\n\n // * одного недостаточно, при обновлении страницы все равно фон появляется неплавно\n // ! с requestAnimationFrame лучше, но все равно иногда моргает, так что использую два фаста.\n fastRaf(() => {\n fastRaf(() => {\n SetTransition(item, 'is-visible', true, 200, prev ? () => {\n prev.remove();\n } : null);\n });\n });\n\n resolve();\n };\n\n if(url) {\n renderImageFromUrl(item, url, cb);\n } else {\n cb();\n }\n });\n }\n\n public setType(type: ChatType) {\n this.type = type;\n\n if(this.type === 'scheduled') {\n this.getMessagesStorage = () => this.appMessagesManager.getScheduledMessagesStorage(this.peerId);\n //this.getMessage = (mid) => this.appMessagesManager.getMessageFromStorage(this.appMessagesManager.getScheduledMessagesStorage(this.peerId), mid);\n }\n }\n\n public init(/* peerId: number */) {\n // this.initPeerId = peerId;\n\n this.topbar = new ChatTopbar(this, appSidebarRight, this.appMessagesManager, this.appPeersManager, this.appChatsManager, this.appNotificationsManager, this.appProfileManager, this.appUsersManager);\n this.bubbles = new ChatBubbles(this, this.appMessagesManager, this.appStickersManager, this.appUsersManager, this.appInlineBotsManager, this.appPhotosManager, this.appPeersManager, this.appProfileManager, this.appDraftsManager, this.appMessagesIdsManager);\n this.input = new ChatInput(this, this.appMessagesManager, this.appMessagesIdsManager, this.appDocsManager, this.appChatsManager, this.appPeersManager, this.appWebPagesManager, this.appImManager, this.appDraftsManager, this.serverTimeManager, this.appNotificationsManager, this.appEmojiManager, this.appUsersManager, this.appInlineBotsManager);\n this.selection = new ChatSelection(this, this.bubbles, this.input, this.appMessagesManager);\n this.contextMenu = new ChatContextMenu(this.bubbles.bubblesContainer, this, this.appMessagesManager, this.appPeersManager, this.appPollsManager, this.appDocsManager, this.appMessagesIdsManager);\n\n if(this.type === 'chat') {\n this.topbar.constructUtils();\n this.topbar.constructPeerHelpers();\n } else if(this.type === 'pinned') {\n this.topbar.constructPinnedHelpers();\n } else if(this.type === 'discussion') {\n this.topbar.constructUtils();\n this.topbar.constructDiscussionHelpers();\n }\n\n this.topbar.construct();\n this.input.construct();\n\n if(this.type === 'chat') { // * гений в деле, разный порядок из-за разной последовательности действий\n this.bubbles.constructPeerHelpers();\n this.input.constructPeerHelpers();\n } else if(this.type === 'pinned') {\n this.bubbles.constructPinnedHelpers();\n this.input.constructPinnedHelpers();\n } else if(this.type === 'scheduled') {\n this.bubbles.constructScheduledHelpers();\n this.input.constructPeerHelpers();\n } else if(this.type === 'discussion') {\n this.bubbles.constructPeerHelpers();\n this.input.constructPeerHelpers();\n }\n\n this.container.classList.add('type-' + this.type);\n this.container.append(this.topbar.container, this.bubbles.bubblesContainer, this.input.chatInput);\n\n this.bubbles.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\n if(this.peerId === migrateFrom) {\n this.setPeer(migrateTo);\n }\n });\n\n this.bubbles.listenerSetter.add(rootScope)('dialog_drop', (e) => {\n if(e.peerId === this.peerId) {\n this.appImManager.setPeer(0);\n }\n });\n }\n\n public beforeDestroy() {\n this.bubbles.cleanup();\n }\n\n public destroy() {\n //const perf = performance.now();\n\n this.topbar.destroy();\n this.bubbles.destroy();\n this.input.destroy();\n\n delete this.topbar;\n delete this.bubbles;\n delete this.input;\n delete this.selection;\n delete this.contextMenu;\n\n this.container.remove();\n\n //this.log.error('Chat destroy time:', performance.now() - perf);\n }\n\n public cleanup(helperToo = true) {\n this.input.cleanup(helperToo);\n this.selection.cleanup();\n }\n\n public setPeer(peerId: number, lastMsgId?: number) {\n if(!peerId) {\n this.inited = false;\n } else if(!this.inited) {\n if(this.init) {\n this.init(/* peerId */);\n this.init = null;\n }\n\n this.inited = true;\n }\n\n const samePeer = this.peerId === peerId;\n if(!samePeer) {\n rootScope.dispatchEvent('peer_changing', this);\n this.peerId = peerId;\n } else if(this.setPeerPromise) {\n return;\n }\n\n //console.time('appImManager setPeer');\n //console.time('appImManager setPeer pre promise');\n ////console.time('appImManager: pre render start');\n if(!peerId) {\n appSidebarRight.toggleSidebar(false);\n this.cleanup(true);\n this.topbar.setPeer(peerId);\n this.bubbles.setPeer(peerId);\n rootScope.dispatchEvent('peer_changed', peerId);\n\n return;\n }\n\n // set new\n if(!samePeer) {\n const searchTab = appSidebarRight.getTab(AppPrivateSearchTab);\n if(searchTab) {\n searchTab.close();\n }\n\n appSidebarRight.sharedMediaTab.setPeer(peerId, this.threadId);\n this.input.clearHelper(); // костыль\n this.selection.cleanup(); // TODO: REFACTOR !!!!!!\n this.setAutoDownloadMedia();\n }\n\n this.peerChanged = samePeer;\n\n const result = this.bubbles.setPeer(peerId, lastMsgId);\n if(!result) {\n return;\n }\n\n const {promise} = result;\n\n //console.timeEnd('appImManager setPeer pre promise');\n \n const setPeerPromise = this.setPeerPromise = promise.finally(() => {\n if(this.setPeerPromise === setPeerPromise) {\n this.setPeerPromise = null;\n }\n });\n\n if(!samePeer) {\n appSidebarRight.sharedMediaTab.setLoadMutex(this.setPeerPromise);\n appSidebarRight.sharedMediaTab.loadSidebarMedia(true);\n }\n /* this.setPeerPromise.then(() => {\n appSidebarRight.sharedMediaTab.loadSidebarMedia(false);\n }); */\n\n return result;\n }\n\n public setAutoDownloadMedia() {\n let type: keyof State['settings']['autoDownload'];\n if(this.peerId < 0) {\n if(this.appPeersManager.isBroadcast(this.peerId)) {\n type = 'channels';\n } else {\n type = 'groups';\n }\n } else {\n if(this.appUsersManager.isContact(this.peerId)) {\n type = 'contacts';\n } else {\n type = 'private';\n }\n }\n\n this.noAutoDownloadMedia = !rootScope.settings.autoDownload[type];\n }\n\n public setMessageId(messageId?: number) {\n return this.setPeer(this.peerId, messageId);\n }\n\n public finishPeerChange(isTarget: boolean, isJump: boolean, lastMsgId: number) {\n if(this.peerChanged) return;\n\n let peerId = this.peerId;\n this.peerChanged = true;\n\n this.cleanup(false);\n\n this.topbar.setPeer(peerId);\n this.topbar.finishPeerChange(isTarget, isJump, lastMsgId);\n this.bubbles.finishPeerChange();\n this.input.finishPeerChange();\n\n appSidebarRight.sharedMediaTab.fillProfileElements();\n\n this.log.setPrefix('CHAT-' + peerId + '-' + this.type);\n\n rootScope.dispatchEvent('peer_changed', peerId);\n this.wasAlreadyUsed = true;\n }\n\n public getMessagesStorage() {\n return this.appMessagesManager.getMessagesStorage(this.peerId);\n }\n\n public getMessage(mid: number) {\n return this.appMessagesManager.getMessageFromStorage(this.getMessagesStorage(), mid);\n //return this.appMessagesManager.getMessageByPeer(this.peerId, mid);\n }\n\n public getMidsByMid(mid: number) {\n return this.appMessagesManager.getMidsByMessage(this.getMessage(mid));\n }\n\n public isAnyGroup() {\n return this.peerId === rootScope.myId || this.peerId === REPLIES_PEER_ID || this.appPeersManager.isAnyGroup(this.peerId);\n }\n\n public initSearch(query?: string) {\n if(!this.peerId) return;\n\n if(mediaSizes.isMobile) {\n new ChatSearch(this.topbar, this, query);\n } else {\n let tab = appSidebarRight.getTab(AppPrivateSearchTab);\n if(!tab) {\n tab = new AppPrivateSearchTab(appSidebarRight);\n }\n\n tab.open(this.peerId, this.threadId, this.bubbles.onDatePick, query);\n }\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppImManager } from \"../../lib/appManagers/appImManager\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport ButtonIcon from \"../buttonIcon\";\r\nimport { clamp } from \"../../helpers/number\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport { IS_APPLE, IS_MOBILE } from \"../../environment/userAgent\";\r\nimport appNavigationController from \"../appNavigationController\";\r\nimport { _i18n } from \"../../lib/langPack\";\r\nimport { cancelEvent } from \"../../helpers/dom/cancelEvent\";\r\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\r\nimport getSelectedNodes from \"../../helpers/dom/getSelectedNodes\";\r\nimport isSelectionEmpty from \"../../helpers/dom/isSelectionEmpty\";\r\nimport { MarkdownType, markdownTags } from \"../../helpers/dom/getRichElementValue\";\r\n//import { logger } from \"../../lib/logger\";\r\n\r\nexport default class MarkupTooltip {\r\n public container: HTMLElement;\r\n private wrapper: HTMLElement;\r\n private buttons: {[type in MarkdownType]: HTMLElement} = {} as any;\r\n private linkBackButton: HTMLElement;\r\n private linkApplyButton: HTMLButtonElement;\r\n private hideTimeout: number;\r\n private addedListener = false;\r\n private waitingForMouseUp = false;\r\n private linkInput: HTMLInputElement;\r\n private savedRange: Range;\r\n private mouseUpCounter: number = 0;\r\n //private log: ReturnType;\r\n\r\n constructor(private appImManager: AppImManager) {\r\n //this.log = logger('MARKUP');\r\n }\r\n\r\n private init() {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('markup-tooltip', 'z-depth-1', 'hide');\r\n\r\n this.wrapper = document.createElement('div');\r\n this.wrapper.classList.add('markup-tooltip-wrapper');\r\n \r\n const tools1 = document.createElement('div');\r\n const tools2 = document.createElement('div');\r\n tools1.classList.add('markup-tooltip-tools');\r\n tools2.classList.add('markup-tooltip-tools');\r\n\r\n const arr = ['bold', 'italic', 'underline', 'strikethrough', 'monospace', 'link'] as (keyof MarkupTooltip['buttons'])[];\r\n arr.forEach(c => {\r\n const button = ButtonIcon(c, {noRipple: true});\r\n tools1.append(this.buttons[c] = button);\r\n\r\n if(c !== 'link') {\r\n button.addEventListener('mousedown', (e) => {\r\n cancelEvent(e); \r\n this.appImManager.chat.input.applyMarkdown(c);\r\n this.cancelClosening();\r\n \r\n /* this.mouseUpCounter = 0;\r\n this.setMouseUpEvent(); */\r\n //this.hide();\r\n });\r\n } else {\r\n attachClickEvent(button, (e) => {\r\n cancelEvent(e);\r\n this.showLinkEditor();\r\n this.cancelClosening();\r\n });\r\n }\r\n });\r\n\r\n this.linkBackButton = ButtonIcon('left', {noRipple: true});\r\n this.linkInput = document.createElement('input');\r\n _i18n(this.linkInput, 'MarkupTooltip.LinkPlaceholder', undefined, 'placeholder');\r\n this.linkInput.classList.add('input-clear');\r\n this.linkInput.addEventListener('keydown', (e) => {\r\n const valid = !this.linkInput.value.length || !!RichTextProcessor.matchUrl(this.linkInput.value);///^(http)|(https):\\/\\//i.test(this.linkInput.value);\r\n\r\n if(e.code === 'Enter') {\r\n if(!valid) {\r\n if(this.linkInput.classList.contains('error')) {\r\n this.linkInput.classList.remove('error');\r\n void this.linkInput.offsetLeft; // reflow\r\n }\r\n\r\n this.linkInput.classList.add('error');\r\n } else {\r\n this.applyLink(e);\r\n }\r\n }\r\n });\r\n\r\n this.linkInput.addEventListener('input', (e) => {\r\n const valid = this.isLinkValid();\r\n\r\n this.linkInput.classList.toggle('is-valid', valid);\r\n this.linkInput.classList.remove('error');\r\n });\r\n\r\n this.linkBackButton.addEventListener('mousedown', (e) => {\r\n //this.log('linkBackButton click');\r\n cancelEvent(e);\r\n this.container.classList.remove('is-link');\r\n //input.value = '';\r\n this.resetSelection();\r\n this.setTooltipPosition();\r\n this.cancelClosening();\r\n });\r\n\r\n this.linkApplyButton = ButtonIcon('check markup-tooltip-link-apply', {noRipple: true});\r\n this.linkApplyButton.addEventListener('mousedown', (e) => {\r\n //this.log('linkApplyButton click');\r\n this.applyLink(e);\r\n });\r\n\r\n const applyDiv = document.createElement('div');\r\n applyDiv.classList.add('markup-tooltip-link-apply-container');\r\n \r\n const delimiter1 = document.createElement('span');\r\n const delimiter2 = document.createElement('span');\r\n const delimiter3 = document.createElement('span');\r\n delimiter1.classList.add('markup-tooltip-delimiter');\r\n delimiter2.classList.add('markup-tooltip-delimiter');\r\n delimiter3.classList.add('markup-tooltip-delimiter');\r\n tools1.insertBefore(delimiter1, this.buttons.link);\r\n applyDiv.append(delimiter3, this.linkApplyButton);\r\n tools2.append(this.linkBackButton, delimiter2, this.linkInput, applyDiv);\r\n //tools1.insertBefore(delimiter2, this.buttons.link.nextSibling);\r\n\r\n this.wrapper.append(tools1, tools2);\r\n this.container.append(this.wrapper);\r\n document.body.append(this.container);\r\n \r\n window.addEventListener('resize', () => {\r\n this.hide();\r\n });\r\n }\r\n\r\n public showLinkEditor() {\r\n if(!this.container || !this.container.classList.contains('is-visible')) { // * if not inited yet (Ctrl+A + Ctrl+K)\r\n this.show();\r\n }\r\n\r\n const button = this.buttons.link;\r\n this.container.classList.add('is-link');\r\n\r\n const selection = document.getSelection();\r\n this.savedRange = selection.getRangeAt(0);\r\n \r\n if(button.classList.contains('active')) {\r\n const startContainer = this.savedRange.startContainer;\r\n const anchor = startContainer.parentElement as HTMLAnchorElement;\r\n this.linkInput.value = anchor.href;\r\n } else {\r\n this.linkInput.value = '';\r\n }\r\n\r\n this.setTooltipPosition(true);\r\n\r\n setTimeout(() => {\r\n this.linkInput.focus(); // !!! instant focus will break animation\r\n }, 200);\r\n this.linkInput.classList.toggle('is-valid', this.isLinkValid());\r\n }\r\n\r\n private applyLink(e: Event) {\r\n cancelEvent(e);\r\n this.resetSelection();\r\n let url = this.linkInput.value;\r\n if(url && !RichTextProcessor.matchUrlProtocol(url)) {\r\n url = 'https://' + url;\r\n }\r\n this.appImManager.chat.input.applyMarkdown('link', url);\r\n setTimeout(() => {\r\n this.hide();\r\n }, 0);\r\n }\r\n\r\n private isLinkValid() {\r\n return !this.linkInput.value.length || !!RichTextProcessor.matchUrl(this.linkInput.value);\r\n }\r\n\r\n private resetSelection(range: Range = this.savedRange) {\r\n const selection = window.getSelection();\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n this.appImManager.chat.input.messageInput.focus();\r\n }\r\n\r\n public hide() {\r\n //return;\r\n\r\n if(this.init) return;\r\n\r\n this.container.classList.remove('is-visible');\r\n //document.removeEventListener('mouseup', this.onMouseUp);\r\n document.removeEventListener('mouseup', this.onMouseUpSingle);\r\n this.waitingForMouseUp = false;\r\n\r\n appNavigationController.removeByType('markup');\r\n\r\n if(this.hideTimeout) clearTimeout(this.hideTimeout);\r\n this.hideTimeout = window.setTimeout(() => {\r\n this.hideTimeout = undefined;\r\n this.container.classList.add('hide');\r\n this.container.classList.remove('is-link');\r\n }, 200);\r\n }\r\n\r\n public getActiveMarkupButton() {\r\n const nodes = getSelectedNodes();\r\n const parents = [...new Set(nodes.map(node => node.parentNode))];\r\n //if(parents.length > 1 && parents) return [];\r\n\r\n const currentMarkups: Set = new Set();\r\n (parents as HTMLElement[]).forEach(node => {\r\n for(const type in markdownTags) {\r\n const tag = markdownTags[type as MarkdownType];\r\n const closest = node.closest(tag.match + ', [contenteditable]');\r\n if(closest !== this.appImManager.chat.input.messageInput) {\r\n currentMarkups.add(this.buttons[type as MarkdownType]);\r\n }\r\n }\r\n });\r\n \r\n\r\n return [...currentMarkups];\r\n }\r\n\r\n public setActiveMarkupButton() {\r\n const activeButtons = this.getActiveMarkupButton();\r\n\r\n for(const i in this.buttons) {\r\n // @ts-ignore\r\n const button = this.buttons[i];\r\n button.classList.toggle('active', activeButtons.includes(button));\r\n }\r\n }\r\n\r\n private setTooltipPosition(isLinkToggle = false) {\r\n const selection = document.getSelection();\r\n const range = selection.getRangeAt(0);\r\n\r\n const bodyRect = document.body.getBoundingClientRect();\r\n const selectionRect = range.getBoundingClientRect();\r\n const inputRect = this.appImManager.chat.input.rowsWrapper.getBoundingClientRect();\r\n\r\n this.container.style.maxWidth = inputRect.width + 'px';\r\n\r\n const selectionTop = selectionRect.top + (bodyRect.top * -1);\r\n \r\n const currentTools = this.container.classList.contains('is-link') ? this.wrapper.lastElementChild : this.wrapper.firstElementChild;\r\n\r\n const sizesRect = currentTools.getBoundingClientRect();\r\n const top = selectionTop - sizesRect.height - 8;\r\n \r\n const minX = inputRect.left;\r\n const maxX = (inputRect.left + inputRect.width) - Math.min(inputRect.width, sizesRect.width);\r\n let left: number;\r\n if(isLinkToggle) {\r\n const containerRect = this.container.getBoundingClientRect();\r\n left = clamp(containerRect.left, minX, maxX);\r\n } else {\r\n const x = selectionRect.left + (selectionRect.width - sizesRect.width) / 2;\r\n left = clamp(x, minX, maxX);\r\n }\r\n\r\n /* const isClamped = x !== minX && x !== maxX && (left === minX || left === maxX || this.container.getBoundingClientRect().left >= maxX);\r\n\r\n if(isLinkToggle && this.container.classList.contains('is-link') && !isClamped) return; */\r\n \r\n this.container.style.transform = `translate3d(${left}px, ${top}px, 0)`;\r\n }\r\n\r\n public show() {\r\n if(this.init) {\r\n this.init();\r\n this.init = null;\r\n }\r\n\r\n if(isSelectionEmpty()) {\r\n this.hide();\r\n return;\r\n }\r\n\r\n if(this.hideTimeout !== undefined) {\r\n clearTimeout(this.hideTimeout);\r\n }\r\n\r\n if(this.container.classList.contains('is-visible')) {\r\n return;\r\n }\r\n\r\n this.setActiveMarkupButton();\r\n \r\n this.container.classList.remove('is-link');\r\n const isFirstShow = this.container.classList.contains('hide');\r\n if(isFirstShow) {\r\n this.container.classList.remove('hide');\r\n this.container.classList.add('no-transition');\r\n }\r\n \r\n this.setTooltipPosition();\r\n \r\n if(isFirstShow) {\r\n void this.container.offsetLeft; // reflow\r\n this.container.classList.remove('no-transition');\r\n }\r\n \r\n this.container.classList.add('is-visible');\r\n\r\n if(!IS_MOBILE) {\r\n appNavigationController.pushItem({\r\n type: 'markup',\r\n onPop: () => {\r\n this.hide();\r\n }\r\n });\r\n }\r\n\r\n //this.log('selection', selectionRect, activeButton);\r\n }\r\n\r\n /* private onMouseUp = (e: Event) => {\r\n this.log('onMouseUp');\r\n if(findUpClassName(e.target, 'markup-tooltip')) return;\r\n\r\n this.hide();\r\n //document.removeEventListener('mouseup', this.onMouseUp);\r\n }; */\r\n\r\n private onMouseUpSingle = (e: Event) => {\r\n //this.log('onMouseUpSingle');\r\n this.waitingForMouseUp = false;\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n cancelEvent(e);\r\n if(this.mouseUpCounter++ === 0) {\r\n this.resetSelection(this.savedRange);\r\n } else {\r\n this.hide();\r\n return;\r\n }\r\n }\r\n\r\n this.show();\r\n\r\n /* !isTouchSupported && document.addEventListener('mouseup', this.onMouseUp); */\r\n };\r\n\r\n public setMouseUpEvent() {\r\n if(this.waitingForMouseUp) return;\r\n this.waitingForMouseUp = true;\r\n\r\n //this.log('setMouseUpEvent');\r\n\r\n document.addEventListener('mouseup', this.onMouseUpSingle, {once: true});\r\n }\r\n\r\n public cancelClosening() {\r\n if(IS_TOUCH_SUPPORTED && !IS_APPLE) {\r\n document.removeEventListener('mouseup', this.onMouseUpSingle);\r\n document.addEventListener('mouseup', (e) => {\r\n cancelEvent(e);\r\n this.mouseUpCounter = 1;\r\n this.waitingForMouseUp = false;\r\n this.setMouseUpEvent();\r\n }, {once: true});\r\n }\r\n }\r\n\r\n public handleSelection() {\r\n if(this.addedListener) return;\r\n this.addedListener = true;\r\n document.addEventListener('selectionchange', (e) => {\r\n //this.log('selectionchange');\r\n\r\n if(document.activeElement === this.linkInput) {\r\n return;\r\n }\r\n\r\n if(document.activeElement !== this.appImManager.chat.input.messageInput) {\r\n this.hide();\r\n return;\r\n }\r\n\r\n const selection = document.getSelection();\r\n if(isSelectionEmpty(selection)) {\r\n this.hide();\r\n return;\r\n }\r\n\r\n if(IS_TOUCH_SUPPORTED) {\r\n if(IS_APPLE) {\r\n this.show();\r\n this.setTooltipPosition(); // * because can skip this in .show();\r\n } else {\r\n if(this.mouseUpCounter === 2) {\r\n this.mouseUpCounter = 0;\r\n return;\r\n }\r\n\r\n this.savedRange = selection.getRangeAt(0);\r\n this.setMouseUpEvent();\r\n /* document.addEventListener('touchend', (e) => {\r\n cancelEvent(e);\r\n this.resetSelection(range);\r\n this.show();\r\n }, {once: true, passive: false}); */\r\n }\r\n } else {\r\n this.setMouseUpEvent();\r\n }\r\n });\r\n }\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function getSelectedNodes() {\r\n const nodes: Node[] = [];\r\n const selection = window.getSelection();\r\n for(let i = 0; i < selection.rangeCount; ++i) {\r\n const range = selection.getRangeAt(i);\r\n let {startContainer, endContainer} = range;\r\n if(endContainer.nodeType !== 3) endContainer = endContainer.firstChild;\r\n \r\n while(startContainer && startContainer !== endContainer) {\r\n nodes.push(startContainer.nodeType === 3 ? startContainer : startContainer.firstChild);\r\n startContainer = startContainer.nextSibling;\r\n }\r\n \r\n if(nodes[nodes.length - 1] !== endContainer) {\r\n nodes.push(endContainer);\r\n }\r\n }\r\n\r\n // * filter null's due to
\r\n return nodes.filter(node => !!node);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// generate a path's arc data parameter\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\n// http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\r\nfunction arcParameter(rx: number, ry: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, x: number, y: number) {\r\n return [rx, ',', ry, ' ',\r\n xAxisRotation, ' ',\r\n largeArcFlag, ',',\r\n sweepFlag, ' ',\r\n x, ',', y ].join('');\r\n}\r\n\r\nexport default function generatePathData(x: number, y: number, width: number, height: number, tl: number, tr: number, br: number, bl: number) {\r\n const data: string[] = [];\r\n\r\n // start point in top-middle of the rectangle\r\n data.push('M' + (x + width / 2) + ',' + y);\r\n\r\n // next we go to the right\r\n data.push('H' + (x + width - tr));\r\n\r\n if(tr > 0) {\r\n // now we draw the arc in the top-right corner\r\n data.push('A' + arcParameter(tr, tr, 0, 0, 1, (x + width), (y + tr)));\r\n }\r\n\r\n // next we go down\r\n data.push('V' + (y + height - br));\r\n\r\n if(br > 0) {\r\n // now we draw the arc in the lower-right corner\r\n data.push('A' + arcParameter(br, br, 0, 0, 1, (x + width - br), (y + height)));\r\n }\r\n\r\n // now we go to the left\r\n data.push('H' + (x + bl));\r\n\r\n if(bl > 0) {\r\n // now we draw the arc in the lower-left corner\r\n data.push('A' + arcParameter(bl, bl, 0, 0, 1, (x + 0), (y + height - bl)));\r\n }\r\n\r\n // next we go up\r\n data.push('V' + (y + tl));\r\n\r\n if(tl > 0) {\r\n // now we draw the arc in the top-left corner\r\n data.push('A' + arcParameter(tl, tl, 0, 0, 1, (x + tl), (y + 0)));\r\n }\r\n\r\n // and we close the path\r\n data.push('Z');\r\n\r\n return data.join(' ');\r\n}\r\n\r\nMOUNT_CLASS_TO.generatePathData = generatePathData;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport generatePathData from \"../../helpers/generatePathData\";\r\nimport { i18n, LangPackKey } from \"../../lib/langPack\";\r\n\r\nexport default class ChatDragAndDrop {\r\n container: HTMLDivElement;\r\n svg: SVGSVGElement;\r\n outlineWrapper: HTMLDivElement;\r\n path: SVGPathElement;\r\n\r\n constructor(appendTo: HTMLElement, private options: {\r\n icon: string,\r\n header: LangPackKey,\r\n subtitle: LangPackKey,\r\n onDrop: (e: DragEvent) => void\r\n }) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('drop', 'z-depth-1');\r\n\r\n this.outlineWrapper = document.createElement('div');\r\n this.outlineWrapper.classList.add('drop-outline-wrapper');\r\n\r\n this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n this.svg.classList.add('drop-outline');\r\n\r\n this.path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n this.path.classList.add('drop-outline-path');\r\n\r\n const dropIcon = document.createElement('div');\r\n dropIcon.classList.add('drop-icon', 'tgico-' + options.icon);\r\n\r\n const dropHeader = document.createElement('div');\r\n dropHeader.classList.add('drop-header');\r\n dropHeader.append(i18n(options.header));\r\n\r\n const dropSubtitle = document.createElement('div');\r\n dropSubtitle.classList.add('drop-subtitle');\r\n dropSubtitle.append(i18n(options.subtitle));\r\n\r\n this.svg.append(this.path);\r\n this.outlineWrapper.append(this.svg);\r\n\r\n this.container.append(this.outlineWrapper, dropIcon, dropHeader, dropSubtitle);\r\n appendTo.append(this.container);\r\n\r\n this.container.addEventListener('dragover', this.onDragOver);\r\n this.container.addEventListener('dragleave', this.onDragLeave);\r\n this.container.addEventListener('drop', this.onDrop);\r\n }\r\n\r\n onDragOver = (e: DragEvent) => {\r\n this.container.classList.add('is-dragover');\r\n //SetTransition(this.container, 'is-dragover', true, 500);\r\n };\r\n\r\n onDragLeave = (e: DragEvent) => {\r\n this.container.classList.remove('is-dragover');\r\n //SetTransition(this.container, 'is-dragover', false, 500);\r\n };\r\n\r\n onDrop = (e: DragEvent) => {\r\n this.options.onDrop(e);\r\n };\r\n\r\n destroy() {\r\n delete this.options;\r\n this.container.remove();\r\n this.container.removeEventListener('dragover', this.onDragOver);\r\n this.container.removeEventListener('dragleave', this.onDragLeave);\r\n this.container.removeEventListener('drop', this.onDrop);\r\n }\r\n\r\n setPath() {\r\n const rect = this.outlineWrapper.getBoundingClientRect();\r\n this.svg.setAttributeNS(null, 'preserveAspectRatio', 'none');\r\n this.svg.setAttributeNS(null, 'viewBox', `0 0 ${rect.width} ${rect.height}`);\r\n this.svg.setAttributeNS(null, 'width', `${rect.width}`);\r\n this.svg.setAttributeNS(null, 'height', `${rect.height}`);\r\n\r\n const radius = 10;\r\n //const strokeWidth = 2;\r\n const sizeX = rect.width - radius;\r\n const sizeY = rect.height - radius;\r\n const pos = radius / 2;\r\n const d = generatePathData(pos, pos, sizeX, sizeY, radius, radius, radius, radius);\r\n this.path.setAttributeNS(null, 'd', d);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { doubleRaf } from \"../schedulers\";\r\n\r\nexport default function disableTransition(elements: HTMLElement[]) {\r\n elements.forEach(el => el.classList.add('no-transition'));\r\n\r\n doubleRaf().then(() => {\r\n elements.forEach(el => el.classList.remove('no-transition'));\r\n });\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport enum INTERNAL_LINK_TYPE {\n MESSAGE,\n PRIVATE_POST,\n STICKER_SET,\n JOIN_CHAT\n};\n\nexport type InternalLink = InternalLink.InternalLinkMessage | InternalLink.InternalLinkPrivatePost | InternalLink.InternalLinkStickerSet | InternalLink.InternalLinkJoinChat;\n\nexport namespace InternalLink {\n export interface InternalLinkMessage {\n _: INTERNAL_LINK_TYPE.MESSAGE,\n domain: string,\n post?: string,\n comment?: string\n }\n\n export interface InternalLinkPrivatePost {\n _: INTERNAL_LINK_TYPE.PRIVATE_POST,\n channel: string,\n post: string,\n thread?: string,\n comment?: string\n }\n\n export interface InternalLinkStickerSet {\n _: INTERNAL_LINK_TYPE.STICKER_SET,\n set: string\n }\n\n export interface InternalLinkJoinChat {\n _: INTERNAL_LINK_TYPE.JOIN_CHAT,\n invite: string\n }\n}\n\nexport type InternalLinkTypeMap = {\n [INTERNAL_LINK_TYPE.MESSAGE]: InternalLink.InternalLinkMessage,\n [INTERNAL_LINK_TYPE.PRIVATE_POST]: InternalLink.InternalLinkPrivatePost,\n [INTERNAL_LINK_TYPE.STICKER_SET]: InternalLink.InternalLinkStickerSet,\n [INTERNAL_LINK_TYPE.JOIN_CHAT]: InternalLink.InternalLinkJoinChat\n};\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport PopupElement, { addCancelButton } from \".\";\r\nimport { ChatInvite, Updates } from \"../../layer\";\r\nimport apiUpdatesManager from \"../../lib/appManagers/apiUpdatesManager\";\r\nimport appAvatarsManager from \"../../lib/appManagers/appAvatarsManager\";\r\nimport appPhotosManager from \"../../lib/appManagers/appPhotosManager\";\r\nimport { i18n } from \"../../lib/langPack\";\r\nimport apiManager from \"../../lib/mtproto/mtprotoworker\";\r\nimport RichTextProcessor from \"../../lib/richtextprocessor\";\r\nimport rootScope from \"../../lib/rootScope\";\r\nimport AvatarElement from \"../avatar\";\r\nimport { wrapPhoto } from \"../wrappers\";\r\n\r\n// const FAKE_CHAT_ID = Number.MAX_SAFE_INTEGER - 0x1000;\r\n\r\nexport default class PopupJoinChatInvite extends PopupElement {\r\n constructor(hash: string, chatInvite: ChatInvite.chatInvite) {\r\n super('popup-join-chat-invite', addCancelButton([{\r\n langKey: chatInvite.pFlags.broadcast ? 'JoinByPeekChannelTitle' : 'JoinByPeekGroupTitle',\r\n callback: () => {\r\n apiManager.invokeApi('messages.importChatInvite', {hash})\r\n .then((updates) => {\r\n apiUpdatesManager.processUpdateMessage(updates);\r\n const chat = (updates as Updates.updates).chats[0];\r\n const peerId = -chat.id;\r\n rootScope.dispatchEvent('history_focus', {peerId});\r\n });\r\n }\r\n }]), {closable: true, overlayClosable: true, body: true});\r\n\r\n this.header.remove();\r\n\r\n /* const fakeChat: Chat.channel | Chat.chat = {\r\n _: chatInvite.pFlags.channel ? 'channel' : 'chat',\r\n id: FAKE_CHAT_ID,\r\n title: chatInvite.title,\r\n photo: chatInvite.photo as any,\r\n date: Date.now() / 1000 | 0,\r\n version: 0,\r\n participants_count: chatInvite.participants_count,\r\n pFlags: chatInvite.pFlags as any\r\n };\r\n\r\n appChatsManager.saveApiChat(fakeChat); */\r\n \r\n const avatarElem = new AvatarElement();\r\n avatarElem.setAttribute('dialog', '0');\r\n avatarElem.classList.add('avatar-100');\r\n if(chatInvite.photo._ === 'photo') {\r\n chatInvite.photo = appPhotosManager.savePhoto(chatInvite.photo);\r\n wrapPhoto({\r\n container: avatarElem,\r\n message: null,\r\n photo: chatInvite.photo,\r\n boxHeight: 100,\r\n boxWidth: 100,\r\n withoutPreloader: true\r\n });\r\n avatarElem.style.width = avatarElem.style.height = '';\r\n } else {\r\n appAvatarsManager.putPhoto(avatarElem, -0, false, chatInvite.title);\r\n }\r\n\r\n const title = document.createElement('div');\r\n title.classList.add('chat-title');\r\n title.innerHTML = RichTextProcessor.wrapEmojiText(chatInvite.title);\r\n //avatarElem.setAttribute('peer', '' + -fakeChat.id);\r\n \r\n const isBroadcast = chatInvite.pFlags.broadcast;\r\n const peopleCount = i18n(isBroadcast ? 'Subscribers' : 'Members', [chatInvite.participants_count]);\r\n peopleCount.classList.add('chat-participants-count');\r\n\r\n this.body.append(avatarElem, title, peopleCount);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n//import apiManager from '../mtproto/apiManager';\nimport animationIntersector from '../../components/animationIntersector';\nimport appSidebarLeft, { LEFT_COLUMN_ACTIVE_CLASSNAME } from \"../../components/sidebarLeft\";\nimport appSidebarRight, { RIGHT_COLUMN_ACTIVE_CLASSNAME } from '../../components/sidebarRight';\nimport mediaSizes, { ScreenSize } from '../../helpers/mediaSizes';\nimport { logger, LogTypes } from \"../logger\";\nimport apiManager from '../mtproto/mtprotoworker';\nimport rootScope from '../rootScope';\nimport apiUpdatesManager from './apiUpdatesManager';\nimport appUsersManager from \"./appUsersManager\";\nimport Chat, { ChatType } from '../../components/chat/chat';\nimport appChatsManager from './appChatsManager';\nimport appDocsManager from './appDocsManager';\nimport appInlineBotsManager from './appInlineBotsManager';\nimport appMessagesManager from './appMessagesManager';\nimport appPeersManager from './appPeersManager';\nimport appPhotosManager from './appPhotosManager';\nimport appProfileManager from './appProfileManager';\nimport appStickersManager from './appStickersManager';\nimport appWebPagesManager from './appWebPagesManager';\nimport PopupNewMedia from '../../components/popups/newMedia';\nimport MarkupTooltip from '../../components/chat/markupTooltip';\nimport { IS_TOUCH_SUPPORTED } from '../../environment/touchSupport';\nimport appPollsManager from './appPollsManager';\nimport SetTransition from '../../components/singleTransition';\nimport ChatDragAndDrop from '../../components/chat/dragAndDrop';\nimport { doubleRaf } from '../../helpers/schedulers';\nimport lottieLoader from '../lottieLoader';\nimport useHeavyAnimationCheck, { dispatchHeavyAnimationEvent } from '../../hooks/useHeavyAnimationCheck';\nimport appDraftsManager from './appDraftsManager';\nimport serverTimeManager from '../mtproto/serverTimeManager';\nimport stateStorage from '../stateStorage';\nimport appDownloadManager from './appDownloadManager';\nimport { AppStateManager } from './appStateManager';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport appNavigationController from '../../components/appNavigationController';\nimport appNotificationsManager from './appNotificationsManager';\nimport AppPrivateSearchTab from '../../components/sidebarRight/tabs/search';\nimport { i18n, LangPackKey } from '../langPack';\nimport { ChatInvite, Dialog, SendMessageAction } from '../../layer';\nimport { hslaStringToHex } from '../../helpers/color';\nimport { copy, getObjectKeysAndSort } from '../../helpers/object';\nimport { getFilesFromEvent } from '../../helpers/files';\nimport PeerTitle from '../../components/peerTitle';\nimport PopupPeer from '../../components/popups/peer';\nimport { SliceEnd } from '../../helpers/slicedArray';\nimport blurActiveElement from '../../helpers/dom/blurActiveElement';\nimport { cancelEvent } from '../../helpers/dom/cancelEvent';\nimport disableTransition from '../../helpers/dom/disableTransition';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport whichChild from '../../helpers/dom/whichChild';\nimport appEmojiManager from './appEmojiManager';\nimport PopupElement from '../../components/popups';\nimport singleInstance from '../mtproto/singleInstance';\nimport PopupStickers from '../../components/popups/stickers';\nimport PopupJoinChatInvite from '../../components/popups/joinChatInvite';\nimport { toast, toastNew } from '../../components/toast';\nimport debounce from '../../helpers/schedulers/debounce';\nimport { pause } from '../../helpers/schedulers/pause';\nimport appMessagesIdsManager from './appMessagesIdsManager';\nimport { InternalLink, InternalLinkTypeMap, INTERNAL_LINK_TYPE } from './internalLink';\nimport RichTextProcessor from '../richtextprocessor';\nimport MEDIA_MIME_TYPES_SUPPORTED from '../../environment/mediaMimeTypesSupport';\n\n//console.log('appImManager included33!');\n\nappSidebarLeft; // just to include\n\nexport const CHAT_ANIMATION_GROUP = 'chat';\nconst FOCUS_EVENT_NAME = IS_TOUCH_SUPPORTED ? 'touchstart' : 'mousemove';\n\nexport type ChatSavedPosition = {\n mids: number[], \n top: number\n};\n\nexport class AppImManager {\n public columnEl = document.getElementById('column-center') as HTMLDivElement;\n public chatsContainer: HTMLElement;\n\n public offline = false;\n public updateStatusInterval = 0;\n\n public log: ReturnType;\n\n public setPeerPromise: Promise = null;\n\n public tabId = -1;\n \n public chats: Chat[] = [];\n private prevTab: HTMLElement;\n private chatsSelectTabDebounced: () => void;\n \n public markupTooltip: MarkupTooltip;\n private backgroundPromises: {[slug: string]: Promise} = {};\n\n get myId() {\n return rootScope.myId;\n }\n\n get chat(): Chat {\n return this.chats[this.chats.length - 1];\n }\n\n constructor() {\n apiUpdatesManager.attach();\n appNotificationsManager.start();\n\n this.log = logger('IM', LogTypes.Log | LogTypes.Warn | LogTypes.Debug | LogTypes.Error);\n\n this.selectTab(0);\n \n window.addEventListener('blur', () => {\n animationIntersector.checkAnimations(true);\n \n this.offline = rootScope.idle.isIDLE = true;\n this.updateStatus();\n clearInterval(this.updateStatusInterval);\n rootScope.dispatchEvent('idle', rootScope.idle.isIDLE);\n \n window.addEventListener('focus', () => {\n this.offline = rootScope.idle.isIDLE = false;\n this.updateStatus();\n this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3);\n \n // в обратном порядке\n animationIntersector.checkAnimations(false);\n\n rootScope.dispatchEvent('idle', rootScope.idle.isIDLE);\n }, {once: true});\n });\n\n // * Prevent setting online after reloading page\n window.addEventListener(FOCUS_EVENT_NAME, () => {\n this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3);\n this.updateStatus();\n\n this.offline = rootScope.idle.isIDLE = false;\n rootScope.dispatchEvent('idle', rootScope.idle.isIDLE);\n }, {once: true, passive: true});\n\n this.chatsContainer = document.createElement('div');\n this.chatsContainer.classList.add('chats-container', 'tabs-container');\n this.chatsContainer.dataset.animation = 'navigation';\n\n this.columnEl.append(this.chatsContainer);\n \n this.createNewChat();\n this.chatsSelectTab(this.chat.container);\n\n appNavigationController.onHashChange = this.onHashChange;\n //window.addEventListener('hashchange', this.onHashChange);\n\n this.setSettings();\n rootScope.addEventListener('settings_updated', this.setSettings);\n\n useHeavyAnimationCheck(() => {\n animationIntersector.setOnlyOnePlayableGroup('lock');\n animationIntersector.checkAnimations(true);\n }, () => {\n animationIntersector.setOnlyOnePlayableGroup('');\n animationIntersector.checkAnimations(false);\n });\n\n this.applyCurrentTheme();\n\n // * fix simultaneous opened both sidebars, can happen when floating sidebar is opened with left sidebar\n mediaSizes.addEventListener('changeScreen', (from, to) => {\n if(document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME) \n && document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME)) {\n appSidebarRight.toggleSidebar(false);\n }\n });\n\n rootScope.addEventListener('history_focus', (e) => {\n let {peerId, threadId, mid} = e;\n if(threadId) threadId = appMessagesIdsManager.generateMessageId(threadId);\n if(mid) mid = appMessagesIdsManager.generateMessageId(mid); // because mid can come from notification, i.e. server message id\n \n this.setInnerPeer(peerId, mid, threadId ? 'discussion' : undefined, threadId);\n });\n\n rootScope.addEventListener('peer_changing', (chat) => {\n this.saveChatPosition(chat);\n });\n\n rootScope.addEventListener('theme_change', () => {\n this.applyCurrentTheme();\n });\n\n rootScope.addEventListener('instance_deactivated', () => {\n const popup = new PopupElement('popup-instance-deactivated', undefined, {overlayClosable: true});\n const c = document.createElement('div');\n c.classList.add('instance-deactivated-container');\n (popup as any).container.replaceWith(c);\n\n const header = document.createElement('div');\n header.classList.add('header');\n header.append(i18n('Deactivated.Title'));\n\n const subtitle = document.createElement('div');\n subtitle.classList.add('subtitle');\n subtitle.append(i18n('Deactivated.Subtitle'));\n\n c.append(header, subtitle);\n\n document.body.classList.add('deactivated');\n\n (popup as any).onClose = () => {\n document.body.classList.add('deactivated-backwards');\n\n singleInstance.activateInstance();\n\n setTimeout(() => {\n document.body.classList.remove('deactivated', 'deactivated-backwards');\n }, 333);\n };\n\n popup.show();\n });\n\n stateStorage.get('chatPositions').then((c) => {\n stateStorage.setToCache('chatPositions', c || {});\n });\n\n // ! do not remove this line \n // ! instance can be deactivated before the UI starts, because it waits in background for RAF that is delayed\n singleInstance.activateInstance();\n\n this.addAnchorListener<{}>({\n name: 'showMaskedAlert', \n callback: (params, element) => {\n const href = element.href;\n\n const a = element.cloneNode(true) as HTMLAnchorElement;\n a.className = 'anchor-url';\n a.innerText = href;\n a.removeAttribute('onclick');\n\n new PopupPeer('popup-masked-url', {\n titleLangKey: 'OpenUrlTitle',\n descriptionLangKey: 'OpenUrlAlert2',\n descriptionLangArgs: [a],\n buttons: [{\n langKey: 'Open',\n callback: () => {\n a.click();\n },\n }]\n }).show();\n }\n });\n\n this.addAnchorListener<{uriParams: {command: string, bot: string}}>({\n name: 'execBotCommand', \n callback: ({uriParams}) => {\n const {command, bot} = uriParams;\n\n /* const promise = bot ? this.openUsername(bot).then(() => this.chat.peerId) : Promise.resolve(this.chat.peerId);\n promise.then(peerId => {\n appMessagesManager.sendText(peerId, '/' + command);\n }); */\n\n appMessagesManager.sendText(this.chat.peerId, '/' + command + (bot ? '@' + bot : ''));\n\n //console.log(command, bot);\n }\n });\n\n this.addAnchorListener<{uriParams: {hashtag: string}}>({\n name: 'searchByHashtag', \n callback: ({uriParams}) => {\n const {hashtag} = uriParams;\n if(!hashtag) {\n return;\n }\n\n this.chat.initSearch('#' + hashtag + ' ');\n }\n });\n\n this.addAnchorListener<{pathnameParams: ['addstickers', string]}>({\n name: 'addstickers', \n callback: ({pathnameParams}) => {\n const link: InternalLink = {\n _: INTERNAL_LINK_TYPE.STICKER_SET,\n set: pathnameParams[1]\n };\n\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{pathnameParams: ['joinchat', string]}>({\n name: 'joinchat', \n callback: ({pathnameParams}) => {\n const link: InternalLink = {\n _: INTERNAL_LINK_TYPE.JOIN_CHAT,\n invite: pathnameParams[1]\n };\n\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{\n // pathnameParams: ['c', string, string],\n // uriParams: {thread?: number}\n // } | {\n // pathnameParams: [string, string?],\n // uriParams: {comment?: number}\n pathnameParams: ['c', string, string] | [string, string?],\n uriParams: {thread?: string, comment?: string} | {comment?: string}\n }>({\n name: 'im',\n callback: async({pathnameParams, uriParams}) => {\n let link: InternalLink;\n if(pathnameParams[0] === 'c') {\n link = {\n _: INTERNAL_LINK_TYPE.PRIVATE_POST,\n channel: pathnameParams[1],\n post: pathnameParams[2],\n thread: 'thread' in uriParams ? uriParams.thread : undefined,\n comment: uriParams.comment\n };\n } else {\n link = {\n _: INTERNAL_LINK_TYPE.MESSAGE,\n domain: pathnameParams[0],\n post: pathnameParams[1],\n comment: uriParams.comment\n };\n }\n\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{\n uriParams: {\n domain: string,\n\n // telegrampassport\n scope?: string,\n nonce?: string,\n payload?: string,\n bot_id?: string,\n public_key?: string,\n callback_url?: string,\n\n // regular\n start?: string,\n startgroup?: string,\n game?: string,\n voicechat?: string,\n post?: string,\n thread?: string,\n comment?: string\n }\n }>({\n name: 'resolve',\n protocol: 'tg',\n callback: ({uriParams}) => {\n let link: InternalLink;\n if(uriParams.domain === 'telegrampassport') {\n\n } else {\n link = this.makeLink(INTERNAL_LINK_TYPE.MESSAGE, uriParams);\n }\n\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{\n uriParams: {\n channel: string,\n post: string,\n thread?: string,\n comment?: string\n }\n }>({\n name: 'privatepost',\n protocol: 'tg',\n callback: ({uriParams}) => {\n const link = this.makeLink(INTERNAL_LINK_TYPE.PRIVATE_POST, uriParams);\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{\n uriParams: {\n set: string\n }\n }>({\n name: 'addstickers',\n protocol: 'tg',\n callback: ({uriParams}) => {\n const link = this.makeLink(INTERNAL_LINK_TYPE.STICKER_SET, uriParams);\n this.processInternalLink(link);\n }\n });\n\n this.addAnchorListener<{\n uriParams: {\n invite: string\n }\n }>({\n name: 'joinchat',\n protocol: 'tg',\n callback: ({uriParams}) => {\n const link = this.makeLink(INTERNAL_LINK_TYPE.JOIN_CHAT, uriParams);\n this.processInternalLink(link);\n }\n });\n\n this.onHashChange();\n this.attachKeydownListener();\n }\n\n private attachKeydownListener() {\n const IGNORE_KEYS = new Set(['PageUp', 'PageDown', 'Meta', 'Control']);\n const onKeyDown = (e: KeyboardEvent) => {\n if(rootScope.isOverlayActive || IGNORE_KEYS.has(e.key)) return;\n \n const target = e.target as HTMLElement;\n \n //if(target.tagName === 'INPUT') return;\n \n //this.log('onkeydown', e, document.activeElement);\n\n const chat = this.chat;\n\n if(e.code === 'KeyC' && (e.ctrlKey || e.metaKey) && target.tagName !== 'INPUT') {\n return;\n } else if(e.altKey && (e.code === 'ArrowUp' || e.code === 'ArrowDown')) {\n const folder = appMessagesManager.dialogsStorage.getFolder(rootScope.filterId, true);\n let nextDialog: Dialog.dialog;\n if(!rootScope.peerId) {\n if(e.code === 'ArrowDown') {\n nextDialog = folder[0];\n }\n } else {\n const idx = folder.findIndex(dialog => dialog.peerId === rootScope.peerId);\n if(idx !== -1) {\n const nextIndex = e.code === 'ArrowUp' ? idx - 1 : idx + 1;\n nextDialog = folder[nextIndex];\n }\n }\n \n if(nextDialog) {\n this.setPeer(nextDialog.peerId);\n }\n } else if(e.code === 'ArrowUp') {\n if(!chat.input.editMsgId && chat.input.isInputEmpty()) {\n const historyStorage = appMessagesManager.getHistoryStorage(chat.peerId, chat.threadId);\n const slice = historyStorage.history.slice;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n let goodMid: number;\n for(const mid of slice) {\n const message = chat.getMessage(mid);\n const good = this.myId === chat.peerId ? message.fromId === this.myId : message.pFlags.out;\n\n if(good) {\n if(appMessagesManager.canEditMessage(chat.getMessage(mid), 'text')) {\n goodMid = mid;\n break;\n }\n\n // * this check will allow editing only last message\n //break;\n }\n }\n \n if(goodMid) {\n chat.input.initMessageEditing(goodMid);\n cancelEvent(e); // * prevent from scrolling\n }\n }\n } else {\n return;\n }\n } else if(e.code === 'ArrowDown') {\n return;\n }\n \n if(chat.input.messageInput && \n e.target !== chat.input.messageInput && \n target.tagName !== 'INPUT' && \n !target.hasAttribute('contenteditable') && \n !IS_TOUCH_SUPPORTED && \n (!mediaSizes.isMobile || this.tabId === 1) && \n !this.chat.selection.isSelecting && \n !this.chat.input.recording) {\n chat.input.messageInput.focus();\n placeCaretAtEnd(chat.input.messageInput);\n }\n };\n \n document.body.addEventListener('keydown', onKeyDown);\n }\n\n private makeLink(type: T, uriParams: Omit) {\n return {\n _: type,\n ...uriParams\n } as any as InternalLinkTypeMap[T];\n }\n\n public async processInternalLink(link: InternalLink) {\n switch(link?._) {\n case INTERNAL_LINK_TYPE.MESSAGE: {\n const postId = link.post ? appMessagesIdsManager.generateMessageId(+link.post) : undefined;\n const commentId = link.comment ? appMessagesIdsManager.generateMessageId(+link.comment) : undefined;\n\n this.openUsername(link.domain, postId, undefined, commentId);\n break;\n }\n\n case INTERNAL_LINK_TYPE.PRIVATE_POST: {\n const peerId = -+link.channel;\n\n const chat = appChatsManager.getChat(-peerId);\n if(chat.deleted) {\n try {\n await appChatsManager.resolveChannel(-peerId);\n } catch(err) {\n toastNew({langPackKey: 'LinkNotFound'});\n throw err;\n }\n }\n\n const postId = appMessagesIdsManager.generateMessageId(+link.post);\n const threadId = link.thread ? appMessagesIdsManager.generateMessageId(+link.thread) : undefined;\n\n if(threadId) this.openThread(peerId, postId, threadId);\n else this.setInnerPeer(peerId, postId);\n break;\n }\n\n case INTERNAL_LINK_TYPE.STICKER_SET: {\n new PopupStickers({id: link.set}).show();\n break;\n }\n\n case INTERNAL_LINK_TYPE.JOIN_CHAT: {\n apiManager.invokeApi('messages.checkChatInvite', {\n hash: link.invite\n }).then(chatInvite => {\n if((chatInvite as ChatInvite.chatInvitePeek).chat) {\n appChatsManager.saveApiChat((chatInvite as ChatInvite.chatInvitePeek).chat, true);\n }\n\n // console.log(chatInvite);\n\n if(chatInvite._ === 'chatInviteAlready' ||\n chatInvite._ === 'chatInvitePeek'/* && chatInvite.expires > tsNow(true) */) {\n this.setInnerPeer(-chatInvite.chat.id);\n return;\n }\n\n new PopupJoinChatInvite(link.invite, chatInvite).show();\n }, (err) => {\n if(err.type === 'INVITE_HASH_EXPIRED') {\n toast(i18n('InviteExpired'));\n }\n });\n break;\n }\n\n default: {\n this.log.warn('Not supported internal link:', link);\n break;\n }\n }\n }\n\n private addAnchorListener(options: {\n name: 'showMaskedAlert' | 'execBotCommand' | 'searchByHashtag' | 'addstickers' | 'joinchat' | 'im' |\n 'resolve' | 'privatepost' | 'addstickers', \n protocol?: 'tg',\n callback: (params: Params, element?: HTMLAnchorElement) => boolean | any, \n noPathnameParams?: boolean,\n noUriParams?: boolean\n }) {\n (window as any)[(options.protocol ? options.protocol + '_' : '') + options.name] = (element?: HTMLAnchorElement/* , e: Event */) => {\n cancelEvent(null);\n\n const href = element.href;\n let pathnameParams: any[];\n let uriParams: any;\n\n if(!options.noPathnameParams) pathnameParams = new URL(element.href).pathname.split('/').slice(1);\n if(!options.noUriParams) uriParams = this.parseUriParams(href);\n\n const res = options.callback({pathnameParams, uriParams} as Params, element);\n return res === undefined ? res : false;\n };\n }\n\n private parseUriParams(uri: string, splitted = uri.split('?')) {\n const params: any = {};\n if(!splitted[1]) return params;\n splitted[1].split('&').forEach(item => {\n params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);\n });\n\n return params;\n }\n\n private onHashChange = () => {\n const hash = location.hash;\n const splitted = hash.split('?');\n\n const params = this.parseUriParams(hash, splitted);\n\n this.log('hashchange', hash, splitted[0], params);\n\n if(params.tgaddr) {\n appNavigationController.replaceState();\n const {onclick} = RichTextProcessor.wrapUrl(params.tgaddr);\n if(onclick) {\n const a = document.createElement('a');\n a.href = params.tgaddr;\n (window as any)[onclick](a);\n }\n return;\n }\n\n switch(splitted[0]) {\n case '#/im': {\n const p = params.p;\n let postId = params.post !== undefined ? appMessagesIdsManager.generateMessageId(+params.post) : undefined;\n\n switch(p[0]) {\n case '@': {\n this.openUsername(p, postId);\n break;\n }\n\n default: { // peerId\n this.setInnerPeer(postId ? -+p : +p, postId);\n break;\n }\n }\n }\n }\n\n //appNavigationController.replaceState();\n //location.hash = '';\n };\n\n public openUsername(username: string, msgId?: number, threadId?: number, commentId?: number) {\n return appUsersManager.resolveUsername(username).then(peer => {\n const isUser = peer._ === 'user';\n const peerId = isUser ? peer.id : -peer.id;\n\n if(threadId) return this.openThread(peerId, msgId, threadId);\n else if(commentId) return this.openComment(peerId, msgId, commentId);\n else return this.setInnerPeer(peerId, msgId);\n }, (err) => {\n if(err.type === 'USERNAME_NOT_OCCUPIED') {\n toastNew({langPackKey: 'NoUsernameFound'});\n } else if(err.type === 'USERNAME_INVALID') {\n toastNew({langPackKey: 'Alert.UserDoesntExists'});\n }\n });\n }\n\n /**\n * Opens thread when peerId of discussion group is known\n */\n public openThread(peerId: number, lastMsgId: number, threadId: number) {\n return appMessagesManager.wrapSingleMessage(peerId, threadId).then(() => {\n const message = appMessagesManager.getMessageByPeer(peerId, threadId);\n appMessagesManager.generateThreadServiceStartMessage(message);\n\n return this.setInnerPeer(peerId, lastMsgId, 'discussion', threadId);\n });\n }\n\n /**\n * Opens comment directly from original channel\n */\n public openComment(peerId: number, msgId: number, commentId: number) {\n return appMessagesManager.getDiscussionMessage(peerId, msgId).then(message => {\n return this.openThread(message.peerId, commentId, message.mid);\n });\n }\n\n public setCurrentBackground(broadcastEvent = false) {\n const theme = rootScope.getTheme();\n\n if(theme.background.type === 'image' || (theme.background.type === 'default' && theme.background.slug)) {\n const defaultTheme = AppStateManager.STATE_INIT.settings.themes.find(t => t.name === theme.name);\n const isDefaultBackground = theme.background.blur === defaultTheme.background.blur && \n theme.background.slug === defaultTheme.background.slug;\n\n if(!isDefaultBackground) {\n return this.getBackground(theme.background.slug).then((url) => {\n return this.setBackground(url, broadcastEvent);\n }, () => { // * if NO_ENTRY_FOUND\n theme.background = copy(defaultTheme.background); // * reset background\n return this.setBackground('', true);\n });\n }\n }\n \n return this.setBackground('', broadcastEvent);\n }\n\n private getBackground(slug: string) {\n if(this.backgroundPromises[slug]) return this.backgroundPromises[slug];\n return this.backgroundPromises[slug] = appDownloadManager.cacheStorage.getFile('backgrounds/' + slug).then(blob => {\n return URL.createObjectURL(blob);\n });\n }\n\n public setBackground(url: string, broadcastEvent = true): Promise {\n const promises = this.chats.map(chat => chat.setBackground(url));\n return promises[promises.length - 1].then(() => {\n if(broadcastEvent) {\n rootScope.dispatchEvent('background_change');\n }\n });\n }\n\n public saveChatPosition(chat: Chat) {\n if(!(['chat', 'discussion'] as ChatType[]).includes(chat.type) || !chat.peerId) {\n return;\n }\n\n //const bubble = chat.bubbles.getBubbleByPoint('top');\n //if(bubble) {\n //const top = bubble.getBoundingClientRect().top;\n const chatBubbles = chat.bubbles;\n const top = chatBubbles.scrollable.scrollTop;\n\n const key = chat.peerId + (chat.threadId ? '_' + chat.threadId : '');\n\n const chatPositions = stateStorage.getFromCache('chatPositions');\n if(!(chatBubbles.scrollable.getDistanceToEnd() <= 16 && chatBubbles.scrollable.loadedAll.bottom) && Object.keys(chatBubbles.bubbles).length) {\n const position = {\n mids: getObjectKeysAndSort(chatBubbles.bubbles, 'desc'),\n top\n };\n\n chatPositions[key] = position;\n\n this.log('saved chat position:', position);\n } else {\n delete chatPositions[key];\n\n this.log('deleted chat position');\n }\n\n stateStorage.set({chatPositions}, true);\n //}\n }\n\n public getChatSavedPosition(chat: Chat): ChatSavedPosition {\n if(!(['chat', 'discussion'] as ChatType[]).includes(chat.type) || !chat.peerId) {\n return;\n }\n \n const key = chat.peerId + (chat.threadId ? '_' + chat.threadId : '');\n const cache = stateStorage.getFromCache('chatPositions');\n return cache && cache[key];\n }\n\n public applyHighlightningColor() {\n let hsla: string;\n const theme = rootScope.getTheme();\n if(theme.background.highlightningColor) {\n hsla = theme.background.highlightningColor;\n document.documentElement.style.setProperty('--message-highlightning-color', hsla);\n } else {\n document.documentElement.style.removeProperty('--message-highlightning-color');\n }\n\n if(!IS_TOUCH_SUPPORTED && hsla) {\n rootScope.themeColor = hslaStringToHex(hsla);\n }\n }\n\n public applyCurrentTheme(slug?: string, backgroundUrl?: string, broadcastEvent?: boolean) {\n this.applyHighlightningColor();\n\n rootScope.setTheme();\n\n if(backgroundUrl) {\n this.backgroundPromises[slug] = Promise.resolve(backgroundUrl);\n }\n \n return this.setCurrentBackground(broadcastEvent === undefined ? !!slug : broadcastEvent);\n }\n\n private setSettings = () => {\n document.documentElement.style.setProperty('--messages-text-size', rootScope.settings.messagesTextSize + 'px');\n \n document.body.classList.toggle('animation-level-0', !rootScope.settings.animationsEnabled);\n document.body.classList.toggle('animation-level-1', false);\n document.body.classList.toggle('animation-level-2', rootScope.settings.animationsEnabled);\n\n this.chatsSelectTabDebounced = debounce(() => {\n const topbar = this.chat.topbar;\n if(topbar.pinnedMessage) { // * буду молиться богам, чтобы это ничего не сломало, но это исправляет получение пиннеда после анимации\n topbar.pinnedMessage.setCorrectIndex(0);\n }\n\n apiManager.setQueueId(this.chat.bubbles.lazyLoadQueue.queueId);\n }, rootScope.settings.animationsEnabled ? 250 : 0, false, true);\n\n lottieLoader.setLoop(rootScope.settings.stickers.loop);\n animationIntersector.checkAnimations(false);\n \n for(const chat of this.chats) {\n chat.setAutoDownloadMedia();\n }\n };\n\n // * не могу использовать тут TransitionSlider, так как мне нужен отрисованный блок рядом \n // * (или под текущим чатом) чтобы правильно отрендерить чат (напр. scrollTop)\n private chatsSelectTab(tab: HTMLElement, animate?: boolean) {\n if(this.prevTab === tab) {\n return;\n }\n\n if(animate === false && this.prevTab) { // * will be used for Safari iOS history swipe\n disableTransition([tab, this.prevTab].filter(Boolean));\n }\n\n if(this.prevTab) {\n this.prevTab.classList.remove('active');\n this.chatsSelectTabDebounced();\n\n // ! нужно переделать на animation, так как при лаге анимация будет длиться не 250мс\n if(rootScope.settings.animationsEnabled && animate !== false) { \n dispatchHeavyAnimationEvent(pause(250 + 150), 250 + 150);\n }\n\n const prevIdx = whichChild(this.prevTab);\n const idx = whichChild(tab);\n if(idx > prevIdx) {\n appNavigationController.pushItem({\n type: 'chat', \n onPop: (canAnimate) => {\n this.setPeer(0, undefined, canAnimate);\n blurActiveElement();\n }\n });\n }\n }\n\n tab.classList.add('active');\n this.prevTab = tab;\n }\n\n private init() {\n document.addEventListener('paste', this.onDocumentPaste, true);\n \n if(!IS_TOUCH_SUPPORTED) {\n this.attachDragAndDropListeners();\n }\n\n //if(!isTouchSupported) {\n this.markupTooltip = new MarkupTooltip(this);\n this.markupTooltip.handleSelection();\n //}\n }\n\n private attachDragAndDropListeners() {\n const drops: ChatDragAndDrop[] = [];\n let mounted = false;\n const toggle = async(e: DragEvent, mount: boolean) => {\n if(mount === mounted) return;\n\n const _types = e.dataTransfer.types;\n // @ts-ignore\n const isFiles = _types.contains ? _types.contains('Files') : _types.indexOf('Files') >= 0;\n\n if(!isFiles || !this.canDrag()) { // * skip dragging text case\n counter = 0;\n return;\n }\n\n if(mount && !drops.length) {\n const types: string[] = await getFilesFromEvent(e, true);\n const force = isFiles && !types.length; // * can't get file items not from 'drop' on Safari\n \n const foundMedia = types.filter(t => MEDIA_MIME_TYPES_SUPPORTED.has(t)).length;\n const foundDocuments = types.length - foundMedia;\n \n this.log('drag files', types);\n \n if(types.length || force) {\n drops.push(new ChatDragAndDrop(dropsContainer, {\n icon: 'dragfiles',\n header: 'Chat.DropTitle',\n subtitle: 'Chat.DropAsFilesDesc',\n onDrop: (e: DragEvent) => {\n toggle(e, false);\n appImManager.log('drop', e);\n appImManager.onDocumentPaste(e, 'document');\n }\n }));\n }\n \n if((foundMedia && !foundDocuments) || force) {\n drops.push(new ChatDragAndDrop(dropsContainer, {\n icon: 'dragmedia',\n header: 'Chat.DropTitle',\n subtitle: 'Chat.DropQuickDesc',\n onDrop: (e: DragEvent) => {\n toggle(e, false);\n appImManager.log('drop', e);\n appImManager.onDocumentPaste(e, 'media');\n }\n }));\n }\n \n this.chat.container.append(dropsContainer);\n }\n\n //if(!mount) return;\n\n SetTransition(dropsContainer, 'is-visible', mount, 200, () => {\n if(!mount) {\n drops.forEach(drop => {\n drop.destroy();\n });\n\n drops.length = 0;\n }\n });\n\n if(mount) {\n drops.forEach(drop => {\n drop.setPath();\n });\n } else {\n counter = 0;\n }\n\n document.body.classList.toggle('is-dragging', mount);\n mounted = mount;\n };\n\n /* document.body.addEventListener('dragover', (e) => {\n cancelEvent(e);\n }); */\n\n let counter = 0;\n document.body.addEventListener('dragenter', (e) => {\n counter++;\n });\n\n document.body.addEventListener('dragover', (e) => {\n //this.log('dragover', e/* , e.dataTransfer.types[0] */);\n toggle(e, true);\n cancelEvent(e);\n });\n\n document.body.addEventListener('dragleave', (e) => {\n //this.log('dragleave', e, counter);\n //if((e.pageX <= 0 || e.pageX >= appPhotosManager.windowW) || (e.pageY <= 0 || e.pageY >= appPhotosManager.windowH)) {\n counter--;\n if(counter === 0) { \n //if(!findUpClassName(e.target, 'drops-container')) {\n toggle(e, false);\n }\n });\n\n const dropsContainer = document.createElement('div');\n dropsContainer.classList.add('drops-container');\n }\n\n private canDrag() {\n const peerId = this.chat?.peerId;\n return !(!peerId || rootScope.isOverlayActive || !appMessagesManager.canSendToPeer(peerId, this.chat.threadId, 'send_media'));\n }\n\n private onDocumentPaste = (e: ClipboardEvent | DragEvent, attachType?: 'media' | 'document') => {\n if(!this.canDrag()) return;\n\n //console.log('document paste');\n //console.log('item', event.clipboardData.getData());\n\n if(e instanceof DragEvent) {\n const _types = e.dataTransfer.types;\n // @ts-ignore\n const isFiles = _types.contains ? _types.contains('Files') : _types.indexOf('Files') >= 0;\n if(isFiles) {\n cancelEvent(e);\n }\n }\n \n getFilesFromEvent(e).then((files: File[]) => {\n if(files.length) {\n if(/* attachType === 'media' && */files.find(file => !MEDIA_MIME_TYPES_SUPPORTED.has(file.type))) {\n attachType = 'document';\n }\n \n const chatInput = this.chat.input;\n chatInput.willAttachType = attachType || (MEDIA_MIME_TYPES_SUPPORTED.has(files[0].type) ? 'media' : \"document\");\n new PopupNewMedia(this.chat, files, chatInput.willAttachType);\n }\n });\n };\n\n public selectTab(id: number, animate?: boolean) {\n if(animate === false) { // * will be used for Safari iOS history swipe\n disableTransition([appSidebarLeft.sidebarEl, this.columnEl, appSidebarRight.sidebarEl]);\n }\n\n document.body.classList.toggle(LEFT_COLUMN_ACTIVE_CLASSNAME, id === 0);\n\n const prevTabId = this.tabId;\n\n this.log('selectTab', id, prevTabId);\n\n let animationPromise: Promise = rootScope.settings.animationsEnabled ? doubleRaf() : Promise.resolve();\n if(prevTabId !== -1 && prevTabId !== id && rootScope.settings.animationsEnabled && animate !== false) {\n const transitionTime = (mediaSizes.isMobile ? 250 : 200) + 100; // * cause transition time could be > 250ms\n animationPromise = pause(transitionTime);\n dispatchHeavyAnimationEvent(animationPromise, transitionTime);\n\n // ! it's very heavy operation. will blink in firefox\n /* this.columnEl.classList.add('disable-hover');\n animationPromise.finally(() => {\n this.columnEl.classList.remove('disable-hover');\n }); */\n }\n\n this.tabId = id;\n blurActiveElement();\n if(mediaSizes.isMobile && prevTabId === 2 && id < 2) {\n document.body.classList.remove(RIGHT_COLUMN_ACTIVE_CLASSNAME);\n }\n\n if(prevTabId !== -1 && id > prevTabId) {\n if(id < 2 || !appNavigationController.findItemByType('im')) {\n appNavigationController.pushItem({\n type: 'im', \n onPop: (canAnimate) => {\n //this.selectTab(prevTabId, !isSafari);\n this.setPeer(0, undefined, canAnimate);\n }\n });\n }\n }\n\n rootScope.dispatchEvent('im_tab_change', id);\n\n //this._selectTab(id, mediaSizes.isMobile);\n //document.body.classList.toggle(RIGHT_COLUMN_ACTIVE_CLASSNAME, id === 2);\n\n return animationPromise;\n }\n \n public updateStatus() {\n if(!this.myId) return Promise.resolve();\n \n appUsersManager.setUserStatus(this.myId, this.offline);\n return apiManager.invokeApiSingle('account.updateStatus', {offline: this.offline});\n }\n\n private createNewChat() {\n const chat = new Chat(this, \n appChatsManager, \n appDocsManager, \n appInlineBotsManager, \n appMessagesManager, \n appPeersManager, \n appPhotosManager, \n appProfileManager, \n appStickersManager, \n appUsersManager, \n appWebPagesManager, \n appPollsManager, \n apiManager, \n appDraftsManager, \n serverTimeManager, \n stateStorage, \n appNotificationsManager, \n appEmojiManager,\n appMessagesIdsManager\n );\n\n if(this.chats.length) {\n chat.backgroundEl.append(this.chat.backgroundEl.lastElementChild.cloneNode(true));\n }\n\n this.chats.push(chat);\n }\n\n private spliceChats(fromIndex: number, justReturn = true, animate?: boolean, spliced?: Chat[]) {\n if(fromIndex >= this.chats.length) return;\n\n if(this.chats.length > 1 && justReturn) {\n rootScope.dispatchEvent('peer_changing', this.chat);\n }\n\n if(!spliced) {\n spliced = this.chats.splice(fromIndex, this.chats.length - fromIndex);\n }\n\n // * -1 because one item is being sliced when closing the chat by calling .removeByType\n for(let i = 0; i < spliced.length - 1; ++i) {\n appNavigationController.removeByType('chat', true);\n }\n\n // * fix middle chat z-index on animation\n if(spliced.length > 1) {\n spliced.slice(0, -1).forEach(chat => {\n chat.container.remove();\n });\n }\n\n this.chatsSelectTab(this.chat.container, animate);\n\n if(justReturn) {\n rootScope.dispatchEvent('peer_changed', this.chat.peerId);\n\n const searchTab = appSidebarRight.getTab(AppPrivateSearchTab);\n if(searchTab) {\n searchTab.close();\n }\n \n const isSet = appSidebarRight.sharedMediaTab.setPeer(this.chat.peerId, this.chat.threadId);\n if(isSet) {\n appSidebarRight.sharedMediaTab.loadSidebarMedia(true);\n appSidebarRight.sharedMediaTab.fillProfileElements();\n }\n \n /* setTimeout(() => {\n appSidebarRight.sharedMediaTab.loadSidebarMedia(false);\n }); */\n }\n\n spliced.forEach(chat => {\n chat.beforeDestroy();\n });\n \n setTimeout(() => {\n //chat.setPeer(0);\n spliced.forEach(chat => {\n chat.destroy();\n });\n }, 250 + 100);\n }\n\n public setPeer(peerId: number, lastMsgId?: number, animate?: boolean): boolean {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n const chat = this.chat;\n const chatIndex = this.chats.indexOf(chat);\n\n if(!peerId) {\n if(chatIndex > 0) {\n this.spliceChats(chatIndex, undefined, animate);\n return;\n } else if(mediaSizes.activeScreen === ScreenSize.medium) { // * floating sidebar case\n this.selectTab(+!this.tabId, animate);\n return;\n }\n } else if(chatIndex > 0 && chat.peerId && chat.peerId !== peerId) {\n // const firstChat = this.chats[0];\n // if(firstChat.peerId !== chat.peerId) {\n /* // * slice idx > 0, set background and slice first, so new one will be the first\n const spliced = this.chats.splice(1, this.chats.length - 1);\n this.createNewChat();\n this.chats.splice(0, 1); */\n const spliced = this.chats.splice(1, this.chats.length - 1);\n if(this.chat.peerId === peerId) {\n this.spliceChats(0, true, true, spliced);\n return;\n } else {\n const ret = this.setPeer(peerId, lastMsgId);\n this.spliceChats(0, false, false, spliced);\n return ret;\n }\n // } else {\n // this.spliceChats(1, false, animate);\n // }\n\n //return ret;\n }\n\n // * don't reset peer if returning\n if(peerId === chat.peerId && mediaSizes.activeScreen <= ScreenSize.medium && document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME)) {\n this.selectTab(1, animate);\n return false;\n }\n\n if(peerId || mediaSizes.activeScreen !== ScreenSize.mobile) {\n const result = chat.setPeer(peerId, lastMsgId);\n\n // * wait for cached render\n const promise = result?.cached ? result.promise : Promise.resolve();\n if(peerId) {\n promise.then(() => {\n //window.requestAnimationFrame(() => {\n setTimeout(() => { // * setTimeout is better here\n setTimeout(() => {\n this.chatsSelectTab(this.chat.container);\n }, 0);\n this.selectTab(1, animate);\n }, 0);\n });\n }\n }\n\n if(!peerId) {\n this.selectTab(0, animate);\n return false;\n }\n }\n\n public setInnerPeer(peerId: number, lastMsgId?: number, type: ChatType = 'chat', threadId?: number) {\n // * prevent opening already opened peer\n const existingIndex = this.chats.findIndex(chat => chat.peerId === peerId && chat.type === type);\n if(existingIndex !== -1) {\n this.spliceChats(existingIndex + 1);\n return this.setPeer(peerId, lastMsgId);\n }\n\n const chat = this.chat;\n if(chat.inited) { // * use first not inited chat\n this.createNewChat();\n }\n\n if(type) {\n this.chat.setType(type);\n\n if(threadId) {\n this.chat.threadId = threadId;\n }\n }\n\n //this.chatsSelectTab(this.chat.container);\n\n return this.setPeer(peerId, lastMsgId);\n }\n\n public openScheduled(peerId: number) {\n this.setInnerPeer(peerId, undefined, 'scheduled');\n }\n\n private getTypingElement(action: SendMessageAction) {\n const el = document.createElement('span');\n el.classList.add('peer-typing');\n el.dataset.action = action._;\n switch(action._) {\n case 'sendMessageTypingAction': {\n //default: {\n const c = 'peer-typing-text';\n el.classList.add(c);\n for(let i = 0; i < 3; ++i) {\n const dot = document.createElement('span');\n dot.className = c + '-dot';\n el.append(dot);\n }\n break;\n }\n\n case 'sendMessageUploadAudioAction':\n case 'sendMessageUploadDocumentAction':\n case 'sendMessageUploadRoundAction':\n case 'sendMessageUploadVideoAction':\n case 'sendMessageUploadPhotoAction': {\n const c = 'peer-typing-upload';\n el.classList.add(c);\n /* const trail = document.createElement('span');\n trail.className = c + '-trail';\n el.append(trail); */\n break;\n }\n\n case 'sendMessageRecordAudioAction':\n case 'sendMessageRecordRoundAction':\n case 'sendMessageRecordVideoAction': {\n const c = 'peer-typing-record';\n el.classList.add(c);\n break;\n }\n }\n\n return el;\n }\n\n public getPeerTyping(peerId: number, container?: HTMLElement) {\n if(!appUsersManager.isBot(peerId)) {\n const typings = appProfileManager.getPeerTypings(peerId);\n if(!typings || !typings.length) {\n return;\n }\n\n const typing = typings[0];\n\n const langPackKeys: {\n [peerType in 'private' | 'chat' | 'multi']?: Partial<{[action in SendMessageAction['_']]: LangPackKey}>\n } = {\n private: {\n 'sendMessageTypingAction': 'Peer.Activity.User.TypingText',\n 'sendMessageUploadAudioAction': 'Peer.Activity.User.SendingFile',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.User.SendingFile',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.User.SendingPhoto',\n 'sendMessageUploadVideoAction': 'Peer.Activity.User.SendingVideo',\n 'sendMessageUploadRoundAction': 'Peer.Activity.User.SendingVideo',\n 'sendMessageRecordVideoAction': 'Peer.Activity.User.RecordingVideo',\n 'sendMessageRecordAudioAction': 'Peer.Activity.User.RecordingAudio',\n 'sendMessageRecordRoundAction': 'Peer.Activity.User.RecordingVideo',\n 'sendMessageGamePlayAction': 'Peer.Activity.User.PlayingGame'\n },\n chat: {\n 'sendMessageTypingAction': 'Peer.Activity.Chat.TypingText',\n 'sendMessageUploadAudioAction': 'Peer.Activity.Chat.SendingFile',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.Chat.SendingFile',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.Chat.SendingPhoto',\n 'sendMessageUploadVideoAction': 'Peer.Activity.Chat.SendingVideo',\n 'sendMessageUploadRoundAction': 'Peer.Activity.Chat.SendingVideo',\n 'sendMessageRecordVideoAction': 'Peer.Activity.Chat.RecordingVideo',\n 'sendMessageRecordAudioAction': 'Peer.Activity.Chat.RecordingAudio',\n 'sendMessageRecordRoundAction': 'Peer.Activity.Chat.RecordingVideo',\n 'sendMessageGamePlayAction': 'Peer.Activity.Chat.PlayingGame'\n },\n multi: {\n 'sendMessageTypingAction': 'Peer.Activity.Chat.Multi.TypingText1',\n 'sendMessageUploadAudioAction': 'Peer.Activity.Chat.Multi.SendingFile1',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.Chat.Multi.SendingFile1',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.Chat.Multi.SendingPhoto1',\n 'sendMessageUploadVideoAction': 'Peer.Activity.Chat.Multi.SendingVideo1',\n 'sendMessageUploadRoundAction': 'Peer.Activity.Chat.Multi.SendingVideo1',\n 'sendMessageRecordVideoAction': 'Peer.Activity.Chat.Multi.RecordingVideo1',\n 'sendMessageRecordAudioAction': 'Peer.Activity.Chat.Multi.RecordingAudio1',\n 'sendMessageRecordRoundAction': 'Peer.Activity.Chat.Multi.RecordingVideo1',\n 'sendMessageGamePlayAction': 'Peer.Activity.Chat.Multi.PlayingGame1'\n }\n };\n\n const mapa = peerId > 0 ? langPackKeys.private : (typings.length > 1 ? langPackKeys.multi : langPackKeys.chat);\n let action = typing.action;\n\n if(typings.length > 1) {\n const s: any = {};\n typings.forEach(typing => {\n const type = typing.action._;\n if(s[type] === undefined) s[type] = 0;\n ++s[type];\n });\n\n if(Object.keys(s).length > 1) {\n action = {\n _: 'sendMessageTypingAction'\n };\n }\n }\n\n const langPackKey = mapa[action._];\n if(!langPackKey) {\n return;\n }\n\n if(!container) {\n container = document.createElement('span');\n container.classList.add('online', 'peer-typing-container');\n }\n\n let typingElement = container.firstElementChild as HTMLElement;\n if(!typingElement) {\n typingElement = this.getTypingElement(action);\n container.prepend(typingElement);\n } else {\n if(typingElement.dataset.action !== action._) {\n typingElement.replaceWith(this.getTypingElement(action));\n }\n }\n\n let args: any[];\n if(peerId < 0) {\n args = [\n new PeerTitle({peerId: typing.userId, onlyFirstName: true}).element,\n typings.length - 1\n ];\n }\n const descriptionElement = i18n(langPackKey, args);\n descriptionElement.classList.add('peer-typing-description');\n\n if(container.childElementCount > 1) container.lastElementChild.replaceWith(descriptionElement);\n else container.append(descriptionElement);\n return container;\n }\n }\n\n public async getPeerStatus(peerId: number) {\n let subtitle: HTMLElement;\n if(!peerId) return '';\n\n if(peerId < 0) { // not human\n let span = this.getPeerTyping(peerId);\n if(span) {\n return span;\n }\n\n const chatInfo = await appProfileManager.getChatFull(-peerId) as any;\n this.chat.log('chatInfo res:', chatInfo);\n\n const participants_count = chatInfo.participants_count || (chatInfo.participants && chatInfo.participants.participants && chatInfo.participants.participants.length) || 1;\n //if(participants_count) {\n subtitle = appProfileManager.getChatMembersString(-peerId);\n\n if(participants_count < 2) return subtitle;\n /* const onlines = await appChatsManager.getOnlines(chat.id);\n if(onlines > 1) {\n subtitle += ', ' + numberThousandSplitter(onlines) + ' online';\n } */\n \n return subtitle;\n //}\n } else { // user\n const user = appUsersManager.getUser(peerId);\n \n if(rootScope.myId === peerId) {\n return '';\n } else if(user) {\n subtitle = appUsersManager.getUserStatusString(user.id);\n\n if(!appUsersManager.isBot(peerId)) {\n let span = this.getPeerTyping(peerId);\n if(!span && user.status?._ === 'userStatusOnline') {\n span = document.createElement('span');\n span.classList.add('online');\n span.append(subtitle);\n }\n\n if(span) {\n return span;\n }\n }\n \n return subtitle;\n }\n }\n }\n\n public setPeerStatus(peerId: number, element: HTMLElement, needClear: boolean, useWhitespace: boolean, middleware: () => boolean) {\n if(needClear) {\n element.innerHTML = useWhitespace ? '‎' : ''; // ! HERE U CAN FIND WHITESPACE\n }\n\n // * good good good\n const typingContainer = element.querySelector('.peer-typing-container') as HTMLElement;\n if(typingContainer && this.getPeerTyping(peerId, typingContainer)) {\n return;\n }\n\n this.getPeerStatus(peerId).then((subtitle) => {\n if(!middleware()) {\n return;\n }\n\n replaceContent(element, subtitle || (useWhitespace ? '‎' : ''));\n });\n }\n}\n\nconst appImManager = new AppImManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appImManager = appImManager);\nexport default appImManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { deferredPromise } from \"../helpers/cancellablePromise\";\nimport mediaSizes from \"../helpers/mediaSizes\";\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\nimport { IS_MOBILE_SAFARI, IS_SAFARI } from \"../environment/userAgent\";\nimport appDocsManager, { MyDocument } from \"../lib/appManagers/appDocsManager\";\nimport appPhotosManager, { MyPhoto } from \"../lib/appManagers/appPhotosManager\";\nimport { logger } from \"../lib/logger\";\nimport VideoPlayer from \"../lib/mediaPlayer\";\nimport rootScope from \"../lib/rootScope\";\nimport animationIntersector from \"./animationIntersector\";\nimport appMediaPlaybackController from \"./appMediaPlaybackController\";\nimport AvatarElement from \"./avatar\";\nimport ButtonIcon from \"./buttonIcon\";\nimport { ButtonMenuItemOptions } from \"./buttonMenu\";\nimport ButtonMenuToggle from \"./buttonMenuToggle\";\nimport { LazyLoadQueueBase } from \"./lazyLoadQueue\";\nimport ProgressivePreloader from \"./preloader\";\nimport SwipeHandler from \"./swipeHandler\";\nimport { formatFullSentTime } from \"../helpers/date\";\nimport appNavigationController from \"./appNavigationController\";\nimport { Message } from \"../layer\";\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\nimport renderImageFromUrl, { renderImageFromUrlPromise } from \"../helpers/dom/renderImageFromUrl\";\nimport getVisibleRect from \"../helpers/dom/getVisibleRect\";\nimport appDownloadManager from \"../lib/appManagers/appDownloadManager\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport fillPropertyValue from \"../helpers/fillPropertyValue\";\nimport generatePathData from \"../helpers/generatePathData\";\nimport replaceContent from \"../helpers/dom/replaceContent\";\nimport PeerTitle from \"./peerTitle\";\nimport { doubleRaf, fastRaf } from \"../helpers/schedulers\";\nimport RangeSelector from \"./rangeSelector\";\nimport windowSize from \"../helpers/windowSize\";\nimport ListLoader from \"../helpers/listLoader\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\n\nconst ZOOM_STEP = 0.5;\nconst ZOOM_INITIAL_VALUE = 1;\nconst ZOOM_MIN_VALUE = 0.5;\nconst ZOOM_MAX_VALUE = 4;\n\n// TODO: масштабирование картинок (не SVG) при ресайзе, и правильный возврат на исходную позицию\n// TODO: картинки \"обрезаются\" если возвращаются или появляются с места, где есть их перекрытие (топбар, поле ввода)\n// TODO: видео в мобильной вёрстке, если показываются элементы управления: если свайпнуть в сторону, то элементы вернутся на место, т.е. прыгнут - это не ок, надо бы замаскировать\n\nexport const MEDIA_VIEWER_CLASSNAME = 'media-viewer';\n\nexport default class AppMediaViewerBase<\n ContentAdditionType extends string, \n ButtonsAdditionType extends string, \n TargetType extends {element: HTMLElement\n}> extends EventListenerBase<{\n setMoverBefore: () => void,\n setMoverAfter: () => void\n}> {\n protected wholeDiv: HTMLElement;\n protected overlaysDiv: HTMLElement;\n protected author: {[k in 'container' | 'avatarEl' | 'nameEl' | 'date']: HTMLElement} = {} as any;\n protected content: {[k in 'main' | 'container' | 'media' | 'mover' | ContentAdditionType]: HTMLElement} = {} as any;\n protected buttons: {[k in 'download' | 'close' | 'prev' | 'next' | 'mobile-close' | 'zoom' | ButtonsAdditionType]: HTMLElement} = {} as any;\n protected topbar: HTMLElement;\n protected moversContainer: HTMLElement;\n \n protected tempId = 0;\n protected preloader: ProgressivePreloader = null;\n protected preloaderStreamable: ProgressivePreloader = null;\n\n //protected targetContainer: HTMLElement = null;\n //protected loadMore: () => void = null;\n\n protected log: ReturnType; \n\n protected isFirstOpen = true;\n\n // protected needLoadMore = true;\n\n protected pageEl = document.getElementById('page-chats') as HTMLDivElement;\n\n protected setMoverPromise: Promise;\n protected setMoverAnimationPromise: Promise;\n\n protected lazyLoadQueue: LazyLoadQueueBase;\n\n protected highlightSwitchersTimeout: number;\n\n protected onDownloadClick: (e: MouseEvent) => void;\n protected onPrevClick: (target: TargetType) => void;\n protected onNextClick: (target: TargetType) => void;\n\n protected videoPlayer: VideoPlayer;\n\n protected zoomElements: {\n container: HTMLElement,\n btnOut: HTMLElement,\n btnIn: HTMLElement,\n rangeSelector: RangeSelector\n } = {} as any;\n // protected zoomValue = ZOOM_INITIAL_VALUE;\n protected zoomSwipeHandler: SwipeHandler;\n protected zoomSwipeStartX = 0;\n protected zoomSwipeStartY = 0;\n protected zoomSwipeX = 0;\n protected zoomSwipeY = 0;\n \n protected ctrlKeyDown: boolean;\n\n get target() {\n return this.listLoader.current;\n }\n\n set target(value) {\n this.listLoader.current = value;\n }\n\n constructor(\n protected listLoader: ListLoader, \n topButtons: Array['buttons']>\n ) {\n super(false);\n\n this.log = logger('AMV');\n this.preloader = new ProgressivePreloader();\n this.preloaderStreamable = new ProgressivePreloader({\n cancelable: false,\n streamable: true\n });\n this.preloader.construct();\n this.preloaderStreamable.construct();\n this.lazyLoadQueue = new LazyLoadQueueBase();\n\n this.wholeDiv = document.createElement('div');\n this.wholeDiv.classList.add(MEDIA_VIEWER_CLASSNAME + '-whole');\n\n this.overlaysDiv = document.createElement('div');\n this.overlaysDiv.classList.add('overlays');\n\n const mainDiv = document.createElement('div');\n mainDiv.classList.add(MEDIA_VIEWER_CLASSNAME);\n\n const topbar = this.topbar = document.createElement('div');\n topbar.classList.add(MEDIA_VIEWER_CLASSNAME + '-topbar', MEDIA_VIEWER_CLASSNAME + '-appear');\n\n const topbarLeft = document.createElement('div');\n topbarLeft.classList.add(MEDIA_VIEWER_CLASSNAME + '-topbar-left');\n\n this.buttons['mobile-close'] = ButtonIcon('close', {onlyMobile: true});\n \n // * author\n this.author.container = document.createElement('div');\n this.author.container.classList.add(MEDIA_VIEWER_CLASSNAME + '-author', 'no-select');\n const authorRight = document.createElement('div');\n \n this.author.avatarEl = new AvatarElement();\n this.author.avatarEl.classList.add(MEDIA_VIEWER_CLASSNAME + '-userpic', 'avatar-44');\n \n this.author.nameEl = document.createElement('div');\n this.author.nameEl.classList.add(MEDIA_VIEWER_CLASSNAME + '-name');\n \n this.author.date = document.createElement('div');\n this.author.date.classList.add(MEDIA_VIEWER_CLASSNAME + '-date');\n \n authorRight.append(this.author.nameEl, this.author.date);\n \n this.author.container.append(this.author.avatarEl, authorRight);\n \n // * buttons\n const buttonsDiv = document.createElement('div');\n buttonsDiv.classList.add(MEDIA_VIEWER_CLASSNAME + '-buttons');\n \n topButtons.concat(['download', 'zoom', 'close']).forEach(name => {\n const button = ButtonIcon(name, {noRipple: true});\n this.buttons[name] = button;\n buttonsDiv.append(button);\n });\n\n this.buttons.zoom.classList.add('zoom-in');\n\n // * zoom\n this.zoomElements.container = document.createElement('div');\n this.zoomElements.container.classList.add('zoom-container');\n\n this.zoomElements.btnOut = ButtonIcon('zoomout', {noRipple: true});\n this.zoomElements.btnOut.addEventListener('click', () => this.changeZoom(false));\n this.zoomElements.btnIn = ButtonIcon('zoomin', {noRipple: true});\n this.zoomElements.btnIn.addEventListener('click', () => this.changeZoom(true));\n\n this.zoomElements.rangeSelector = new RangeSelector({\n step: ZOOM_STEP, \n min: ZOOM_MIN_VALUE, \n max: ZOOM_MAX_VALUE, \n withTransition: true\n }, ZOOM_INITIAL_VALUE);\n this.zoomElements.rangeSelector.setListeners();\n this.zoomElements.rangeSelector.setHandlers({\n onScrub: this.setZoomValue,\n onMouseUp: () => this.setZoomValue()\n });\n\n this.zoomElements.container.append(this.zoomElements.btnOut, this.zoomElements.rangeSelector.container, this.zoomElements.btnIn);\n\n this.wholeDiv.append(this.zoomElements.container);\n\n // * content\n this.content.main = document.createElement('div');\n this.content.main.classList.add(MEDIA_VIEWER_CLASSNAME + '-content');\n\n this.content.container = document.createElement('div');\n this.content.container.classList.add(MEDIA_VIEWER_CLASSNAME + '-container');\n\n this.content.media = document.createElement('div');\n this.content.media.classList.add(MEDIA_VIEWER_CLASSNAME + '-media');\n\n this.content.container.append(this.content.media);\n\n this.content.main.append(this.content.container);\n mainDiv.append(this.content.main);\n this.overlaysDiv.append(mainDiv);\n // * overlays end\n \n topbarLeft.append(this.buttons['mobile-close'], this.author.container);\n topbar.append(topbarLeft, buttonsDiv);\n\n this.buttons.prev = document.createElement('div');\n this.buttons.prev.className = `${MEDIA_VIEWER_CLASSNAME}-switcher ${MEDIA_VIEWER_CLASSNAME}-switcher-left`;\n this.buttons.prev.innerHTML = ``;\n\n this.buttons.next = document.createElement('div');\n this.buttons.next.className = `${MEDIA_VIEWER_CLASSNAME}-switcher ${MEDIA_VIEWER_CLASSNAME}-switcher-right`;\n this.buttons.next.innerHTML = ``;\n\n this.moversContainer = document.createElement('div');\n this.moversContainer.classList.add(MEDIA_VIEWER_CLASSNAME + '-movers');\n\n this.wholeDiv.append(this.overlaysDiv, this.buttons.prev, this.buttons.next, this.topbar, this.moversContainer);\n\n // * constructing html end\n\n this.setNewMover();\n }\n\n protected setListeners() {\n this.buttons.download.addEventListener('click', this.onDownloadClick);\n [this.buttons.close, this.buttons['mobile-close'], this.preloaderStreamable.preloader].forEach(el => {\n el.addEventListener('click', this.close.bind(this));\n });\n\n ([[-1, this.buttons.prev], [1, this.buttons.next]] as [number, HTMLElement][]).forEach(([moveLength, button]) => {\n button.addEventListener('click', (e) => {\n cancelEvent(e);\n if(this.setMoverPromise) return;\n \n this.listLoader.go(moveLength);\n });\n });\n\n this.buttons.zoom.addEventListener('click', () => {\n if(this.isZooming()) this.toggleZoom(false);\n else {\n this.changeZoom(true);\n }\n });\n\n this.wholeDiv.addEventListener('click', this.onClick);\n\n this.listLoader.onJump = (item, older) => {\n if(older) this.onNextClick(item);\n else this.onPrevClick(item);\n };\n\n if(IS_TOUCH_SUPPORTED) {\n const swipeHandler = new SwipeHandler({\n element: this.wholeDiv, \n onSwipe: (xDiff, yDiff) => {\n if(VideoPlayer.isFullScreen()) {\n return;\n }\n //console.log(xDiff, yDiff);\n\n const percents = Math.abs(xDiff) / windowSize.windowW;\n if(percents > .2 || xDiff > 125) {\n //console.log('will swipe', xDiff);\n\n if(xDiff < 0) {\n this.buttons.prev.click();\n } else {\n this.buttons.next.click();\n }\n\n return true;\n }\n\n const percentsY = Math.abs(yDiff) / windowSize.windowH;\n if(percentsY > .2 || yDiff > 125) {\n this.buttons.close.click();\n return true;\n }\n\n return false;\n }, \n verifyTouchTarget: (evt) => {\n // * Fix for seek input\n if((evt.target as HTMLElement).tagName === 'INPUT' || findUpClassName(evt.target, 'media-viewer-caption')) {\n return false;\n }\n\n return true;\n }\n });\n }\n }\n\n protected toggleZoom(enable?: boolean) {\n const isVisible = this.isZooming();\n if(this.zoomElements.rangeSelector.mousedown || this.ctrlKeyDown) {\n enable = true;\n }\n\n if(isVisible === enable) return;\n\n if(enable === undefined) {\n enable = !isVisible;\n }\n\n this.buttons.zoom.classList.toggle('zoom-in', !enable);\n this.zoomElements.container.classList.toggle('is-visible', enable);\n const zoomValue = enable ? this.zoomElements.rangeSelector.value : 1;\n this.setZoomValue(zoomValue);\n this.zoomElements.rangeSelector.setProgress(zoomValue);\n\n if(this.videoPlayer) {\n this.videoPlayer.lockControls(enable ? false : undefined);\n }\n\n if(enable) {\n if(!this.zoomSwipeHandler) {\n let lastDiffX: number, lastDiffY: number;\n const multiplier = -1;\n this.zoomSwipeHandler = new SwipeHandler({\n element: this.moversContainer,\n onFirstSwipe: () => {\n lastDiffX = lastDiffY = 0;\n this.moversContainer.classList.add('no-transition');\n },\n onSwipe: (xDiff, yDiff) => {\n [xDiff, yDiff] = [xDiff * multiplier, yDiff * multiplier];\n this.zoomSwipeX += xDiff - lastDiffX;\n this.zoomSwipeY += yDiff - lastDiffY;\n [lastDiffX, lastDiffY] = [xDiff, yDiff];\n\n this.setZoomValue();\n },\n onReset: () => {\n this.moversContainer.classList.remove('no-transition');\n },\n cursor: 'move'\n });\n } else {\n this.zoomSwipeHandler.setListeners();\n }\n \n this.zoomElements.rangeSelector.setProgress(zoomValue);\n } else if(!enable) {\n this.zoomSwipeHandler.removeListeners();\n }\n }\n\n protected changeZoom(add: boolean) {\n this.zoomElements.rangeSelector.addProgress(ZOOM_STEP * (add ? 1 : -1));\n this.setZoomValue();\n }\n\n protected setZoomValue = (value = this.zoomElements.rangeSelector.value) => {\n // this.zoomValue = value;\n if(value === ZOOM_INITIAL_VALUE) {\n this.zoomSwipeX = 0;\n this.zoomSwipeY = 0;\n }\n\n this.moversContainer.style.transform = `matrix(${value}, 0, 0, ${value}, ${this.zoomSwipeX}, ${this.zoomSwipeY})`;\n\n this.zoomElements.btnOut.classList.toggle('inactive', value === ZOOM_MIN_VALUE);\n this.zoomElements.btnIn.classList.toggle('inactive', value === ZOOM_MAX_VALUE);\n\n this.toggleZoom(value !== ZOOM_INITIAL_VALUE);\n };\n\n protected isZooming() {\n return this.zoomElements.container.classList.contains('is-visible');\n }\n\n protected setBtnMenuToggle(buttons: ButtonMenuItemOptions[]) {\n const btnMenuToggle = ButtonMenuToggle({onlyMobile: true}, 'bottom-left', buttons);\n this.topbar.append(btnMenuToggle);\n }\n\n public close(e?: MouseEvent) {\n if(e) {\n cancelEvent(e);\n }\n\n if(this.setMoverAnimationPromise) return Promise.reject();\n\n appNavigationController.removeByType('media');\n\n this.lazyLoadQueue.clear();\n\n const promise = this.setMoverToTarget(this.target?.element, true).then(({onAnimationEnd}) => onAnimationEnd);\n\n this.listLoader.reset();\n (this.listLoader as any).cleanup && (this.listLoader as any).cleanup();\n this.setMoverPromise = null;\n this.tempId = -1;\n (window as any).appMediaViewer = undefined;\n\n if(this.zoomSwipeHandler) {\n this.zoomSwipeHandler.removeListeners();\n this.zoomSwipeHandler = undefined;\n }\n\n /* if(appSidebarRight.historyTabIDs.slice(-1)[0] === AppSidebarRight.SLIDERITEMSIDS.forward) {\n promise.then(() => {\n appSidebarRight.forwardTab.closeBtn.click();\n });\n } */\n\n window.removeEventListener('keydown', this.onKeyDown);\n window.removeEventListener('keyup', this.onKeyUp);\n window.removeEventListener('wheel', this.onWheel, {capture: true});\n\n promise.finally(() => {\n this.wholeDiv.remove();\n rootScope.isOverlayActive = false;\n animationIntersector.checkAnimations(false);\n });\n\n return promise;\n }\n\n onClick = (e: MouseEvent) => {\n if(this.setMoverAnimationPromise) return;\n\n const target = e.target as HTMLElement;\n if(target.tagName === 'A') return;\n cancelEvent(e);\n\n if(IS_TOUCH_SUPPORTED) {\n if(this.highlightSwitchersTimeout) {\n clearTimeout(this.highlightSwitchersTimeout);\n } else {\n this.wholeDiv.classList.add('highlight-switchers');\n }\n\n this.highlightSwitchersTimeout = window.setTimeout(() => {\n this.wholeDiv.classList.remove('highlight-switchers');\n this.highlightSwitchersTimeout = 0;\n }, 3e3);\n \n return;\n }\n\n const isZooming = this.isZooming();\n let mover: HTMLElement = null;\n const classNames = ['ckin__player', 'media-viewer-buttons', 'media-viewer-author', 'media-viewer-caption', 'zoom-container'];\n if(isZooming) {\n classNames.push('media-viewer-movers');\n }\n\n classNames.find(s => {\n try {\n mover = findUpClassName(target, s);\n if(mover) return true;\n } catch(err) {return false;}\n });\n\n if(/* target === this.mediaViewerDiv */!mover || (!isZooming && (target.tagName === 'IMG' || target.tagName === 'image'))) {\n this.buttons.close.click();\n }\n };\n\n private onKeyDown = (e: KeyboardEvent) => {\n //this.log('onKeyDown', e);\n if(rootScope.overlaysActive > 1) {\n return;\n }\n \n let good = true;\n if(e.key === 'ArrowRight') {\n this.buttons.next.click();\n } else if(e.key === 'ArrowLeft') {\n this.buttons.prev.click();\n } else if(e.key === '-' || e.key === '=') {\n if(this.ctrlKeyDown) {\n this.changeZoom(e.key === '=');\n }\n } else {\n good = false;\n }\n\n if(e.ctrlKey || e.metaKey) {\n this.ctrlKeyDown = true;\n }\n\n if(good) {\n cancelEvent(e);\n }\n };\n\n private onKeyUp = (e: KeyboardEvent) => {\n if(rootScope.overlaysActive > 1) {\n return;\n }\n\n if(!(e.ctrlKey || e.metaKey)) {\n this.ctrlKeyDown = false;\n\n if(this.isZooming()) {\n this.setZoomValue();\n }\n }\n };\n\n private onWheel = (e: WheelEvent) => {\n if(rootScope.overlaysActive > 1 || (findUpClassName(e.target, 'media-viewer-caption') && !this.ctrlKeyDown)) {\n return;\n }\n\n cancelEvent(e);\n\n if(this.ctrlKeyDown) {\n const scrollingUp = e.deltaY < 0;\n // if(!scrollingUp && !this.isZooming()) return;\n this.changeZoom(!!scrollingUp);\n }\n };\n\n protected async setMoverToTarget(target: HTMLElement, closing = false, fromRight = 0) {\n this.dispatchEvent('setMoverBefore');\n\n const mover = this.content.mover;\n\n if(!closing) {\n mover.innerHTML = '';\n //mover.append(this.buttons.prev, this.buttons.next);\n }\n \n const zoomValue = this.isZooming() && closing /* && false */ ? this.zoomElements.rangeSelector.value : ZOOM_INITIAL_VALUE;\n /* if(!(zoomValue > 1 && closing)) */ this.removeCenterFromMover(mover);\n\n const wasActive = fromRight !== 0;\n\n const delay = rootScope.settings.animationsEnabled ? (wasActive ? 350 : 200) : 0;\n //let delay = wasActive ? 350 : 10000;\n\n /* if(wasActive) {\n this.moveTheMover(mover);\n mover = this.setNewMover();\n } */\n\n /* if(DEBUG) {\n this.log('setMoverToTarget', target, closing, wasActive, fromRight);\n } */\n\n let realParent: HTMLElement;\n\n let rect: DOMRect;\n if(target) {\n if(target instanceof AvatarElement || target.classList.contains('grid-item')/* || target.classList.contains('document-ico') */) {\n realParent = target;\n rect = target.getBoundingClientRect();\n } else if(target instanceof SVGImageElement || target.parentElement instanceof SVGForeignObjectElement) {\n realParent = findUpClassName(target, 'attachment');\n rect = realParent.getBoundingClientRect();\n } else if(target.classList.contains('profile-avatars-avatar')) {\n realParent = findUpClassName(target, 'profile-avatars-container');\n rect = realParent.getBoundingClientRect();\n\n // * if not active avatar\n if(closing && target.getBoundingClientRect().left !== rect.left) {\n target = realParent = rect = undefined;\n }\n }\n }\n\n if(!target) {\n target = this.content.media;\n }\n\n if(!rect) {\n realParent = target.parentElement as HTMLElement;\n rect = target.getBoundingClientRect();\n }\n\n let needOpacity = false;\n if(target !== this.content.media && !target.classList.contains('profile-avatars-avatar')) {\n const overflowElement = findUpClassName(realParent, 'scrollable');\n const visibleRect = getVisibleRect(realParent, overflowElement);\n\n if(closing && (!visibleRect || visibleRect.overflow.vertical === 2 || visibleRect.overflow.horizontal === 2)) {\n target = this.content.media;\n realParent = target.parentElement as HTMLElement;\n rect = target.getBoundingClientRect();\n } else if(visibleRect && (visibleRect.overflow.vertical === 1 || visibleRect.overflow.horizontal === 1)) {\n needOpacity = true;\n }\n }\n\n const containerRect = this.content.media.getBoundingClientRect();\n \n let transform = '';\n let left: number;\n let top: number;\n\n if(wasActive) {\n left = fromRight === 1 ? windowSize.windowW : -containerRect.width;\n top = containerRect.top;\n } else {\n left = rect.left;\n top = rect.top;\n }\n\n /* if(zoomValue > 1) { // 33\n // const diffX = (rect.width * zoomValue - rect.width) / 4;\n const diffX = (rect.width * zoomValue - rect.width) / 2;\n const diffY = (rect.height * zoomValue - rect.height) / 4;\n // left -= diffX;\n // top += diffY;\n } */\n\n transform += `translate3d(${left}px,${top}px,0) `;\n\n /* if(wasActive) {\n left = fromRight === 1 ? appPhotosManager.windowW / 2 : -(containerRect.width + appPhotosManager.windowW / 2);\n transform += `translate(${left}px,-50%) `;\n } else {\n left = rect.left - (appPhotosManager.windowW / 2);\n top = rect.top - (appPhotosManager.windowH / 2);\n transform += `translate(${left}px,${top}px) `;\n } */\n\n let aspecter: HTMLDivElement;\n if(target instanceof HTMLImageElement || target instanceof HTMLVideoElement || target.tagName === 'DIV') {\n if(mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter')) {\n aspecter = mover.firstElementChild as HTMLDivElement;\n\n const player = aspecter.querySelector('.ckin__player');\n if(player) {\n const video = player.firstElementChild as HTMLVideoElement;\n aspecter.append(video);\n player.remove();\n }\n\n if(!aspecter.style.cssText) { // всё из-за видео, элементы управления скейлятся, так бы можно было этого не делать\n mover.classList.remove('active');\n this.setFullAspect(aspecter, containerRect, rect);\n void mover.offsetLeft; // reflow\n mover.classList.add('active');\n }\n } else {\n aspecter = document.createElement('div');\n aspecter.classList.add('media-viewer-aspecter'/* , 'disable-hover' */);\n mover.prepend(aspecter);\n }\n \n aspecter.style.cssText = `width: ${rect.width}px; height: ${rect.height}px; transform: scale3d(${containerRect.width / rect.width}, ${containerRect.height / rect.height}, 1);`;\n }\n\n mover.style.width = containerRect.width + 'px';\n mover.style.height = containerRect.height + 'px';\n\n // const scaleX = rect.width / (containerRect.width * zoomValue);\n // const scaleY = rect.height / (containerRect.height * zoomValue);\n const scaleX = rect.width / containerRect.width;\n const scaleY = rect.height / containerRect.height;\n if(!wasActive) {\n transform += `scale3d(${scaleX},${scaleY},1) `;\n }\n\n let borderRadius = window.getComputedStyle(realParent).getPropertyValue('border-radius');\n const brSplitted = fillPropertyValue(borderRadius) as string[];\n borderRadius = brSplitted.map(r => (parseInt(r) / scaleX) + 'px').join(' ');\n if(!wasActive) {\n mover.style.borderRadius = borderRadius;\n }\n //let borderRadius = '0px 0px 0px 0px';\n\n if(closing && zoomValue !== 1) {\n // const width = this.moversContainer.scrollWidth * scaleX;\n // const height = this.moversContainer.scrollHeight * scaleY;\n const willBeLeft = windowSize.windowW / 2 - rect.width / 2;\n const willBeTop = windowSize.windowH / 2 - rect.height / 2;\n const left = rect.left - willBeLeft/* + (width - rect.width) / 2 */;\n const top = rect.top - willBeTop/* + (height - rect.height) / 2 */;\n this.moversContainer.style.transform = `matrix(${scaleX}, 0, 0, ${scaleY}, ${left}, ${top})`;\n } else {\n mover.style.transform = transform;\n }\n\n needOpacity && (mover.style.opacity = '0'/* !closing ? '0' : '' */);\n\n /* if(wasActive) {\n this.log('setMoverToTarget', mover.style.transform);\n } */\n\n let path: SVGPathElement;\n const isOut = target.classList.contains('is-out');\n\n const deferred = this.setMoverAnimationPromise = deferredPromise();\n const ret = {onAnimationEnd: deferred};\n\n const timeout = setTimeout(() => {\n if(!deferred.isFulfilled && !deferred.isRejected) {\n deferred.resolve();\n }\n }, 1000);\n\n deferred.finally(() => {\n this.dispatchEvent('setMoverAfter');\n\n if(this.setMoverAnimationPromise === deferred) {\n this.setMoverAnimationPromise = null;\n }\n \n clearTimeout(timeout);\n });\n\n if(!closing) {\n let mediaElement: HTMLImageElement | HTMLVideoElement;\n let src: string;\n\n if(target instanceof HTMLVideoElement) {\n const elements = Array.from(target.parentElement.querySelectorAll('img')) as HTMLImageElement[];\n if(elements.length) {\n target = elements.pop();\n }\n }\n\n if(target.tagName === 'DIV' || target.tagName === 'AVATAR-ELEMENT') { // useContainerAsTarget\n const images = Array.from(target.querySelectorAll('img')) as HTMLImageElement[];\n const image = images.pop();\n if(image) {\n mediaElement = new Image();\n src = image.src;\n mover.append(mediaElement);\n }\n /* mediaElement = new Image();\n src = target.style.backgroundImage.slice(5, -2); */\n \n } else if(target instanceof HTMLImageElement) {\n mediaElement = new Image();\n src = target.src;\n } else if(target instanceof HTMLVideoElement) {\n mediaElement = document.createElement('video');\n mediaElement.src = target.src;\n } else if(target instanceof SVGSVGElement) {\n const clipId = target.dataset.clipId;\n const newClipId = clipId + '-mv';\n\n const {width, height} = containerRect;\n\n const newSvg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n newSvg.setAttributeNS(null, 'width', '' + width);\n newSvg.setAttributeNS(null, 'height', '' + height);\n\n // нижние два свойства для масштабирования\n newSvg.setAttributeNS(null, 'viewBox', `0 0 ${width} ${height}`);\n newSvg.setAttributeNS(null, 'preserveAspectRatio', 'xMidYMid meet');\n\n newSvg.insertAdjacentHTML('beforeend', target.firstElementChild.outerHTML.replace(clipId, newClipId));\n newSvg.insertAdjacentHTML('beforeend', target.lastElementChild.outerHTML.replace(clipId, newClipId));\n\n // теперь надо выставить новую позицию для хвостика\n const defs = newSvg.firstElementChild;\n const use = defs.firstElementChild.firstElementChild as SVGUseElement;\n if(use instanceof SVGUseElement) {\n let transform = use.getAttributeNS(null, 'transform');\n transform = transform.replace(/translate\\((.+?), (.+?)\\) scale\\((.+?), (.+?)\\)/, (match, x, y, sX, sY) => {\n x = +x;\n if(x !== 2) {\n x = width - (2 / scaleX);\n } else {\n x = 2 / scaleX;\n }\n \n y = height;\n \n return `translate(${x}, ${y}) scale(${+sX / scaleX}, ${+sY / scaleY})`;\n });\n use.setAttributeNS(null, 'transform', transform);\n \n // и новый RECT\n path = defs.firstElementChild.lastElementChild as SVGPathElement;\n\n // код ниже нужен только чтобы скрыть моргание до момента как сработает таймаут\n let d: string;\n const br: [number, number, number, number] = borderRadius.split(' ').map(v => parseInt(v)) as any;\n if(isOut) d = generatePathData(0, 0, width - 9 / scaleX, height, ...br);\n else d = generatePathData(9 / scaleX, 0, width - 9 / scaleX, height, ...br);\n path.setAttributeNS(null, 'd', d);\n }\n\n const foreignObject = newSvg.lastElementChild;\n foreignObject.setAttributeNS(null, 'width', '' + containerRect.width);\n foreignObject.setAttributeNS(null, 'height', '' + containerRect.height);\n \n mover.prepend(newSvg);\n }\n\n if(aspecter) {\n aspecter.style.borderRadius = borderRadius;\n\n if(mediaElement) {\n aspecter.append(mediaElement);\n }\n }\n\n mediaElement = mover.querySelector('video, img');\n if(mediaElement instanceof HTMLImageElement) {\n mediaElement.classList.add('thumbnail');\n if(!aspecter) {\n mediaElement.style.width = containerRect.width + 'px';\n mediaElement.style.height = containerRect.height + 'px';\n }\n\n if(src) {\n await renderImageFromUrlPromise(mediaElement, src);\n }\n }/* else if(mediaElement instanceof HTMLVideoElement && mediaElement.firstElementChild && ((mediaElement.firstElementChild as HTMLSourceElement).src || src)) {\n await new Promise((resolve, reject) => {\n mediaElement.addEventListener('loadeddata', resolve);\n\n if(src) {\n (mediaElement.firstElementChild as HTMLSourceElement).src = src;\n }\n });\n } */\n \n mover.style.display = '';\n\n fastRaf(() => {\n mover.classList.add(wasActive ? 'moving' : 'active');\n });\n } else {\n /* if(mover.classList.contains('center')) {\n mover.classList.remove('center');\n void mover.offsetLeft; // reflow\n } */\n \n if(target instanceof SVGSVGElement) {\n path = mover.querySelector('path');\n\n if(path) {\n this.sizeTailPath(path, containerRect, scaleX, delay, false, isOut, borderRadius);\n }\n }\n\n if(target.classList.contains('media-viewer-media')) {\n mover.classList.add('hiding');\n }\n\n this.wholeDiv.classList.add('backwards');\n setTimeout(() => {\n this.wholeDiv.classList.remove('active');\n }, 0);\n\n //return ret;\n\n setTimeout(() => {\n mover.style.borderRadius = borderRadius;\n\n if(mover.firstElementChild) {\n (mover.firstElementChild as HTMLElement).style.borderRadius = borderRadius;\n }\n }, delay / 2);\n\n setTimeout(() => {\n mover.innerHTML = '';\n mover.classList.remove('moving', 'active', 'hiding');\n mover.style.cssText = 'display: none;';\n\n deferred.resolve();\n }, delay);\n\n mover.classList.remove('opening');\n\n return ret;\n }\n\n mover.classList.add('opening');\n\n //await new Promise((resolve) => setTimeout(resolve, 0));\n //await new Promise((resolve) => window.requestAnimationFrame(resolve));\n // * одного RAF'а недостаточно, иногда анимация с одним не срабатывает (преимущественно на мобильных)\n await doubleRaf();\n\n // чтобы проверить установленную позицию - раскомментировать\n // throw '';\n\n //await new Promise((resolve) => setTimeout(resolve, 5e3));\n\n mover.style.transform = `translate3d(${containerRect.left}px,${containerRect.top}px,0) scale3d(1,1,1)`;\n //mover.style.transform = `translate(-50%,-50%) scale(1,1)`;\n needOpacity && (mover.style.opacity = ''/* closing ? '0' : '' */);\n\n if(aspecter) {\n this.setFullAspect(aspecter, containerRect, rect);\n }\n\n //throw '';\n\n setTimeout(() => {\n mover.style.borderRadius = '';\n\n if(mover.firstElementChild) {\n (mover.firstElementChild as HTMLElement).style.borderRadius = '';\n }\n }, 0/* delay / 2 */);\n\n mover.dataset.timeout = '' + setTimeout(() => {\n mover.classList.remove('moving', 'opening');\n\n if(aspecter) { // всё из-за видео, элементы управления скейлятся, так бы можно было этого не делать\n if(mover.querySelector('video') || true) {\n mover.classList.remove('active');\n aspecter.style.cssText = '';\n void mover.offsetLeft; // reflow\n }\n \n //aspecter.classList.remove('disable-hover');\n }\n\n // эти строки нужны для установки центральной позиции, в случае ресайза это будет нужно\n mover.classList.add('center', 'no-transition');\n /* mover.style.left = mover.style.top = '50%';\n mover.style.transform = 'translate(-50%, -50%)';\n void mover.offsetLeft; // reflow */\n\n // это уже нужно для будущих анимаций\n mover.classList.add('active');\n delete mover.dataset.timeout;\n\n deferred.resolve();\n }, delay);\n\n if(path) {\n this.sizeTailPath(path, containerRect, scaleX, delay, true, isOut, borderRadius);\n }\n\n return ret;\n }\n\n protected setFullAspect(aspecter: HTMLDivElement, containerRect: DOMRect, rect: DOMRect) {\n /* let media = aspecter.firstElementChild;\n let proportion: number;\n if(media instanceof HTMLImageElement) {\n proportion = media.naturalWidth / media.naturalHeight;\n } else if(media instanceof HTMLVideoElement) {\n proportion = media.videoWidth / media.videoHeight;\n } */\n const proportion = containerRect.width / containerRect.height;\n\n let {width, height} = rect;\n /* if(proportion === 1) {\n aspecter.style.cssText = '';\n } else { */\n if(proportion > 0) {\n width = height * proportion;\n } else {\n height = width * proportion;\n }\n\n //this.log('will set style aspecter:', `width: ${width}px; height: ${height}px; transform: scale(${containerRect.width / width}, ${containerRect.height / height});`);\n\n aspecter.style.cssText = `width: ${width}px; height: ${height}px; transform: scale3d(${containerRect.width / width}, ${containerRect.height / height}, 1);`;\n //}\n }\n\n protected sizeTailPath(path: SVGPathElement, rect: DOMRect, scaleX: number, delay: number, upscale: boolean, isOut: boolean, borderRadius: string) {\n const start = Date.now();\n const {width, height} = rect;\n delay = delay / 2;\n\n const br = borderRadius.split(' ').map(v => parseInt(v));\n\n const step = () => {\n const diff = Date.now() - start;\n\n let progress = delay ? diff / delay : 1;\n if(progress > 1) progress = 1;\n if(upscale) progress = 1 - progress;\n\n const _br: [number, number, number, number] = br.map(v => v * progress) as any;\n\n let d: string;\n if(isOut) d = generatePathData(0, 0, width - (9 / scaleX * progress), height, ..._br);\n else d = generatePathData(9 / scaleX * progress, 0, width/* width - (9 / scaleX * progress) */, height, ..._br);\n path.setAttributeNS(null, 'd', d);\n\n if(diff < delay) fastRaf(step);\n };\n \n //window.requestAnimationFrame(step);\n step();\n }\n\n protected removeCenterFromMover(mover: HTMLElement) {\n if(mover.classList.contains('center')) {\n //const rect = mover.getBoundingClientRect();\n const rect = this.content.media.getBoundingClientRect();\n mover.style.transform = `translate3d(${rect.left}px,${rect.top}px,0)`;\n mover.classList.remove('center');\n void mover.offsetLeft; // reflow\n mover.classList.remove('no-transition');\n }\n }\n\n protected moveTheMover(mover: HTMLElement, toLeft = true) {\n const windowW = windowSize.windowW;\n\n this.removeCenterFromMover(mover);\n\n //mover.classList.remove('active');\n mover.classList.add('moving');\n\n if(mover.dataset.timeout) { // и это тоже всё из-за скейла видео, так бы это не нужно было\n clearTimeout(+mover.dataset.timeout);\n }\n\n const rect = mover.getBoundingClientRect();\n\n const newTransform = mover.style.transform.replace(/translate3d\\((.+?),/, (match, p1) => {\n const x = toLeft ? -rect.width : windowW;\n //const x = toLeft ? -(rect.right + (rect.width / 2)) : windowW / 2;\n\n return match.replace(p1, x + 'px');\n });\n\n ////////this.log('set newTransform:', newTransform, mover.style.transform, toLeft);\n mover.style.transform = newTransform;\n\n setTimeout(() => {\n mover.remove();\n }, 350);\n }\n\n protected setNewMover() {\n const newMover = document.createElement('div');\n newMover.classList.add('media-viewer-mover');\n newMover.style.display = 'none';\n\n if(this.content.mover) {\n const oldMover = this.content.mover;\n oldMover.parentElement.append(newMover);\n } else {\n this.moversContainer.append(newMover);\n }\n\n return this.content.mover = newMover;\n }\n\n protected updateMediaSource(target: HTMLElement, url: string, tagName: 'video' | 'img') {\n //if(target instanceof SVGSVGElement) {\n const el = target.tagName.toLowerCase() === tagName ? target : target.querySelector(tagName) as HTMLElement;\n if(el) {\n if(!target.classList.contains('document-ico') && findUpClassName(target, 'attachment')) {\n // two parentElements because element can be contained in aspecter\n const preloader = target.parentElement.parentElement.querySelector('.preloader-container') as HTMLElement;\n if(preloader) {\n if(tagName === 'video') {\n if(preloader.classList.contains('manual')) {\n preloader.click();\n // return;\n }\n \n return;\n }\n \n preloader.remove();\n }\n }\n\n renderImageFromUrl(el, url);\n\n // ! костыль, но он тут даже и не нужен\n if(el.classList.contains('thumbnail') && el.parentElement.classList.contains('media-container-aspecter')) {\n el.classList.remove('thumbnail');\n }\n }\n /* } else {\n\n } */\n }\n\n protected setAuthorInfo(fromId: number, timestamp: number) {\n replaceContent(this.author.date, formatFullSentTime(timestamp));\n\n replaceContent(this.author.nameEl, new PeerTitle({\n peerId: fromId,\n dialog: false,\n onlyFirstName: false,\n plainText: false\n }).element);\n\n let oldAvatar = this.author.avatarEl;\n this.author.avatarEl = (this.author.avatarEl.cloneNode() as AvatarElement);\n this.author.avatarEl.setAttribute('peer', '' + (fromId || rootScope.myId));\n oldAvatar.parentElement.replaceChild(this.author.avatarEl, oldAvatar);\n }\n \n protected async _openMedia(\n media: MyDocument | MyPhoto, \n timestamp: number, \n fromId: number, \n fromRight: number, \n target?: HTMLElement, \n reverse = false, \n prevTargets: TargetType[] = [], \n nextTargets: TargetType[] = [], \n message?: Message.message\n /* , needLoadMore = true */\n ) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n /* if(DEBUG) {\n this.log('openMedia:', media, fromId, prevTargets, nextTargets);\n } */\n\n this.setAuthorInfo(fromId, timestamp);\n \n const isDocument = media._ === 'document';\n const isVideo = isDocument && media.mime_type && ((['video', 'gif'] as MyDocument['type'][]).includes(media.type) || media.mime_type.indexOf('video/') === 0);\n\n if(this.isFirstOpen) {\n //this.targetContainer = targetContainer;\n // this.needLoadMore = needLoadMore;\n this.isFirstOpen = false;\n this.listLoader.setTargets(prevTargets, nextTargets, reverse);\n (window as any).appMediaViewer = this;\n //this.loadMore = loadMore;\n\n /* if(appSidebarRight.historyTabIDs.slice(-1)[0] === AppSidebarRight.SLIDERITEMSIDS.forward) {\n appSidebarRight.forwardTab.closeBtn.click();\n await new Promise((resolve) => setTimeout(resolve, 200));\n } */\n }\n\n /* if(this.nextTargets.length < 10 && this.loadMore) {\n this.loadMore();\n } */\n\n //if(prevTarget && (!prevTarget.parentElement || !this.isElementVisible(this.targetContainer, prevTarget))) prevTarget = null;\n //if(nextTarget && (!nextTarget.parentElement || !this.isElementVisible(this.targetContainer, nextTarget))) nextTarget = null;\n\n this.buttons.prev.classList.toggle('hide', !this.listLoader.previous.length);\n this.buttons.next.classList.toggle('hide', !this.listLoader.next.length);\n \n const container = this.content.media;\n const useContainerAsTarget = !target || target === container;\n if(useContainerAsTarget) target = container;\n\n this.target = {element: target} as any;\n const tempId = ++this.tempId;\n\n if(container.firstElementChild) {\n container.innerHTML = '';\n }\n \n // ok set\n\n const wasActive = fromRight !== 0;\n if(wasActive) {\n this.moveTheMover(this.content.mover, fromRight === 1);\n this.setNewMover();\n } else {\n window.addEventListener('keydown', this.onKeyDown);\n window.addEventListener('keyup', this.onKeyUp);\n if(!IS_TOUCH_SUPPORTED) window.addEventListener('wheel', this.onWheel, {passive: false, capture: true});\n const mainColumns = document.getElementById('main-columns');\n this.pageEl.insertBefore(this.wholeDiv, mainColumns);\n void this.wholeDiv.offsetLeft; // reflow\n this.wholeDiv.classList.add('active');\n rootScope.isOverlayActive = true;\n animationIntersector.checkAnimations(true);\n\n if(!IS_MOBILE_SAFARI) {\n appNavigationController.pushItem({\n type: 'media',\n onPop: (canAnimate) => {\n if(this.setMoverAnimationPromise) {\n return false;\n }\n \n this.close();\n }\n });\n }\n }\n\n ////////this.log('wasActive:', wasActive);\n\n const mover = this.content.mover;\n\n const maxWidth = windowSize.windowW;\n //const maxWidth = this.pageEl.scrollWidth;\n // TODO: const maxHeight = mediaSizes.isMobile ? appPhotosManager.windowH : appPhotosManager.windowH - 100;\n let padding = 0;\n const windowH = windowSize.windowH;\n if(windowH < 1000000 && !mediaSizes.isMobile) {\n padding = 120;\n }\n const maxHeight = windowH - 120 - padding;\n let thumbPromise: Promise = Promise.resolve();\n const size = appPhotosManager.setAttachmentSize(media, container, maxWidth, maxHeight, mediaSizes.isMobile ? false : true, undefined, !!(isDocument && media.w && media.h)).photoSize;\n if(useContainerAsTarget) {\n const cacheContext = appDownloadManager.getCacheContext(media, size.type);\n let img: HTMLImageElement;\n if(cacheContext.downloaded) {\n img = new Image();\n img.src = cacheContext.url;\n } else {\n const gotThumb = appPhotosManager.getStrippedThumbIfNeeded(media, cacheContext, true);\n if(gotThumb) {\n thumbPromise = gotThumb.loadPromise;\n img = gotThumb.image;\n }\n }\n\n if(img) {\n img.classList.add('thumbnail');\n container.append(img);\n }\n }\n\n // need after setAttachmentSize\n /* if(useContainerAsTarget) {\n target = target.querySelector('img, video') || target;\n } */\n\n const supportsStreaming: boolean = !!(isDocument && media.supportsStreaming);\n const preloader = supportsStreaming ? this.preloaderStreamable : this.preloader;\n\n let setMoverPromise: Promise;\n if(isVideo) {\n ////////this.log('will wrap video', media, size);\n\n // потому что для safari нужно создать элемент из event'а\n // const video = document.createElement('video');\n const useController = message && media.type !== 'gif';\n const video = /* useController ? \n appMediaPlaybackController.addMedia(message, false, true) as HTMLVideoElement : \n */document.createElement('video');\n\n const set = () => this.setMoverToTarget(target, false, fromRight).then(({onAnimationEnd}) => {\n //return; // set and don't move\n //if(wasActive) return;\n //return;\n \n const div = mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter') ? mover.firstElementChild : mover;\n //const video = mover.querySelector('video') || document.createElement('video');\n \n const moverVideo = mover.querySelector('video');\n if(moverVideo) {\n moverVideo.remove();\n }\n \n //video.src = '';\n \n video.setAttribute('playsinline', 'true');\n \n // * fix for playing video if viewer is closed (https://contest.com/javascript-web-bonus/entry1425#issue11629)\n video.addEventListener('timeupdate', () => {\n if(this.tempId !== tempId) {\n video.pause();\n }\n });\n\n video.addEventListener('error', () => {\n if(video.error.code !== 4) {\n this.log.error(\"Error \" + video.error.code + \"; details: \" + video.error.message);\n }\n\n if(preloader) {\n preloader.detach();\n }\n }, {once: true});\n\n this.addEventListener('setMoverAfter', () => {\n video.src = '';\n video.load();\n }, {once: true});\n \n if(IS_SAFARI) {\n // test stream\n // video.controls = true;\n video.autoplay = true;\n }\n \n if(media.type === 'gif') {\n video.muted = true;\n video.autoplay = true;\n video.loop = true;\n }\n \n // if(!video.parentElement) {\n div.append(video);\n // }\n \n const canPlayThrough = new Promise((resolve) => {\n video.addEventListener('canplay', resolve, {once: true});\n });\n \n const createPlayer = () => {\n if(media.type !== 'gif') {\n video.dataset.ckin = 'default';\n video.dataset.overlay = '1';\n\n Promise.all([canPlayThrough, onAnimationEnd]).then(() => {\n if(this.tempId !== tempId) {\n return;\n }\n \n // const play = useController ? appMediaPlaybackController.willBePlayedMedia === video : true;\n const play = true;\n const player = this.videoPlayer = new VideoPlayer(video, play, supportsStreaming);\n player.addEventListener('toggleControls', (show) => {\n this.wholeDiv.classList.toggle('has-video-controls', show);\n });\n\n this.addEventListener('setMoverBefore', () => {\n this.wholeDiv.classList.remove('has-video-controls');\n this.videoPlayer.removeListeners();\n this.videoPlayer = undefined;\n }, {once: true});\n\n if(this.isZooming()) {\n this.videoPlayer.lockControls(false);\n }\n /* div.append(video);\n mover.append(player.wrapper); */\n });\n }\n };\n \n if(supportsStreaming) {\n onAnimationEnd.then(() => {\n if(video.readyState < video.HAVE_FUTURE_DATA) {\n preloader.attach(mover, true);\n }\n \n /* canPlayThrough.then(() => {\n preloader.detach();\n }); */\n });\n \n const attachCanPlay = () => {\n video.addEventListener('canplay', () => {\n //this.log('video waited and progress loaded');\n preloader.detach();\n video.parentElement.classList.remove('is-buffering');\n }, {once: true});\n };\n \n video.addEventListener('waiting', () => {\n const loading = video.networkState === video.NETWORK_LOADING;\n const isntEnoughData = video.readyState < video.HAVE_FUTURE_DATA;\n \n //this.log('video waiting for progress', loading, isntEnoughData);\n if(loading && isntEnoughData) {\n attachCanPlay();\n \n preloader.attach(mover, true);\n \n // поставлю класс для плеера, чтобы убрать большую иконку пока прелоадер на месте\n video.parentElement.classList.add('is-buffering');\n }\n });\n \n attachCanPlay();\n }\n \n //if(!video.src || media.url !== video.src) {\n const load = () => {\n /* if(useController) {\n appMediaPlaybackController.resolveWaitingForLoadMedia(message.peerId, message.mid, message.pFlags.is_scheduled);\n } */\n\n const cacheContext = appDownloadManager.getCacheContext(media);\n const promise: Promise = supportsStreaming ? Promise.resolve() : appDocsManager.downloadDoc(media);\n \n if(!supportsStreaming) {\n onAnimationEnd.then(() => {\n if(!cacheContext.url) {\n preloader.attach(mover, true, promise);\n }\n });\n }\n \n Promise.all([promise, onAnimationEnd]).then(() => {\n if(this.tempId !== tempId) {\n this.log.warn('media viewer changed video');\n return;\n }\n\n if(useController) {\n const rollback = appMediaPlaybackController.setSingleMedia(video, message);\n\n this.addEventListener('setMoverBefore', () => {\n rollback();\n }, {once: true});\n }\n \n const url = cacheContext.url;\n if(target instanceof SVGSVGElement/* && (video.parentElement || !isSafari) */) { // if video exists\n //if(!video.parentElement) {\n div.firstElementChild.lastElementChild.append(video);\n //}\n } else {\n renderImageFromUrl(video, url);\n }\n\n this.updateMediaSource(target, url, 'video');\n\n createPlayer();\n });\n \n return promise;\n };\n \n this.lazyLoadQueue.unshift({load});\n //} else createPlayer();\n });\n\n setMoverPromise = thumbPromise.then(set);\n } else {\n const set = () => this.setMoverToTarget(target, false, fromRight).then(({onAnimationEnd}) => {\n //return; // set and don't move\n //if(wasActive) return;\n //return;\n \n const load = () => {\n const cacheContext = appDownloadManager.getCacheContext(media, size.type);\n const cancellablePromise = isDocument ? appDocsManager.downloadDoc(media) : appPhotosManager.preloadPhoto(media, size);\n \n onAnimationEnd.then(() => {\n if(!cacheContext.url) {\n this.preloader.attachPromise(cancellablePromise);\n //this.preloader.attach(mover, true, cancellablePromise);\n }\n });\n \n Promise.all([onAnimationEnd, cancellablePromise]).then(() => {\n if(this.tempId !== tempId) {\n this.log.warn('media viewer changed photo');\n return;\n }\n \n ///////this.log('indochina', blob);\n \n const url = cacheContext.url;\n if(target instanceof SVGSVGElement) {\n this.updateMediaSource(target, url, 'img');\n this.updateMediaSource(mover, url, 'img');\n \n if(mediaSizes.isMobile) {\n const imgs = mover.querySelectorAll('img');\n if(imgs && imgs.length) {\n imgs.forEach(img => {\n img.classList.remove('thumbnail'); // может здесь это вообще не нужно\n });\n }\n }\n } else {\n const div = mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter') ? mover.firstElementChild : mover;\n const haveImage = div.firstElementChild?.tagName === 'IMG' ? div.firstElementChild as HTMLImageElement : null;\n if(!haveImage || haveImage.src !== url) {\n let image = new Image();\n image.classList.add('thumbnail');\n \n //this.log('will renderImageFromUrl:', image, div, target);\n \n renderImageFromUrl(image, url, () => {\n this.updateMediaSource(target, url, 'img');\n \n if(haveImage) {\n fastRaf(() => {\n haveImage.remove();\n });\n }\n \n div.append(image);\n });\n }\n }\n \n //this.preloader.detach();\n }).catch(err => {\n this.log.error(err);\n this.preloader.attach(mover);\n this.preloader.setManual();\n });\n \n return cancellablePromise;\n };\n \n this.lazyLoadQueue.unshift({load});\n });\n\n setMoverPromise = thumbPromise.then(set);\n }\n\n return this.setMoverPromise = setMoverPromise.catch(() => {\n this.setMoverAnimationPromise = null;\n }).finally(() => {\n this.setMoverPromise = null;\n });\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function getVisibleRect(element: HTMLElement, overflowElement: HTMLElement) {\r\n const rect = element.getBoundingClientRect();\r\n const overflowRect = overflowElement.getBoundingClientRect();\r\n\r\n let {top: overflowTop, bottom: overflowBottom} = overflowRect;\r\n\r\n // * respect sticky headers\r\n const sticky = overflowElement.querySelector('.sticky');\r\n if(sticky) {\r\n const stickyRect = sticky.getBoundingClientRect();\r\n overflowTop = stickyRect.bottom;\r\n }\r\n\r\n if(rect.top >= overflowBottom\r\n || rect.bottom <= overflowTop\r\n || rect.right <= overflowRect.left\r\n || rect.left >= overflowRect.right) {\r\n return null;\r\n }\r\n\r\n const overflow = {\r\n top: false,\r\n right: false,\r\n bottom: false,\r\n left: false,\r\n vertical: 0 as 0 | 1 | 2,\r\n horizontal: 0 as 0 | 1 | 2\r\n };\r\n\r\n // @ts-ignore\r\n const w: any = 'visualViewport' in window ? window.visualViewport : window;\r\n const windowWidth = w.width || w.innerWidth;\r\n const windowHeight = w.height || w.innerHeight;\r\n\r\n return {\r\n rect: {\r\n top: rect.top < overflowTop && overflowTop !== 0 ? (overflow.top = true, ++overflow.vertical, overflowTop) : rect.top,\r\n right: 0,\r\n bottom: rect.bottom > overflowBottom && overflowBottom !== windowHeight ? (overflow.bottom = true, ++overflow.vertical, overflowBottom) : rect.bottom,\r\n left: 0\r\n },\r\n overflow\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function fillPropertyValue(str: string) {\r\n let splitted = str.split(' ');\r\n if(splitted.length !== 4) {\r\n if(!splitted[0]) splitted[0] = '0px';\r\n for(let i = splitted.length; i < 4; ++i) {\r\n splitted[i] = splitted[i % 2] || splitted[0] || '0px';\r\n }\r\n }\r\n\r\n return splitted;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport MEDIA_MIME_TYPES_SUPPORTED from \"../environment/mediaMimeTypesSupport\";\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\nimport setInnerHTML from \"../helpers/dom/setInnerHTML\";\nimport mediaSizes from \"../helpers/mediaSizes\";\nimport SearchListLoader from \"../helpers/searchListLoader\";\nimport { Message } from \"../layer\";\nimport appDocsManager, { MyDocument } from \"../lib/appManagers/appDocsManager\";\nimport appImManager from \"../lib/appManagers/appImManager\";\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\nimport appPhotosManager, { MyPhoto } from \"../lib/appManagers/appPhotosManager\";\nimport RichTextProcessor from \"../lib/richtextprocessor\";\nimport { MediaSearchContext } from \"./appMediaPlaybackController\";\nimport AppMediaViewerBase, { MEDIA_VIEWER_CLASSNAME } from \"./appMediaViewerBase\";\nimport { ButtonMenuItemOptions } from \"./buttonMenu\";\nimport PopupDeleteMessages from \"./popups/deleteMessages\";\nimport PopupForward from \"./popups/forward\";\nimport Scrollable from \"./scrollable\";\nimport appSidebarRight from \"./sidebarRight\";\nimport AppSharedMediaTab from \"./sidebarRight/tabs/sharedMedia\";\n\ntype AppMediaViewerTargetType = {\n element: HTMLElement,\n mid: number,\n peerId: number\n};\nexport default class AppMediaViewer extends AppMediaViewerBase<'caption', 'delete' | 'forward', AppMediaViewerTargetType> {\n protected btnMenuDelete: HTMLElement;\n protected listLoader: SearchListLoader;\n\n get searchContext() {\n return this.listLoader.searchContext;\n }\n\n constructor() {\n super(new SearchListLoader({\n processItem: (item) => {\n const isForDocument = this.searchContext.inputFilter._ === 'inputMessagesFilterDocument';\n const {mid, peerId} = item;\n const media: MyPhoto | MyDocument = appMessagesManager.getMediaFromMessage(item);\n\n if(!media) return;\n \n if(isForDocument && !AppMediaViewer.isMediaCompatibleForDocumentViewer(media)) {\n return;\n }\n\n return {element: null as HTMLElement, mid, peerId};\n }\n }), ['delete', 'forward']);\n\n this.listLoader.onEmptied = () => {\n this.close();\n };\n\n /* const stub = document.createElement('div');\n stub.classList.add(MEDIA_VIEWER_CLASSNAME + '-stub');\n this.content.main.prepend(stub); */\n\n this.content.caption = document.createElement('div');\n this.content.caption.classList.add(MEDIA_VIEWER_CLASSNAME + '-caption'/* , 'media-viewer-stub' */);\n\n let captionTimeout: number;\n const setCaptionTimeout = () => {\n if(captionTimeout) {\n clearTimeout(captionTimeout);\n }\n\n captionTimeout = window.setTimeout(() => {\n captionTimeout = undefined;\n this.content.caption.classList.remove('is-focused');\n }, 800);\n };\n this.content.caption.addEventListener('touchstart', () => {\n if(!mediaSizes.isMobile) return;\n\n this.content.caption.classList.add('is-focused');\n \n if(captionTimeout) {\n clearTimeout(captionTimeout);\n captionTimeout = undefined;\n }\n \n document.addEventListener('touchend', setCaptionTimeout, {once: true});\n });\n\n const captionScrollable = new Scrollable(this.content.caption);\n captionScrollable.onAdditionalScroll = setCaptionTimeout;\n\n //this.content.main.append(this.content.caption);\n this.wholeDiv.append(this.content.caption);\n\n attachClickEvent(this.buttons.delete, this.onDeleteClick);\n\n const buttons: ButtonMenuItemOptions[] = [{\n icon: 'forward',\n text: 'Forward',\n onClick: this.onForwardClick\n }, {\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: this.onDownloadClick\n }, {\n icon: 'delete danger',\n text: 'Delete',\n onClick: this.onDeleteClick\n }];\n\n this.setBtnMenuToggle(buttons);\n this.btnMenuDelete = buttons[buttons.length - 1].element;\n\n // * constructing html end\n \n this.setListeners();\n }\n\n protected setListeners() {\n super.setListeners();\n this.buttons.forward.addEventListener('click', this.onForwardClick);\n this.author.container.addEventListener('click', this.onAuthorClick);\n\n const onCaptionClick = (e: MouseEvent) => {\n if(e.target instanceof HTMLAnchorElement) { // close viewer if it's t.me/ redirect\n const onclick = (e.target as HTMLElement).getAttribute('onclick');\n if(!onclick || onclick.includes('showMaskedAlert')) {\n return;\n }\n\n cancelEvent(e);\n\n this.close().then(() => {\n this.content.caption.removeEventListener('click', onCaptionClick, {capture: true});\n (e.target as HTMLAnchorElement).click();\n });\n\n return false;\n }\n };\n this.content.caption.addEventListener('click', onCaptionClick, {capture: true});\n }\n\n /* public close(e?: MouseEvent) {\n const good = !this.setMoverAnimationPromise;\n const promise = super.close(e);\n\n if(good) { // clear\n this.currentMessageId = 0;\n this.peerId = 0;\n }\n\n return promise;\n } */\n\n protected getMessageByPeer(peerId: number, mid: number) {\n return this.searchContext.isScheduled ? appMessagesManager.getScheduledMessageByPeer(peerId, mid) : appMessagesManager.getMessageByPeer(peerId, mid);\n }\n\n onPrevClick = (target: AppMediaViewerTargetType) => {\n this.openMedia(this.getMessageByPeer(target.peerId, target.mid), target.element, -1);\n };\n\n onNextClick = (target: AppMediaViewerTargetType) => {\n this.openMedia(this.getMessageByPeer(target.peerId, target.mid), target.element, 1);\n };\n\n onDeleteClick = () => {\n const target = this.target;\n new PopupDeleteMessages(target.peerId, [target.mid], 'chat', () => {\n this.target = {element: this.content.media} as any;\n this.close();\n });\n };\n\n onForwardClick = () => {\n const target = this.target;\n if(target.mid) {\n //appSidebarRight.forwardTab.open([target.mid]);\n new PopupForward({\n [target.peerId]: [target.mid]\n }, () => {\n return this.close();\n });\n }\n };\n\n onAuthorClick = (e: MouseEvent) => {\n const {mid, peerId} = this.target;\n if(mid && mid !== Number.MAX_SAFE_INTEGER) {\n const threadId = this.searchContext.threadId;\n this.close(e)\n //.then(() => mediaSizes.isMobile ? appSidebarRight.sharedMediaTab.closeBtn.click() : Promise.resolve())\n .then(() => {\n if(mediaSizes.isMobile) {\n const tab = appSidebarRight.getTab(AppSharedMediaTab);\n if(tab) {\n tab.close();\n }\n }\n\n const message = this.getMessageByPeer(peerId, mid);\n appImManager.setInnerPeer(message.peerId, mid, threadId ? 'discussion' : undefined, threadId);\n });\n }\n };\n\n onDownloadClick = () => {\n const {peerId, mid} = this.target;\n const message = this.getMessageByPeer(peerId, mid);\n if(message.media.photo) {\n appPhotosManager.savePhotoFile(message.media.photo, appImManager.chat.bubbles.lazyLoadQueue.queueId);\n } else {\n let document: MyDocument = null;\n\n if(message.media.webpage) document = message.media.webpage.document;\n else document = message.media.document;\n\n if(document) {\n //console.log('will save document:', document);\n appDocsManager.saveDocFile(document, appImManager.chat.bubbles.lazyLoadQueue.queueId);\n }\n }\n };\n\n private setCaption(message: Message.message) {\n const caption = message.message;\n let html = '';\n if(caption) {\n html = RichTextProcessor.wrapRichText(caption, {\n entities: message.totalEntities\n });\n }\n \n // html = 'Dandelion are a family of flowering plants that grow in many parts of the world.';\n setInnerHTML(this.content.caption.firstElementChild, html);\n this.content.caption.classList.toggle('hide', !caption);\n // this.content.container.classList.toggle('with-caption', !!caption);\n }\n\n public setSearchContext(context: MediaSearchContext) {\n this.listLoader.setSearchContext(context);\n\n return this;\n }\n\n public async openMedia(message: any, target?: HTMLElement, fromRight = 0, reverse = false, \n prevTargets: AppMediaViewerTargetType[] = [], nextTargets: AppMediaViewerTargetType[] = []/* , needLoadMore = true */) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n const mid = message.mid;\n const fromId = message.fromId;\n const media = appMessagesManager.getMediaFromMessage(message);\n\n this.buttons.forward.classList.toggle('hide', message._ === 'messageService');\n\n const canDeleteMessage = appMessagesManager.canDeleteMessage(message);\n [this.buttons.delete, this.btnMenuDelete].forEach(button => {\n button.classList.toggle('hide', !canDeleteMessage);\n });\n\n this.setCaption(message);\n const promise = super._openMedia(media, message.date, fromId, fromRight, target, reverse, prevTargets, nextTargets, message/* , needLoadMore */);\n this.target.mid = mid;\n this.target.peerId = message.peerId;\n\n return promise;\n }\n\n public static isMediaCompatibleForDocumentViewer(media: MyPhoto | MyDocument) {\n return media._ === 'photo' || MEDIA_MIME_TYPES_SUPPORTED.has(media.mime_type);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\nimport ListLoader, { ListLoaderOptions } from \"./listLoader\";\n\nexport default class AvatarListLoader extends ListLoader {\n private peerId: number;\n\n constructor(options: Omit, 'loadMore'> & {peerId: number}) {\n super({\n ...options,\n loadMore: (anchor, older, loadCount) => {\n if(this.peerId < 0 || !older) return Promise.resolve({count: 0, items: []}); // ! это значит, что открыло аватар чата, но следующих фотографий нет.\n\n const maxId = anchor?.photoId;\n return appPhotosManager.getUserPhotos(this.peerId, maxId, loadCount).then(value => {\n const items = value.photos.map(photoId => {\n return {element: null as HTMLElement, photoId} as any;\n });\n\n return {count: value.count, items};\n });\n }\n });\n\n this.loadedAllUp = true;\n this.peerId = options.peerId;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport AvatarListLoader from \"../helpers/avatarListLoader\";\nimport appImManager from \"../lib/appManagers/appImManager\";\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\nimport AppMediaViewerBase from \"./appMediaViewerBase\";\n\ntype AppMediaViewerAvatarTargetType = {element: HTMLElement, photoId: string};\nexport default class AppMediaViewerAvatar extends AppMediaViewerBase<'', 'delete', AppMediaViewerAvatarTargetType> {\n public peerId: number;\n\n constructor(peerId: number) {\n super(new AvatarListLoader({peerId}), [/* 'delete' */]);\n\n this.peerId = peerId;\n\n this.setBtnMenuToggle([{\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: this.onDownloadClick\n }/* , {\n icon: 'delete danger btn-disabled',\n text: 'Delete',\n onClick: () => {}\n } */]);\n\n // * constructing html end\n \n this.setListeners();\n }\n\n onPrevClick = (target: AppMediaViewerAvatarTargetType) => {\n this.openMedia(target.photoId, target.element, -1);\n };\n\n onNextClick = (target: AppMediaViewerAvatarTargetType) => {\n this.openMedia(target.photoId, target.element, 1);\n };\n\n onDownloadClick = () => {\n appPhotosManager.savePhotoFile(appPhotosManager.getPhoto(this.target.photoId), appImManager.chat.bubbles.lazyLoadQueue.queueId);\n };\n\n public async openMedia(photoId: string, target?: HTMLElement, fromRight = 0, prevTargets?: AppMediaViewerAvatarTargetType[], nextTargets?: AppMediaViewerAvatarTargetType[]) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n const photo = appPhotosManager.getPhoto(photoId);\n const ret = super._openMedia(photo, photo.date, this.peerId, fromRight, target, false, prevTargets, nextTargets);\n this.target.photoId = photo.id;\n\n return ret;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport appMessagesManager from \"../lib/appManagers/appMessagesManager\";\r\nimport appProfileManager from \"../lib/appManagers/appProfileManager\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport { Message } from \"../layer\";\r\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\r\nimport appPhotosManager from \"../lib/appManagers/appPhotosManager\";\r\nimport type { LazyLoadQueueIntersector } from \"./lazyLoadQueue\";\r\nimport { attachClickEvent } from \"../helpers/dom/clickEvent\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport appAvatarsManager from \"../lib/appManagers/appAvatarsManager\";\r\nimport AppMediaViewer from \"./appMediaViewer\";\r\nimport AppMediaViewerAvatar from \"./appMediaViewerAvatar\";\r\n\r\nconst onAvatarUpdate = (peerId: number) => {\r\n appAvatarsManager.removeFromAvatarsCache(peerId);\r\n (Array.from(document.querySelectorAll('avatar-element[peer=\"' + peerId + '\"]')) as AvatarElement[]).forEach(elem => {\r\n //console.log('updating avatar:', elem);\r\n elem.update();\r\n });\r\n};\r\n\r\nrootScope.addEventListener('avatar_update', onAvatarUpdate);\r\nrootScope.addEventListener('peer_title_edit', (peerId) => {\r\n if(!appAvatarsManager.isAvatarCached(peerId)) {\r\n onAvatarUpdate(peerId);\r\n }\r\n});\r\n\r\nexport async function openAvatarViewer(target: HTMLElement, peerId: number, middleware: () => boolean, message?: any, prevTargets?: {element: HTMLElement, item: string | Message.messageService}[], nextTargets?: typeof prevTargets) {\r\n let photo = await appProfileManager.getFullPhoto(peerId);\r\n if(!middleware() || !photo) {\r\n return;\r\n }\r\n\r\n const getTarget = () => {\r\n const good = Array.from(target.querySelectorAll('img')).find(img => !img.classList.contains('emoji'));\r\n return good ? target : null;\r\n };\r\n\r\n if(peerId < 0) {\r\n const hadMessage = !!message;\r\n const inputFilter = 'inputMessagesFilterChatPhotos';\r\n if(!message) {\r\n message = await appMessagesManager.getSearch({\r\n peerId, \r\n inputFilter: {_: inputFilter}, \r\n maxId: 0, \r\n limit: 1 \r\n }).then(value => {\r\n //console.log(lol);\r\n // ! by descend\r\n return value.history[0];\r\n });\r\n\r\n if(!middleware()) {\r\n return;\r\n }\r\n }\r\n\r\n if(message) {\r\n // ! гений в деле, костылируем (но это гениально)\r\n const messagePhoto = message.action.photo;\r\n if(messagePhoto.id !== photo.id) {\r\n if(!hadMessage) {\r\n message = appMessagesManager.generateFakeAvatarMessage(peerId, photo);\r\n } else {\r\n \r\n }\r\n }\r\n\r\n const f = (arr: typeof prevTargets) => arr.map(el => ({\r\n element: el.element,\r\n mid: (el.item as Message.messageService).mid,\r\n peerId: (el.item as Message.messageService).peerId\r\n }));\r\n\r\n new AppMediaViewer()\r\n .setSearchContext({\r\n peerId,\r\n inputFilter: {_: inputFilter},\r\n })\r\n .openMedia(message, getTarget(), undefined, undefined, prevTargets ? f(prevTargets) : undefined, nextTargets ? f(nextTargets) : undefined);\r\n\r\n return;\r\n }\r\n }\r\n\r\n if(photo) {\r\n if(typeof(message) === 'string') {\r\n photo = appPhotosManager.getPhoto(message);\r\n }\r\n \r\n const f = (arr: typeof prevTargets) => arr.map(el => ({\r\n element: el.element,\r\n photoId: el.item as string\r\n }));\r\n\r\n new AppMediaViewerAvatar(peerId).openMedia(photo.id, getTarget(), undefined, prevTargets ? f(prevTargets) : undefined, nextTargets ? f(nextTargets) : undefined);\r\n }\r\n}\r\n\r\nconst believeMe: Map> = new Map();\r\nconst seen: Set = new Set();\r\n\r\nexport default class AvatarElement extends HTMLElement {\r\n private peerId: number;\r\n private isDialog = false;\r\n private peerTitle: string;\r\n public loadPromises: Promise[];\r\n public lazyLoadQueue: LazyLoadQueueIntersector;\r\n private addedToQueue = false;\r\n\r\n connectedCallback() {\r\n // браузер вызывает этот метод при добавлении элемента в документ\r\n // (может вызываться много раз, если элемент многократно добавляется/удаляется)\r\n\r\n this.isDialog = this.getAttribute('dialog') === '1';\r\n if(this.getAttribute('clickable') === '') {\r\n this.setAttribute('clickable', 'set');\r\n let loading = false;\r\n attachClickEvent(this, async(e) => {\r\n cancelEvent(e);\r\n if(loading) return;\r\n //console.log('avatar clicked');\r\n const peerId = this.peerId;\r\n loading = true;\r\n await openAvatarViewer(this, this.peerId, () => this.peerId === peerId);\r\n loading = false;\r\n });\r\n }\r\n }\r\n\r\n disconnectedCallback() {\r\n // браузер вызывает этот метод при удалении элемента из документа\r\n // (может вызываться много раз, если элемент многократно добавляется/удаляется)\r\n const set = believeMe.get(this.peerId);\r\n if(set && set.has(this)) {\r\n set.delete(this);\r\n if(!set.size) {\r\n believeMe.delete(this.peerId);\r\n }\r\n }\r\n\r\n if(this.lazyLoadQueue) {\r\n this.lazyLoadQueue.unobserve(this);\r\n }\r\n }\r\n\r\n static get observedAttributes(): string[] {\r\n return ['peer', 'dialog', 'peer-title'/* массив имён атрибутов для отслеживания их изменений */];\r\n }\r\n\r\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\r\n //console.log('avatar changed attribute:', name, oldValue, newValue);\r\n // вызывается при изменении одного из перечисленных выше атрибутов\r\n if(name === 'peer') {\r\n if(this.peerId === +newValue) {\r\n return;\r\n }\r\n \r\n this.peerId = appPeersManager.getPeerMigratedTo(+newValue) || +newValue;\r\n\r\n const wasPeerId = +oldValue;\r\n if(wasPeerId) {\r\n const set = believeMe.get(wasPeerId);\r\n if(set) {\r\n set.delete(this);\r\n if(!set.size) {\r\n believeMe.delete(wasPeerId);\r\n }\r\n }\r\n }\r\n\r\n this.update();\r\n } else if(name === 'peer-title') {\r\n this.peerTitle = newValue;\r\n } else if(name === 'dialog') {\r\n this.isDialog = newValue === '1';\r\n }\r\n }\r\n\r\n private r(onlyThumb = false) {\r\n const res = appAvatarsManager.putPhoto(this, this.peerId, this.isDialog, this.peerTitle, onlyThumb);\r\n const promise = res ? res.loadPromise : Promise.resolve();\r\n if(this.loadPromises) {\r\n if(res && res.cached) {\r\n this.loadPromises.push(promise);\r\n }\r\n\r\n promise.finally(() => {\r\n this.loadPromises = undefined;\r\n });\r\n }\r\n\r\n return res;\r\n }\r\n\r\n public update() {\r\n if(this.lazyLoadQueue) {\r\n if(!seen.has(this.peerId)) {\r\n if(this.addedToQueue) return;\r\n this.addedToQueue = true;\r\n \r\n let set = believeMe.get(this.peerId);\r\n if(!set) {\r\n set = new Set();\r\n believeMe.set(this.peerId, set);\r\n }\r\n \r\n set.add(this);\r\n\r\n this.r(true);\r\n\r\n this.lazyLoadQueue.push({\r\n div: this, \r\n load: () => {\r\n seen.add(this.peerId);\r\n return this.update();\r\n }\r\n });\r\n\r\n return;\r\n } else if(this.addedToQueue) {\r\n this.lazyLoadQueue.unobserve(this);\r\n }\r\n } \r\n \r\n seen.add(this.peerId);\r\n \r\n const res = this.r();\r\n const promise = res ? res.loadPromise : Promise.resolve();\r\n\r\n if(this.addedToQueue) {\r\n promise.finally(() => {\r\n this.addedToQueue = false;\r\n });\r\n }\r\n\r\n const set = believeMe.get(this.peerId);\r\n if(set) {\r\n set.delete(this);\r\n const arr = Array.from(set);\r\n believeMe.delete(this.peerId);\r\n \r\n\r\n for(let i = 0, length = arr.length; i < length; ++i) {\r\n arr[i].update();\r\n }\r\n }\r\n\r\n return promise;\r\n }\r\n}\r\n\r\ncustomElements.define('avatar-element', AvatarElement);\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appDialogsManager from \"../lib/appManagers/appDialogsManager\";\nimport appMessagesManager, {Dialog} from \"../lib/appManagers/appMessagesManager\";\nimport appPeersManager from \"../lib/appManagers/appPeersManager\";\nimport rootScope from \"../lib/rootScope\";\nimport { positionMenu, openBtnMenu } from \"./misc\";\nimport ButtonMenu, { ButtonMenuItemOptions } from \"./buttonMenu\";\nimport PopupDeleteDialog from \"./popups/deleteDialog\";\nimport { i18n } from \"../lib/langPack\";\nimport findUpTag from \"../helpers/dom/findUpTag\";\nimport appNotificationsManager from \"../lib/appManagers/appNotificationsManager\";\nimport PopupPeer from \"./popups/peer\";\nimport AppChatFoldersTab from \"./sidebarLeft/tabs/chatFolders\";\nimport appSidebarLeft from \"./sidebarLeft\";\nimport { toastNew } from \"./toast\";\n\nexport default class DialogsContextMenu {\n private element: HTMLElement;\n private buttons: (ButtonMenuItemOptions & {verify: () => boolean})[];\n\n private selectedId: number;\n private filterId: number;\n private dialog: Dialog;\n\n private init() {\n this.buttons = [{\n icon: 'unread',\n text: 'MarkAsUnread',\n onClick: this.onUnreadClick,\n verify: () => {\n const isUnread = !!(this.dialog.pFlags?.unread_mark || this.dialog.unread_count);\n return !isUnread;\n }\n }, {\n icon: 'readchats',\n text: 'MarkAsRead',\n onClick: this.onUnreadClick,\n verify: () => { \n const isUnread = !!(this.dialog.pFlags?.unread_mark || this.dialog.unread_count);\n return isUnread;\n }\n }, {\n icon: 'pin',\n text: 'ChatList.Context.Pin',\n onClick: this.onPinClick,\n verify: () => {\n const isPinned = this.filterId > 1 ? appMessagesManager.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId) : !!this.dialog.pFlags?.pinned;\n return !isPinned;\n }\n }, {\n icon: 'unpin',\n text: 'ChatList.Context.Unpin',\n onClick: this.onPinClick,\n verify: () => {\n const isPinned = this.filterId > 1 ? appMessagesManager.filtersStorage.getFilter(this.filterId).pinned_peers.includes(this.dialog.peerId) : !!this.dialog.pFlags?.pinned;\n return isPinned;\n }\n }, {\n icon: 'mute',\n text: 'ChatList.Context.Mute',\n onClick: this.onMuteClick,\n verify: () => {\n return this.selectedId !== rootScope.myId && !appNotificationsManager.isPeerLocalMuted(this.dialog.peerId); \n }\n }, {\n icon: 'unmute',\n text: 'ChatList.Context.Unmute',\n onClick: this.onUnmuteClick,\n verify: () => {\n return this.selectedId !== rootScope.myId && appNotificationsManager.isPeerLocalMuted(this.dialog.peerId); \n }\n }, {\n icon: 'archive',\n text: 'Archive',\n onClick: this.onArchiveClick,\n verify: () => this.filterId === 0 && this.selectedId !== rootScope.myId\n }, {\n icon: 'unarchive',\n text: 'Unarchive',\n onClick: this.onArchiveClick,\n verify: () => this.filterId === 1 && this.selectedId !== rootScope.myId\n }, {\n icon: 'delete danger',\n text: 'Delete',\n onClick: this.onDeleteClick,\n verify: () => true\n }];\n\n this.element = ButtonMenu(this.buttons);\n this.element.id = 'dialogs-contextmenu';\n this.element.classList.add('contextmenu');\n document.getElementById('page-chats').append(this.element);\n }\n\n private onArchiveClick = () => {\n let dialog = appMessagesManager.getDialogOnly(this.selectedId);\n if(dialog) {\n appMessagesManager.editPeerFolders([dialog.peerId], +!dialog.folder_id);\n }\n };\n\n private onPinClick = () => {\n appMessagesManager.toggleDialogPin(this.selectedId, this.filterId).catch(err => {\n if(err.type === 'PINNED_DIALOGS_TOO_MUCH') {\n if(this.filterId >= 1) {\n toastNew({langPackKey: 'PinFolderLimitReached'});\n } else {\n new PopupPeer('pinned-dialogs-too-much', {\n buttons: [{\n langKey: 'OK',\n isCancel: true\n }, {\n langKey: 'FiltersSetupPinAlert',\n callback: () => {\n new AppChatFoldersTab(appSidebarLeft).open();\n }\n }],\n descriptionLangKey: 'PinToTopLimitReached2',\n descriptionLangArgs: [i18n('Chats', [rootScope.config.pinned_dialogs_count_max])]\n }).show();\n }\n }\n });\n };\n\n private onUnmuteClick = () => {\n appMessagesManager.mutePeer(this.selectedId, false);\n };\n \n private onMuteClick = () => {\n appMessagesManager.mutePeer(this.selectedId, true);\n };\n\n private onUnreadClick = () => {\n const dialog = appMessagesManager.getDialogOnly(this.selectedId);\n if(!dialog) return;\n\n if(dialog.unread_count) {\n appMessagesManager.readHistory(this.selectedId, dialog.top_message);\n appMessagesManager.markDialogUnread(this.selectedId, true);\n } else {\n appMessagesManager.markDialogUnread(this.selectedId);\n }\n };\n\n private onDeleteClick = () => {\n new PopupDeleteDialog(this.selectedId/* , 'delete' */);\n };\n\n onContextMenu = (e: MouseEvent | Touch) => {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n let li: HTMLElement = null;\n \n try {\n li = findUpTag(e.target, 'LI');\n } catch(e) {}\n \n if(!li) return;\n\n if(e instanceof MouseEvent) e.preventDefault();\n if(this.element.classList.contains('active')) {\n return false;\n }\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n this.filterId = appDialogsManager.filterId;\n\n this.selectedId = +li.dataset.peerId;\n this.dialog = appMessagesManager.getDialogOnly(this.selectedId);\n\n this.buttons.forEach(button => {\n const good = button.verify();\n\n button.element.classList.toggle('hide', !good);\n });\n\n // delete button\n this.buttons[this.buttons.length - 1].element.lastChild.replaceWith(i18n(appPeersManager.getDeleteButtonText(this.selectedId)));\n\n li.classList.add('menu-open');\n positionMenu(e, this.element);\n openBtnMenu(this.element, () => {\n li.classList.remove('menu-open');\n this.selectedId = this.dialog = this.filterId = undefined;\n });\n };\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport enum ConnectionStatus {\r\n Connected,\r\n Connecting,\r\n Closed,\r\n TimedOut\r\n};\r\n\r\nexport type ConnectionStatusChange = {\r\n _: 'networkerStatus', \r\n status: ConnectionStatus,\r\n dcId: number,\r\n name: string,\r\n isFileNetworker: boolean,\r\n isFileDownload: boolean,\r\n isFileUpload: boolean,\r\n retryAt?: number\r\n};\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { Message } from \"../layer\";\n/* import findUpClassName from \"../helpers/dom/findUpClassName\";\nimport rootScope from \"../lib/rootScope\";\nimport Transition from \"./transition\"; */\n\nexport enum SENDING_STATUS {\n Error = -1,\n Pending,\n Sent,\n Read\n}\n\nexport function getSendingStatus(message: Message.message | Message.messageService) {\n return message.pFlags.is_outgoing ? \n SENDING_STATUS.Pending : (\n message.pFlags.unread ? \n SENDING_STATUS.Sent : \n SENDING_STATUS.Read\n );\n}\n\nexport function setSendingStatus(\n container: HTMLElement, \n message?: Message.message | Message.messageService, \n disableAnimationIfRippleFound?: boolean\n) {\n let className: 'check' | 'checks' | 'sending';\n if(message?.pFlags.out) {\n if(message.pFlags.is_outgoing) {\n className = 'sending';\n } else if(message.pFlags.unread) {\n className = 'check';\n } else {\n className = 'checks';\n }\n }\n\n if(!className) {\n container.textContent = '';\n return;\n }\n \n const iconClassName = 'tgico-' + className;\n const lastElement = container.lastElementChild as HTMLElement;\n if(lastElement && lastElement.classList.contains(iconClassName)) {\n return;\n }\n \n const element = document.createElement('i');\n element.classList.add('sending-status-icon', /* 'transition-item', */ iconClassName);\n container.append(element);\n\n if(lastElement) {\n lastElement.remove();\n }\n\n /* if(!lastElement) {\n element.classList.add('active');\n return;\n }\n\n const select = Transition(container, undefined, 350, () => {\n lastElement.remove();\n }, false, true, false);\n\n let animate = rootScope.settings.animationsEnabled && className !== 'sending' && !lastElement.classList.contains('tgico-sending');\n if(disableAnimationIfRippleFound && animate) {\n const parent = findUpClassName(container, 'rp');\n if(parent.querySelector('.c-ripple__circle') || parent.matches(':hover')) {\n animate = false;\n }\n }\n\n select(element, animate, lastElement); */\n\n /* SetTransition(lastElement, 'is-visible', false, 350, () => {\n // lastElement.remove();\n }, 2);\n SetTransition(element, 'is-visible', true, 350, undefined, 2); */\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport App from \"../config/app\";\r\nimport DEBUG from \"../config/debug\";\r\nimport replaceContent from \"../helpers/dom/replaceContent\";\r\nimport apiUpdatesManager from \"../lib/appManagers/apiUpdatesManager\";\r\nimport { LangPackKey, i18n } from \"../lib/langPack\";\r\nimport { logger } from \"../lib/logger\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport Button from \"./button\";\r\nimport ProgressivePreloader from \"./preloader\";\r\nimport SetTransition from \"./singleTransition\";\r\nimport sessionStorage from '../lib/sessionStorage';\r\nimport { ConnectionStatus } from \"../lib/mtproto/connectionStatus\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport apiManager from \"../lib/mtproto/mtprotoworker\";\r\n\r\nexport default class ConnectionStatusComponent {\r\n public static CHANGE_STATE_DELAY = 1000;\r\n\r\n private statusContainer: HTMLElement;\r\n private statusEl: HTMLElement;\r\n private statusPreloader: ProgressivePreloader;\r\n\r\n private currentLangPackKey: LangPackKey;\r\n\r\n private hadConnect = false;\r\n private retryAt: number;\r\n private connecting = false;\r\n private timedOut = false;\r\n private updating = false;\r\n\r\n private log: ReturnType;\r\n\r\n private setFirstConnectionTimeout: number;\r\n private setStateTimeout: number;\r\n\r\n constructor(chatsContainer: HTMLElement) {\r\n this.log = logger('CS');\r\n \r\n this.statusContainer = document.createElement('div');\r\n this.statusContainer.classList.add('connection-status');\r\n\r\n this.statusEl = Button('btn-primary bg-warning connection-status-button', {noRipple: true});\r\n this.statusPreloader = new ProgressivePreloader({cancelable: false});\r\n this.statusPreloader.constructContainer({color: 'transparent', bold: true});\r\n this.statusContainer.append(this.statusEl);\r\n\r\n chatsContainer.prepend(this.statusContainer);\r\n\r\n rootScope.addEventListener('connection_status_change', (e) => {\r\n const status = e;\r\n console.log(status);\r\n\r\n this.setConnectionStatus();\r\n });\r\n\r\n rootScope.addEventListener('state_synchronizing', (e) => {\r\n const channelId = e;\r\n if(!channelId) {\r\n this.updating = true;\r\n DEBUG && this.log('updating', this.updating);\r\n this.setState();\r\n }\r\n });\r\n\r\n rootScope.addEventListener('state_synchronized', (e) => {\r\n const channelId = e;\r\n DEBUG && this.log('state_synchronized', channelId);\r\n if(!channelId) {\r\n this.updating = false;\r\n DEBUG && this.log('updating', this.updating);\r\n this.setState();\r\n }\r\n });\r\n\r\n this.setFirstConnectionTimeout = window.setTimeout(this.setConnectionStatus, ConnectionStatusComponent.CHANGE_STATE_DELAY + 1e3);\r\n\r\n /* let bool = true;\r\n document.addEventListener('dblclick', () => {\r\n rootScope.dispatchEvent('connection_status_change', {\r\n dcId: 2,\r\n isFileDownload: false,\r\n isFileNetworker: false,\r\n isFileUpload: false,\r\n name: \"NET-2\",\r\n status: bool ? (bool = false, ConnectionStatus.Closed) : (bool = true, ConnectionStatus.Connected),\r\n _: \"networkerStatus\"\r\n });\r\n }); */\r\n }\r\n\r\n private setConnectionStatus = () => {\r\n sessionStorage.get('dc').then(baseDcId => {\r\n if(!baseDcId) {\r\n baseDcId = App.baseDcId;\r\n }\r\n \r\n if(this.setFirstConnectionTimeout) {\r\n clearTimeout(this.setFirstConnectionTimeout);\r\n this.setFirstConnectionTimeout = 0;\r\n }\r\n\r\n const status = rootScope.connectionStatus['NET-' + baseDcId];\r\n const online = status && status.status === ConnectionStatus.Connected;\r\n\r\n if(this.connecting && online) {\r\n apiUpdatesManager.forceGetDifference();\r\n }\r\n\r\n if(online && !this.hadConnect) {\r\n this.hadConnect = true;\r\n }\r\n \r\n this.timedOut = status && status.status === ConnectionStatus.TimedOut;\r\n this.connecting = !online;\r\n this.retryAt = status && status.retryAt;\r\n DEBUG && this.log('connecting', this.connecting);\r\n this.setState();\r\n });\r\n };\r\n\r\n private setStatusText = (langPackKey: LangPackKey, args?: any[]) => {\r\n if(this.currentLangPackKey === langPackKey) return;\r\n this.currentLangPackKey = langPackKey;\r\n replaceContent(this.statusEl, i18n(langPackKey, args));\r\n this.statusPreloader.attach(this.statusEl);\r\n };\r\n\r\n private getA(langPackKey: LangPackKey, callback: () => void) {\r\n const a = document.createElement('a');\r\n a.classList.add('force-reconnect');\r\n a.append(i18n(langPackKey));\r\n a.addEventListener('click', (e) => {\r\n cancelEvent(e);\r\n callback();\r\n });\r\n\r\n return a;\r\n }\r\n\r\n private setState = () => {\r\n const timeout = ConnectionStatusComponent.CHANGE_STATE_DELAY;\r\n if(this.connecting) {\r\n if(this.timedOut) {\r\n const a = this.getA('ConnectionStatus.ForceReconnect', () => apiManager.forceReconnect());\r\n this.setStatusText('ConnectionStatus.TimedOut', [a]);\r\n } else if(this.hadConnect) {\r\n if(this.retryAt !== undefined) {\r\n const timerSpan = document.createElement('span');\r\n const retryAt = this.retryAt;\r\n const setTime = () => {\r\n const now = Date.now();\r\n timerSpan.innerText = '' + Math.round((retryAt - now) / 1000);\r\n if(now > retryAt) {\r\n clearInterval(interval);\r\n }\r\n };\r\n const interval = setInterval(setTime, 1e3);\r\n setTime();\r\n \r\n const a = this.getA('ConnectionStatus.Reconnect', () => apiManager.forceReconnectTimeout());\r\n this.setStatusText('ConnectionStatus.ReconnectIn', [timerSpan, a]);\r\n } else {\r\n this.setStatusText('ConnectionStatus.Reconnecting');\r\n }\r\n } else {\r\n this.setStatusText('ConnectionStatus.Waiting');\r\n }\r\n } else if(this.updating) {\r\n this.setStatusText('Updating');\r\n }\r\n\r\n DEBUG && this.log('setState', this.connecting || this.updating);\r\n window.requestAnimationFrame(() => {\r\n if(this.setStateTimeout) clearTimeout(this.setStateTimeout);\r\n\r\n const cb = () => {\r\n SetTransition(this.statusContainer, 'is-shown', this.connecting || this.updating, 200);\r\n this.setStateTimeout = 0;\r\n DEBUG && this.log('setState: isShown:', this.connecting || this.updating);\r\n };\r\n\r\n this.setStateTimeout = window.setTimeout(cb, timeout);\r\n //cb();\r\n /* if(timeout) this.setStateTimeout = window.setTimeout(cb, timeout);\r\n else cb(); */\r\n });\r\n };\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type DialogsStorage from \"../storages/dialogs\";\nimport type {MyDialogFilter as DialogFilter, MyDialogFilter} from \"../storages/filters\";\nimport type { LazyLoadQueueIntersector } from \"../../components/lazyLoadQueue\";\nimport AvatarElement from \"../../components/avatar\";\nimport DialogsContextMenu from \"../../components/dialogsContextMenu\";\nimport { horizontalMenu } from \"../../components/horizontalMenu\";\nimport { attachContextMenuListener, putPreloader } from \"../../components/misc\";\nimport { ripple } from \"../../components/ripple\";\n//import Scrollable from \"../../components/scrollable\";\nimport Scrollable, { ScrollableX, SliceSides } from \"../../components/scrollable\";\nimport { formatDateAccordingToTodayNew } from \"../../helpers/date\";\nimport { IS_SAFARI } from \"../../environment/userAgent\";\nimport { logger, LogTypes } from \"../logger\";\nimport { RichTextProcessor } from \"../richtextprocessor\";\nimport rootScope from \"../rootScope\";\nimport apiUpdatesManager from \"./apiUpdatesManager\";\nimport appPeersManager from './appPeersManager';\nimport appImManager from \"./appImManager\";\nimport appMessagesManager, { Dialog, MyMessage } from \"./appMessagesManager\";\nimport appStateManager, { State } from \"./appStateManager\";\nimport appUsersManager from \"./appUsersManager\";\nimport Button from \"../../components/button\";\nimport SetTransition from \"../../components/singleTransition\";\nimport appDraftsManager, { MyDraftMessage } from \"./appDraftsManager\";\nimport DEBUG, { MOUNT_CLASS_TO } from \"../../config/debug\";\nimport appNotificationsManager from \"./appNotificationsManager\";\nimport PeerTitle from \"../../components/peerTitle\";\nimport I18n, { FormatterArguments, i18n, LangPackKey, _i18n } from \"../langPack\";\nimport findUpTag from \"../../helpers/dom/findUpTag\";\nimport lottieLoader from \"../lottieLoader\";\nimport { wrapLocalSticker, wrapPhoto } from \"../../components/wrappers\";\nimport AppEditFolderTab from \"../../components/sidebarLeft/tabs/editFolder\";\nimport appSidebarLeft, { SettingSection } from \"../../components/sidebarLeft\";\nimport { attachClickEvent } from \"../../helpers/dom/clickEvent\";\nimport positionElementByIndex from \"../../helpers/dom/positionElementByIndex\";\nimport replaceContent from \"../../helpers/dom/replaceContent\";\nimport ConnectionStatusComponent from \"../../components/connectionStatus\";\nimport appChatsManager from \"./appChatsManager\";\nimport { renderImageFromUrlPromise } from \"../../helpers/dom/renderImageFromUrl\";\nimport { fastRaf, fastRafConventional, fastRafPromise } from \"../../helpers/schedulers\";\nimport SortedUserList from \"../../components/sortedUserList\";\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\nimport handleTabSwipe from \"../../helpers/dom/handleTabSwipe\";\nimport windowSize from \"../../helpers/windowSize\";\nimport isInDOM from \"../../helpers/dom/isInDOM\";\nimport appPhotosManager, { MyPhoto } from \"./appPhotosManager\";\nimport { MyDocument } from \"./appDocsManager\";\nimport { setSendingStatus } from \"../../components/sendingStatus\";\nimport SortedList, { SortedElementBase } from \"../../helpers/sortedList\";\nimport debounce from \"../../helpers/schedulers/debounce\";\nimport generateVerifiedIcon from \"../../components/generateVerifiedIcon\";\n\nexport type DialogDom = {\n avatarEl: AvatarElement,\n captionDiv: HTMLDivElement,\n titleSpan: HTMLSpanElement,\n titleSpanContainer: HTMLSpanElement,\n statusSpan: HTMLSpanElement,\n lastTimeSpan: HTMLSpanElement,\n unreadBadge: HTMLElement,\n mentionsBadge?: HTMLElement,\n lastMessageSpan: HTMLSpanElement,\n containerEl: HTMLElement,\n listEl: HTMLLIElement,\n subtitleEl: HTMLElement\n};\n\ninterface SortedDialog extends SortedElementBase {\n dom: DialogDom,\n loadPromises?: Promise[]\n}\n\nclass SortedDialogList extends SortedList {\n constructor(public list: HTMLUListElement, public indexKey: ReturnType) {\n super({\n getIndex: (id) => appMessagesManager.getDialogOnly(id)[this.indexKey],\n onDelete: (element) => {\n element.dom.listEl.remove();\n appDialogsManager.onListLengthChange();\n },\n onSort: (element, idx) => {\n const willChangeLength = element.dom.listEl.parentElement !== this.list;\n positionElementByIndex(element.dom.listEl, this.list, idx);\n\n if(willChangeLength) {\n appDialogsManager.onListLengthChange();\n }\n },\n onElementCreate: (base, batch) => {\n const loadPromises: Promise[] = batch ? [] : undefined;\n\n const {dom} = appDialogsManager.addListDialog({dialog: base.id, loadPromises, isBatch: batch});\n (base as SortedDialog).dom = dom;\n\n if(loadPromises?.length) {\n (base as SortedDialog).loadPromises = loadPromises;\n Promise.all(loadPromises).finally(() => {\n delete (base as SortedDialog).loadPromises;\n });\n }\n\n return base as SortedDialog;\n },\n updateElementWith: fastRafConventional\n });\n }\n\n public clear() {\n this.list.innerHTML = '';\n super.clear();\n }\n}\n\n//const testScroll = false;\n//let testTopSlice = 1;\n\nexport class AppDialogsManager {\n private chatsContainer = document.getElementById('chatlist-container') as HTMLDivElement;\n private chatsPreloader: HTMLElement;\n\n private loadDialogsPromise: Promise;\n\n private scroll: Scrollable = null;\n \n private log = logger('DIALOGS', LogTypes.Log | LogTypes.Error | LogTypes.Warn | LogTypes.Debug);\n\n private contextMenu = new DialogsContextMenu();\n\n public sortedList: SortedDialogList;\n public sortedLists: {[filterId: number]: SortedDialogList} = {};\n public scrollables: {[filterId: number]: Scrollable} = {};\n public filterId: number;\n private folders: {[k in 'menu' | 'container' | 'menuScrollContainer']: HTMLElement} = {\n menu: document.getElementById('folders-tabs'),\n menuScrollContainer: null,\n container: document.getElementById('folders-container')\n };\n private filtersRendered: {\n [filterId: string]: {\n menu: HTMLElement, \n container: HTMLElement,\n unread: HTMLElement,\n title: HTMLElement\n }\n } = {};\n private showFiltersPromise: Promise;\n private allUnreadCount: HTMLElement;\n\n private accumulateArchivedTimeout: number;\n\n //private topOffsetIndex = 0;\n\n private sliceTimeout: number;\n\n private lastActiveElements: Set = new Set();\n\n private offsets: {top: number, bottom: number} = {top: 0, bottom: 0};\n \n private loadContacts: () => void;\n private processContact: (peerId: number) => void;\n\n private indexKey: ReturnType;\n\n public onListLengthChange: () => Promise;\n\n constructor() {\n this.chatsPreloader = putPreloader(null, true);\n\n this.allUnreadCount = this.folders.menu.querySelector('.badge');\n \n this.folders.menuScrollContainer = this.folders.menu.parentElement;\n\n const bottomPart = document.createElement('div');\n bottomPart.classList.add('connection-status-bottom');\n bottomPart.append(this.folders.container);\n\n /* if(isTouchSupported && isSafari) {\n let allowUp: boolean, allowDown: boolean, slideBeginY: number;\n const container = this.scroll.container;\n container.addEventListener('touchstart', (event) => {\n allowUp = container.scrollTop > 0;\n allowDown = (container.scrollTop < container.scrollHeight - container.clientHeight);\n // @ts-ignore\n slideBeginY = event.pageY;\n });\n \n container.addEventListener('touchmove', (event: any) => {\n var up = (event.pageY > slideBeginY);\n var down = (event.pageY < slideBeginY);\n slideBeginY = event.pageY;\n if((up && allowUp) || (down && allowDown)) {\n event.stopPropagation();\n } else if(up || down) {\n event.preventDefault();\n }\n });\n } */\n\n if(IS_TOUCH_SUPPORTED) {\n handleTabSwipe(this.folders.container, (next) => {\n const prevId = selectTab.prevId();\n selectTab(next ? prevId + 1 : prevId - 1);\n });\n }\n\n this.setFilterId(0);\n this.addFilter({\n id: this.filterId,\n title: '',\n titleEl: i18n('ChatList.Filter.AllChats'),\n orderIndex: 0\n });\n\n this.sortedList = this.sortedLists[this.filterId];\n this.scroll = this.scrollables[this.filterId];\n\n /* if(testScroll) {\n let i = 0;\n let add = () => {\n let li = document.createElement('li');\n li.dataset.id = '' + i;\n li.id = '' + i;\n li.innerHTML = `

${i}18:33

-_-_-_-: qweasd

`;\n i++;\n this.scroll.append(li);\n };\n for(let i = 0; i < 500; ++i) {\n add();\n }\n (window as any).addElement = add;\n } */\n\n rootScope.addEventListener('user_update', (userId) => {\n //console.log('updating user:', user, dialog);\n \n const dom = this.getDialogDom(userId);\n if(dom && !appUsersManager.isBot(userId) && userId !== rootScope.myId) {\n const user = appUsersManager.getUser(userId);\n const online = user.status?._ === 'userStatusOnline';\n dom.avatarEl.classList.toggle('is-online', online);\n }\n });\n\n /* rootScope.$on('dialog_top', (e) => {\n const dialog = e;\n\n this.setLastMessage(dialog);\n this.setDialogPosition(dialog);\n\n this.setFiltersUnreadCount();\n }); */\n\n rootScope.addEventListener('dialog_flush', ({peerId}) => {\n const dialog = appMessagesManager.getDialogOnly(peerId);\n if(dialog) {\n this.setLastMessage(dialog, undefined, undefined, undefined, undefined, undefined, true);\n this.validateDialogForFilter(dialog);\n this.setFiltersUnreadCount();\n }\n });\n\n rootScope.addEventListener('dialogs_multiupdate', (dialogs) => {\n for(const id in dialogs) {\n const dialog = dialogs[id];\n this.updateDialog(dialog);\n\n if(this.processContact) {\n this.processContact(+id);\n }\n\n this.validateDialogForFilter(dialog);\n }\n\n this.setFiltersUnreadCount();\n });\n\n rootScope.addEventListener('dialog_drop', ({peerId}) => {\n this.deleteDialog(peerId);\n this.setFiltersUnreadCount();\n\n if(this.processContact) {\n this.processContact(peerId);\n }\n });\n\n rootScope.addEventListener('dialog_unread', ({peerId}) => {\n const dialog = appMessagesManager.getDialogOnly(peerId);\n if(dialog) {\n this.setUnreadMessages(dialog);\n this.validateDialogForFilter(dialog);\n this.setFiltersUnreadCount();\n }\n });\n\n rootScope.addEventListener('dialog_notify_settings', (dialog) => {\n this.setUnreadMessages(dialog); // возможно это не нужно, но нужно менять is-muted\n });\n\n rootScope.addEventListener('dialog_draft', ({dialog, drop, peerId}) => {\n if(drop) {\n this.sortedList.delete(peerId);\n } else {\n this.updateDialog(dialog);\n }\n\n if(this.processContact) {\n this.processContact(peerId);\n }\n });\n\n rootScope.addEventListener('peer_changed', (peerId) => {\n //const perf = performance.now();\n for(const element of this.lastActiveElements) {\n if(+element.dataset.peerId !== peerId) {\n element.classList.remove('active');\n this.lastActiveElements.delete(element);\n }\n }\n\n const elements = Array.from(document.querySelectorAll(`[data-autonomous=\"0\"] li[data-peer-id=\"${peerId}\"]`)) as HTMLElement[];\n elements.forEach(element => {\n element.classList.add('active');\n this.lastActiveElements.add(element);\n });\n //this.log('peer_changed total time:', performance.now() - perf);\n });\n\n rootScope.addEventListener('filter_update', (filter) => {\n if(!this.filtersRendered[filter.id]) {\n this.addFilter(filter);\n return;\n } else if(filter.id === this.filterId) { // это нет тут смысла вызывать, так как будет dialogs_multiupdate\n //this.validateForFilter();\n const folder = appMessagesManager.dialogsStorage.getFolder(filter.id);\n this.validateListForFilter();\n for(let i = 0, length = folder.length; i < length; ++i) {\n const dialog = folder[i];\n this.updateDialog(dialog);\n }\n this.setFiltersUnreadCount();\n }\n\n const elements = this.filtersRendered[filter.id];\n elements.title.innerHTML = RichTextProcessor.wrapEmojiText(filter.title);\n });\n\n rootScope.addEventListener('filter_delete', (filter) => {\n const elements = this.filtersRendered[filter.id];\n if(!elements) return;\n\n // set tab\n //(this.folders.menu.firstElementChild.children[Math.max(0, filter.id - 2)] as HTMLElement).click();\n (this.folders.menu.firstElementChild as HTMLElement).click();\n\n elements.container.remove();\n elements.menu.remove();\n \n delete this.sortedLists[filter.id];\n delete this.scrollables[filter.id];\n delete this.filtersRendered[filter.id];\n\n if(Object.keys(this.filtersRendered).length <= 1) {\n this.folders.menuScrollContainer.classList.add('hide');\n }\n });\n\n rootScope.addEventListener('filter_order', (order) => {\n const containerToAppend = this.folders.menu as HTMLElement;\n order.forEach((filterId) => {\n const filter = appMessagesManager.filtersStorage.getFilter(filterId);\n const renderedFilter = this.filtersRendered[filterId];\n\n const sortedList = this.sortedLists[filterId];\n sortedList.indexKey = appMessagesManager.dialogsStorage.getDialogIndexKey(filterId);\n\n positionElementByIndex(renderedFilter.menu, containerToAppend, filter.orderIndex);\n positionElementByIndex(renderedFilter.container, this.folders.container, filter.orderIndex);\n });\n\n this.indexKey = appMessagesManager.dialogsStorage.getDialogIndexKey(this.filterId);\n\n /* if(this.filterId) {\n const tabIndex = order.indexOf(this.filterId) + 1;\n selectTab.prevId = tabIndex;\n } */\n });\n\n rootScope.addEventListener('peer_typings', ({peerId, typings}) => {\n const dialog = appMessagesManager.getDialogOnly(peerId);\n if(!dialog) return;\n\n if(typings.length) {\n this.setTyping(dialog);\n } else {\n this.unsetTyping(dialog);\n }\n });\n\n rootScope.addEventListener('state_cleared', () => {\n //setTimeout(() => \n appStateManager.getState().then((state) => {\n appUsersManager.clear();\n appChatsManager.clear();\n \n const filtersStorage = appMessagesManager.filtersStorage;\n const filters = filtersStorage.filters;\n for(const filterId in filters) { // delete filters\n rootScope.dispatchEvent('updateDialogFilter', {\n _: 'updateDialogFilter',\n id: +filterId,\n });\n }\n\n appMessagesManager.clear();\n\n /* const clearPromises: Promise[] = [];\n for(const name in appStateManager.storagesResults) {\n const results = appStateManager.storagesResults[name as keyof AppStateManager['storages']];\n const storage = appStateManager.storages[name as keyof AppStateManager['storages']];\n results.length = 0;\n clearPromises.push(storage.clear());\n } */\n\n this.validateListForFilter();\n\n this.onStateLoaded(state);\n })//, 5000);\n });\n\n const foldersScrollable = new ScrollableX(this.folders.menuScrollContainer);\n bottomPart.prepend(this.folders.menuScrollContainer);\n const selectTab = horizontalMenu(this.folders.menu, this.folders.container, (id, tabContent) => {\n /* if(id !== 0) {\n id += 1;\n } */\n\n id = +tabContent.dataset.filterId || 0;\n\n if(this.filterId === id) return;\n\n this.sortedLists[id].clear();\n this.setFilterId(id);\n this.onTabChange();\n }, () => {\n for(const folderId in this.sortedLists) {\n if(+folderId !== this.filterId) {\n this.sortedLists[folderId].clear();\n }\n }\n }, undefined, foldersScrollable);\n\n //selectTab(0);\n (this.folders.menu.firstElementChild as HTMLElement).click();\n appMessagesManager.construct();\n appStateManager.getState().then((state) => {\n return this.onStateLoaded(state);\n }).then(() => {\n // return;\n \n const isLoadedMain = appMessagesManager.dialogsStorage.isDialogsLoaded(0);\n const isLoadedArchive = appMessagesManager.dialogsStorage.isDialogsLoaded(1);\n const wasLoaded = isLoadedMain || isLoadedArchive;\n const a: Promise = isLoadedMain ? Promise.resolve() : appMessagesManager.getConversationsAll('', 0);\n const b: Promise = isLoadedArchive ? Promise.resolve() : appMessagesManager.getConversationsAll('', 1);\n a.finally(() => {\n b.then(() => {\n this.accumulateArchivedUnread();\n\n if(wasLoaded) {\n (apiUpdatesManager.updatesState.syncLoading || Promise.resolve()).then(() => {\n appMessagesManager.refreshConversations();\n });\n }\n });\n });\n });\n\n new ConnectionStatusComponent(this.chatsContainer);\n this.chatsContainer.append(bottomPart);\n\n setTimeout(() => {\n lottieLoader.loadLottieWorkers();\n }, 200);\n\n this.onListLengthChange = debounce(this._onListLengthChange, 100, false, true);\n }\n\n public get chatList() {\n return this.sortedList.list;\n }\n\n public setFilterId(filterId: number) {\n this.filterId = filterId;\n this.indexKey = appMessagesManager.dialogsStorage ? appMessagesManager.dialogsStorage.getDialogIndexKey(this.filterId) : 'index';\n rootScope.filterId = filterId;\n }\n\n private async onStateLoaded(state: State) {\n appNotificationsManager.getNotifyPeerTypeSettings();\n \n const renderFiltersPromise = appMessagesManager.filtersStorage.getDialogFilters().then((filters) => {\n for(const filter of filters) {\n this.addFilter(filter);\n }\n });\n\n if(state.filters && Object.keys(state.filters).length) {\n await renderFiltersPromise;\n if(this.showFiltersPromise) {\n await this.showFiltersPromise;\n }\n }\n\n if(appStateManager.storagesResults.dialogs.length) {\n appDraftsManager.addMissedDialogs();\n }\n\n return this.onChatsScroll();\n }\n\n /* private getOffset(side: 'top' | 'bottom'): {index: number, pos: number} {\n if(!this.scroll.loadedAll[side]) {\n const element = (side === 'top' ? this.chatList.firstElementChild : this.chatList.lastElementChild) as HTMLElement;\n if(element) {\n const peerId = +element.dataset.peerId;\n const dialog = appMessagesManager.getDialogByPeerId(peerId);\n return {index: dialog[0].index, pos: dialog[1]};\n }\n }\n\n return {index: 0, pos: -1};\n } */\n private getOffsetIndex(side: 'top' | 'bottom') {\n return {index: this.scroll.loadedAll[side] ? 0 : this.offsets[side]};\n }\n\n private isDialogMustBeInViewport(dialog: Dialog) {\n if(dialog.migratedTo !== undefined || !this.testDialogForFilter(dialog)) return false;\n //return true;\n const topOffset = this.getOffsetIndex('top');\n const bottomOffset = this.getOffsetIndex('bottom');\n \n if(!topOffset.index && !bottomOffset.index) {\n return true;\n }\n \n const index = dialog[this.indexKey];\n return (!topOffset.index || index <= topOffset.index) && (!bottomOffset.index || index >= bottomOffset.index);\n }\n\n private deleteDialog(peerId: number) {\n this.sortedList.delete(peerId);\n }\n\n private updateDialog(dialog: Dialog) {\n if(this.isDialogMustBeInViewport(dialog)) {\n if(!this.sortedList.has(dialog.peerId)) {\n this.sortedList.add(dialog.peerId);\n return;\n }\n } else {\n this.deleteDialog(dialog.peerId);\n return;\n }\n\n const dom = this.getDialogDom(dialog.peerId);\n if(dom) {\n this.setLastMessage(dialog, undefined, dom, undefined, undefined, undefined, true);\n this.sortedList.update(dialog.peerId);\n }\n }\n\n public onTabChange = () => {\n this.scroll = this.scrollables[this.filterId];\n this.scroll.loadedAll.top = true;\n this.scroll.loadedAll.bottom = false;\n this.offsets.top = this.offsets.bottom = 0;\n this.loadDialogsPromise = undefined;\n this.sortedList = this.sortedLists[this.filterId];\n this.onChatsScroll();\n };\n\n private setFilterUnreadCount(filterId: number, folder?: Dialog[]) {\n const unreadSpan = filterId === 0 ? this.allUnreadCount : this.filtersRendered[filterId]?.unread;\n if(!unreadSpan) {\n return;\n }\n\n folder = folder || appMessagesManager.dialogsStorage.getFolder(filterId);\n let mutedCount = 0;\n let notMutedCount = 0;\n folder.forEach(dialog => {\n const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true);\n\n if(isMuted && filterId === 0) {\n return;\n }\n\n const value = +!!dialog.unread_count || +dialog.pFlags.unread_mark || 0; // * unread_mark can be undefined\n if(isMuted) mutedCount += value;\n else notMutedCount += value;\n });\n \n unreadSpan.classList.toggle('badge-gray', mutedCount && !notMutedCount);\n \n const sum = mutedCount + notMutedCount;\n unreadSpan.innerText = sum ? '' + sum : '';\n }\n\n private setFiltersUnreadCount() {\n for(const filterId in this.filtersRendered) {\n this.setFilterUnreadCount(+filterId);\n }\n\n this.setFilterUnreadCount(0);\n }\n\n /**\n * Удалит неподходящие чаты из списка, но не добавит их(!)\n */\n private validateListForFilter() {\n const filter = appMessagesManager.filtersStorage.getFilter(this.filterId);\n this.sortedList.getAll().forEach((element) => {\n const dialog = appMessagesManager.getDialogOnly(element.id);\n if(!this.testDialogForFilter(dialog, filter || null)) {\n this.deleteDialog(element.id);\n }\n });\n }\n\n /**\n * Удалит неподходящий чат из списка, но не добавит его(!)\n */\n private validateDialogForFilter(dialog: Dialog, filter?: MyDialogFilter) {\n if(!this.getDialogDom(dialog.peerId)) {\n return;\n }\n\n if(!this.testDialogForFilter(dialog, filter)) {\n this.deleteDialog(dialog.peerId);\n }\n }\n\n public testDialogForFilter(dialog: Dialog, filter = appMessagesManager.filtersStorage.getFilter(this.filterId)) {\n if(!dialog || \n (filter && !appMessagesManager.filtersStorage.testDialogForFilter(dialog, filter)) || \n (!filter && this.filterId !== dialog.folder_id)) {\n return false;\n }\n\n return true;\n }\n\n public generateScrollable(list: HTMLUListElement, filterId: number) {\n const scrollable = new Scrollable(null, 'CL', 500);\n scrollable.container.addEventListener('scroll', this.onChatsRegularScroll);\n scrollable.container.dataset.filterId = '' + filterId;\n scrollable.onScrolledTop = this.onChatsScrollTop;\n scrollable.onScrolledBottom = this.onChatsScroll;\n scrollable.setVirtualContainer(list);\n\n const sortedDialogList = new SortedDialogList(list, appMessagesManager.dialogsStorage ? appMessagesManager.dialogsStorage.getDialogIndexKey(filterId) : 'index');\n\n this.scrollables[filterId] = scrollable;\n this.sortedLists[filterId] = sortedDialogList;\n\n // list.classList.add('hide');\n // scrollable.container.style.backgroundColor = '#' + (Math.random() * (16 ** 6 - 1) | 0).toString(16);\n\n return scrollable;\n }\n\n private addFilter(filter: Pick & Partial<{titleEl: HTMLElement}>) {\n if(this.filtersRendered[filter.id]) return;\n\n const menuTab = document.createElement('div');\n menuTab.classList.add('menu-horizontal-div-item');\n const span = document.createElement('span');\n const titleSpan = document.createElement('span');\n titleSpan.classList.add('text-super');\n if(filter.titleEl) titleSpan.append(filter.titleEl);\n else titleSpan.innerHTML = RichTextProcessor.wrapEmojiText(filter.title);\n const unreadSpan = document.createElement('div');\n unreadSpan.classList.add('badge', 'badge-20', 'badge-primary');\n const i = document.createElement('i');\n span.append(titleSpan, unreadSpan, i);\n menuTab.append(span);\n ripple(menuTab);\n\n const containerToAppend = this.folders.menu as HTMLElement;\n positionElementByIndex(menuTab, containerToAppend, filter.orderIndex);\n //containerToAppend.append(li);\n\n const ul = this.createChatList();\n const scrollable = this.generateScrollable(ul, filter.id);\n\n scrollable.container.classList.add('tabs-tab', 'chatlist-parts');\n\n /* const parts = document.createElement('div');\n parts.classList.add('chatlist-parts'); */\n \n const top = document.createElement('div');\n top.classList.add('chatlist-top');\n \n const bottom = document.createElement('div');\n bottom.classList.add('chatlist-bottom');\n\n top.append(ul);\n scrollable.container.append(top, bottom);\n /* parts.append(top, bottom);\n scrollable.container.append(parts); */\n \n const div = scrollable.container;\n //this.folders.container.append(div);\n positionElementByIndex(scrollable.container, this.folders.container, filter.orderIndex);\n\n this.setListClickListener(ul, null, true);\n\n this.filtersRendered[filter.id] = {\n menu: menuTab,\n container: div,\n unread: unreadSpan,\n title: titleSpan\n };\n\n if(!this.showFiltersPromise && Object.keys(this.filtersRendered).length > 1) {\n this.showFiltersPromise = new Promise((resolve) => {\n window.setTimeout(() => {\n this.showFiltersPromise = undefined;\n if(Object.keys(this.filtersRendered).length > 1) {\n this.folders.menuScrollContainer.classList.remove('hide');\n this.setFiltersUnreadCount();\n }\n resolve();\n }, 0);\n });\n }\n }\n\n private loadDialogs(side: SliceSides) {\n /* if(testScroll) {\n return;\n } */\n \n if(this.loadDialogsPromise/* || 1 === 1 */) return this.loadDialogsPromise;\n\n const promise = new Promise(async(resolve) => {\n const {chatList, filterId} = this;\n\n //return;\n \n // let loadCount = 30/*this.chatsLoadCount */;\n let loadCount = windowSize.windowH / 72 * 1.25 | 0;\n let offsetIndex = 0;\n \n const {index: currentOffsetIndex} = this.getOffsetIndex(side);\n if(currentOffsetIndex) {\n if(side === 'top') {\n const storage = appMessagesManager.dialogsStorage.getFolder(filterId, true);\n const index = storage.findIndex(dialog => dialog[this.indexKey] <= currentOffsetIndex);\n const needIndex = Math.max(0, index - loadCount);\n loadCount = index - needIndex;\n offsetIndex = storage[needIndex][this.indexKey] + 1;\n } else {\n offsetIndex = currentOffsetIndex;\n }\n }\n \n //let offset = storage[storage.length - 1]?.index || 0;\n \n try {\n //console.time('getDialogs time');\n \n const getConversationsResult = appMessagesManager.getConversations('', offsetIndex, loadCount, filterId, true);\n if(!getConversationsResult.cached && !chatList.childElementCount) {\n const container = chatList.parentElement;\n container.append(this.chatsPreloader);\n }\n \n const result = await getConversationsResult.promise;\n \n if(this.loadDialogsPromise !== promise) {\n return;\n }\n \n //console.timeEnd('getDialogs time');\n \n // * loaded all\n //if(!result.dialogs.length || chatList.childElementCount === result.count) {\n // !result.dialogs.length не подходит, так как при супердревном диалоге getConversations его не выдаст.\n //if(chatList.childElementCount === result.count) {\n if(side === 'bottom') {\n if(result.isEnd) {\n this.scroll.loadedAll[side] = true;\n }\n } else if(result.isTopEnd) {\n this.scroll.loadedAll[side] = true;\n }\n \n if(result.dialogs.length) {\n const dialogs = side === 'top' ? result.dialogs.slice().reverse() : result.dialogs;\n \n const loadPromises: Promise[] = [];\n\n const callbacks: (() => void)[] = [];\n const cccc = (callback: () => void) => {\n callbacks.push(callback);\n };\n\n dialogs.forEach((dialog) => {\n const element = this.sortedList.add(dialog.peerId, true, cccc, false);\n if(element.loadPromises) {\n loadPromises.push(...element.loadPromises);\n }\n });\n\n await Promise.all(loadPromises).finally();\n\n callbacks.forEach(callback => callback());\n } else {\n this.onListLengthChange();\n }\n\n const offsetDialog = result.dialogs[side === 'top' ? 0 : result.dialogs.length - 1];\n if(offsetDialog) {\n this.offsets[side] = offsetDialog[this.indexKey];\n }\n\n this.log.debug('getDialogs ' + loadCount + ' dialogs by offset:', offsetIndex, result, chatList.childElementCount);\n \n setTimeout(() => {\n this.scroll.onScroll();\n }, 0);\n } catch(err) {\n this.log.error(err);\n }\n \n if(this.chatsPreloader.parentElement) {\n this.chatsPreloader.remove();\n }\n \n resolve();\n }).finally(() => {\n this.loadDialogsPromise = undefined;\n });\n\n return this.loadDialogsPromise = promise;\n }\n\n private generateEmptyPlaceholder(options: {\n title: LangPackKey,\n subtitle?: LangPackKey,\n subtitleArgs?: FormatterArguments,\n classNameType: string\n }) {\n const BASE_CLASS = 'empty-placeholder';\n const container = document.createElement('div');\n container.classList.add(BASE_CLASS, BASE_CLASS + '-' + options.classNameType);\n \n const header = document.createElement('div');\n header.classList.add(BASE_CLASS + '-header');\n _i18n(header, options.title);\n\n const subtitle = document.createElement('div');\n subtitle.classList.add(BASE_CLASS + '-subtitle');\n if(options.subtitle) {\n _i18n(subtitle, options.subtitle, options.subtitleArgs);\n }\n\n container.append(header, subtitle);\n\n return {container, header, subtitle};\n }\n\n private checkIfPlaceholderNeeded() {\n if(this.filterId === 1) {\n return;\n }\n\n const chatList = this.chatList;\n const part = chatList.parentElement as HTMLElement;\n let placeholderContainer = (Array.from(part.children) as HTMLElement[]).find(el => el.matches('.empty-placeholder'));\n const needPlaceholder = this.scroll.loadedAll.bottom && !chatList.childElementCount/* || true */;\n // chatList.style.display = 'none';\n\n if(needPlaceholder && placeholderContainer) {\n return;\n } else if(!needPlaceholder) {\n if(placeholderContainer) {\n part.classList.remove('with-placeholder');\n placeholderContainer.remove();\n }\n\n return;\n }\n\n let placeholder: ReturnType;\n if(!this.filterId) {\n placeholder = this.generateEmptyPlaceholder({\n title: 'ChatList.Main.EmptyPlaceholder.Title',\n classNameType: 'dialogs'\n });\n \n placeholderContainer = placeholder.container;\n \n const img = document.createElement('img');\n img.classList.add('empty-placeholder-dialogs-icon');\n \n Promise.all([\n appUsersManager.getContacts().then(users => {\n let key: LangPackKey, args: FormatterArguments;\n\n if(users.length/* && false */) {\n key = 'ChatList.Main.EmptyPlaceholder.Subtitle';\n args = [i18n('Contacts.Count', [users.length])];\n } else {\n key = 'ChatList.Main.EmptyPlaceholder.SubtitleNoContacts';\n args = [];\n }\n\n const subtitleEl = new I18n.IntlElement({\n key,\n args,\n element: placeholder.subtitle\n });\n }),\n renderImageFromUrlPromise(img, 'assets/img/EmptyChats.svg'),\n fastRafPromise()\n ]).then(() => {\n placeholderContainer.classList.add('visible');\n });\n\n placeholderContainer.prepend(img);\n } else {\n placeholder = this.generateEmptyPlaceholder({\n title: 'FilterNoChatsToDisplay',\n subtitle: 'FilterNoChatsToDisplayInfo',\n classNameType: 'folder'\n });\n\n placeholderContainer = placeholder.container;\n\n placeholderContainer.prepend(wrapLocalSticker({\n emoji: '📂',\n width: 128,\n height: 128\n }).container)\n\n const button = Button('btn-primary btn-color-primary btn-control tgico', {\n text: 'FilterHeaderEdit',\n icon: 'settings'\n });\n\n attachClickEvent(button, () => {\n new AppEditFolderTab(appSidebarLeft).open(appMessagesManager.filtersStorage.getFilter(this.filterId));\n });\n\n placeholderContainer.append(button);\n }\n\n part.append(placeholderContainer);\n part.classList.add('with-placeholder');\n }\n\n public _onListLengthChange = () => {\n this.checkIfPlaceholderNeeded();\n\n if(this.filterId > 0) return;\n\n const chatList = this.chatList;\n const count = chatList.childElementCount;\n\n const parts = chatList.parentElement.parentElement;\n const bottom = chatList.parentElement.nextElementSibling as HTMLElement;\n const hasContacts = !!bottom.childElementCount;\n if(count >= 10) {\n if(hasContacts) {\n parts.classList.remove('with-contacts');\n bottom.innerHTML = '';\n this.loadContacts = undefined;\n this.processContact = undefined;\n }\n\n return;\n } else if(hasContacts) return;\n\n parts.classList.add('with-contacts');\n\n const section = new SettingSection({\n name: 'Contacts',\n noDelimiter: true,\n fakeGradientDelimiter: true\n });\n\n section.container.classList.add('hide');\n\n appUsersManager.getContacts(undefined, undefined, 'online').then(contacts => {\n const sortedUserList = new SortedUserList({avatarSize: 42, new: true});\n this.loadContacts = () => {\n const pageCount = windowSize.windowH / 60 | 0;\n const arr = contacts.splice(0, pageCount).filter(this.verifyUserIdForContacts);\n\n arr.forEach((peerId) => {\n sortedUserList.add(peerId);\n });\n\n if(!contacts.length) {\n this.loadContacts = undefined;\n }\n };\n\n this.loadContacts();\n\n this.processContact = (peerId) => {\n if(peerId < 0) {\n return;\n }\n\n const good = this.verifyUserIdForContacts(peerId);\n const added = sortedUserList.has(peerId);\n if(!added && good) sortedUserList.add(peerId);\n else if(added && !good) sortedUserList.delete(peerId);\n };\n\n const list = sortedUserList.list;\n list.classList.add('chatlist-new');\n this.setListClickListener(list);\n section.content.append(list);\n section.container.classList.remove('hide');\n });\n\n bottom.append(section.container);\n };\n\n private verifyUserIdForContacts = (peerId: number) => {\n const dialog = appMessagesManager.getDialogOnly(peerId);\n return !dialog;\n };\n\n public onChatsRegularScroll = () => {\n // return;\n\n if(this.sliceTimeout) clearTimeout(this.sliceTimeout);\n this.sliceTimeout = window.setTimeout(() => {\n this.sliceTimeout = undefined;\n\n if(!this.chatList.childElementCount || this.processContact) {\n return;\n }\n\n /* const observer = new IntersectionObserver((entries) => {\n const \n });\n\n Array.from(this.chatList.children).forEach(el => {\n observer.observe(el);\n }); */\n\n fastRafConventional(() => {\n\n const perf = performance.now();\n\n const scrollTopWas = this.scroll.scrollTop;\n\n const firstElementChild = this.chatList.firstElementChild;\n const rectContainer = this.scroll.container.getBoundingClientRect();\n const rectTarget = firstElementChild.getBoundingClientRect();\n const children = Array.from(this.scroll.splitUp.children) as HTMLElement[];\n\n // const padding = 8;\n // const offsetTop = this.folders.container.offsetTop;\n let offsetTop = this.scroll.splitUp.offsetTop;\n if(offsetTop && scrollTopWas < offsetTop) offsetTop -= scrollTopWas;\n // const offsetTop = scrollTopWas < padding ? padding - scrollTopWas : 0;\n const firstY = rectContainer.y + offsetTop;\n const lastY = rectContainer.y/* - 8 */; // 8px - .chatlist padding-bottom\n \n const firstElement = findUpTag(document.elementFromPoint(Math.ceil(rectTarget.x), Math.ceil(firstY + 1)), firstElementChild.tagName) as HTMLElement;\n const lastElement = findUpTag(document.elementFromPoint(Math.ceil(rectTarget.x), Math.floor(lastY + rectContainer.height - 1)), firstElementChild.tagName) as HTMLElement;\n\n //alert('got element:' + rect.y);\n\n if(!firstElement || !lastElement) {\n return;\n }\n\n //alert('got element:' + !!firstElement);\n\n const firstElementRect = firstElement.getBoundingClientRect();\n const elementOverflow = firstElementRect.y - firstY;\n\n const sliced: HTMLElement[] = [];\n const firstIndex = children.indexOf(firstElement);\n const lastIndex = children.indexOf(lastElement);\n\n const saveLength = 10;\n\n const sliceFromStart = IS_SAFARI ? [] : children.slice(0, Math.max(0, firstIndex - saveLength));\n const sliceFromEnd = children.slice(lastIndex + saveLength);\n\n /* if(sliceFromStart.length !== sliceFromEnd.length) {\n console.log('not equal', sliceFromStart.length, sliceFromEnd.length);\n }\n\n if(sliceFromStart.length > sliceFromEnd.length) {\n const diff = sliceFromStart.length - sliceFromEnd.length;\n sliceFromStart.splice(0, diff);\n } else if(sliceFromEnd.length > sliceFromStart.length) {\n const diff = sliceFromEnd.length - sliceFromStart.length;\n sliceFromEnd.splice(sliceFromEnd.length - diff, diff);\n } */\n\n if(sliceFromStart.length) {\n this.scroll.loadedAll.top = false;\n }\n\n if(sliceFromEnd.length) {\n this.scroll.loadedAll.bottom = false;\n }\n\n sliced.push(...sliceFromStart);\n sliced.push(...sliceFromEnd);\n\n sliced.forEach(el => {\n const peerId = +el.dataset.peerId;\n this.deleteDialog(peerId);\n });\n\n this.setOffsets();\n\n //this.log('[slicer] elements', firstElement, lastElement, rect, sliced, sliceFromStart.length, sliceFromEnd.length);\n\n //this.log('[slicer] reset scrollTop', this.scroll.scrollTop, firstElement.offsetTop, firstElementRect.y, rect.y, elementOverflow);\n\n //alert('left length:' + children.length);\n\n this.scroll.scrollTop = firstElement.offsetTop - elementOverflow;\n\n this.log('slice time', performance.now() - perf);\n /* const firstElementRect = firstElement.getBoundingClientRect();\n const scrollTop = */\n\n //this.scroll.scrollIntoView(firstElement, false);\n });\n }, 200);\n };\n\n private setOffsets() {\n const chatList = this.chatList;\n const firstDialog = this.getDialogFromElement(chatList.firstElementChild as HTMLElement);\n const lastDialog = this.getDialogFromElement(chatList.lastElementChild as HTMLElement);\n\n this.offsets.top = firstDialog[this.indexKey];\n this.offsets.bottom = lastDialog[this.indexKey];\n }\n\n private getDialogFromElement(element: HTMLElement) {\n return appMessagesManager.getDialogOnly(+element.dataset.peerId);\n }\n\n public onChatsScrollTop = () => {\n this.onChatsScroll('top');\n };\n \n public onChatsScroll = (side: SliceSides = 'bottom') => {\n if(this.scroll.loadedAll[side]) {\n if(this.loadContacts) {\n this.loadContacts();\n }\n\n return;\n } else if(this.loadDialogsPromise) return this.loadDialogsPromise;\n\n this.log('onChatsScroll', side);\n return this.loadDialogs(side);\n };\n\n public setListClickListener(list: HTMLUListElement, onFound?: () => void, withContext = false, autonomous = false, openInner = false) {\n let lastActiveListElement: HTMLElement;\n\n const setPeerFunc = (openInner ? appImManager.setInnerPeer : appImManager.setPeer).bind(appImManager);\n\n list.dataset.autonomous = '' + +autonomous;\n list.addEventListener('mousedown', (e) => {\n if(e.button !== 0) return;\n //cancelEvent(e);\n\n this.log('dialogs click list');\n const target = e.target as HTMLElement;\n const elem = findUpTag(target, 'LI');\n\n if(!elem) {\n return;\n }\n\n if(autonomous) {\n const sameElement = lastActiveListElement === elem;\n if(lastActiveListElement && !sameElement) {\n lastActiveListElement.classList.remove('active');\n }\n\n if(elem) {\n elem.classList.add('active');\n lastActiveListElement = elem;\n this.lastActiveElements.add(elem);\n }\n }\n\n if(elem) {\n if(onFound) onFound();\n\n const peerId = +elem.dataset.peerId;\n const lastMsgId = +elem.dataset.mid || undefined;\n\n setPeerFunc(peerId, lastMsgId);\n } else {\n setPeerFunc(0);\n }\n }, {capture: true});\n\n if(DEBUG) {\n list.addEventListener('dblclick', (e) => {\n const li = findUpTag(e.target, 'LI');\n if(li) {\n const peerId = +li.dataset.peerId;\n this.log('debug dialog:', appMessagesManager.getDialogByPeerId(peerId));\n }\n });\n }\n\n if(withContext) {\n attachContextMenuListener(list, this.contextMenu.onContextMenu);\n }\n }\n\n public createChatList(options: {\n // avatarSize?: number,\n // handheldsSize?: number,\n // size?: number,\n new?: boolean\n } = {}) {\n const list = document.createElement('ul');\n list.classList.add('chatlist'/* , \n 'chatlist-avatar-' + (options.avatarSize || 54) *//* , 'chatlist-' + (options.size || 72) */);\n\n if(options.new) {\n list.classList.add('chatlist-new');\n }\n\n /* if(options.handheldsSize) {\n list.classList.add('chatlist-handhelds-' + options.handheldsSize);\n } */\n\n return list;\n }\n\n public setLastMessage(\n dialog: Dialog, \n lastMessage?: any, \n dom?: DialogDom, \n highlightWord?: string, \n loadPromises?: Promise[],\n isBatch = false,\n setUnread = false\n ) {\n ///////console.log('setlastMessage:', lastMessage);\n if(!dom) {\n dom = this.getDialogDom(dialog.peerId);\n\n if(!dom) {\n //this.log.error('no dom for dialog:', dialog, lastMessage, dom, highlightWord);\n return;\n }\n }\n\n let draftMessage: MyDraftMessage;\n if(!lastMessage) {\n if(dialog.draft && dialog.draft._ === 'draftMessage') {\n draftMessage = dialog.draft;\n }\n \n lastMessage = appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n }\n\n if(lastMessage._ === 'messageEmpty'/* || (lastMessage._ === 'messageService' && !lastMessage.rReply) */) {\n dom.lastMessageSpan.innerHTML = '';\n dom.lastTimeSpan.innerHTML = '';\n delete dom.listEl.dataset.mid;\n\n if(setUnread) {\n this.setUnreadMessages(dialog, dom, isBatch);\n }\n\n return;\n }\n\n const peerId = dialog.peerId;\n //let peerId = appMessagesManager.getMessagePeer(lastMessage);\n\n //console.log('setting last message:', lastMessage);\n\n /* if(!dom.lastMessageSpan.classList.contains('user-typing')) */ {\n\n let mediaContainer: HTMLElement;\n if(!lastMessage.deleted && !draftMessage) {\n const media: MyDocument | MyPhoto = appMessagesManager.getMediaFromMessage(lastMessage);\n if(media && (media._ === 'photo' || (['video', 'gif'] as MyDocument['type'][]).includes(media.type))) {\n const size = appPhotosManager.choosePhotoSize(media, 20, 20);\n\n if(size._ !== 'photoSizeEmpty') {\n mediaContainer = document.createElement('div');\n mediaContainer.classList.add('dialog-subtitle-media');\n \n wrapPhoto({\n photo: media,\n message: lastMessage,\n container: mediaContainer,\n withoutPreloader: true,\n size,\n loadPromises\n });\n\n if((media as MyDocument).type === 'video') {\n const playIcon = document.createElement('span');\n playIcon.classList.add('tgico-play');\n\n mediaContainer.append(playIcon);\n }\n }\n }\n }\n\n const withoutMediaType = !!mediaContainer && !!lastMessage?.message;\n\n let fragment: DocumentFragment;\n if(highlightWord && lastMessage.message) {\n fragment = appMessagesManager.wrapMessageForReply(lastMessage, undefined, undefined, false, highlightWord, withoutMediaType);\n } else if(draftMessage) {\n fragment = appMessagesManager.wrapMessageForReply(draftMessage);\n } else if(!lastMessage.deleted) {\n fragment = appMessagesManager.wrapMessageForReply(lastMessage, undefined, undefined, false, undefined, withoutMediaType);\n } else { // rare case\n fragment = document.createDocumentFragment();\n }\n\n if(mediaContainer) {\n fragment.prepend(mediaContainer);\n }\n\n replaceContent(dom.lastMessageSpan, fragment);\n \n /* if(lastMessage.from_id === auth.id) { // You: */\n if(draftMessage) {\n const bold = document.createElement('b');\n bold.classList.add('danger');\n bold.append(i18n('Draft'), ': ');\n dom.lastMessageSpan.prepend(bold);\n } else if(peerId < 0 && peerId !== lastMessage.fromId && !lastMessage.action) {\n const sender = appPeersManager.getPeer(lastMessage.fromId);\n if(sender && sender.id) {\n const senderBold = document.createElement('b');\n\n if(sender.id === rootScope.myId) {\n senderBold.append(i18n('FromYou'));\n } else {\n //str = sender.first_name || sender.last_name || sender.username;\n senderBold.append(new PeerTitle({\n peerId: lastMessage.fromId,\n onlyFirstName: true,\n }).element);\n }\n\n senderBold.append(': ');\n //console.log(sender, senderBold.innerText);\n dom.lastMessageSpan.prepend(senderBold);\n } //////// else console.log('no sender', lastMessage, peerId);\n }\n }\n\n if(!lastMessage.deleted || draftMessage/* && lastMessage._ !== 'draftMessage' */) {\n const date = draftMessage ? Math.max(draftMessage.date, lastMessage.date || 0) : lastMessage.date;\n replaceContent(dom.lastTimeSpan, formatDateAccordingToTodayNew(new Date(date * 1000)));\n } else dom.lastTimeSpan.textContent = '';\n\n if(setUnread !== null) {\n if(setUnread) {\n this.setUnreadMessages(dialog, dom, isBatch);\n } else { // means search\n dom.listEl.dataset.mid = lastMessage.mid;\n }\n }\n }\n\n private setUnreadMessages(dialog: Dialog, dom = this.getDialogDom(dialog.peerId), isBatch = false) {\n if(dialog.folder_id === 1) {\n this.accumulateArchivedUnread();\n }\n\n if(!dom) {\n //this.log.error('setUnreadMessages no dom!', dialog);\n return;\n }\n\n if(!isBatch) {\n const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true);\n const wasMuted = dom.listEl.classList.contains('is-muted');\n if(isMuted !== wasMuted) {\n SetTransition(dom.listEl, 'is-muted', isMuted, 200);\n }\n }\n\n let setStatusMessage: MyMessage;\n if(dialog.draft?._ !== 'draftMessage') {\n const lastMessage: MyMessage = appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(!lastMessage.deleted && lastMessage.pFlags.out && lastMessage.peerId !== rootScope.myId) {\n setStatusMessage = lastMessage;\n }\n }\n\n setSendingStatus(dom.statusSpan, setStatusMessage, true);\n\n const filter = appMessagesManager.filtersStorage.getFilter(this.filterId);\n let isPinned: boolean;\n if(filter) {\n isPinned = filter.pinned_peers.indexOf(dialog.peerId) !== -1;\n } else {\n isPinned = !!dialog.pFlags.pinned;\n }\n\n const hasUnreadBadge = isPinned || !!dialog.unread_count || dialog.pFlags.unread_mark;\n // dom.messageEl.classList.toggle('has-badge', hasBadge);\n\n const isUnreadBadgeMounted = isInDOM(dom.unreadBadge);\n if(hasUnreadBadge && !isUnreadBadgeMounted) {\n dom.subtitleEl.append(dom.unreadBadge);\n }\n\n const hasMentionsBadge = dialog.unread_mentions_count > 1;\n const isMentionBadgeMounted = dom.mentionsBadge && isInDOM(dom.mentionsBadge);\n if(hasMentionsBadge) {\n if(!dom.mentionsBadge) {\n dom.mentionsBadge = document.createElement('div');\n dom.mentionsBadge.className = 'dialog-subtitle-badge badge badge-24 mention mention-badge';\n dom.mentionsBadge.innerText = '@';\n dom.subtitleEl.insertBefore(dom.mentionsBadge, dom.lastMessageSpan.nextSibling);\n }\n }\n\n const transitionDuration = isBatch ? 0 : 200;\n\n SetTransition(dom.unreadBadge, 'is-visible', hasUnreadBadge, transitionDuration, hasUnreadBadge ? undefined : () => {\n dom.unreadBadge.remove();\n }, !isUnreadBadgeMounted ? 2 : 0);\n\n if(dom.mentionsBadge) {\n SetTransition(dom.mentionsBadge, 'is-visible', hasMentionsBadge, transitionDuration, hasMentionsBadge ? undefined : () => {\n dom.mentionsBadge.remove();\n delete dom.mentionsBadge;\n }, !isMentionBadgeMounted ? 2 : 0);\n }\n\n if(!hasUnreadBadge) {\n return;\n }\n\n if(isPinned) {\n dom.unreadBadge.classList.add('tgico-chatspinned', 'tgico');\n } else {\n dom.unreadBadge.classList.remove('tgico-chatspinned', 'tgico');\n }\n\n let isUnread = true, isMention = false;\n if(dialog.unread_mentions_count && dialog.unread_count === 1) {\n dom.unreadBadge.innerText = '@';\n isMention = true;\n // dom.unreadBadge.classList.add('tgico-mention', 'tgico');\n } else if(dialog.unread_count || dialog.pFlags.unread_mark) {\n //dom.unreadMessagesSpan.innerText = '' + (dialog.unread_count ? formatNumber(dialog.unread_count, 1) : ' ');\n dom.unreadBadge.innerText = '' + (dialog.unread_count || ' ');\n } else {\n dom.unreadBadge.innerText = '';\n isUnread = false;\n }\n\n dom.unreadBadge.classList.toggle('unread', isUnread);\n dom.unreadBadge.classList.toggle('mention', isMention);\n }\n\n private accumulateArchivedUnread() {\n if(this.accumulateArchivedTimeout) return;\n this.accumulateArchivedTimeout = window.setTimeout(() => {\n this.accumulateArchivedTimeout = 0;\n const dialogs = appMessagesManager.dialogsStorage.getFolder(1);\n const sum = dialogs.reduce((acc, dialog) => acc + dialog.unread_count, 0);\n rootScope.dispatchEvent('dialogs_archived_unread', {count: sum});\n }, 0);\n }\n\n private getDialogDom(peerId: number) {\n // return this.doms[peerId];\n const element = this.sortedList.get(peerId);\n return element?.dom;\n }\n\n private getDialog(dialog: Dialog | number): Dialog {\n if(typeof(dialog) === 'number') {\n const originalDialog = appMessagesManager.getDialogOnly(dialog);\n if(!originalDialog) {\n return {\n peerId: dialog,\n peer: appPeersManager.getOutputPeer(dialog),\n pFlags: {}\n } as any;\n }\n\n return originalDialog;\n }\n \n return dialog;\n }\n\n public addListDialog(options: Parameters[0] & {isBatch?: boolean}) {\n const dialog = this.getDialog(options.dialog);\n\n options.autonomous = false;\n\n const ret = this.addDialogNew(options);\n\n if(ret) {\n const isMuted = appNotificationsManager.isPeerLocalMuted(dialog.peerId, true);\n if(isMuted) {\n ret.dom.listEl.classList.add('is-muted');\n }\n\n this.setLastMessage(dialog, undefined, ret.dom, undefined, options.loadPromises, options.isBatch, true);\n }\n\n return ret;\n }\n\n public addDialogNew(options: {\n dialog: Dialog | number,\n container?: Parameters[1],\n drawStatus?: boolean,\n rippleEnabled?: boolean,\n onlyFirstName?: boolean,\n meAsSaved?: boolean,\n append?: boolean,\n avatarSize?: number,\n autonomous?: boolean,\n lazyLoadQueue?: LazyLoadQueueIntersector,\n loadPromises?: Promise[]\n }) {\n return this.addDialog(options.dialog, options.container, options.drawStatus, options.rippleEnabled, options.onlyFirstName, options.meAsSaved, options.append, options.avatarSize, options.autonomous, options.lazyLoadQueue, options.loadPromises);\n }\n\n public addDialog(_dialog: Dialog | number, \n container?: HTMLElement | Scrollable | DocumentFragment | false, \n drawStatus = true, \n rippleEnabled = true, \n onlyFirstName = false, \n meAsSaved = true, \n append = true, \n avatarSize = 54, \n autonomous = !!container, \n lazyLoadQueue?: LazyLoadQueueIntersector,\n loadPromises?: Promise[]) {\n const dialog = this.getDialog(_dialog);\n const peerId = dialog.peerId;\n\n const avatarEl = new AvatarElement();\n avatarEl.loadPromises = loadPromises;\n avatarEl.lazyLoadQueue = lazyLoadQueue;\n avatarEl.setAttribute('dialog', meAsSaved ? '1' : '0');\n avatarEl.setAttribute('peer', '' + peerId);\n avatarEl.classList.add('dialog-avatar', 'avatar-' + avatarSize);\n\n if(drawStatus && peerId !== rootScope.myId) {\n if(peerId > 0) {\n const user = appUsersManager.getUser(peerId);\n //console.log('found user', user);\n\n if(user.status && user.status._ === 'userStatusOnline') {\n avatarEl.classList.add('is-online');\n }\n }\n }\n\n const captionDiv = document.createElement('div');\n captionDiv.classList.add('user-caption');\n\n const titleSpanContainer = document.createElement('span');\n titleSpanContainer.classList.add('user-title');\n\n const peerTitle = new PeerTitle({\n peerId,\n dialog: meAsSaved,\n onlyFirstName,\n plainText: false\n });\n\n titleSpanContainer.append(peerTitle.element);\n //p.classList.add('')\n\n // в других случаях иконка верификации не нужна (а первый - это главные чатлисты)\n //if(!container) {\n \n // for muted icon\n titleSpanContainer.classList.add('tgico'); // * эта строка будет актуальна только для !container, но ладно\n \n const peer = appPeersManager.getPeer(peerId);\n if(peer?.pFlags?.verified) {\n titleSpanContainer.append(generateVerifiedIcon());\n }\n //}\n \n const span = document.createElement('span');\n span.classList.add('user-last-message');\n span.setAttribute('dir', 'auto');\n\n //captionDiv.append(titleSpan);\n //captionDiv.append(span);\n\n const li = document.createElement('li');\n if(rippleEnabled) {\n ripple(li);\n }\n\n li.append(avatarEl, captionDiv);\n li.dataset.peerId = '' + peerId;\n\n const statusSpan = document.createElement('span');\n statusSpan.classList.add('message-status', 'sending-status'/* , 'transition', 'reveal' */);\n\n const lastTimeSpan = document.createElement('span');\n lastTimeSpan.classList.add('message-time');\n\n const unreadBadge = document.createElement('div');\n unreadBadge.className = 'dialog-subtitle-badge badge badge-24';\n\n const titleP = document.createElement('p');\n titleP.classList.add('dialog-title');\n\n const rightSpan = document.createElement('span');\n rightSpan.classList.add('dialog-title-details');\n rightSpan.append(statusSpan, lastTimeSpan);\n titleP.append(titleSpanContainer, rightSpan);\n\n const subtitleEl = document.createElement('p');\n subtitleEl.classList.add('dialog-subtitle');\n subtitleEl.append(span);\n\n captionDiv.append(titleP, subtitleEl);\n\n const dom: DialogDom = {\n avatarEl,\n captionDiv,\n titleSpan: peerTitle.element,\n titleSpanContainer,\n statusSpan,\n lastTimeSpan,\n unreadBadge,\n lastMessageSpan: span,\n containerEl: li,\n listEl: li,\n subtitleEl\n };\n\n /* let good = false;\n for(const folderId in this.chatLists) {\n if(this.chatLists[folderId] === container) {\n good = true;\n }\n } */\n if(container) {\n const method = append ? 'append' : 'prepend';\n container[method](li);\n }\n\n if(!autonomous && appImManager.chat?.peerId === peerId) {\n li.classList.add('active');\n this.lastActiveElements.add(li);\n } \n \n return {dom, dialog};\n }\n\n public setTyping(dialog: Dialog) {\n const dom = this.getDialogDom(dialog.peerId);\n if(!dom) {\n return;\n }\n\n let typingElement = dom.lastMessageSpan.querySelector('.peer-typing-container') as HTMLElement;\n if(typingElement) {\n appImManager.getPeerTyping(dialog.peerId, typingElement);\n } else {\n typingElement = appImManager.getPeerTyping(dialog.peerId);\n replaceContent(dom.lastMessageSpan, typingElement);\n dom.lastMessageSpan.classList.add('user-typing');\n }\n }\n\n public unsetTyping(dialog: Dialog) {\n const dom = this.getDialogDom(dialog.peerId);\n if(!dom) {\n return;\n }\n\n dom.lastMessageSpan.classList.remove('user-typing');\n this.setLastMessage(dialog, null, dom, undefined, undefined, undefined, null);\n }\n}\n\nconst appDialogsManager = new AppDialogsManager();\nMOUNT_CLASS_TO.appDialogsManager = appDialogsManager;\nexport default appDialogsManager;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.Recorder=t():e.Recorder=t()}(\"undefined\"!=typeof self?self:this,(function(){return function(e){var t={};function o(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(i,n,function(t){return e[t]}.bind(null,n));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=0)}([function(e,t,o){\"use strict\";(function(t){var o=t.AudioContext||t.webkitAudioContext,i=function(e){if(!i.isRecordingSupported())throw new Error(\"Recording is not supported in this browser\");e||(e={}),this.state=\"inactive\",this.config=Object.assign({bufferLength:4096,encoderApplication:2049,encoderFrameSize:20,encoderPath:\"encoderWorker.min.js\",encoderSampleRate:48e3,maxFramesPerPage:40,mediaTrackConstraints:!0,monitorGain:0,numberOfChannels:1,recordingGain:1,resampleQuality:3,streamPages:!1,reuseWorker:!1,wavBitDepth:16},e),this.encodedSamplePosition=0};i.isRecordingSupported=function(){return o&&t.navigator&&t.navigator.mediaDevices&&t.navigator.mediaDevices.getUserMedia&&t.WebAssembly},i.prototype.clearStream=function(){this.stream&&(this.stream.getTracks?this.stream.getTracks().forEach((function(e){e.stop()})):this.stream.stop(),delete this.stream),this.audioContext&&this.closeAudioContext&&(this.audioContext.close(),delete this.audioContext)},i.prototype.encodeBuffers=function(e){if(\"recording\"===this.state){for(var t=[],o=0;o{this.encodeBuffers(e.inputBuffer)},this.monitorGainNode=this.audioContext.createGain(),this.setMonitorGain(this.config.monitorGain),this.monitorGainNode.connect(this.audioContext.destination),this.recordingGainNode=this.audioContext.createGain(),this.setRecordingGain(this.config.recordingGain),this.recordingGainNode.connect(this.scriptProcessorNode)},i.prototype.initSourceNode=function(e){return e&&e.context?t.Promise.resolve(e):t.navigator.mediaDevices.getUserMedia({audio:this.config.mediaTrackConstraints}).then(e=>(this.stream=e,this.audioContext.createMediaStreamSource(e)))},i.prototype.loadWorker=function(){this.encoder||(this.encoder=new t.Worker(this.config.encoderPath))},i.prototype.initWorker=function(){var e=(this.config.streamPages?this.streamPage:this.storePage).bind(this);return this.recordedPages=[],this.totalLength=0,this.loadWorker(),new Promise((t,o)=>{var i=o=>{switch(o.data.message){case\"ready\":t();break;case\"page\":this.encodedSamplePosition=o.data.samplePosition,e(o.data.page);break;case\"done\":this.encoder.removeEventListener(\"message\",i),this.finish()}};this.encoder.addEventListener(\"message\",i),this.encoder.postMessage(Object.assign({command:\"init\",originalSampleRate:this.audioContext.sampleRate,wavSampleRate:this.audioContext.sampleRate},this.config))})},i.prototype.pause=function(e){if(\"recording\"===this.state){if(this.state=\"paused\",e&&this.config.streamPages){var t=this.encoder;return new Promise((e,o)=>{var i=o=>{\"flushed\"===o.data.message&&(t.removeEventListener(\"message\",i),this.onpause(),e())};t.addEventListener(\"message\",i),t.postMessage({command:\"flush\"})})}return this.onpause(),Promise.resolve()}},i.prototype.resume=function(){\"paused\"===this.state&&(this.state=\"recording\",this.onresume())},i.prototype.setRecordingGain=function(e){this.config.recordingGain=e,this.recordingGainNode&&this.audioContext&&this.recordingGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.setMonitorGain=function(e){this.config.monitorGain=e,this.monitorGainNode&&this.audioContext&&this.monitorGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.start=function(e){if(\"inactive\"===this.state)return this.initAudioContext(e),this.initAudioGraph(),this.encodedSamplePosition=0,this.initWorker().then(()=>this.initSourceNode(e)).then(e=>{this.sourceNode=e,this.state=\"recording\",this.onstart(),this.encoder.postMessage({command:\"getHeaderPages\"}),this.sourceNode.connect(this.monitorGainNode),this.sourceNode.connect(this.recordingGainNode)})},i.prototype.stop=function(){if(\"inactive\"!==this.state){this.state=\"inactive\",this.monitorGainNode.disconnect(),this.scriptProcessorNode.disconnect(),this.recordingGainNode.disconnect(),this.sourceNode.disconnect(),this.clearStream();var e=this.encoder;return new Promise(t=>{var o=i=>{\"done\"===i.data.message&&(e.removeEventListener(\"message\",o),t())};e.addEventListener(\"message\",o),e.postMessage({command:\"done\"}),this.config.reuseWorker||e.postMessage({command:\"close\"})})}return Promise.resolve()},i.prototype.destroyWorker=function(){\"inactive\"===this.state&&this.encoder&&(this.encoder.postMessage({command:\"close\"}),delete this.encoder)},i.prototype.storePage=function(e){this.recordedPages.push(e),this.totalLength+=e.length},i.prototype.streamPage=function(e){this.ondataavailable(e)},i.prototype.finish=function(){if(!this.config.streamPages){var e=new Uint8Array(this.totalLength);this.recordedPages.reduce((function(t,o){return e.set(o,t),t+o.length}),0),this.ondataavailable(e)}this.onstop(),this.config.reuseWorker||delete this.encoder},i.prototype.ondataavailable=function(){},i.prototype.onpause=function(){},i.prototype.onresume=function(){},i.prototype.onstart=function(){},i.prototype.onstop=function(){},e.exports=i}).call(this,o(1))},function(e,t){var o;o=function(){return this}();try{o=o||new Function(\"return this\")()}catch(e){\"object\"==typeof window&&(o=window)}e.exports=o}])}));","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport sequentialDom from \"../helpers/sequentialDom\";\r\nimport {IS_TOUCH_SUPPORTED} from \"../environment/touchSupport\";\r\nimport rootScope from \"../lib/rootScope\";\r\n\r\nlet rippleClickId = 0;\r\nexport function ripple(elem: HTMLElement, callback: (id: number) => Promise = () => Promise.resolve(), onEnd: (id: number) => void = null, prepend = false) {\r\n //return;\r\n if(elem.querySelector('.c-ripple')) return;\r\n elem.classList.add('rp');\r\n \r\n let r = document.createElement('div');\r\n r.classList.add('c-ripple');\r\n\r\n const isSquare = elem.classList.contains('rp-square');\r\n if(isSquare) {\r\n r.classList.add('is-square');\r\n }\r\n\r\n elem[prepend ? 'prepend' : 'append'](r);\r\n\r\n let handler: () => void;\r\n //let animationEndPromise: Promise;\r\n const drawRipple = (clientX: number, clientY: number) => {\r\n const startTime = Date.now();\r\n const elem = document.createElement('div');\r\n\r\n const clickId = rippleClickId++;\r\n \r\n //console.log('ripple drawRipple');\r\n \r\n const duration = +window.getComputedStyle(r).getPropertyValue('--ripple-duration').replace('s', '') * 1000;\r\n //console.log('ripple duration', duration);\r\n\r\n handler = () => {\r\n //handler = () => animationEndPromise.then((duration) => {\r\n //console.log('ripple animation was:', duration);\r\n\r\n //const duration = isSquare || mediaSizes.isMobile ? 200 : 700;\r\n //return;\r\n let elapsedTime = Date.now() - startTime;\r\n const cb = () => {\r\n //console.log('ripple elapsedTime total pre-remove:', Date.now() - startTime);\r\n sequentialDom.mutate(() => {\r\n elem.remove();\r\n });\r\n \r\n if(onEnd) onEnd(clickId);\r\n };\r\n if(elapsedTime < duration) {\r\n let delay = Math.max(duration - elapsedTime, duration / 2);\r\n setTimeout(() => elem.classList.add('hiding'), Math.max(delay - duration / 2, 0));\r\n\r\n setTimeout(cb, delay);\r\n } else {\r\n elem.classList.add('hiding');\r\n setTimeout(cb, duration / 2);\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.removeEventListener('contextmenu', handler);\r\n }\r\n\r\n handler = null;\r\n touchStartFired = false;\r\n };\r\n //});\r\n\r\n callback && callback(clickId);\r\n\r\n /* callback().then((bad) => {\r\n if(bad) {\r\n span.remove();\r\n return;\r\n } */\r\n \r\n //console.log('ripple after promise', Date.now() - startTime);\r\n //console.log('ripple tooSlow:', tooSlow);\r\n /* if(tooSlow) {\r\n span.remove();\r\n return;\r\n } */\r\n\r\n window.requestAnimationFrame(() => {\r\n const rect = r.getBoundingClientRect();\r\n elem.classList.add('c-ripple__circle');\r\n\r\n const clickX = clientX - rect.left;\r\n const clickY = clientY - rect.top;\r\n\r\n const radius = Math.sqrt((Math.abs(clickY - rect.height / 2) + rect.height / 2) ** 2 + (Math.abs(clickX - rect.width / 2) + rect.width / 2) ** 2);\r\n const size = radius;\r\n\r\n // center of circle\r\n const x = clickX - size / 2;\r\n const y = clickY - size / 2;\r\n\r\n //console.log('ripple click', offsetFromCenter, size, clickX, clickY);\r\n\r\n elem.style.width = elem.style.height = size + 'px';\r\n elem.style.left = x + 'px';\r\n elem.style.top = y + 'px';\r\n\r\n // нижний код выполняется с задержкой\r\n /* animationEndPromise = new Promise((resolve) => {\r\n span.addEventListener('animationend', () => {\r\n // 713 -> 700\r\n resolve(((Date.now() - startTime) / 100 | 0) * 100);\r\n }, {once: true});\r\n }); */\r\n \r\n // нижний код не всегда включает анимацию ПРИ КЛИКЕ НА ТАЧПАД БЕЗ ТАПТИК ЭНЖИНА\r\n /* span.style.display = 'none';\r\n r.append(span);\r\n duration = +window.getComputedStyle(span).getPropertyValue('animation-duration').replace('s', '') * 1000;\r\n span.style.display = ''; */\r\n\r\n r.append(elem);\r\n\r\n //r.classList.add('active');\r\n //handler();\r\n });\r\n //});\r\n };\r\n\r\n const isRippleUnneeded = (e: Event) => e.target !== elem && (\r\n ['BUTTON', 'A'].includes((e.target as HTMLElement).tagName) \r\n || findUpClassName(e.target as HTMLElement, 'c-ripple') !== r\r\n );\r\n\r\n // TODO: rename this variable\r\n let touchStartFired = false;\r\n if(IS_TOUCH_SUPPORTED) {\r\n let touchEnd = () => {\r\n handler && handler();\r\n };\r\n \r\n elem.addEventListener('touchstart', (e) => {\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n\r\n //console.log('ripple touchstart', e);\r\n if(e.touches.length > 1 || touchStartFired || isRippleUnneeded(e)) {\r\n return;\r\n }\r\n \r\n //console.log('touchstart', e);\r\n touchStartFired = true;\r\n \r\n let {clientX, clientY} = e.touches[0];\r\n drawRipple(clientX, clientY);\r\n elem.addEventListener('touchend', touchEnd, {once: true});\r\n \r\n window.addEventListener('touchmove', (e) => {\r\n e.cancelBubble = true;\r\n e.stopPropagation();\r\n touchEnd();\r\n elem.removeEventListener('touchend', touchEnd);\r\n }, {once: true});\r\n }, {passive: true});\r\n } else {\r\n elem.addEventListener('mousedown', (e) => {\r\n if(![0, 2].includes(e.button)) { // only left and right buttons\r\n return;\r\n }\r\n\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n //console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') === r);\r\n\r\n if(elem.dataset.ripple === '0' || isRippleUnneeded(e)) {\r\n return;\r\n } else if(touchStartFired) {\r\n touchStartFired = false;\r\n return;\r\n }\r\n \r\n let {clientX, clientY} = e;\r\n drawRipple(clientX, clientY);\r\n window.addEventListener('mouseup', handler, {once: true, passive: true});\r\n window.addEventListener('contextmenu', handler, {once: true, passive: true});\r\n }, {passive: true});\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type ListenerSetter from \"../listenerSetter\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\r\nimport simulateEvent from \"./dispatchEvent\";\r\n\r\nexport const CLICK_EVENT_NAME: 'mousedown' /* | 'touchend' */ | 'click' = (IS_TOUCH_SUPPORTED ? 'mousedown' : 'click') as any;\r\nexport type AttachClickOptions = AddEventListenerOptions & Partial<{listenerSetter: ListenerSetter, touchMouseDown: true}>;\r\nexport function attachClickEvent(elem: HTMLElement | Window, callback: (e: /* TouchEvent | */MouseEvent) => void, options: AttachClickOptions = {}) {\r\n const add = options.listenerSetter ? options.listenerSetter.add(elem) : elem.addEventListener.bind(elem);\r\n // const remove = options.listenerSetter ? options.listenerSetter.removeManual.bind(options.listenerSetter, elem) : elem.removeEventListener.bind(elem);\r\n\r\n options.touchMouseDown = true;\r\n /* if(options.touchMouseDown && CLICK_EVENT_NAME === 'touchend') {\r\n add('mousedown', callback, options);\r\n } else if(CLICK_EVENT_NAME === 'touchend') {\r\n const o = {...options, once: true};\r\n\r\n const onTouchStart = (e: TouchEvent) => {\r\n const onTouchMove = (e: TouchEvent) => {\r\n remove('touchmove', onTouchMove, o);\r\n remove('touchend', onTouchEnd, o);\r\n };\r\n \r\n const onTouchEnd = (e: TouchEvent) => {\r\n remove('touchmove', onTouchMove, o);\r\n callback(e);\r\n if(options.once) {\r\n remove('touchstart', onTouchStart);\r\n }\r\n };\r\n \r\n add('touchend', onTouchEnd, o);\r\n add('touchmove', onTouchMove, o);\r\n };\r\n\r\n add('touchstart', onTouchStart);\r\n } else {\r\n add(CLICK_EVENT_NAME, callback, options);\r\n } */\r\n add(CLICK_EVENT_NAME, callback, options);\r\n}\r\n\r\nexport function detachClickEvent(elem: HTMLElement, callback: (e: TouchEvent | MouseEvent) => void, options?: AddEventListenerOptions) {\r\n // if(CLICK_EVENT_NAME === 'touchend') {\r\n // elem.removeEventListener('touchstart', callback, options);\r\n // } else {\r\n elem.removeEventListener(CLICK_EVENT_NAME, callback, options);\r\n // }\r\n}\r\n\r\nexport function simulateClickEvent(elem: HTMLElement) {\r\n simulateEvent(elem, CLICK_EVENT_NAME);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { i18n, LangPackKey } from \"../lib/langPack\";\r\nimport { ripple } from \"./ripple\";\r\n\r\nconst Button = (className: string, options: Partial<{\r\n noRipple: true, \r\n onlyMobile: true, \r\n icon: string, \r\n rippleSquare: true, \r\n text: LangPackKey, \r\n disabled: boolean,\r\n asDiv: boolean\r\n}> = {}) => {\r\n const button: HTMLButtonElement = document.createElement(options.asDiv ? 'div' : 'button') as any;\r\n button.className = className + (options.icon ? ' tgico-' + options.icon : '');\r\n\r\n if(!options.noRipple) {\r\n if(options.rippleSquare) {\r\n button.classList.add('rp-square');\r\n }\r\n\r\n ripple(button);\r\n }\r\n\r\n if(options.onlyMobile) {\r\n button.classList.add('only-handhelds');\r\n }\r\n\r\n if(options.disabled) {\r\n button.setAttribute('disabled', 'true');\r\n }\r\n\r\n if(options.text) {\r\n button.append(i18n(options.text));\r\n }\r\n\r\n return button;\r\n};\r\n\r\nexport default Button;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport { CLICK_EVENT_NAME } from \"../helpers/dom/clickEvent\";\r\nimport ListenerSetter from \"../helpers/listenerSetter\";\r\nimport mediaSizes from \"../helpers/mediaSizes\";\r\nimport { IS_TOUCH_SUPPORTED } from \"../environment/touchSupport\";\r\nimport { IS_APPLE, IS_MOBILE_SAFARI } from \"../environment/userAgent\";\r\nimport rootScope from \"../lib/rootScope\";\r\nimport appNavigationController from \"./appNavigationController\";\r\n\r\nexport function putPreloader(elem: Element, returnDiv = false): HTMLElement {\r\n const html = `\r\n \r\n \r\n `;\r\n\r\n if(returnDiv) {\r\n const div = document.createElement('div');\r\n div.classList.add('preloader');\r\n div.innerHTML = html;\r\n\r\n if(elem) {\r\n elem.appendChild(div);\r\n }\r\n\r\n return div;\r\n }\r\n \r\n elem.insertAdjacentHTML('beforeend', html);\r\n return elem.lastElementChild as HTMLElement;\r\n}\r\n\r\nMOUNT_CLASS_TO.putPreloader = putPreloader;\r\n\r\nexport function setButtonLoader(elem: HTMLButtonElement, icon = 'check') {\r\n elem.classList.remove('tgico-' + icon);\r\n elem.disabled = true;\r\n putPreloader(elem);\r\n\r\n return () => {\r\n elem.innerHTML = '';\r\n elem.classList.add('tgico-' + icon);\r\n elem.removeAttribute('disabled');\r\n };\r\n}\r\n\r\n/* export function parseMenuButtonsTo(to: {[name: string]: HTMLElement}, elements: HTMLCollection | NodeListOf) {\r\n Array.from(elements).forEach(el => {\r\n const match = el.className.match(/(?:^|\\s)menu-(.+?)(?:$|\\s)/);\r\n if(!match) return;\r\n to[match[1]] = el as HTMLElement;\r\n });\r\n} */\r\n\r\nlet onMouseMove = (e: MouseEvent) => {\r\n let rect = openedMenu.getBoundingClientRect();\r\n let {clientX, clientY} = e;\r\n \r\n let diffX = clientX >= rect.right ? clientX - rect.right : rect.left - clientX;\r\n let diffY = clientY >= rect.bottom ? clientY - rect.bottom : rect.top - clientY;\r\n \r\n if(diffX >= 100 || diffY >= 100) {\r\n closeBtnMenu();\r\n //openedMenu.parentElement.click();\r\n }\r\n //console.log('mousemove', diffX, diffY);\r\n};\r\n\r\nconst onClick = (e: MouseEvent | TouchEvent) => {\r\n //cancelEvent(e);\r\n closeBtnMenu();\r\n};\r\n\r\n// ! no need in this due to the same handler in appNavigationController\r\n/* const onKeyDown = (e: KeyboardEvent) => {\r\n if(e.key === 'Escape') {\r\n closeBtnMenu();\r\n cancelEvent(e);\r\n }\r\n}; */\r\n\r\nexport const closeBtnMenu = () => {\r\n if(openedMenu) {\r\n openedMenu.classList.remove('active');\r\n openedMenu.parentElement.classList.remove('menu-open');\r\n //openedMenu.previousElementSibling.remove(); // remove overlay\r\n if(menuOverlay) menuOverlay.remove();\r\n openedMenu = null;\r\n\r\n rootScope.dispatchEvent('context_menu_toggle', false);\r\n }\r\n \r\n if(openedMenuOnClose) {\r\n openedMenuOnClose();\r\n openedMenuOnClose = null;\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.removeEventListener('mousemove', onMouseMove);\r\n //window.removeEventListener('keydown', onKeyDown, {capture: true});\r\n window.removeEventListener('contextmenu', onClick);\r\n }\r\n\r\n document.removeEventListener(CLICK_EVENT_NAME, onClick);\r\n\r\n if(!IS_MOBILE_SAFARI) {\r\n appNavigationController.removeByType('menu');\r\n }\r\n};\r\n\r\nwindow.addEventListener('resize', () => {\r\n if(openedMenu) {\r\n closeBtnMenu();\r\n }\r\n \r\n /* if(openedMenu && (openedMenu.style.top || openedMenu.style.left)) {\r\n const rect = openedMenu.getBoundingClientRect();\r\n const {innerWidth, innerHeight} = window;\r\n\r\n console.log(innerWidth, innerHeight, rect);\r\n } */\r\n});\r\n\r\nlet openedMenu: HTMLElement = null, openedMenuOnClose: () => void = null, menuOverlay: HTMLElement = null;\r\nexport function openBtnMenu(menuElement: HTMLElement, onClose?: () => void) {\r\n closeBtnMenu();\r\n\r\n if(!IS_MOBILE_SAFARI) {\r\n appNavigationController.pushItem({\r\n type: 'menu',\r\n onPop: (canAnimate) => {\r\n closeBtnMenu();\r\n }\r\n });\r\n }\r\n \r\n openedMenu = menuElement;\r\n openedMenu.classList.add('active');\r\n openedMenu.parentElement.classList.add('menu-open');\r\n\r\n if(!menuOverlay) {\r\n menuOverlay = document.createElement('div');\r\n menuOverlay.classList.add('btn-menu-overlay');\r\n\r\n // ! because this event must be canceled, and can't cancel on menu click (below)\r\n menuOverlay.addEventListener(CLICK_EVENT_NAME, (e) => {\r\n cancelEvent(e);\r\n onClick(e);\r\n });\r\n }\r\n\r\n openedMenu.parentElement.insertBefore(menuOverlay, openedMenu);\r\n\r\n //document.body.classList.add('disable-hover');\r\n \r\n openedMenuOnClose = onClose;\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.addEventListener('mousemove', onMouseMove);\r\n //window.addEventListener('keydown', onKeyDown, {capture: true});\r\n window.addEventListener('contextmenu', onClick, {once: true});\r\n }\r\n\r\n /* // ! because this event must be canceled, and can't cancel on menu click (below)\r\n overlay.addEventListener(CLICK_EVENT_NAME, (e) => {\r\n cancelEvent(e);\r\n onClick(e);\r\n }); */\r\n \r\n // ! safari iOS doesn't handle window click event on overlay, idk why\r\n document.addEventListener(CLICK_EVENT_NAME, onClick);\r\n\r\n rootScope.dispatchEvent('context_menu_toggle', true);\r\n}\r\n\r\nconst PADDING_TOP = 8;\r\nconst PADDING_LEFT = 8;\r\nexport function positionMenu({pageX, pageY}: MouseEvent | Touch, elem: HTMLElement, side?: 'left' | 'right' | 'center') {\r\n //let {clientX, clientY} = e;\r\n\r\n // * side mean the OPEN side\r\n\r\n let {scrollWidth: menuWidth, scrollHeight: menuHeight} = elem;\r\n //let {innerWidth: windowWidth, innerHeight: windowHeight} = window;\r\n const rect = document.body.getBoundingClientRect();\r\n const windowWidth = rect.width;\r\n const windowHeight = rect.height;\r\n\r\n side = mediaSizes.isMobile ? 'right' : 'left';\r\n let verticalSide: 'top' /* | 'bottom' */ | 'center' = 'top';\r\n\r\n const getSides = () => {\r\n return {\r\n x: {\r\n left: pageX,\r\n right: pageX - menuWidth\r\n },\r\n intermediateX: side === 'right' ? PADDING_LEFT : windowWidth - menuWidth - PADDING_LEFT,\r\n //intermediateX: clientX < windowWidth / 2 ? PADDING_LEFT : windowWidth - menuWidth - PADDING_LEFT,\r\n y: {\r\n top: pageY,\r\n bottom: pageY - menuHeight\r\n },\r\n //intermediateY: verticalSide === 'top' ? PADDING_TOP : windowHeight - menuHeight - PADDING_TOP,\r\n intermediateY: pageY < windowHeight / 2 ? PADDING_TOP : windowHeight - menuHeight - PADDING_TOP,\r\n };\r\n };\r\n\r\n const sides = getSides();\r\n\r\n const possibleSides = {\r\n x: {\r\n left: sides.x.left + menuWidth + PADDING_LEFT <= windowWidth,\r\n right: sides.x.right >= PADDING_LEFT\r\n },\r\n y: {\r\n top: sides.y.top + menuHeight + PADDING_TOP <= windowHeight,\r\n bottom: sides.y.bottom - PADDING_TOP >= PADDING_TOP\r\n }\r\n };\r\n\r\n /* if(side === undefined) {\r\n if((clientX + menuWidth + PADDING_LEFT) > windowWidth) {\r\n side = 'right';\r\n }\r\n } */\r\n\r\n {\r\n /* const x = sides.x;\r\n\r\n const s = Object.keys(x) as (keyof typeof possibleSides.x)[];\r\n if(side) {\r\n s.findAndSplice(s => s === side);\r\n s.unshift(side);\r\n }\r\n\r\n const possibleSide = s.find(s => possibleSides.x[s]); */\r\n let left: number;\r\n /* if(possibleSide) {\r\n left = x[possibleSide];\r\n side = possibleSide;\r\n } else {\r\n left = sides.intermediateX;\r\n side = undefined;\r\n } */\r\n left = possibleSides.x[side] ? sides.x[side] : (side = 'center', sides.intermediateX);\r\n \r\n elem.style.left = left + 'px';\r\n }\r\n\r\n /* if((clientY + menuHeight + PADDING_TOP) > windowHeight) {\r\n elem.style.top = clamp(clientY - menuHeight, PADDING_TOP, windowHeight - menuHeight - PADDING_TOP) + 'px';\r\n // elem.style.top = (innerHeight - scrollHeight - PADDING_TOP) + 'px';\r\n verticalSide = 'bottom';\r\n } else {\r\n elem.style.top = Math.max(PADDING_TOP, clientY) + 'px';\r\n verticalSide = 'top';\r\n } */\r\n\r\n {\r\n let top: number;\r\n\r\n top = possibleSides.y[verticalSide] ? sides.y[verticalSide] : (verticalSide = 'center', sides.intermediateY);\r\n \r\n elem.style.top = top + 'px';\r\n }\r\n \r\n elem.className = elem.className.replace(/(top|center|bottom)-(left|center|right)/g, '');\r\n elem.classList.add(\r\n //(verticalSide === 'center' ? verticalSide : (verticalSide === 'bottom' ? 'top' : 'bottom')) +\r\n (verticalSide === 'center' ? verticalSide : 'bottom') +\r\n '-' +\r\n (side === 'center' ? side : (side === 'left' ? 'right' : 'left')));\r\n}\r\n\r\nlet _cancelContextMenuOpening = false, _cancelContextMenuOpeningTimeout = 0;\r\nexport function cancelContextMenuOpening() {\r\n if(_cancelContextMenuOpeningTimeout) {\r\n clearTimeout(_cancelContextMenuOpeningTimeout);\r\n }\r\n \r\n _cancelContextMenuOpeningTimeout = window.setTimeout(() => {\r\n _cancelContextMenuOpeningTimeout = 0;\r\n _cancelContextMenuOpening = false;\r\n }, .4e3);\r\n\r\n _cancelContextMenuOpening = true;\r\n}\r\n\r\nexport function attachContextMenuListener(element: HTMLElement, callback: (e: Touch | MouseEvent) => void, listenerSetter?: ListenerSetter) {\r\n const add = listenerSetter ? listenerSetter.add(element) : element.addEventListener.bind(element);\r\n const remove = listenerSetter ? listenerSetter.removeManual.bind(listenerSetter, element) : element.removeEventListener.bind(element);\r\n\r\n if(IS_APPLE && IS_TOUCH_SUPPORTED) {\r\n let timeout: number;\r\n\r\n const options: EventListenerOptions = {capture: true};\r\n\r\n const onCancel = () => {\r\n clearTimeout(timeout);\r\n // @ts-ignore\r\n remove('touchmove', onCancel, options);\r\n // @ts-ignore\r\n remove('touchend', onCancel, options);\r\n // @ts-ignore\r\n remove('touchcancel', onCancel, options);\r\n };\r\n\r\n add('touchstart', (e: TouchEvent) => {\r\n if(e.touches.length > 1) {\r\n onCancel();\r\n return;\r\n }\r\n \r\n add('touchmove', onCancel, options);\r\n add('touchend', onCancel, options);\r\n add('touchcancel', onCancel, options);\r\n\r\n timeout = window.setTimeout(() => {\r\n if(_cancelContextMenuOpening) {\r\n onCancel();\r\n return;\r\n }\r\n\r\n callback(e.touches[0]);\r\n onCancel();\r\n\r\n if(openedMenu) {\r\n element.addEventListener('touchend', cancelEvent, {once: true}); // * fix instant closing\r\n }\r\n }, .4e3);\r\n });\r\n\r\n /* if(!isSafari) {\r\n add('contextmenu', (e: any) => {\r\n cancelEvent(e);\r\n }, {passive: false, capture: true});\r\n } */\r\n } else {\r\n add('contextmenu', IS_TOUCH_SUPPORTED ? (e: any) => {\r\n callback(e);\r\n\r\n if(openedMenu) {\r\n element.addEventListener('touchend', cancelEvent, {once: true}); // * fix instant closing\r\n }\r\n } : callback);\r\n }\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport { IS_MOBILE_SAFARI } from \"../environment/userAgent\";\r\nimport { logger } from \"../lib/logger\";\r\nimport { doubleRaf } from \"../helpers/schedulers\";\r\nimport blurActiveElement from \"../helpers/dom/blurActiveElement\";\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\n\r\nexport type NavigationItem = {\r\n type: 'left' | 'right' | 'im' | 'chat' | 'popup' | 'media' | 'menu' | \r\n 'esg' | 'multiselect' | 'input-helper' | 'autocomplete-helper' | 'markup' | 'global-search' | 'voice',\r\n onPop: (canAnimate: boolean) => boolean | void,\r\n onEscape?: () => boolean,\r\n noHistory?: boolean,\r\n noBlurOnPop?: boolean,\r\n};\r\n\r\nexport class AppNavigationController {\r\n private navigations: Array = [];\r\n private id = Date.now();\r\n private manual = false;\r\n private log = logger('NC');\r\n private debug = true;\r\n private currentHash = window.location.hash;\r\n public onHashChange: () => void;\r\n\r\n constructor() {\r\n let isPossibleSwipe = false;\r\n window.addEventListener('popstate', (e) => {\r\n this.debug && this.log('popstate', e, isPossibleSwipe);\r\n\r\n if(window.location.hash !== this.currentHash) {\r\n this.onHashChange && this.onHashChange();\r\n this.replaceState();\r\n return;\r\n }\r\n this.currentHash = window.location.hash;\r\n\r\n const id: number = e.state;\r\n if(id !== this.id/* && !this.navigations.length */) {\r\n this.pushState();\r\n return;\r\n }\r\n\r\n const item = this.navigations.pop();\r\n if(!item) {\r\n this.pushState();\r\n return;\r\n }\r\n\r\n this.manual = !isPossibleSwipe;\r\n this.handleItem(item);\r\n //this.pushState(); // * prevent adding forward arrow\r\n });\r\n\r\n window.addEventListener('keydown', (e) => {\r\n const item = this.navigations[this.navigations.length - 1];\r\n if(!item) return;\r\n if(e.key === 'Escape' && (item.onEscape ? item.onEscape() : true)) {\r\n cancelEvent(e);\r\n this.back(item.type);\r\n }\r\n }, {capture: true, passive: false});\r\n\r\n if(IS_MOBILE_SAFARI) {\r\n const options = {passive: true};\r\n window.addEventListener('touchstart', (e) => {\r\n if(e.touches.length > 1) return;\r\n this.debug && this.log('touchstart');\r\n\r\n const detach = () => {\r\n window.removeEventListener('touchend', onTouchEnd);\r\n window.removeEventListener('touchmove', onTouchMove);\r\n };\r\n\r\n let moved = false;\r\n const onTouchMove = (e: TouchEvent) => {\r\n this.debug && this.log('touchmove');\r\n if(e.touches.length > 1) {\r\n detach();\r\n return;\r\n }\r\n\r\n moved = true;\r\n };\r\n\r\n const onTouchEnd = (e: TouchEvent) => {\r\n this.debug && this.log('touchend');\r\n if(e.touches.length > 1 || !moved) {\r\n detach();\r\n return;\r\n }\r\n\r\n isPossibleSwipe = true;\r\n doubleRaf().then(() => {\r\n isPossibleSwipe = false;\r\n });\r\n\r\n detach();\r\n };\r\n\r\n window.addEventListener('touchend', onTouchEnd, options);\r\n window.addEventListener('touchmove', onTouchMove, options);\r\n }, options);\r\n }\r\n\r\n history.scrollRestoration = 'manual';\r\n\r\n this.pushState(); // * push init state\r\n }\r\n\r\n private handleItem(item: NavigationItem) {\r\n const good = item.onPop(!this.manual ? false : undefined);\r\n this.debug && this.log('popstate, navigation:', item, this.navigations);\r\n if(good === false) {\r\n this.pushItem(item);\r\n } else if(!item.noBlurOnPop) {\r\n blurActiveElement(); // no better place for it\r\n }\r\n\r\n this.manual = false;\r\n }\r\n\r\n public findItemByType(type: NavigationItem['type']) {\r\n for(let i = this.navigations.length - 1; i >= 0; --i) {\r\n const item = this.navigations[i];\r\n if(item.type === type) {\r\n return {item, index: i};\r\n }\r\n }\r\n }\r\n\r\n public back(type?: NavigationItem['type']) {\r\n if(type) {\r\n const ret = this.findItemByType(type);\r\n if(ret) {\r\n this.manual = true;\r\n // ! commented because 'popstate' event will be fired with delay\r\n //if(ret.index !== (this.navigations.length - 1)) {\r\n this.navigations.splice(ret.index, 1);\r\n this.handleItem(ret.item);\r\n return;\r\n //}\r\n }\r\n }\r\n\r\n history.back();\r\n }\r\n\r\n public pushItem(item: NavigationItem) {\r\n this.navigations.push(item);\r\n this.debug && this.log('pushstate', item, this.navigations);\r\n\r\n if(!item.noHistory) {\r\n this.pushState();\r\n }\r\n }\r\n\r\n private pushState() {\r\n this.manual = false;\r\n history.pushState(this.id, '');\r\n }\r\n\r\n public replaceState() {\r\n history.replaceState(this.id, '', location.origin + location.pathname);\r\n }\r\n\r\n public removeItem(item: NavigationItem) {\r\n this.navigations.findAndSplice(i => i === item);\r\n }\r\n\r\n public removeByType(type: NavigationItem['type'], single = false) {\r\n for(let i = this.navigations.length - 1; i >= 0; --i) {\r\n const item = this.navigations[i];\r\n if(item.type === type) {\r\n this.navigations.splice(i, 1);\r\n\r\n if(single) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst appNavigationController = new AppNavigationController();\r\nMOUNT_CLASS_TO.appNavigationController = appNavigationController;\r\nexport default appNavigationController;\r\n","export default function simulateEvent(elem: HTMLElement, name: string) {\n const event = new Event(name, {bubbles: true, cancelable: true});\n elem.dispatchEvent(event);\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { fastRaf } from \"./schedulers\";\r\nimport { CancellablePromise, deferredPromise } from \"./cancellablePromise\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport isInDOM from \"./dom/isInDOM\";\r\n\r\nclass SequentialDom {\r\n private promises: Partial<{\r\n read: CancellablePromise,\r\n write: CancellablePromise\r\n }> = {};\r\n private raf = fastRaf.bind(null);\r\n private scheduled = false;\r\n\r\n private do(kind: keyof SequentialDom['promises'], callback?: VoidFunction) {\r\n let promise = this.promises[kind];\r\n if(!promise) {\r\n this.scheduleFlush();\r\n promise = this.promises[kind] = deferredPromise();\r\n }\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n \r\n return promise;\r\n }\r\n\r\n public measure(callback?: VoidFunction) {\r\n return this.do('read', callback);\r\n }\r\n\r\n public mutate(callback?: VoidFunction) {\r\n return this.do('write', callback);\r\n }\r\n\r\n /**\r\n * Will fire instantly if element is not connected\r\n * @param element \r\n * @param callback \r\n */\r\n public mutateElement(element: HTMLElement, callback?: VoidFunction) {\r\n const promise = isInDOM(element) ? this.mutate() : Promise.resolve();\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n private scheduleFlush() {\r\n if(!this.scheduled) {\r\n this.scheduled = true;\r\n\r\n this.raf(() => {\r\n this.promises.read && this.promises.read.resolve();\r\n this.promises.write && this.promises.write.resolve();\r\n\r\n this.scheduled = false;\r\n this.promises = {};\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst sequentialDom = new SequentialDom();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.sequentialDom = sequentialDom);\r\nexport default sequentialDom;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { AccountPassword, AccountUpdatePasswordSettings, InputCheckPasswordSRP, PasswordKdfAlgo } from '../../layer';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport appUsersManager from '../appManagers/appUsersManager';\r\nimport apiManager from './mtprotoworker';\r\n\r\nexport class PasswordManager {\r\n public getState(): Promise {\r\n return apiManager.invokeApi('account.getPassword').then((result) => {\r\n return result;\r\n });\r\n }\r\n\r\n public updateSettings(settings: {\r\n hint?: string,\r\n email?: string,\r\n newPassword?: string,\r\n currentPassword?: string\r\n } = {}) {\r\n //state = Object.assign({}, state);\r\n //state.new_algo = Object.assign({}, state.new_algo);\r\n\r\n return this.getState().then(state => {\r\n let currentHashPromise: Promise;\r\n let newHashPromise: Promise;\r\n const params: AccountUpdatePasswordSettings = {\r\n password: null,\r\n new_settings: {\r\n _: 'account.passwordInputSettings',\r\n hint: settings.hint,\r\n email: settings.email\r\n }\r\n };\r\n \r\n if(settings.currentPassword) {\r\n currentHashPromise = apiManager.invokeCrypto('computeSRP', settings.currentPassword, state, false) as any;\r\n } else {\r\n currentHashPromise = Promise.resolve({\r\n _: 'inputCheckPasswordEmpty'\r\n });\r\n }\r\n \r\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password, but still there is a mistake, TDesktop passes 'new_algo' everytime\r\n const newAlgo = state.new_algo as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\r\n const salt1 = new Uint8Array(newAlgo.salt1.length + 32);\r\n salt1.randomize();\r\n salt1.set(newAlgo.salt1, 0);\r\n newAlgo.salt1 = salt1;\r\n \r\n if(settings.newPassword) {\r\n newHashPromise = apiManager.invokeCrypto('computeSRP', settings.newPassword, state, true) as any;\r\n } else {\r\n newHashPromise = Promise.resolve(new Uint8Array());\r\n }\r\n \r\n return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => {\r\n params.password = hashes[0];\r\n params.new_settings.new_algo = newAlgo;\r\n params.new_settings.new_password_hash = hashes[1];\r\n \r\n return apiManager.invokeApi('account.updatePasswordSettings', params);\r\n });\r\n });\r\n }\r\n\r\n public check(password: string, state: AccountPassword, options: any = {}) {\r\n return apiManager.invokeCrypto('computeSRP', password, state, false).then((inputCheckPassword) => {\r\n //console.log('SRP', inputCheckPassword);\r\n return apiManager.invokeApi('auth.checkPassword', {\r\n password: inputCheckPassword as InputCheckPasswordSRP.inputCheckPasswordSRP\r\n }, options).then(auth => {\r\n if(auth._ === 'auth.authorization') {\r\n appUsersManager.saveApiUser(auth.user);\r\n apiManager.setUserAuth(auth.user.id);\r\n }\r\n\r\n return auth;\r\n });\r\n });\r\n }\r\n\r\n public confirmPasswordEmail(code: string) {\r\n return apiManager.invokeApi('account.confirmPasswordEmail', {code});\r\n }\r\n\r\n public resendPasswordEmail() {\r\n return apiManager.invokeApi('account.resendPasswordEmail');\r\n }\r\n\r\n public cancelPasswordEmail() {\r\n return apiManager.invokeApi('account.cancelPasswordEmail');\r\n }\r\n\r\n /* public requestRecovery(options: any = {}) {\r\n return apiManager.invokeApi('auth.requestPasswordRecovery', {}, options);\r\n }\r\n\r\n public recover(code: any, options: any = {}) {\r\n return apiManager.invokeApi('auth.recoverPassword', {\r\n code\r\n }, options);\r\n } */\r\n}\r\n\r\nconst passwordManager = new PasswordManager();\r\nMOUNT_CLASS_TO.passwordManager = passwordManager;\r\nexport default passwordManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { cancelEvent } from \"../helpers/dom/cancelEvent\";\r\nimport InputField, { InputFieldOptions } from \"./inputField\";\r\n\r\nexport default class PasswordInputField extends InputField {\r\n public passwordVisible = false;\r\n public toggleVisible: HTMLElement;\r\n public onVisibilityClickAdditional: () => void;\r\n\r\n constructor(options: InputFieldOptions = {}) {\r\n super({\r\n plainText: true,\r\n ...options\r\n });\r\n\r\n const input = this.input as HTMLInputElement;\r\n input.type = 'password';\r\n input.setAttribute('required', '');\r\n input.autocomplete = 'off';\r\n /* input.readOnly = true;\r\n\r\n input.addEventListener('focus', () => {\r\n input.removeAttribute('readonly');\r\n }, {once: true}); */\r\n\r\n // * https://stackoverflow.com/a/35949954/6758968\r\n const stealthy = document.createElement('input');\r\n stealthy.classList.add('stealthy');\r\n stealthy.tabIndex = -1;\r\n stealthy.type = 'password';\r\n input.parentElement.prepend(stealthy);\r\n input.parentElement.insertBefore(stealthy.cloneNode(), input.nextSibling);\r\n\r\n const toggleVisible = this.toggleVisible = document.createElement('span');\r\n toggleVisible.classList.add('toggle-visible', 'tgico');\r\n\r\n this.container.classList.add('input-field-password');\r\n this.container.append(toggleVisible);\r\n\r\n toggleVisible.addEventListener('click', this.onVisibilityClick);\r\n toggleVisible.addEventListener('touchend', this.onVisibilityClick);\r\n }\r\n\r\n public onVisibilityClick = (e: Event) => {\r\n cancelEvent(e);\r\n this.passwordVisible = !this.passwordVisible;\r\n\r\n this.toggleVisible.classList.toggle('eye-hidden', this.passwordVisible);\r\n (this.input as HTMLInputElement).type = this.passwordVisible ? 'text' : 'password';\r\n this.onVisibilityClickAdditional && this.onVisibilityClickAdditional();\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport lottieLoader, { RLottiePlayer } from \"../../lib/lottieLoader\";\r\nimport PasswordInputField from \"../passwordInputField\";\r\n\r\nexport default class PasswordMonkey {\r\n public container: HTMLElement;\r\n public animation: RLottiePlayer;\r\n public needFrame = 0;\r\n protected loadPromise: Promise;\r\n\r\n constructor(protected passwordInputField: PasswordInputField, protected size: number) {\r\n this.container = document.createElement('div');\r\n this.container.classList.add('media-sticker-wrapper');\r\n }\r\n\r\n public load() {\r\n if(this.loadPromise) return this.loadPromise;\r\n return this.loadPromise = lottieLoader.loadAnimationFromURL({\r\n container: this.container,\r\n loop: false,\r\n autoplay: false,\r\n width: this.size,\r\n height: this.size,\r\n noCache: true\r\n //}, 'assets/img/TwoFactorSetupMonkeyClose.tgs').then(_animation => {\r\n }, 'assets/img/TwoFactorSetupMonkeyPeek.tgs').then(_animation => {\r\n //return;\r\n this.animation = _animation;\r\n this.animation.addEventListener('enterFrame', currentFrame => {\r\n //console.log('enterFrame', currentFrame, this.needFrame);\r\n\r\n if((this.animation.direction === 1 && currentFrame >= this.needFrame) ||\r\n (this.animation.direction === -1 && currentFrame <= this.needFrame)) {\r\n this.animation.setSpeed(1);\r\n this.animation.pause();\r\n } \r\n });\r\n\r\n this.passwordInputField.onVisibilityClickAdditional = () => {\r\n if(this.passwordInputField.passwordVisible) {\r\n this.animation.setDirection(1);\r\n this.animation.curFrame = 0;\r\n this.needFrame = 16;\r\n this.animation.play();\r\n } else {\r\n this.animation.setDirection(-1);\r\n this.animation.curFrame = 16;\r\n this.needFrame = 0;\r\n this.animation.play();\r\n }\r\n };\r\n\r\n return lottieLoader.waitForFirstFrame(_animation);\r\n });\r\n }\r\n\r\n public remove() {\r\n if(this.animation) {\r\n this.animation.remove();\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/19.804c41f1066e7188e13a.chunk.js.map b/public/19.804c41f1066e7188e13a.chunk.js.map index 22784499..255996e8 100644 --- a/public/19.804c41f1066e7188e13a.chunk.js.map +++ b/public/19.804c41f1066e7188e13a.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/helpers/noop.ts","webpack:///./src/lib/rootScope.ts","webpack:///./src/components/ripple.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/schedulers.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/helpers/sequentialDom.ts","webpack:///./src/helpers/dom/isInDOM.ts","webpack:///./src/config/modes.ts"],"names":["noop","RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","name","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","rippleClickId","ripple","elem","callback","onEnd","prepend","add","r","createElement","handler","contains","drawRipple","clientX","clientY","startTime","Date","now","clickId","duration","getComputedStyle","getPropertyValue","replace","elapsedTime","cb","mutate","remove","delay","Math","max","setTimeout","removeEventListener","touchStartFired","requestAnimationFrame","rect","getBoundingClientRect","clickX","left","clickY","top","size","sqrt","abs","height","width","x","y","style","append","isRippleUnneeded","target","includes","tagName","touchEnd","animationsEnabled","touches","length","once","cancelBubble","stopPropagation","passive","button","dataset","DEBUG","debug","MOUNT_CLASS_TO","self","fastRafCallbacks","fastRaf","push","currentCallbacks","forEach","fastRafConventionalCallbacks","rafPromise","processing","fastRafConventional","i","fastRafPromise","then","doubleRaf","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","args","lastNotify","listeners","addNotifyListener","deferred","reject","catch","finally","cancel","Object","assign","EventListenerBase","reuseResults","_constructor","listenerResults","options","hasOwnProperty","pop","obj","findAndSplice","l","arr","slice","listener","findIndex","sequentialDom","promises","raf","bind","scheduled","kind","promise","scheduleFlush","do","element","read","write","isInDOM","isConnected","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker"],"mappings":"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","file":"19.804c41f1066e7188e13a.chunk.js","sourcesContent":["export default function noop() {}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport sequentialDom from \"../helpers/sequentialDom\";\r\nimport {IS_TOUCH_SUPPORTED} from \"../environment/touchSupport\";\r\nimport rootScope from \"../lib/rootScope\";\r\n\r\nlet rippleClickId = 0;\r\nexport function ripple(elem: HTMLElement, callback: (id: number) => Promise = () => Promise.resolve(), onEnd: (id: number) => void = null, prepend = false) {\r\n //return;\r\n if(elem.querySelector('.c-ripple')) return;\r\n elem.classList.add('rp');\r\n \r\n let r = document.createElement('div');\r\n r.classList.add('c-ripple');\r\n\r\n const isSquare = elem.classList.contains('rp-square');\r\n if(isSquare) {\r\n r.classList.add('is-square');\r\n }\r\n\r\n elem[prepend ? 'prepend' : 'append'](r);\r\n\r\n let handler: () => void;\r\n //let animationEndPromise: Promise;\r\n const drawRipple = (clientX: number, clientY: number) => {\r\n const startTime = Date.now();\r\n const elem = document.createElement('div');\r\n\r\n const clickId = rippleClickId++;\r\n \r\n //console.log('ripple drawRipple');\r\n \r\n const duration = +window.getComputedStyle(r).getPropertyValue('--ripple-duration').replace('s', '') * 1000;\r\n //console.log('ripple duration', duration);\r\n\r\n handler = () => {\r\n //handler = () => animationEndPromise.then((duration) => {\r\n //console.log('ripple animation was:', duration);\r\n\r\n //const duration = isSquare || mediaSizes.isMobile ? 200 : 700;\r\n //return;\r\n let elapsedTime = Date.now() - startTime;\r\n const cb = () => {\r\n //console.log('ripple elapsedTime total pre-remove:', Date.now() - startTime);\r\n sequentialDom.mutate(() => {\r\n elem.remove();\r\n });\r\n \r\n if(onEnd) onEnd(clickId);\r\n };\r\n if(elapsedTime < duration) {\r\n let delay = Math.max(duration - elapsedTime, duration / 2);\r\n setTimeout(() => elem.classList.add('hiding'), Math.max(delay - duration / 2, 0));\r\n\r\n setTimeout(cb, delay);\r\n } else {\r\n elem.classList.add('hiding');\r\n setTimeout(cb, duration / 2);\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.removeEventListener('contextmenu', handler);\r\n }\r\n\r\n handler = null;\r\n touchStartFired = false;\r\n };\r\n //});\r\n\r\n callback && callback(clickId);\r\n\r\n /* callback().then((bad) => {\r\n if(bad) {\r\n span.remove();\r\n return;\r\n } */\r\n \r\n //console.log('ripple after promise', Date.now() - startTime);\r\n //console.log('ripple tooSlow:', tooSlow);\r\n /* if(tooSlow) {\r\n span.remove();\r\n return;\r\n } */\r\n\r\n window.requestAnimationFrame(() => {\r\n const rect = r.getBoundingClientRect();\r\n elem.classList.add('c-ripple__circle');\r\n\r\n const clickX = clientX - rect.left;\r\n const clickY = clientY - rect.top;\r\n\r\n const radius = Math.sqrt((Math.abs(clickY - rect.height / 2) + rect.height / 2) ** 2 + (Math.abs(clickX - rect.width / 2) + rect.width / 2) ** 2);\r\n const size = radius;\r\n\r\n // center of circle\r\n const x = clickX - size / 2;\r\n const y = clickY - size / 2;\r\n\r\n //console.log('ripple click', offsetFromCenter, size, clickX, clickY);\r\n\r\n elem.style.width = elem.style.height = size + 'px';\r\n elem.style.left = x + 'px';\r\n elem.style.top = y + 'px';\r\n\r\n // нижний код выполняется с задержкой\r\n /* animationEndPromise = new Promise((resolve) => {\r\n span.addEventListener('animationend', () => {\r\n // 713 -> 700\r\n resolve(((Date.now() - startTime) / 100 | 0) * 100);\r\n }, {once: true});\r\n }); */\r\n \r\n // нижний код не всегда включает анимацию ПРИ КЛИКЕ НА ТАЧПАД БЕЗ ТАПТИК ЭНЖИНА\r\n /* span.style.display = 'none';\r\n r.append(span);\r\n duration = +window.getComputedStyle(span).getPropertyValue('animation-duration').replace('s', '') * 1000;\r\n span.style.display = ''; */\r\n\r\n r.append(elem);\r\n\r\n //r.classList.add('active');\r\n //handler();\r\n });\r\n //});\r\n };\r\n\r\n const isRippleUnneeded = (e: Event) => e.target !== elem && (\r\n ['BUTTON', 'A'].includes((e.target as HTMLElement).tagName) \r\n || findUpClassName(e.target as HTMLElement, 'c-ripple') !== r\r\n );\r\n\r\n // TODO: rename this variable\r\n let touchStartFired = false;\r\n if(IS_TOUCH_SUPPORTED) {\r\n let touchEnd = () => {\r\n handler && handler();\r\n };\r\n \r\n elem.addEventListener('touchstart', (e) => {\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n\r\n //console.log('ripple touchstart', e);\r\n if(e.touches.length > 1 || touchStartFired || isRippleUnneeded(e)) {\r\n return;\r\n }\r\n \r\n //console.log('touchstart', e);\r\n touchStartFired = true;\r\n \r\n let {clientX, clientY} = e.touches[0];\r\n drawRipple(clientX, clientY);\r\n elem.addEventListener('touchend', touchEnd, {once: true});\r\n \r\n window.addEventListener('touchmove', (e) => {\r\n e.cancelBubble = true;\r\n e.stopPropagation();\r\n touchEnd();\r\n elem.removeEventListener('touchend', touchEnd);\r\n }, {once: true});\r\n }, {passive: true});\r\n } else {\r\n elem.addEventListener('mousedown', (e) => {\r\n if(![0, 2].includes(e.button)) { // only left and right buttons\r\n return;\r\n }\r\n\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n //console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') === r);\r\n\r\n if(elem.dataset.ripple === '0' || isRippleUnneeded(e)) {\r\n return;\r\n } else if(touchStartFired) {\r\n touchStartFired = false;\r\n return;\r\n }\r\n \r\n let {clientX, clientY} = e;\r\n drawRipple(clientX, clientY);\r\n window.addEventListener('mouseup', handler, {once: true, passive: true});\r\n window.addEventListener('contextmenu', handler, {once: true, passive: true});\r\n }, {passive: true});\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// * Jolly Cobra's schedulers\r\nimport { NoneToVoidFunction } from \"../types\";\r\n\r\n/*\r\nexport function throttleWithTickEnd(fn: F) {\r\n return throttleWith(onTickEnd, fn);\r\n}\r\n\r\nexport function throttleWithNow(fn: F) {\r\n return throttleWith(runNow, fn);\r\n}\r\n\r\nexport function onTickEnd(cb: NoneToVoidFunction) {\r\n Promise.resolve().then(cb);\r\n}\r\n\r\nfunction runNow(fn: NoneToVoidFunction) {\r\n fn();\r\n} */\r\n\r\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\r\nexport function fastRaf(callback: NoneToVoidFunction) {\r\n if(!fastRafCallbacks) {\r\n fastRafCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n const currentCallbacks = fastRafCallbacks!;\r\n fastRafCallbacks = undefined;\r\n currentCallbacks.forEach((cb) => cb());\r\n });\r\n } else {\r\n fastRafCallbacks.push(callback);\r\n }\r\n}\r\n\r\nlet fastRafConventionalCallbacks: NoneToVoidFunction[] | undefined, processing = false;\r\nexport function fastRafConventional(callback: NoneToVoidFunction) {\r\n if(!fastRafConventionalCallbacks) {\r\n fastRafConventionalCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n processing = true;\r\n for(let i = 0; i < fastRafConventionalCallbacks.length; ++i) {\r\n fastRafConventionalCallbacks[i]();\r\n }\r\n\r\n fastRafConventionalCallbacks = undefined;\r\n processing = false;\r\n });\r\n } else if(processing) {\r\n callback();\r\n } else {\r\n fastRafConventionalCallbacks.push(callback);\r\n }\r\n}\r\n\r\nlet rafPromise: Promise;\r\nexport function fastRafPromise() {\r\n if(rafPromise) return rafPromise;\r\n\r\n rafPromise = new Promise(requestAnimationFrame);\r\n rafPromise.then(() => {\r\n rafPromise = undefined;\r\n });\r\n\r\n return rafPromise;\r\n}\r\n\r\nexport function doubleRaf() {\r\n return new Promise((resolve) => {\r\n fastRaf(() => {\r\n fastRaf(resolve);\r\n });\r\n });\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { fastRaf } from \"./schedulers\";\r\nimport { CancellablePromise, deferredPromise } from \"./cancellablePromise\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport isInDOM from \"./dom/isInDOM\";\r\n\r\nclass SequentialDom {\r\n private promises: Partial<{\r\n read: CancellablePromise,\r\n write: CancellablePromise\r\n }> = {};\r\n private raf = fastRaf.bind(null);\r\n private scheduled = false;\r\n\r\n private do(kind: keyof SequentialDom['promises'], callback?: VoidFunction) {\r\n let promise = this.promises[kind];\r\n if(!promise) {\r\n this.scheduleFlush();\r\n promise = this.promises[kind] = deferredPromise();\r\n }\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n \r\n return promise;\r\n }\r\n\r\n public measure(callback?: VoidFunction) {\r\n return this.do('read', callback);\r\n }\r\n\r\n public mutate(callback?: VoidFunction) {\r\n return this.do('write', callback);\r\n }\r\n\r\n /**\r\n * Will fire instantly if element is not connected\r\n * @param element \r\n * @param callback \r\n */\r\n public mutateElement(element: HTMLElement, callback?: VoidFunction) {\r\n const promise = isInDOM(element) ? this.mutate() : Promise.resolve();\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n private scheduleFlush() {\r\n if(!this.scheduled) {\r\n this.scheduled = true;\r\n\r\n this.raf(() => {\r\n this.promises.read && this.promises.read.resolve();\r\n this.promises.write && this.promises.write.resolve();\r\n\r\n this.scheduled = false;\r\n this.promises = {};\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst sequentialDom = new SequentialDom();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.sequentialDom = sequentialDom);\r\nexport default sequentialDom;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n/* export function isInDOM(element: Element, parentNode?: HTMLElement): boolean {\r\n if(!element) {\r\n return false;\r\n }\r\n\r\n parentNode = parentNode || document.body;\r\n if(element === parentNode) {\r\n return true;\r\n }\r\n return isInDOM(element.parentNode as HTMLElement, parentNode);\r\n} */\r\nexport default function isInDOM(element: Element): boolean {\r\n return element?.isConnected;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/helpers/noop.ts","webpack:///./src/lib/rootScope.ts","webpack:///./src/components/ripple.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/schedulers.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/helpers/sequentialDom.ts","webpack:///./src/helpers/dom/isInDOM.ts","webpack:///./src/config/modes.ts"],"names":["noop","RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","name","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","rippleClickId","ripple","elem","callback","onEnd","prepend","add","r","createElement","handler","contains","drawRipple","clientX","clientY","startTime","Date","now","clickId","duration","getComputedStyle","getPropertyValue","replace","elapsedTime","cb","mutate","remove","delay","Math","max","setTimeout","removeEventListener","touchStartFired","requestAnimationFrame","rect","getBoundingClientRect","clickX","left","clickY","top","size","sqrt","abs","height","width","x","y","style","append","isRippleUnneeded","target","includes","tagName","touchEnd","animationsEnabled","touches","length","once","cancelBubble","stopPropagation","passive","button","dataset","DEBUG","debug","MOUNT_CLASS_TO","self","fastRafCallbacks","fastRaf","push","currentCallbacks","forEach","fastRafConventionalCallbacks","rafPromise","processing","fastRafConventional","i","fastRafPromise","then","doubleRaf","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","args","lastNotify","listeners","addNotifyListener","deferred","reject","catch","finally","cancel","Object","assign","EventListenerBase","reuseResults","_constructor","listenerResults","options","hasOwnProperty","pop","obj","findAndSplice","l","arr","slice","listener","findIndex","sequentialDom","promises","raf","bind","scheduled","kind","promise","scheduleFlush","do","element","read","write","isInDOM","isConnected","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker"],"mappings":"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","file":"19.804c41f1066e7188e13a.chunk.js","sourcesContent":["export default function noop() {}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n 'media_stop': void,\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport findUpClassName from \"../helpers/dom/findUpClassName\";\r\nimport sequentialDom from \"../helpers/sequentialDom\";\r\nimport {IS_TOUCH_SUPPORTED} from \"../environment/touchSupport\";\r\nimport rootScope from \"../lib/rootScope\";\r\n\r\nlet rippleClickId = 0;\r\nexport function ripple(elem: HTMLElement, callback: (id: number) => Promise = () => Promise.resolve(), onEnd: (id: number) => void = null, prepend = false) {\r\n //return;\r\n if(elem.querySelector('.c-ripple')) return;\r\n elem.classList.add('rp');\r\n \r\n let r = document.createElement('div');\r\n r.classList.add('c-ripple');\r\n\r\n const isSquare = elem.classList.contains('rp-square');\r\n if(isSquare) {\r\n r.classList.add('is-square');\r\n }\r\n\r\n elem[prepend ? 'prepend' : 'append'](r);\r\n\r\n let handler: () => void;\r\n //let animationEndPromise: Promise;\r\n const drawRipple = (clientX: number, clientY: number) => {\r\n const startTime = Date.now();\r\n const elem = document.createElement('div');\r\n\r\n const clickId = rippleClickId++;\r\n \r\n //console.log('ripple drawRipple');\r\n \r\n const duration = +window.getComputedStyle(r).getPropertyValue('--ripple-duration').replace('s', '') * 1000;\r\n //console.log('ripple duration', duration);\r\n\r\n handler = () => {\r\n //handler = () => animationEndPromise.then((duration) => {\r\n //console.log('ripple animation was:', duration);\r\n\r\n //const duration = isSquare || mediaSizes.isMobile ? 200 : 700;\r\n //return;\r\n let elapsedTime = Date.now() - startTime;\r\n const cb = () => {\r\n //console.log('ripple elapsedTime total pre-remove:', Date.now() - startTime);\r\n sequentialDom.mutate(() => {\r\n elem.remove();\r\n });\r\n \r\n if(onEnd) onEnd(clickId);\r\n };\r\n if(elapsedTime < duration) {\r\n let delay = Math.max(duration - elapsedTime, duration / 2);\r\n setTimeout(() => elem.classList.add('hiding'), Math.max(delay - duration / 2, 0));\r\n\r\n setTimeout(cb, delay);\r\n } else {\r\n elem.classList.add('hiding');\r\n setTimeout(cb, duration / 2);\r\n }\r\n\r\n if(!IS_TOUCH_SUPPORTED) {\r\n window.removeEventListener('contextmenu', handler);\r\n }\r\n\r\n handler = null;\r\n touchStartFired = false;\r\n };\r\n //});\r\n\r\n callback && callback(clickId);\r\n\r\n /* callback().then((bad) => {\r\n if(bad) {\r\n span.remove();\r\n return;\r\n } */\r\n \r\n //console.log('ripple after promise', Date.now() - startTime);\r\n //console.log('ripple tooSlow:', tooSlow);\r\n /* if(tooSlow) {\r\n span.remove();\r\n return;\r\n } */\r\n\r\n window.requestAnimationFrame(() => {\r\n const rect = r.getBoundingClientRect();\r\n elem.classList.add('c-ripple__circle');\r\n\r\n const clickX = clientX - rect.left;\r\n const clickY = clientY - rect.top;\r\n\r\n const radius = Math.sqrt((Math.abs(clickY - rect.height / 2) + rect.height / 2) ** 2 + (Math.abs(clickX - rect.width / 2) + rect.width / 2) ** 2);\r\n const size = radius;\r\n\r\n // center of circle\r\n const x = clickX - size / 2;\r\n const y = clickY - size / 2;\r\n\r\n //console.log('ripple click', offsetFromCenter, size, clickX, clickY);\r\n\r\n elem.style.width = elem.style.height = size + 'px';\r\n elem.style.left = x + 'px';\r\n elem.style.top = y + 'px';\r\n\r\n // нижний код выполняется с задержкой\r\n /* animationEndPromise = new Promise((resolve) => {\r\n span.addEventListener('animationend', () => {\r\n // 713 -> 700\r\n resolve(((Date.now() - startTime) / 100 | 0) * 100);\r\n }, {once: true});\r\n }); */\r\n \r\n // нижний код не всегда включает анимацию ПРИ КЛИКЕ НА ТАЧПАД БЕЗ ТАПТИК ЭНЖИНА\r\n /* span.style.display = 'none';\r\n r.append(span);\r\n duration = +window.getComputedStyle(span).getPropertyValue('animation-duration').replace('s', '') * 1000;\r\n span.style.display = ''; */\r\n\r\n r.append(elem);\r\n\r\n //r.classList.add('active');\r\n //handler();\r\n });\r\n //});\r\n };\r\n\r\n const isRippleUnneeded = (e: Event) => e.target !== elem && (\r\n ['BUTTON', 'A'].includes((e.target as HTMLElement).tagName) \r\n || findUpClassName(e.target as HTMLElement, 'c-ripple') !== r\r\n );\r\n\r\n // TODO: rename this variable\r\n let touchStartFired = false;\r\n if(IS_TOUCH_SUPPORTED) {\r\n let touchEnd = () => {\r\n handler && handler();\r\n };\r\n \r\n elem.addEventListener('touchstart', (e) => {\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n\r\n //console.log('ripple touchstart', e);\r\n if(e.touches.length > 1 || touchStartFired || isRippleUnneeded(e)) {\r\n return;\r\n }\r\n \r\n //console.log('touchstart', e);\r\n touchStartFired = true;\r\n \r\n let {clientX, clientY} = e.touches[0];\r\n drawRipple(clientX, clientY);\r\n elem.addEventListener('touchend', touchEnd, {once: true});\r\n \r\n window.addEventListener('touchmove', (e) => {\r\n e.cancelBubble = true;\r\n e.stopPropagation();\r\n touchEnd();\r\n elem.removeEventListener('touchend', touchEnd);\r\n }, {once: true});\r\n }, {passive: true});\r\n } else {\r\n elem.addEventListener('mousedown', (e) => {\r\n if(![0, 2].includes(e.button)) { // only left and right buttons\r\n return;\r\n }\r\n\r\n if(!rootScope.settings.animationsEnabled) {\r\n return;\r\n }\r\n //console.log('ripple mousedown', e, e.target, findUpClassName(e.target as HTMLElement, 'c-ripple') === r);\r\n\r\n if(elem.dataset.ripple === '0' || isRippleUnneeded(e)) {\r\n return;\r\n } else if(touchStartFired) {\r\n touchStartFired = false;\r\n return;\r\n }\r\n \r\n let {clientX, clientY} = e;\r\n drawRipple(clientX, clientY);\r\n window.addEventListener('mouseup', handler, {once: true, passive: true});\r\n window.addEventListener('contextmenu', handler, {once: true, passive: true});\r\n }, {passive: true});\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// * Jolly Cobra's schedulers\r\nimport { NoneToVoidFunction } from \"../types\";\r\n\r\n/*\r\nexport function throttleWithTickEnd(fn: F) {\r\n return throttleWith(onTickEnd, fn);\r\n}\r\n\r\nexport function throttleWithNow(fn: F) {\r\n return throttleWith(runNow, fn);\r\n}\r\n\r\nexport function onTickEnd(cb: NoneToVoidFunction) {\r\n Promise.resolve().then(cb);\r\n}\r\n\r\nfunction runNow(fn: NoneToVoidFunction) {\r\n fn();\r\n} */\r\n\r\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\r\nexport function fastRaf(callback: NoneToVoidFunction) {\r\n if(!fastRafCallbacks) {\r\n fastRafCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n const currentCallbacks = fastRafCallbacks!;\r\n fastRafCallbacks = undefined;\r\n currentCallbacks.forEach((cb) => cb());\r\n });\r\n } else {\r\n fastRafCallbacks.push(callback);\r\n }\r\n}\r\n\r\nlet fastRafConventionalCallbacks: NoneToVoidFunction[] | undefined, processing = false;\r\nexport function fastRafConventional(callback: NoneToVoidFunction) {\r\n if(!fastRafConventionalCallbacks) {\r\n fastRafConventionalCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n processing = true;\r\n for(let i = 0; i < fastRafConventionalCallbacks.length; ++i) {\r\n fastRafConventionalCallbacks[i]();\r\n }\r\n\r\n fastRafConventionalCallbacks = undefined;\r\n processing = false;\r\n });\r\n } else if(processing) {\r\n callback();\r\n } else {\r\n fastRafConventionalCallbacks.push(callback);\r\n }\r\n}\r\n\r\nlet rafPromise: Promise;\r\nexport function fastRafPromise() {\r\n if(rafPromise) return rafPromise;\r\n\r\n rafPromise = new Promise(requestAnimationFrame);\r\n rafPromise.then(() => {\r\n rafPromise = undefined;\r\n });\r\n\r\n return rafPromise;\r\n}\r\n\r\nexport function doubleRaf() {\r\n return new Promise((resolve) => {\r\n fastRaf(() => {\r\n fastRaf(resolve);\r\n });\r\n });\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { fastRaf } from \"./schedulers\";\r\nimport { CancellablePromise, deferredPromise } from \"./cancellablePromise\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport isInDOM from \"./dom/isInDOM\";\r\n\r\nclass SequentialDom {\r\n private promises: Partial<{\r\n read: CancellablePromise,\r\n write: CancellablePromise\r\n }> = {};\r\n private raf = fastRaf.bind(null);\r\n private scheduled = false;\r\n\r\n private do(kind: keyof SequentialDom['promises'], callback?: VoidFunction) {\r\n let promise = this.promises[kind];\r\n if(!promise) {\r\n this.scheduleFlush();\r\n promise = this.promises[kind] = deferredPromise();\r\n }\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n \r\n return promise;\r\n }\r\n\r\n public measure(callback?: VoidFunction) {\r\n return this.do('read', callback);\r\n }\r\n\r\n public mutate(callback?: VoidFunction) {\r\n return this.do('write', callback);\r\n }\r\n\r\n /**\r\n * Will fire instantly if element is not connected\r\n * @param element \r\n * @param callback \r\n */\r\n public mutateElement(element: HTMLElement, callback?: VoidFunction) {\r\n const promise = isInDOM(element) ? this.mutate() : Promise.resolve();\r\n\r\n if(callback !== undefined) {\r\n promise.then(() => callback());\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n private scheduleFlush() {\r\n if(!this.scheduled) {\r\n this.scheduled = true;\r\n\r\n this.raf(() => {\r\n this.promises.read && this.promises.read.resolve();\r\n this.promises.write && this.promises.write.resolve();\r\n\r\n this.scheduled = false;\r\n this.promises = {};\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst sequentialDom = new SequentialDom();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.sequentialDom = sequentialDom);\r\nexport default sequentialDom;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n/* export function isInDOM(element: Element, parentNode?: HTMLElement): boolean {\r\n if(!element) {\r\n return false;\r\n }\r\n\r\n parentNode = parentNode || document.body;\r\n if(element === parentNode) {\r\n return true;\r\n }\r\n return isInDOM(element.parentNode as HTMLElement, parentNode);\r\n} */\r\nexport default function isInDOM(element: Element): boolean {\r\n return element?.isConnected;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/21.0d6505cd9495fe305ff6.chunk.js.map b/public/21.0d6505cd9495fe305ff6.chunk.js.map index aa605af2..4554a9cf 100644 --- a/public/21.0d6505cd9495fe305ff6.chunk.js.map +++ b/public/21.0d6505cd9495fe305ff6.chunk.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./src/lib/rootScope.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/config/modes.ts"],"names":["RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","name","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","DEBUG","debug","MOUNT_CLASS_TO","self","EventListenerBase","reuseResults","_constructor","listeners","listenerResults","callback","options","push","hasOwnProperty","once","pop","obj","i","findAndSplice","l","args","arr","slice","forEach","listener","findIndex","removeEventListener","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker"],"mappings":"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","file":"21.0d6505cd9495fe305ff6.chunk.js","sourcesContent":["/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./src/lib/rootScope.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/config/modes.ts"],"names":["RootScope","super","overlaysActive","myId","idle","isIDLE","deactivated","focusPromise","Promise","resolve","focusResolve","connectionStatus","peerId","filterId","config","forwarded_count_max","edit_time_limit","pinned_dialogs_count_max","pinned_infolder_count_max","message_length_max","caption_length_max","this","addEventListener","e","id","status","name","undefined","_themeColorElem","document","head","querySelector","color","themeColor","isNight","themeColorElem","setAttribute","darkModeMediaQuery","window","matchMedia","checkDarkMode","systemTheme","matches","dispatchEvent","setTheme","addListener","err","colorScheme","documentElement","classList","toggle","setThemeColor","value","isOverlayActive","getTheme","settings","theme","themes","find","t","rootScope","DEBUG","debug","MOUNT_CLASS_TO","self","EventListenerBase","reuseResults","_constructor","listeners","listenerResults","callback","options","push","hasOwnProperty","once","pop","obj","i","findAndSplice","l","args","arr","slice","forEach","listener","findIndex","removeEventListener","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker"],"mappings":"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","file":"21.0d6505cd9495fe305ff6.chunk.js","sourcesContent":["/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap, Config } from \"../layer\";\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\nimport type { MyDialogFilter } from \"./storages/filters\";\nimport type { UserTyping } from \"./appManagers/appProfileManager\";\nimport type Chat from \"../components/chat/chat\";\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\nimport type { State, Theme } from \"./appManagers/appStateManager\";\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\nimport type { PushSubscriptionNotify } from \"./mtproto/webPushApiManager\";\nimport type { PushNotificationObject } from \"./serviceWorker/push\";\nimport type { ConnectionStatusChange } from \"./mtproto/connectionStatus\";\nimport EventListenerBase from \"../helpers/eventListenerBase\";\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\n\nexport type BroadcastEvents = {\n 'user_update': number,\n 'user_auth': UserAuth,\n 'peer_changed': number,\n 'peer_changing': Chat,\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: number, maxId: number},\n 'peer_typings': {peerId: number, typings: UserTyping[]},\n 'peer_block': {peerId: number, blocked: boolean},\n 'peer_title_edit': number,\n 'peer_bio_edit': number,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_order': number[],\n \n 'dialog_draft': {peerId: number, dialog: Dialog, drop: boolean, draft: MyDraftMessage | undefined, index: number},\n 'dialog_unread': {peerId: number},\n 'dialog_flush': {peerId: number},\n 'dialog_drop': {peerId: number, dialog?: Dialog},\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\n //'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\n 'dialogs_archived_unread': {count: number},\n \n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\n 'history_reply_markup': {peerId: number},\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\n 'history_delete': {peerId: number, msgs: Set},\n 'history_forbidden': number,\n 'history_reload': number,\n 'history_focus': {peerId: number, threadId?: number, mid?: number},\n //'history_request': void,\n \n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\n 'message_views': {peerId: number, mid: number, views: number},\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number, message: Message.message},\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: number, mids: number[]},\n 'messages_media_read': {peerId: number, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': {peerId: number, mid: number},\n 'scheduled_delete': {peerId: number, mids: number[]},\n\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n\n 'media_play': {doc: MyDocument, message: Message.message, media: HTMLMediaElement},\n 'media_pause': void,\n 'media_playback_params': {volume: number, muted: boolean, playbackRate: number},\n 'media_stop': void,\n \n 'state_cleared': void,\n 'state_synchronized': number | void,\n 'state_synchronizing': number | void,\n \n 'contacts_update': number,\n 'avatar_update': number,\n 'chat_full_update': number,\n 'poll_update': {poll: Poll, results: PollResults},\n 'chat_update': number,\n 'invalidate_participants': number,\n //'channel_settings': {channelId: number},\n 'webpage_updated': {id: string, msgs: {peerId: number, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any},\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n \n 'event-heavy-animation-start': void,\n 'event-heavy-animation-end': void,\n \n 'im_mount': void,\n 'im_tab_change': number,\n \n 'idle': boolean,\n \n 'overlay_toggle': boolean,\n \n 'background_change': void,\n \n 'privacy_update': Update.updatePrivacy,\n \n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n \n 'language_change': string,\n \n 'theme_change': void,\n \n 'instance_activated': void,\n 'instance_deactivated': void,\n \n 'push_notification_click': PushNotificationObject,\n 'push_init': PushSubscriptionNotify,\n 'push_subscribe': PushSubscriptionNotify,\n 'push_unsubscribe': PushSubscriptionNotify,\n \n 'emoji_recent': string,\n \n 'download_start': string,\n 'download_progress': any,\n 'document_downloaded': MyDocument,\n\n 'context_menu_toggle': boolean\n};\n\nexport class RootScope extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n} & {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n}> {\n public overlaysActive = 0;\n public myId = 0;\n public idle = {\n isIDLE: true,\n deactivated: false,\n focusPromise: Promise.resolve(),\n focusResolve: () => {}\n };\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\n public settings: State['settings'];\n public peerId = 0;\n public filterId = 0;\n public systemTheme: Theme['name'];\n public config: Partial = {\n forwarded_count_max: 100,\n edit_time_limit: 86400 * 2,\n pinned_dialogs_count_max: 5,\n pinned_infolder_count_max: 100,\n message_length_max: 4096,\n caption_length_max: 1024,\n };\n\n public themeColor: string;\n private _themeColorElem: Element;\n\n constructor() {\n super();\n\n this.addEventListener('peer_changed', (peerId) => {\n this.peerId = peerId;\n });\n\n this.addEventListener('user_auth', (e) => {\n this.myId = e.id;\n });\n\n this.addEventListener('connection_status_change', (e) => {\n const status = e;\n this.connectionStatus[e.name] = status;\n });\n\n this.addEventListener('idle', (isIDLE) => {\n if(isIDLE) {\n this.idle.focusPromise = new Promise((resolve) => {\n this.idle.focusResolve = resolve;\n });\n } else {\n this.idle.focusResolve();\n }\n });\n }\n\n get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n //const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n //const newTheme = this.getTheme();\n\n if(this.myId) {\n this.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n }\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('overlay_toggle', this.isOverlayActive);\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: Theme['name'] = this.settings.theme === 'system' ? this.systemTheme : this.settings.theme) {\n return this.settings.themes.find(t => t.name === name);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n\n/* rootScope.addEventListener('album_edit', (e) => {\n \n});\n\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\n \n}); */\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/index.html b/public/index.html index da7f4230..8ecb4b3e 100644 --- a/public/index.html +++ b/public/index.html @@ -1,3 +1,3 @@ Telegram Web \ No newline at end of file + \ No newline at end of file diff --git a/public/main.8169b7c35af184a7ec21.bundle.js b/public/main.3f7a70559679af85e450.bundle.js similarity index 96% rename from public/main.8169b7c35af184a7ec21.bundle.js rename to public/main.3f7a70559679af85e450.bundle.js index e19e46b4..d089a1b9 100644 --- a/public/main.8169b7c35af184a7ec21.bundle.js +++ b/public/main.3f7a70559679af85e450.bundle.js @@ -1,2 +1,2 @@ -!function(e){function t(t){for(var n,i,a=t[0],r=t[1],c=0,s=[];c1)&&!o.MSStream,u=!!("safari"in o)||!(!i||!(/\b(iPad|iPhone|iPod)\b/.test(i)||i.match("Safari")&&!i.match("Chrome"))),d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,l=u&&s,f=navigator.maxTouchPoints>0&&-1!=navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},function(e,t,n){"use strict";n.r(t),n.d(t,"IS_TOUCH_SUPPORTED",(function(){return o}));const o="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch},function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s}));var o=n(1),i=n(0),a=n(5),r=n(3);const c=i.IS_SAFARI&&i.IS_MOBILE&&o.IS_TOUCH_SUPPORTED;if(c){let e="clientY",t=0;const n={capture:!0,passive:!1},o=n=>{const o=n.touches[0],i=Object(a.a)(o.target,"scrollable-y");if(i){const a=o[e],r=t-a,c=i.scrollTop,s=i.scrollHeight,u=i.clientHeight,d=c?Math.round(c+i.clientHeight+r):c+r;(s===u||d>=s||d<=0)&&n.preventDefault()}else n.preventDefault()};let i=0;document.addEventListener("focusin",a=>{!a.target.classList.contains("is-sticky-input-bugged")||a.timeStamp-i<50||(Object(r.a)(a.target),document.addEventListener("touchmove",o,n),document.addEventListener("touchstart",n=>{if(n.touches.length>1)return;const o=n.touches[0];t=o[e]}))},{passive:!0}),document.addEventListener("focusout",e=>{document.removeEventListener("touchmove",o,n),i=e.timeStamp},{passive:!0}),document.addEventListener("visibilitychange",()=>{document.activeElement&&document.activeElement.classList.contains("is-sticky-input-bugged")&&document.activeElement.blur&&Object(r.a)(document.activeElement)},{passive:!0})}function s(e){c&&e.classList.add("is-sticky-input-bugged")}},function(e,t,n){"use strict";function o(e){e.style.transform="translateY(-99999px)",e.focus(),setTimeout(()=>{e.style.transform=""},0)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(e){if(e=e||window.event){e=e.originalEvent||e;try{e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1,e.cancelBubble=!0}catch(e){}}return!1}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(e,t){return e.closest("."+t)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(){return!(!document.activeElement||!document.activeElement.blur)&&(document.activeElement.blur(),!0)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";const o={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"0.8.6",versionFull:"0.8.6 (4)",langPackVersion:"0.3.3",langPack:"macos",langPackCode:"en",domains:["web.telegram.org"],baseDcId:2,isMainDomain:"web.telegram.org"===location.hostname,suffix:"K"};o.isMainDomain&&(o.id=2496,o.hash="8da85b0d5bfe62527e5b244c209159c3"),t.a=o},function(e,t,n){"use strict";let o;function i(){return o||(o="fonts"in document?Promise.race([Promise.all(["400 1rem Roboto","500 1rem Roboto","500 1rem tgico"].map(e=>document.fonts.load(e))),new Promise(e=>setTimeout(e,1e3))]):Promise.resolve())}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";const o=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i);t.a=o},function(e,t,n){"use strict";n.r(t);var o=n(7),i=n(6),a=n(4),r=n(2),c=n(8),s=n(9),u=n(0),d=(n(11),n(12),n(13),function(e,t,n,o){return new(n||(n=Promise))((function(i,a){function r(e){try{s(o.next(e))}catch(e){a(e)}}function c(e){try{s(o.throw(e))}catch(e){a(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,c)}s((o=o.apply(e,t||[])).next())}))});document.addEventListener("DOMContentLoaded",()=>d(void 0,void 0,void 0,(function*(){Element.prototype.toggleAttribute||(Element.prototype.toggleAttribute=function(e,t){return void 0!==t&&(t=!!t),this.hasAttribute(e)?!!t||(this.removeAttribute(e),!1):!1!==t&&(this.setAttribute(e,""),!0)});const e=window.visualViewport||window;let t,d=!1;const l=()=>{const n=.01*(d&&!v.default.isOverlayActive?e.height||e.innerHeight:window.innerHeight);t!==n&&(b.IS_TOUCH_SUPPORTED&&t1&&Object(i.a)(),t=n,document.documentElement.style.setProperty("--vh",n+"px"))},f=new Proxy(Worker,{construct:(e,t)=>new e(t[0]+location.search)});Worker=f;const[m,b,h,v,g,p]=yield Promise.all([n.e(23).then(n.bind(null,26)),Promise.resolve().then(n.bind(null,1)),Promise.resolve().then(n.bind(null,0)),n.e(21).then(n.bind(null,15)),Promise.all([n.e(0),n.e(27)]).then(n.bind(null,16)),Promise.all([n.e(0),n.e(1)]).then(n.bind(null,14))]);if(window.addEventListener("resize",l),l(),r.a){const t=()=>{d=1===n&&r.a&&!v.default.isOverlayActive,l(),e!==window&&(d?(window.removeEventListener("resize",l),e.addEventListener("resize",l)):(e.removeEventListener("resize",l),window.addEventListener("resize",l)))};let n;v.default.addEventListener("im_tab_change",e=>{const o=void 0!==n;n=e,(o||1===n)&&t()}),v.default.addEventListener("overlay_toggle",()=>{t()})}h.IS_FIREFOX&&!s.a&&document.addEventListener("dragstart",e=>{const t=e.target;if("IMG"===t.tagName&&t.classList.contains("emoji"))return Object(a.a)(e),!1}),document.addEventListener("dragstart",e=>{var t;if("IMG"===(null===(t=e.target)||void 0===t?void 0:t.tagName))return e.preventDefault(),!1}),h.IS_FIREFOX&&document.documentElement.classList.add("is-firefox"),h.IS_APPLE?(h.IS_SAFARI&&document.documentElement.classList.add("is-safari"),document.documentElement.classList.add("emoji-supported"),h.IS_APPLE_MOBILE?document.documentElement.classList.add("is-ios"):document.documentElement.classList.add("is-mac")):h.IS_ANDROID&&document.documentElement.classList.add("is-android"),b.IS_TOUCH_SUPPORTED?document.documentElement.classList.add("is-touch"):document.documentElement.classList.add("no-touch");const P=performance.now(),y=p.default.getCacheLangPack(),[E,S]=yield Promise.all([g.default.getState(),y]);function w(e,t){e.style.opacity="0",t.then(()=>{window.requestAnimationFrame(()=>{e.style.opacity=""})})}v.default.setThemeListener(),S.appVersion!==o.a.langPackVersion&&p.default.getLangPack(S.lang_code),console.log("got state, time:",performance.now()-P);const I=E.authState;if("authStateSignedIn"!==I._){console.log("Will mount auth page:",I._,Date.now()/1e3);const e=document.getElementById("auth-pages");let t,o;if(e){t=e.querySelector(".scrollable"),b.IS_TOUCH_SUPPORTED&&!u.IS_MOBILE_SAFARI||t.classList.add("no-scrollbar"),t.style.opacity="0";const n=document.createElement("div");n.classList.add("auth-placeholder"),t.prepend(n),t.append(n.cloneNode())}try{yield Promise.all([Promise.all([n.e(0),n.e(1)]).then(n.bind(null,25)),Promise.all([n.e(0),n.e(1)]).then(n.bind(null,24))]).then(([e,t])=>{e.default.setAuthorized(!1),t.default.forceUnsubscribe()})}catch(e){}switch(I._){case"authStateSignIn":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(4),n.e(17)]).then(n.bind(null,19))).default.mount();break;case"authStateSignQr":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(18)]).then(n.bind(null,21))).default.mount();break;case"authStateAuthCode":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(4),n.e(14)]).then(n.bind(null,22))).default.mount(I.sentCode);break;case"authStatePassword":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(3),n.e(12)]).then(n.bind(null,20))).default.mount();break;case"authStateSignUp":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(6),n.e(13)]).then(n.bind(null,23))).default.mount(I.authCode)}if(t){o&&(yield o);w(t,"fonts"in document?Promise.race([new Promise(e=>setTimeout(e,1e3)),document.fonts.ready]):Promise.resolve())}}else console.log("Will mount IM page:",Date.now()/1e3),w(document.getElementById("main-columns"),Object(c.a)()),(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(29)]).then(n.bind(null,18))).default.mount();const O=(yield n.e(19).then(n.bind(null,17))).ripple;Array.from(document.getElementsByClassName("rp")).forEach(e=>O(e))})))},function(e,t,n){},function(e,t,n){},function(e,t,n){}]); -//# sourceMappingURL=main.8169b7c35af184a7ec21.bundle.js.map \ No newline at end of file +!function(e){function t(t){for(var n,i,a=t[0],r=t[1],c=0,s=[];c1)&&!o.MSStream,u=!!("safari"in o)||!(!i||!(/\b(iPad|iPhone|iPod)\b/.test(i)||i.match("Safari")&&!i.match("Chrome"))),d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,l=u&&s,f=navigator.maxTouchPoints>0&&-1!=navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},function(e,t,n){"use strict";n.r(t),n.d(t,"IS_TOUCH_SUPPORTED",(function(){return o}));const o="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch},function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s}));var o=n(1),i=n(0),a=n(5),r=n(3);const c=i.IS_SAFARI&&i.IS_MOBILE&&o.IS_TOUCH_SUPPORTED;if(c){let e="clientY",t=0;const n={capture:!0,passive:!1},o=n=>{const o=n.touches[0],i=Object(a.a)(o.target,"scrollable-y");if(i){const a=o[e],r=t-a,c=i.scrollTop,s=i.scrollHeight,u=i.clientHeight,d=c?Math.round(c+i.clientHeight+r):c+r;(s===u||d>=s||d<=0)&&n.preventDefault()}else n.preventDefault()};let i=0;document.addEventListener("focusin",a=>{!a.target.classList.contains("is-sticky-input-bugged")||a.timeStamp-i<50||(Object(r.a)(a.target),document.addEventListener("touchmove",o,n),document.addEventListener("touchstart",n=>{if(n.touches.length>1)return;const o=n.touches[0];t=o[e]}))},{passive:!0}),document.addEventListener("focusout",e=>{document.removeEventListener("touchmove",o,n),i=e.timeStamp},{passive:!0}),document.addEventListener("visibilitychange",()=>{document.activeElement&&document.activeElement.classList.contains("is-sticky-input-bugged")&&document.activeElement.blur&&Object(r.a)(document.activeElement)},{passive:!0})}function s(e){c&&e.classList.add("is-sticky-input-bugged")}},function(e,t,n){"use strict";function o(e){e.style.transform="translateY(-99999px)",e.focus(),setTimeout(()=>{e.style.transform=""},0)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(e){if(e=e||window.event){e=e.originalEvent||e;try{e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1,e.cancelBubble=!0}catch(e){}}return!1}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(e,t){return e.closest("."+t)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";function o(){return!(!document.activeElement||!document.activeElement.blur)&&(document.activeElement.blur(),!0)}n.d(t,"a",(function(){return o}))},function(e,t,n){"use strict";const o={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"0.8.6",versionFull:"0.8.6 (6)",langPackVersion:"0.3.3",langPack:"macos",langPackCode:"en",domains:["web.telegram.org"],baseDcId:2,isMainDomain:"web.telegram.org"===location.hostname,suffix:"K"};o.isMainDomain&&(o.id=2496,o.hash="8da85b0d5bfe62527e5b244c209159c3"),t.a=o},function(e,t,n){"use strict";let o;function i(){return o||(o="fonts"in document?Promise.race([Promise.all(["400 1rem Roboto","500 1rem Roboto","500 1rem tgico"].map(e=>document.fonts.load(e))),new Promise(e=>setTimeout(e,1e3))]):Promise.resolve())}n.d(t,"a",(function(){return i}))},function(e,t,n){"use strict";const o=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i);t.a=o},function(e,t,n){"use strict";n.r(t);var o=n(7),i=n(6),a=n(4),r=n(2),c=n(8),s=n(9),u=n(0),d=(n(11),n(12),n(13),function(e,t,n,o){return new(n||(n=Promise))((function(i,a){function r(e){try{s(o.next(e))}catch(e){a(e)}}function c(e){try{s(o.throw(e))}catch(e){a(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,c)}s((o=o.apply(e,t||[])).next())}))});document.addEventListener("DOMContentLoaded",()=>d(void 0,void 0,void 0,(function*(){Element.prototype.toggleAttribute||(Element.prototype.toggleAttribute=function(e,t){return void 0!==t&&(t=!!t),this.hasAttribute(e)?!!t||(this.removeAttribute(e),!1):!1!==t&&(this.setAttribute(e,""),!0)});const e=window.visualViewport||window;let t,d=!1;const l=()=>{const n=.01*(d&&!v.default.isOverlayActive?e.height||e.innerHeight:window.innerHeight);t!==n&&(b.IS_TOUCH_SUPPORTED&&t1&&Object(i.a)(),t=n,document.documentElement.style.setProperty("--vh",n+"px"))},f=new Proxy(Worker,{construct:(e,t)=>new e(t[0]+location.search)});Worker=f;const[m,b,h,v,g,p]=yield Promise.all([n.e(23).then(n.bind(null,26)),Promise.resolve().then(n.bind(null,1)),Promise.resolve().then(n.bind(null,0)),n.e(21).then(n.bind(null,15)),Promise.all([n.e(0),n.e(27)]).then(n.bind(null,16)),Promise.all([n.e(0),n.e(1)]).then(n.bind(null,14))]);if(window.addEventListener("resize",l),l(),r.a){const t=()=>{d=1===n&&r.a&&!v.default.isOverlayActive,l(),e!==window&&(d?(window.removeEventListener("resize",l),e.addEventListener("resize",l)):(e.removeEventListener("resize",l),window.addEventListener("resize",l)))};let n;v.default.addEventListener("im_tab_change",e=>{const o=void 0!==n;n=e,(o||1===n)&&t()}),v.default.addEventListener("overlay_toggle",()=>{t()})}h.IS_FIREFOX&&!s.a&&document.addEventListener("dragstart",e=>{const t=e.target;if("IMG"===t.tagName&&t.classList.contains("emoji"))return Object(a.a)(e),!1}),document.addEventListener("dragstart",e=>{var t;if("IMG"===(null===(t=e.target)||void 0===t?void 0:t.tagName))return e.preventDefault(),!1}),h.IS_FIREFOX&&document.documentElement.classList.add("is-firefox"),h.IS_APPLE?(h.IS_SAFARI&&document.documentElement.classList.add("is-safari"),document.documentElement.classList.add("emoji-supported"),h.IS_APPLE_MOBILE?document.documentElement.classList.add("is-ios"):document.documentElement.classList.add("is-mac")):h.IS_ANDROID&&document.documentElement.classList.add("is-android"),b.IS_TOUCH_SUPPORTED?document.documentElement.classList.add("is-touch"):document.documentElement.classList.add("no-touch");const P=performance.now(),y=p.default.getCacheLangPack(),[E,S]=yield Promise.all([g.default.getState(),y]);function w(e,t){e.style.opacity="0",t.then(()=>{window.requestAnimationFrame(()=>{e.style.opacity=""})})}v.default.setThemeListener(),S.appVersion!==o.a.langPackVersion&&p.default.getLangPack(S.lang_code),console.log("got state, time:",performance.now()-P);const I=E.authState;if("authStateSignedIn"!==I._){console.log("Will mount auth page:",I._,Date.now()/1e3);const e=document.getElementById("auth-pages");let t,o;if(e){t=e.querySelector(".scrollable"),b.IS_TOUCH_SUPPORTED&&!u.IS_MOBILE_SAFARI||t.classList.add("no-scrollbar"),t.style.opacity="0";const n=document.createElement("div");n.classList.add("auth-placeholder"),t.prepend(n),t.append(n.cloneNode())}try{yield Promise.all([Promise.all([n.e(0),n.e(1)]).then(n.bind(null,25)),Promise.all([n.e(0),n.e(1)]).then(n.bind(null,24))]).then(([e,t])=>{e.default.setAuthorized(!1),t.default.forceUnsubscribe()})}catch(e){}switch(I._){case"authStateSignIn":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(4),n.e(17)]).then(n.bind(null,19))).default.mount();break;case"authStateSignQr":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(18)]).then(n.bind(null,21))).default.mount();break;case"authStateAuthCode":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(4),n.e(14)]).then(n.bind(null,22))).default.mount(I.sentCode);break;case"authStatePassword":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(3),n.e(12)]).then(n.bind(null,20))).default.mount();break;case"authStateSignUp":o=(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(6),n.e(13)]).then(n.bind(null,23))).default.mount(I.authCode)}if(t){o&&(yield o);w(t,"fonts"in document?Promise.race([new Promise(e=>setTimeout(e,1e3)),document.fonts.ready]):Promise.resolve())}}else console.log("Will mount IM page:",Date.now()/1e3),w(document.getElementById("main-columns"),Object(c.a)()),(yield Promise.all([n.e(0),n.e(1),n.e(2),n.e(29)]).then(n.bind(null,18))).default.mount();const O=(yield n.e(19).then(n.bind(null,17))).ripple;Array.from(document.getElementsByClassName("rp")).forEach(e=>O(e))})))},function(e,t,n){},function(e,t,n){},function(e,t,n){}]); +//# sourceMappingURL=main.3f7a70559679af85e450.bundle.js.map \ No newline at end of file diff --git a/public/main.8169b7c35af184a7ec21.bundle.js.map b/public/main.3f7a70559679af85e450.bundle.js.map similarity index 99% rename from public/main.8169b7c35af184a7ec21.bundle.js.map rename to public/main.3f7a70559679af85e450.bundle.js.map index 1dfbe444..c82a2a02 100644 --- a/public/main.8169b7c35af184a7ec21.bundle.js.map +++ b/public/main.3f7a70559679af85e450.bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/environment/ctx.ts","webpack:///./src/environment/userAgent.ts","webpack:///./src/environment/touchSupport.ts","webpack:///./src/helpers/dom/fixSafariStickyInputFocusing.ts","webpack:///./src/helpers/dom/fixSafariStickyInput.ts","webpack:///./src/helpers/dom/cancelEvent.ts","webpack:///./src/helpers/dom/findUpClassName.ts","webpack:///./src/helpers/dom/blurActiveElement.ts","webpack:///./src/config/app.ts","webpack:///./src/helpers/dom/loadFonts.ts","webpack:///./src/environment/emojiSupport.ts","webpack:///./src/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","10","jsonpScriptSrc","__webpack_require__","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","error","Error","script","loadScript","src","retries","onScriptComplete","document","createElement","charset","timeout","nc","setAttribute","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","cacheBust","Date","now","retryScript","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice","s","window","self","USER_AGENT","navigator","userAgent","IS_APPLE","search","IS_ANDROID","toLowerCase","indexOf","IS_CHROMIUM","test","vendor","IS_APPLE_MOBILE","platform","maxTouchPoints","MSStream","IS_SAFARI","match","IS_FIREFOX","IS_MOBILE_SAFARI","IS_MOBILE","IS_TOUCH_SUPPORTED","DocumentTouch","IS_STICKY_INPUT_BUGGED","startY","capture","passive","onTouchMove","touch","touches","scrollable","y","scrolled","scrollTop","scrollHeight","clientHeight","nextScrollTop","Math","round","preventDefault","lastFocusOutTimeStamp","addEventListener","classList","contains","timeStamp","touchStart","removeEventListener","activeElement","blur","fixSafariStickyInputFocusing","input","add","fixSafariStickyInput","style","transform","focus","cancelEvent","originalEvent","stopPropagation","returnValue","cancelBubble","findUpClassName","el","className","closest","blurActiveElement","App","id","hash","version","versionFull","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","location","hostname","suffix","loadFonts","race","map","font","fonts","load","IS_EMOJI_SUPPORTED","Element","toggleAttribute","force","hasAttribute","removeAttribute","w","visualViewport","lastVH","setViewportVH","setVH","vh","rootScope","default","isOverlayActive","height","innerHeight","touchSupport","documentElement","setProperty","workerProxy","Proxy","Worker","construct","args","_","appStateManager","I18n","toggleResizeMode","tabId","wasTabId","tagName","perf","performance","langPromise","getCacheLangPack","state","getState","fadeInWhenFontsReady","elem","opacity","then","requestAnimationFrame","setThemeListener","appVersion","getLangPack","lang_code","log","authState","getElementById","pagePromise","querySelector","placeholder","prepend","append","cloneNode","meModule","pushModule","setAuthorized","forceUnsubscribe","mount","sentCode","authCode","ready","ripple","Array","from","getElementsByClassName","forEach"],"mappings":"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","file":"main.8169b7c35af184a7ec21.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t10: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"11\":\"npm.qr-code-styling\"}[chunkId]||chunkId) + \".\" + {\"0\":\"acb684dc35d9188bd6be\",\"1\":\"90adb57fb90001b6aa19\",\"2\":\"8e2ae984d68e67fdf8a4\",\"3\":\"ecfbd0f9b839f0b7d92f\",\"4\":\"bf32a9fbeca385c5c9e9\",\"5\":\"30d45c9c9fc91ab968c5\",\"6\":\"848a1b33f7636a89b087\",\"7\":\"83a2dfdd0ee504f81f0b\",\"8\":\"f362ee1d655a5699d64f\",\"9\":\"3edc09b4dc478113ee21\",\"11\":\"868f37c7ef08036b894a\",\"12\":\"287fcbd640751db5e44c\",\"13\":\"c0ce6dfb89e386f370a8\",\"14\":\"f1740ad881f9dd808262\",\"15\":\"04217e6c6e21ea0189db\",\"16\":\"b3f22524b150bb5fac27\",\"17\":\"6eeae36d1ceb661e97fa\",\"18\":\"2ffaa556b58a70d80bd8\",\"19\":\"804c41f1066e7188e13a\",\"20\":\"be4f633cc12b0fd8e5a2\",\"21\":\"0d6505cd9495fe305ff6\",\"22\":\"2635711e4f30bee63506\",\"23\":\"605f4acbc5d2d512692f\",\"24\":\"92df5f1db24f05b27e64\",\"25\":\"f3627972e99fbfd11062\",\"26\":\"b22c8de7fb72959da42f\",\"27\":\"d828877399fdc766a0f1\",\"28\":\"54c1be0be6cd63675640\",\"29\":\"2d84e7e951c2722718bc\",\"30\":\"db25542edbf0f0900275\",\"31\":\"8c3b6a0d1d8bf16646eb\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tfunction loadScript(src, retries) {\n \t\t\t\t var script = document.createElement('script');\n \t\t\t\t var retryAttempt = 999999 - retries + 1;\n \t\t\t\t var retryAttemptString = '&retry-attempt=' + retryAttempt;\n \t\t\t\t var onScriptComplete;\n\n \t\t\t\t script.charset = 'utf-8';\n \t\t\t\t script.timeout = 120;\n \t\t\t\t if (__webpack_require__.nc) {\n \t\t\t\t script.setAttribute('nonce', __webpack_require__.nc);\n \t\t\t\t }\n \t\t\t\t script.src = src;\n\n \t\t\t\t onScriptComplete = function(event) {\n \t\t\t\t // avoid mem leaks in IE.\n \t\t\t\t script.onerror = script.onload = null;\n \t\t\t\t clearTimeout(timeout);\n \t\t\t\t var chunk = installedChunks[chunkId];\n \t\t\t\t if (chunk !== 0) {\n \t\t\t\t if (chunk) {\n \t\t\t\t if (retries === 0) {\n \t\t\t\t var errorType =\n \t\t\t\t event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t var realSrc = event && event.target && event.target.src;\n \t\t\t\t error.message =\n \t\t\t\t 'Loading chunk ' +\n \t\t\t\t chunkId +\n \t\t\t\t ' failed after 999999 retries.\\n(' +\n \t\t\t\t errorType +\n \t\t\t\t ': ' +\n \t\t\t\t realSrc +\n \t\t\t\t ')';\n \t\t\t\t error.name = 'ChunkLoadError';\n \t\t\t\t error.type = errorType;\n \t\t\t\t error.request = realSrc;\n \t\t\t\t chunk[1](error);\n \t\t\t\t installedChunks[chunkId] = undefined;\n \t\t\t\t } else {\n \t\t\t\t setTimeout(function() {\n \t\t\t\t var cacheBust = (function() {\n \t\t\t\t return Date.now();\n \t\t\t\t })();\n \t\t\t\t +retryAttemptString;\n \t\t\t\t var retryScript = loadScript(\n \t\t\t\t jsonpScriptSrc(chunkId) + '?' + cacheBust,\n \t\t\t\t retries - 1\n \t\t\t\t );\n \t\t\t\t document.head.appendChild(retryScript);\n \t\t\t\t }, 0);\n \t\t\t\t }\n \t\t\t\t } else {\n \t\t\t\t installedChunks[chunkId] = undefined;\n \t\t\t\t }\n \t\t\t\t }\n \t\t\t\t };\n \t\t\t\t var timeout = setTimeout(function() {\n \t\t\t\t onScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t }, 120000);\n \t\t\t\t script.onerror = script.onload = onScriptComplete;\n \t\t\t\t return script;\n \t\t\t\t}\n\n \t\t\t\tvar script = loadScript(jsonpScriptSrc(chunkId), 999999);\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonp\"] = this[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport ctx from './ctx';\r\n\r\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\r\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !(ctx as any).MSStream;\r\n\r\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\r\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\r\n\r\nexport const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// @ts-ignore\r\nexport const IS_TOUCH_SUPPORTED = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)/* || true */;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\nimport { IS_MOBILE, IS_SAFARI } from \"../../environment/userAgent\";\nimport findUpClassName from \"./findUpClassName\";\nimport fixSafariStickyInput from \"./fixSafariStickyInput\";\n\nexport const IS_STICKY_INPUT_BUGGED = IS_SAFARI && IS_MOBILE && IS_TOUCH_SUPPORTED;\n\nif(IS_STICKY_INPUT_BUGGED) {\n let key: 'clientY' | 'pageY' = 'clientY';\n let startY = 0;\n const o = {capture: true, passive: false};\n const onTouchMove = (e: TouchEvent) => {\n const touch = e.touches[0];\n\n //console.log('touchmove y', touch[key], startY);\n \n const scrollable = findUpClassName(touch.target, 'scrollable-y');\n if(scrollable) {\n const y = touch[key];\n const scrolled = startY - y;\n\n /* if(y < startY) {\n startY = y;\n } */\n\n const scrollTop = scrollable.scrollTop;\n const scrollHeight = scrollable.scrollHeight;\n const clientHeight = scrollable.clientHeight;\n const nextScrollTop = scrollTop ? Math.round(scrollTop + scrollable.clientHeight + scrolled) : scrollTop + scrolled;\n //const needCancel = scrollHeight !== clientHeight ? (scrollTop && diff <= 1) || (scrollTop - diff) < 0 : true;\n const needCancel = scrollHeight === clientHeight || nextScrollTop >= scrollHeight || nextScrollTop <= 0;\n if(needCancel) {\n e.preventDefault();\n }\n\n //console.log('touchmove with scrollable', scrollTop, startY, scrolled, nextScrollTop, needCancel, e.cancelable);\n } else {\n e.preventDefault();\n\n //console.log('touchmove no scrollable', e, touch);\n }\n\n //if(e.target === document.documentElement || e.target === document.body) e.preventDefault();\n };\n \n // let el = document.createElement('div');\n // document.body.prepend(el);\n // let a = 0;\n\n // let hasFocus = false;\n let lastFocusOutTimeStamp = 0;\n document.addEventListener('focusin', (e) => {\n if(!(e.target as HTMLElement).classList.contains('is-sticky-input-bugged') || (e.timeStamp - lastFocusOutTimeStamp) < 50/* && document.activeElement === input */) {\n return;\n }\n\n // console.log('focusin', e, e.timeStamp);\n\n // hasFocus = true;\n // document.body.classList.add('is-keyboard-opened');\n\n // el.innerText = 'focusin ' + ++a;\n\n /* a < 2 && */fixSafariStickyInput(e.target as HTMLElement);\n\n document.addEventListener('touchmove', onTouchMove, o);\n document.addEventListener('touchstart', (e) => {\n if(e.touches.length > 1) return;\n const touchStart = e.touches[0];\n \n startY = touchStart[key];\n });\n }, {passive: true});\n\n document.addEventListener('focusout', (e) => {\n // console.log('focusout', e, e.timeStamp);\n document.removeEventListener('touchmove', onTouchMove, o);\n\n lastFocusOutTimeStamp = e.timeStamp;\n\n // el.innerText = 'focusout ' + ++a;\n \n // if(hasFocus) {\n // hasFocus = false;\n // document.body.classList.remove('is-keyboard-opened');\n // }\n }, {passive: true});\n\n document.addEventListener('visibilitychange', () => {\n // console.log('window visibilitychange');\n if(document.activeElement && \n document.activeElement.classList.contains('is-sticky-input-bugged') && \n (document.activeElement as HTMLElement).blur) {\n fixSafariStickyInput(document.activeElement as HTMLElement);\n }\n\n /* blurActiveElement();\n window.scrollTo(0, 0);\n setVH(); */\n }, {passive: true});\n}\n\nexport default function fixSafariStickyInputFocusing(input: HTMLElement) {\n if(!IS_STICKY_INPUT_BUGGED) return;\n input.classList.add('is-sticky-input-bugged');\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function fixSafariStickyInput(input: HTMLElement) {\r\n input.style.transform = 'translateY(-99999px)';\r\n /* input.style.position = 'fixed';\r\n input.style.top = '-99999px';\r\n input.style.left = '0'; */\r\n input.focus();\r\n \r\n setTimeout(() => {\r\n //fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\r\n /* input.style.position = '';\r\n input.style.top = ''; */\r\n input.style.transform = '';\r\n //fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\r\n \r\n /* setTimeout(() => {\r\n fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4);\r\n }, 50); */\r\n }, 0);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function cancelEvent(event: Event) {\r\n event = event || window.event;\r\n if(event) {\r\n // @ts-ignore\r\n event = event.originalEvent || event;\r\n\r\n try {\r\n if(event.stopPropagation) event.stopPropagation();\r\n if(event.preventDefault) event.preventDefault();\r\n event.returnValue = false;\r\n event.cancelBubble = true;\r\n } catch(err) {}\r\n }\r\n\r\n return false;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//export function findUpClassName(el: any, className: string): T;\r\nexport default function findUpClassName(el: any, className: string): HTMLElement {\r\n return el.closest('.' + className);\r\n /* if(el.classList.contains(className)) return el; // 03.02.2020\r\n\r\n while(el.parentElement) {\r\n el = el.parentElement;\r\n if(el.classList.contains(className)) \r\n return el;\r\n }\r\n return null; */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function blurActiveElement() {\r\n if(document.activeElement && (document.activeElement as HTMLInputElement).blur) {\r\n (document.activeElement as HTMLInputElement).blur();\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type { DcId } from \"../types\";\n\nexport const MAIN_DOMAIN = 'web.telegram.org';\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n langPackVersion: '0.3.3',\n langPack: 'macos',\n langPackCode: 'en',\n domains: [MAIN_DOMAIN] as string[],\n baseDcId: 2 as DcId,\n isMainDomain: location.hostname === MAIN_DOMAIN,\n suffix: 'K'\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nlet promise: Promise;\r\nexport default function loadFonts(): Promise {\r\n if(promise) return promise;\r\n return promise = 'fonts' in document ? \r\n Promise.race([\r\n // @ts-ignore\r\n Promise.all(['400 1rem Roboto', '500 1rem Roboto', '500 1rem tgico'].map(font => document.fonts.load(font))),\r\n new Promise((resolve) => setTimeout(resolve, 1e3))\r\n ]) : \r\n Promise.resolve();\r\n}\r\n","const IS_EMOJI_SUPPORTED = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1/* && false *//* || true */;\r\n\r\nexport default IS_EMOJI_SUPPORTED;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from './config/app';\nimport blurActiveElement from './helpers/dom/blurActiveElement';\nimport { cancelEvent } from './helpers/dom/cancelEvent';\nimport { IS_STICKY_INPUT_BUGGED } from './helpers/dom/fixSafariStickyInputFocusing';\nimport loadFonts from './helpers/dom/loadFonts';\nimport IS_EMOJI_SUPPORTED from './environment/emojiSupport';\nimport { IS_MOBILE_SAFARI } from './environment/userAgent';\nimport './materialize.scss';\nimport './scss/style.scss';\nimport './scss/tgico.scss';\n/* import { computeCheck } from './lib/crypto/srp';\nimport { salt1, salt2, g, p, srp_id, secure_random, srp_B, password } from './mock/srp'; */\n\n//console.log('pineapples are in my head');\n\n/* console.time('get storage1');\nimport * as a from './lib/config';\nimport * as b from './lib/mtproto/mtproto_config';\nimport * as c from './helpers/userAgent';\nimport * as d from './lib/mtproto/mtprotoworker';\nimport * as e from './lib/polyfill';\nimport * as f from './lib/storage';\na && b && c && d && e && f;\nconsole.timeEnd('get storage1'); */\n\n/* Promise.all([\n import('./components/pageIm'),\n import('./components/pageSignIn'),\n import('./components/misc'),\n import('./lib/storage')\n]).then(imports => {\n let [pageIm, pageSignIn, misc, AppStorage] = imports; */\n\n document.addEventListener('DOMContentLoaded', async() => {\n //let socket = new Socket(2);\n\n if(!Element.prototype.toggleAttribute) {\n Element.prototype.toggleAttribute = function(name, force) {\n if(force !== void 0) force = !!force;\n \n if(this.hasAttribute(name)) {\n if(force) return true;\n \n this.removeAttribute(name);\n return false;\n }\n if(force === false) return false;\n \n this.setAttribute(name, \"\");\n return true;\n };\n }\n\n // We listen to the resize event (https://css-tricks.com/the-trick-to-viewport-units-on-mobile/)\n // @ts-ignore\n const w = window.visualViewport || window; // * handle iOS keyboard\n let setViewportVH = false/* , hasFocus = false */;\n let lastVH: number;\n const setVH = () => {\n // @ts-ignore\n const vh = (setViewportVH && !rootScope.default.isOverlayActive ? w.height || w.innerHeight : window.innerHeight) * 0.01;\n if(lastVH === vh) {\n return;\n } else if(touchSupport.IS_TOUCH_SUPPORTED && lastVH < vh && (vh - lastVH) > 1) {\n blurActiveElement(); // (Android) fix blurring inputs when keyboard is being closed (e.g. closing keyboard by back arrow and touching a bubble)\n }\n\n lastVH = vh;\n\n //const vh = document.documentElement.scrollHeight * 0.01;\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n //console.log('setVH', vh, setViewportVH ? w : window);\n\n /* if(setViewportVH && userAgent.isSafari && touchSupport.isTouchSupported && document.activeElement && (document.activeElement as HTMLElement).blur) {\n const rect = document.activeElement.getBoundingClientRect();\n if(rect.top < 0 || rect.bottom >= (w as any).height) {\n fastSmoothScroll(findUpClassName(document.activeElement, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'center', 4, undefined, FocusDirection.Static);\n }\n } */\n };\n\n // * hook worker constructor to set search parameters (test, debug, etc)\n const workerHandler = {\n construct(target: any, args: any) {\n //console.log(target, args);\n const url = args[0] + location.search;\n\n return new target(url);\n }\n };\n \n const workerProxy = new Proxy(Worker, workerHandler);\n Worker = workerProxy;\n\n const [_, touchSupport, userAgent, rootScope, appStateManager, I18n] = await Promise.all([\n import('./lib/polyfill'),\n import('./environment/touchSupport'),\n import('./environment/userAgent'),\n import('./lib/rootScope'),\n import('./lib/appManagers/appStateManager'),\n import('./lib/langPack'),\n ]);\n\n //console.timeEnd('get storage');\n\n window.addEventListener('resize', setVH);\n setVH();\n\n //console.log(new Uint8Array([255, 200, 145]).hex);\n\n if(IS_STICKY_INPUT_BUGGED) {\n const toggleResizeMode = () => {\n setViewportVH = tabId === 1 && IS_STICKY_INPUT_BUGGED && !rootScope.default.isOverlayActive;\n setVH();\n \n if(w !== window) {\n if(setViewportVH) {\n window.removeEventListener('resize', setVH);\n w.addEventListener('resize', setVH);\n } else {\n w.removeEventListener('resize', setVH);\n window.addEventListener('resize', setVH);\n }\n }\n };\n \n let tabId: number;\n rootScope.default.addEventListener('im_tab_change', (id) => {\n const wasTabId = tabId !== undefined;\n tabId = id;\n \n if(wasTabId || tabId === 1) {\n toggleResizeMode();\n }\n });\n \n rootScope.default.addEventListener('overlay_toggle', () => {\n toggleResizeMode();\n });\n }\n\n if(userAgent.IS_FIREFOX && !IS_EMOJI_SUPPORTED) {\n document.addEventListener('dragstart', (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'IMG' && target.classList.contains('emoji')) {\n cancelEvent(e);\n return false;\n }\n });\n }\n\n // prevent firefox image dragging\n document.addEventListener('dragstart', (e) => {\n if((e.target as HTMLElement)?.tagName === \"IMG\") {\n e.preventDefault();\n return false;\n }\n });\n\n if(userAgent.IS_FIREFOX) {\n document.documentElement.classList.add('is-firefox');\n }\n\n if(userAgent.IS_APPLE) {\n if(userAgent.IS_SAFARI) {\n document.documentElement.classList.add('is-safari');\n }\n \n document.documentElement.classList.add('emoji-supported');\n\n if(userAgent.IS_APPLE_MOBILE) {\n document.documentElement.classList.add('is-ios');\n } else {\n document.documentElement.classList.add('is-mac');\n }\n } else if(userAgent.IS_ANDROID) {\n document.documentElement.classList.add('is-android');\n\n /* document.addEventListener('focusin', (e) => {\n hasFocus = true;\n focusTime = Date.now();\n }, {passive: true});\n\n document.addEventListener('focusout', () => {\n hasFocus = false;\n }, {passive: true}); */\n }\n\n if(!touchSupport.IS_TOUCH_SUPPORTED) {\n document.documentElement.classList.add('no-touch');\n } else {\n document.documentElement.classList.add('is-touch');\n /* document.addEventListener('touchmove', (event: any) => {\n event = event.originalEvent || event;\n if(event.scale && event.scale !== 1) {\n event.preventDefault();\n }\n }, {capture: true, passive: false}); */\n }\n\n /* if(config.isServiceWorkerSupported) {\n await navigator.serviceWorker.ready;\n navigator.serviceWorker.controller ? true : await new Promise((resolve, reject) => {\n navigator.serviceWorker.addEventListener('controllerchange', resolve);\n });\n } */\n \n //console.time('get storage');\n\n const perf = performance.now();\n\n //import('./vendor/dateFormat');\n\n const langPromise = I18n.default.getCacheLangPack();\n\n const [state, langPack] = await Promise.all([\n appStateManager.default.getState(), \n langPromise\n ]);\n //I18n.getCacheLangPack();\n //console.log('got auth:', auth);\n //console.timeEnd('get storage');\n\n rootScope.default.setThemeListener();\n\n if(langPack.appVersion !== App.langPackVersion) {\n I18n.default.getLangPack(langPack.lang_code);\n }\n\n /**\n * won't fire if font is loaded too fast\n */\n function fadeInWhenFontsReady(elem: HTMLElement, promise: Promise) {\n elem.style.opacity = '0';\n\n promise.then(() => {\n window.requestAnimationFrame(() => {\n elem.style.opacity = '';\n });\n });\n }\n\n console.log('got state, time:', performance.now() - perf);\n\n const authState = state.authState;\n if(authState._ !== 'authStateSignedIn'/* || 1 === 1 */) {\n console.log('Will mount auth page:', authState._, Date.now() / 1000);\n\n const el = document.getElementById('auth-pages');\n let scrollable: HTMLElement;\n if(el) {\n scrollable = el.querySelector('.scrollable') as HTMLElement;\n if((!touchSupport.IS_TOUCH_SUPPORTED || IS_MOBILE_SAFARI)) {\n scrollable.classList.add('no-scrollbar');\n }\n\n // * don't remove this line\n scrollable.style.opacity = '0';\n\n const placeholder = document.createElement('div');\n placeholder.classList.add('auth-placeholder');\n\n scrollable.prepend(placeholder);\n scrollable.append(placeholder.cloneNode());\n }\n\n try {\n await Promise.all([\n import('./lib/mtproto/telegramMeWebManager'),\n import('./lib/mtproto/webPushApiManager')\n ]).then(([meModule, pushModule]) => {\n meModule.default.setAuthorized(false);\n pushModule.default.forceUnsubscribe();\n });\n } catch(err) {\n \n }\n\n let pagePromise: Promise;\n //langPromise.then(async() => {\n switch(authState._) {\n case 'authStateSignIn': \n pagePromise = (await import('./pages/pageSignIn')).default.mount();\n break;\n case 'authStateSignQr': \n pagePromise = (await import('./pages/pageSignQR')).default.mount();\n break;\n case 'authStateAuthCode':\n pagePromise = (await import('./pages/pageAuthCode')).default.mount(authState.sentCode);\n break;\n case 'authStatePassword':\n pagePromise = (await import('./pages/pagePassword')).default.mount();\n break;\n case 'authStateSignUp':\n pagePromise = (await import('./pages/pageSignUp')).default.mount(authState.authCode);\n break;\n }\n //});\n\n if(scrollable) {\n // wait for text appear\n if(pagePromise) {\n await pagePromise;\n }\n\n const promise = 'fonts' in document ? \n Promise.race([\n new Promise((resolve) => setTimeout(resolve, 1e3)), \n // @ts-ignore\n document.fonts.ready\n ]) : \n Promise.resolve();\n fadeInWhenFontsReady(scrollable, promise);\n }\n\n /* computeCheck(password, {\n current_algo: {\n salt1, \n salt2,\n p,\n g\n },\n srp_id,\n srp_B,\n secure_random,\n }).then(res => {\n console.log(res);\n }); */\n\n /* setTimeout(async() => {\n (await import('./pages/pageAuthCode')).default.mount({\n \"_\": \"auth.sentCode\",\n \"pFlags\": {},\n \"flags\": 6,\n \"type\": {\n \"_\": \"auth.sentCodeTypeSms\",\n \"length\": 5\n },\n \"phone_code_hash\": \"\",\t\n \"next_type\": {\n \"_\": \"auth.codeTypeCall\"\n },\n \"timeout\": 120,\n \"phone_number\": \"\"\n });\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pageSignQR')).default.mount();\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pagePassword')).default.mount();\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pageSignUp')).default.mount({\n \"phone_code_hash\": \"\",\t\n \"phone_number\": \"\"\n });\n }, 500); */\n } else {\n console.log('Will mount IM page:', Date.now() / 1000);\n fadeInWhenFontsReady(document.getElementById('main-columns'), loadFonts());\n (await import('./pages/pageIm')).default.mount();\n //getNearestDc();\n }\n\n const ripple = (await import('./components/ripple')).ripple;\n (Array.from(document.getElementsByClassName('rp')) as HTMLElement[]).forEach(el => ripple(el));\n });\n//});\n\n\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/environment/ctx.ts","webpack:///./src/environment/userAgent.ts","webpack:///./src/environment/touchSupport.ts","webpack:///./src/helpers/dom/fixSafariStickyInputFocusing.ts","webpack:///./src/helpers/dom/fixSafariStickyInput.ts","webpack:///./src/helpers/dom/cancelEvent.ts","webpack:///./src/helpers/dom/findUpClassName.ts","webpack:///./src/helpers/dom/blurActiveElement.ts","webpack:///./src/config/app.ts","webpack:///./src/helpers/dom/loadFonts.ts","webpack:///./src/environment/emojiSupport.ts","webpack:///./src/index.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","installedModules","10","jsonpScriptSrc","__webpack_require__","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","error","Error","script","loadScript","src","retries","onScriptComplete","document","createElement","charset","timeout","nc","setAttribute","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","cacheBust","Date","now","retryScript","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","this","oldJsonpFunction","slice","s","window","self","USER_AGENT","navigator","userAgent","IS_APPLE","search","IS_ANDROID","toLowerCase","indexOf","IS_CHROMIUM","test","vendor","IS_APPLE_MOBILE","platform","maxTouchPoints","MSStream","IS_SAFARI","match","IS_FIREFOX","IS_MOBILE_SAFARI","IS_MOBILE","IS_TOUCH_SUPPORTED","DocumentTouch","IS_STICKY_INPUT_BUGGED","startY","capture","passive","onTouchMove","touch","touches","scrollable","y","scrolled","scrollTop","scrollHeight","clientHeight","nextScrollTop","Math","round","preventDefault","lastFocusOutTimeStamp","addEventListener","classList","contains","timeStamp","touchStart","removeEventListener","activeElement","blur","fixSafariStickyInputFocusing","input","add","fixSafariStickyInput","style","transform","focus","cancelEvent","originalEvent","stopPropagation","returnValue","cancelBubble","findUpClassName","el","className","closest","blurActiveElement","App","id","hash","version","versionFull","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","location","hostname","suffix","loadFonts","race","map","font","fonts","load","IS_EMOJI_SUPPORTED","Element","toggleAttribute","force","hasAttribute","removeAttribute","w","visualViewport","lastVH","setViewportVH","setVH","vh","rootScope","default","isOverlayActive","height","innerHeight","touchSupport","documentElement","setProperty","workerProxy","Proxy","Worker","construct","args","_","appStateManager","I18n","toggleResizeMode","tabId","wasTabId","tagName","perf","performance","langPromise","getCacheLangPack","state","getState","fadeInWhenFontsReady","elem","opacity","then","requestAnimationFrame","setThemeListener","appVersion","getLangPack","lang_code","log","authState","getElementById","pagePromise","querySelector","placeholder","prepend","append","cloneNode","meModule","pushModule","setAuthorized","forceUnsubscribe","mount","sentCode","authCode","ready","ripple","Array","from","getElementsByClassName","forEach"],"mappings":"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","file":"main.3f7a70559679af85e450.bundle.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t};\n\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t10: 0\n \t};\n\n\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"11\":\"npm.qr-code-styling\"}[chunkId]||chunkId) + \".\" + {\"0\":\"acb684dc35d9188bd6be\",\"1\":\"8ebe82cad4450b8187c1\",\"2\":\"8e2ae984d68e67fdf8a4\",\"3\":\"ecfbd0f9b839f0b7d92f\",\"4\":\"bf32a9fbeca385c5c9e9\",\"5\":\"30d45c9c9fc91ab968c5\",\"6\":\"848a1b33f7636a89b087\",\"7\":\"83a2dfdd0ee504f81f0b\",\"8\":\"f362ee1d655a5699d64f\",\"9\":\"3edc09b4dc478113ee21\",\"11\":\"868f37c7ef08036b894a\",\"12\":\"287fcbd640751db5e44c\",\"13\":\"c0ce6dfb89e386f370a8\",\"14\":\"f1740ad881f9dd808262\",\"15\":\"1a3e11966cccf1381885\",\"16\":\"b3f22524b150bb5fac27\",\"17\":\"6eeae36d1ceb661e97fa\",\"18\":\"2ffaa556b58a70d80bd8\",\"19\":\"804c41f1066e7188e13a\",\"20\":\"be4f633cc12b0fd8e5a2\",\"21\":\"0d6505cd9495fe305ff6\",\"22\":\"2635711e4f30bee63506\",\"23\":\"605f4acbc5d2d512692f\",\"24\":\"92df5f1db24f05b27e64\",\"25\":\"f3627972e99fbfd11062\",\"26\":\"b22c8de7fb72959da42f\",\"27\":\"d828877399fdc766a0f1\",\"28\":\"54c1be0be6cd63675640\",\"29\":\"2d84e7e951c2722718bc\",\"30\":\"db25542edbf0f0900275\",\"31\":\"8c3b6a0d1d8bf16646eb\"}[chunkId] + \".chunk.js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tfunction loadScript(src, retries) {\n \t\t\t\t var script = document.createElement('script');\n \t\t\t\t var retryAttempt = 999999 - retries + 1;\n \t\t\t\t var retryAttemptString = '&retry-attempt=' + retryAttempt;\n \t\t\t\t var onScriptComplete;\n\n \t\t\t\t script.charset = 'utf-8';\n \t\t\t\t script.timeout = 120;\n \t\t\t\t if (__webpack_require__.nc) {\n \t\t\t\t script.setAttribute('nonce', __webpack_require__.nc);\n \t\t\t\t }\n \t\t\t\t script.src = src;\n\n \t\t\t\t onScriptComplete = function(event) {\n \t\t\t\t // avoid mem leaks in IE.\n \t\t\t\t script.onerror = script.onload = null;\n \t\t\t\t clearTimeout(timeout);\n \t\t\t\t var chunk = installedChunks[chunkId];\n \t\t\t\t if (chunk !== 0) {\n \t\t\t\t if (chunk) {\n \t\t\t\t if (retries === 0) {\n \t\t\t\t var errorType =\n \t\t\t\t event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t var realSrc = event && event.target && event.target.src;\n \t\t\t\t error.message =\n \t\t\t\t 'Loading chunk ' +\n \t\t\t\t chunkId +\n \t\t\t\t ' failed after 999999 retries.\\n(' +\n \t\t\t\t errorType +\n \t\t\t\t ': ' +\n \t\t\t\t realSrc +\n \t\t\t\t ')';\n \t\t\t\t error.name = 'ChunkLoadError';\n \t\t\t\t error.type = errorType;\n \t\t\t\t error.request = realSrc;\n \t\t\t\t chunk[1](error);\n \t\t\t\t installedChunks[chunkId] = undefined;\n \t\t\t\t } else {\n \t\t\t\t setTimeout(function() {\n \t\t\t\t var cacheBust = (function() {\n \t\t\t\t return Date.now();\n \t\t\t\t })();\n \t\t\t\t +retryAttemptString;\n \t\t\t\t var retryScript = loadScript(\n \t\t\t\t jsonpScriptSrc(chunkId) + '?' + cacheBust,\n \t\t\t\t retries - 1\n \t\t\t\t );\n \t\t\t\t document.head.appendChild(retryScript);\n \t\t\t\t }, 0);\n \t\t\t\t }\n \t\t\t\t } else {\n \t\t\t\t installedChunks[chunkId] = undefined;\n \t\t\t\t }\n \t\t\t\t }\n \t\t\t\t };\n \t\t\t\t var timeout = setTimeout(function() {\n \t\t\t\t onScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t }, 120000);\n \t\t\t\t script.onerror = script.onload = onScriptComplete;\n \t\t\t\t return script;\n \t\t\t\t}\n\n \t\t\t\tvar script = loadScript(jsonpScriptSrc(chunkId), 999999);\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = this[\"webpackJsonp\"] = this[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport ctx from './ctx';\r\n\r\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\r\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !(ctx as any).MSStream;\r\n\r\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\r\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\r\n\r\nexport const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// @ts-ignore\r\nexport const IS_TOUCH_SUPPORTED = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)/* || true */;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { IS_TOUCH_SUPPORTED } from \"../../environment/touchSupport\";\nimport { IS_MOBILE, IS_SAFARI } from \"../../environment/userAgent\";\nimport findUpClassName from \"./findUpClassName\";\nimport fixSafariStickyInput from \"./fixSafariStickyInput\";\n\nexport const IS_STICKY_INPUT_BUGGED = IS_SAFARI && IS_MOBILE && IS_TOUCH_SUPPORTED;\n\nif(IS_STICKY_INPUT_BUGGED) {\n let key: 'clientY' | 'pageY' = 'clientY';\n let startY = 0;\n const o = {capture: true, passive: false};\n const onTouchMove = (e: TouchEvent) => {\n const touch = e.touches[0];\n\n //console.log('touchmove y', touch[key], startY);\n \n const scrollable = findUpClassName(touch.target, 'scrollable-y');\n if(scrollable) {\n const y = touch[key];\n const scrolled = startY - y;\n\n /* if(y < startY) {\n startY = y;\n } */\n\n const scrollTop = scrollable.scrollTop;\n const scrollHeight = scrollable.scrollHeight;\n const clientHeight = scrollable.clientHeight;\n const nextScrollTop = scrollTop ? Math.round(scrollTop + scrollable.clientHeight + scrolled) : scrollTop + scrolled;\n //const needCancel = scrollHeight !== clientHeight ? (scrollTop && diff <= 1) || (scrollTop - diff) < 0 : true;\n const needCancel = scrollHeight === clientHeight || nextScrollTop >= scrollHeight || nextScrollTop <= 0;\n if(needCancel) {\n e.preventDefault();\n }\n\n //console.log('touchmove with scrollable', scrollTop, startY, scrolled, nextScrollTop, needCancel, e.cancelable);\n } else {\n e.preventDefault();\n\n //console.log('touchmove no scrollable', e, touch);\n }\n\n //if(e.target === document.documentElement || e.target === document.body) e.preventDefault();\n };\n \n // let el = document.createElement('div');\n // document.body.prepend(el);\n // let a = 0;\n\n // let hasFocus = false;\n let lastFocusOutTimeStamp = 0;\n document.addEventListener('focusin', (e) => {\n if(!(e.target as HTMLElement).classList.contains('is-sticky-input-bugged') || (e.timeStamp - lastFocusOutTimeStamp) < 50/* && document.activeElement === input */) {\n return;\n }\n\n // console.log('focusin', e, e.timeStamp);\n\n // hasFocus = true;\n // document.body.classList.add('is-keyboard-opened');\n\n // el.innerText = 'focusin ' + ++a;\n\n /* a < 2 && */fixSafariStickyInput(e.target as HTMLElement);\n\n document.addEventListener('touchmove', onTouchMove, o);\n document.addEventListener('touchstart', (e) => {\n if(e.touches.length > 1) return;\n const touchStart = e.touches[0];\n \n startY = touchStart[key];\n });\n }, {passive: true});\n\n document.addEventListener('focusout', (e) => {\n // console.log('focusout', e, e.timeStamp);\n document.removeEventListener('touchmove', onTouchMove, o);\n\n lastFocusOutTimeStamp = e.timeStamp;\n\n // el.innerText = 'focusout ' + ++a;\n \n // if(hasFocus) {\n // hasFocus = false;\n // document.body.classList.remove('is-keyboard-opened');\n // }\n }, {passive: true});\n\n document.addEventListener('visibilitychange', () => {\n // console.log('window visibilitychange');\n if(document.activeElement && \n document.activeElement.classList.contains('is-sticky-input-bugged') && \n (document.activeElement as HTMLElement).blur) {\n fixSafariStickyInput(document.activeElement as HTMLElement);\n }\n\n /* blurActiveElement();\n window.scrollTo(0, 0);\n setVH(); */\n }, {passive: true});\n}\n\nexport default function fixSafariStickyInputFocusing(input: HTMLElement) {\n if(!IS_STICKY_INPUT_BUGGED) return;\n input.classList.add('is-sticky-input-bugged');\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function fixSafariStickyInput(input: HTMLElement) {\r\n input.style.transform = 'translateY(-99999px)';\r\n /* input.style.position = 'fixed';\r\n input.style.top = '-99999px';\r\n input.style.left = '0'; */\r\n input.focus();\r\n \r\n setTimeout(() => {\r\n //fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\r\n /* input.style.position = '';\r\n input.style.top = ''; */\r\n input.style.transform = '';\r\n //fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\r\n \r\n /* setTimeout(() => {\r\n fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4);\r\n }, 50); */\r\n }, 0);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function cancelEvent(event: Event) {\r\n event = event || window.event;\r\n if(event) {\r\n // @ts-ignore\r\n event = event.originalEvent || event;\r\n\r\n try {\r\n if(event.stopPropagation) event.stopPropagation();\r\n if(event.preventDefault) event.preventDefault();\r\n event.returnValue = false;\r\n event.cancelBubble = true;\r\n } catch(err) {}\r\n }\r\n\r\n return false;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//export function findUpClassName(el: any, className: string): T;\r\nexport default function findUpClassName(el: any, className: string): HTMLElement {\r\n return el.closest('.' + className);\r\n /* if(el.classList.contains(className)) return el; // 03.02.2020\r\n\r\n while(el.parentElement) {\r\n el = el.parentElement;\r\n if(el.classList.contains(className)) \r\n return el;\r\n }\r\n return null; */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport default function blurActiveElement() {\r\n if(document.activeElement && (document.activeElement as HTMLInputElement).blur) {\r\n (document.activeElement as HTMLInputElement).blur();\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type { DcId } from \"../types\";\n\nexport const MAIN_DOMAIN = 'web.telegram.org';\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n langPackVersion: '0.3.3',\n langPack: 'macos',\n langPackCode: 'en',\n domains: [MAIN_DOMAIN] as string[],\n baseDcId: 2 as DcId,\n isMainDomain: location.hostname === MAIN_DOMAIN,\n suffix: 'K'\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nlet promise: Promise;\r\nexport default function loadFonts(): Promise {\r\n if(promise) return promise;\r\n return promise = 'fonts' in document ? \r\n Promise.race([\r\n // @ts-ignore\r\n Promise.all(['400 1rem Roboto', '500 1rem Roboto', '500 1rem tgico'].map(font => document.fonts.load(font))),\r\n new Promise((resolve) => setTimeout(resolve, 1e3))\r\n ]) : \r\n Promise.resolve();\r\n}\r\n","const IS_EMOJI_SUPPORTED = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1/* && false *//* || true */;\r\n\r\nexport default IS_EMOJI_SUPPORTED;","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from './config/app';\nimport blurActiveElement from './helpers/dom/blurActiveElement';\nimport { cancelEvent } from './helpers/dom/cancelEvent';\nimport { IS_STICKY_INPUT_BUGGED } from './helpers/dom/fixSafariStickyInputFocusing';\nimport loadFonts from './helpers/dom/loadFonts';\nimport IS_EMOJI_SUPPORTED from './environment/emojiSupport';\nimport { IS_MOBILE_SAFARI } from './environment/userAgent';\nimport './materialize.scss';\nimport './scss/style.scss';\nimport './scss/tgico.scss';\n/* import { computeCheck } from './lib/crypto/srp';\nimport { salt1, salt2, g, p, srp_id, secure_random, srp_B, password } from './mock/srp'; */\n\n//console.log('pineapples are in my head');\n\n/* console.time('get storage1');\nimport * as a from './lib/config';\nimport * as b from './lib/mtproto/mtproto_config';\nimport * as c from './helpers/userAgent';\nimport * as d from './lib/mtproto/mtprotoworker';\nimport * as e from './lib/polyfill';\nimport * as f from './lib/storage';\na && b && c && d && e && f;\nconsole.timeEnd('get storage1'); */\n\n/* Promise.all([\n import('./components/pageIm'),\n import('./components/pageSignIn'),\n import('./components/misc'),\n import('./lib/storage')\n]).then(imports => {\n let [pageIm, pageSignIn, misc, AppStorage] = imports; */\n\n document.addEventListener('DOMContentLoaded', async() => {\n //let socket = new Socket(2);\n\n if(!Element.prototype.toggleAttribute) {\n Element.prototype.toggleAttribute = function(name, force) {\n if(force !== void 0) force = !!force;\n \n if(this.hasAttribute(name)) {\n if(force) return true;\n \n this.removeAttribute(name);\n return false;\n }\n if(force === false) return false;\n \n this.setAttribute(name, \"\");\n return true;\n };\n }\n\n // We listen to the resize event (https://css-tricks.com/the-trick-to-viewport-units-on-mobile/)\n // @ts-ignore\n const w = window.visualViewport || window; // * handle iOS keyboard\n let setViewportVH = false/* , hasFocus = false */;\n let lastVH: number;\n const setVH = () => {\n // @ts-ignore\n const vh = (setViewportVH && !rootScope.default.isOverlayActive ? w.height || w.innerHeight : window.innerHeight) * 0.01;\n if(lastVH === vh) {\n return;\n } else if(touchSupport.IS_TOUCH_SUPPORTED && lastVH < vh && (vh - lastVH) > 1) {\n blurActiveElement(); // (Android) fix blurring inputs when keyboard is being closed (e.g. closing keyboard by back arrow and touching a bubble)\n }\n\n lastVH = vh;\n\n //const vh = document.documentElement.scrollHeight * 0.01;\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n //console.log('setVH', vh, setViewportVH ? w : window);\n\n /* if(setViewportVH && userAgent.isSafari && touchSupport.isTouchSupported && document.activeElement && (document.activeElement as HTMLElement).blur) {\n const rect = document.activeElement.getBoundingClientRect();\n if(rect.top < 0 || rect.bottom >= (w as any).height) {\n fastSmoothScroll(findUpClassName(document.activeElement, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'center', 4, undefined, FocusDirection.Static);\n }\n } */\n };\n\n // * hook worker constructor to set search parameters (test, debug, etc)\n const workerHandler = {\n construct(target: any, args: any) {\n //console.log(target, args);\n const url = args[0] + location.search;\n\n return new target(url);\n }\n };\n \n const workerProxy = new Proxy(Worker, workerHandler);\n Worker = workerProxy;\n\n const [_, touchSupport, userAgent, rootScope, appStateManager, I18n] = await Promise.all([\n import('./lib/polyfill'),\n import('./environment/touchSupport'),\n import('./environment/userAgent'),\n import('./lib/rootScope'),\n import('./lib/appManagers/appStateManager'),\n import('./lib/langPack'),\n ]);\n\n //console.timeEnd('get storage');\n\n window.addEventListener('resize', setVH);\n setVH();\n\n //console.log(new Uint8Array([255, 200, 145]).hex);\n\n if(IS_STICKY_INPUT_BUGGED) {\n const toggleResizeMode = () => {\n setViewportVH = tabId === 1 && IS_STICKY_INPUT_BUGGED && !rootScope.default.isOverlayActive;\n setVH();\n \n if(w !== window) {\n if(setViewportVH) {\n window.removeEventListener('resize', setVH);\n w.addEventListener('resize', setVH);\n } else {\n w.removeEventListener('resize', setVH);\n window.addEventListener('resize', setVH);\n }\n }\n };\n \n let tabId: number;\n rootScope.default.addEventListener('im_tab_change', (id) => {\n const wasTabId = tabId !== undefined;\n tabId = id;\n \n if(wasTabId || tabId === 1) {\n toggleResizeMode();\n }\n });\n \n rootScope.default.addEventListener('overlay_toggle', () => {\n toggleResizeMode();\n });\n }\n\n if(userAgent.IS_FIREFOX && !IS_EMOJI_SUPPORTED) {\n document.addEventListener('dragstart', (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'IMG' && target.classList.contains('emoji')) {\n cancelEvent(e);\n return false;\n }\n });\n }\n\n // prevent firefox image dragging\n document.addEventListener('dragstart', (e) => {\n if((e.target as HTMLElement)?.tagName === \"IMG\") {\n e.preventDefault();\n return false;\n }\n });\n\n if(userAgent.IS_FIREFOX) {\n document.documentElement.classList.add('is-firefox');\n }\n\n if(userAgent.IS_APPLE) {\n if(userAgent.IS_SAFARI) {\n document.documentElement.classList.add('is-safari');\n }\n \n document.documentElement.classList.add('emoji-supported');\n\n if(userAgent.IS_APPLE_MOBILE) {\n document.documentElement.classList.add('is-ios');\n } else {\n document.documentElement.classList.add('is-mac');\n }\n } else if(userAgent.IS_ANDROID) {\n document.documentElement.classList.add('is-android');\n\n /* document.addEventListener('focusin', (e) => {\n hasFocus = true;\n focusTime = Date.now();\n }, {passive: true});\n\n document.addEventListener('focusout', () => {\n hasFocus = false;\n }, {passive: true}); */\n }\n\n if(!touchSupport.IS_TOUCH_SUPPORTED) {\n document.documentElement.classList.add('no-touch');\n } else {\n document.documentElement.classList.add('is-touch');\n /* document.addEventListener('touchmove', (event: any) => {\n event = event.originalEvent || event;\n if(event.scale && event.scale !== 1) {\n event.preventDefault();\n }\n }, {capture: true, passive: false}); */\n }\n\n /* if(config.isServiceWorkerSupported) {\n await navigator.serviceWorker.ready;\n navigator.serviceWorker.controller ? true : await new Promise((resolve, reject) => {\n navigator.serviceWorker.addEventListener('controllerchange', resolve);\n });\n } */\n \n //console.time('get storage');\n\n const perf = performance.now();\n\n //import('./vendor/dateFormat');\n\n const langPromise = I18n.default.getCacheLangPack();\n\n const [state, langPack] = await Promise.all([\n appStateManager.default.getState(), \n langPromise\n ]);\n //I18n.getCacheLangPack();\n //console.log('got auth:', auth);\n //console.timeEnd('get storage');\n\n rootScope.default.setThemeListener();\n\n if(langPack.appVersion !== App.langPackVersion) {\n I18n.default.getLangPack(langPack.lang_code);\n }\n\n /**\n * won't fire if font is loaded too fast\n */\n function fadeInWhenFontsReady(elem: HTMLElement, promise: Promise) {\n elem.style.opacity = '0';\n\n promise.then(() => {\n window.requestAnimationFrame(() => {\n elem.style.opacity = '';\n });\n });\n }\n\n console.log('got state, time:', performance.now() - perf);\n\n const authState = state.authState;\n if(authState._ !== 'authStateSignedIn'/* || 1 === 1 */) {\n console.log('Will mount auth page:', authState._, Date.now() / 1000);\n\n const el = document.getElementById('auth-pages');\n let scrollable: HTMLElement;\n if(el) {\n scrollable = el.querySelector('.scrollable') as HTMLElement;\n if((!touchSupport.IS_TOUCH_SUPPORTED || IS_MOBILE_SAFARI)) {\n scrollable.classList.add('no-scrollbar');\n }\n\n // * don't remove this line\n scrollable.style.opacity = '0';\n\n const placeholder = document.createElement('div');\n placeholder.classList.add('auth-placeholder');\n\n scrollable.prepend(placeholder);\n scrollable.append(placeholder.cloneNode());\n }\n\n try {\n await Promise.all([\n import('./lib/mtproto/telegramMeWebManager'),\n import('./lib/mtproto/webPushApiManager')\n ]).then(([meModule, pushModule]) => {\n meModule.default.setAuthorized(false);\n pushModule.default.forceUnsubscribe();\n });\n } catch(err) {\n \n }\n\n let pagePromise: Promise;\n //langPromise.then(async() => {\n switch(authState._) {\n case 'authStateSignIn': \n pagePromise = (await import('./pages/pageSignIn')).default.mount();\n break;\n case 'authStateSignQr': \n pagePromise = (await import('./pages/pageSignQR')).default.mount();\n break;\n case 'authStateAuthCode':\n pagePromise = (await import('./pages/pageAuthCode')).default.mount(authState.sentCode);\n break;\n case 'authStatePassword':\n pagePromise = (await import('./pages/pagePassword')).default.mount();\n break;\n case 'authStateSignUp':\n pagePromise = (await import('./pages/pageSignUp')).default.mount(authState.authCode);\n break;\n }\n //});\n\n if(scrollable) {\n // wait for text appear\n if(pagePromise) {\n await pagePromise;\n }\n\n const promise = 'fonts' in document ? \n Promise.race([\n new Promise((resolve) => setTimeout(resolve, 1e3)), \n // @ts-ignore\n document.fonts.ready\n ]) : \n Promise.resolve();\n fadeInWhenFontsReady(scrollable, promise);\n }\n\n /* computeCheck(password, {\n current_algo: {\n salt1, \n salt2,\n p,\n g\n },\n srp_id,\n srp_B,\n secure_random,\n }).then(res => {\n console.log(res);\n }); */\n\n /* setTimeout(async() => {\n (await import('./pages/pageAuthCode')).default.mount({\n \"_\": \"auth.sentCode\",\n \"pFlags\": {},\n \"flags\": 6,\n \"type\": {\n \"_\": \"auth.sentCodeTypeSms\",\n \"length\": 5\n },\n \"phone_code_hash\": \"\",\t\n \"next_type\": {\n \"_\": \"auth.codeTypeCall\"\n },\n \"timeout\": 120,\n \"phone_number\": \"\"\n });\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pageSignQR')).default.mount();\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pagePassword')).default.mount();\n }, 500); */\n /* setTimeout(async() => {\n (await import('./pages/pageSignUp')).default.mount({\n \"phone_code_hash\": \"\",\t\n \"phone_number\": \"\"\n });\n }, 500); */\n } else {\n console.log('Will mount IM page:', Date.now() / 1000);\n fadeInWhenFontsReady(document.getElementById('main-columns'), loadFonts());\n (await import('./pages/pageIm')).default.mount();\n //getNearestDc();\n }\n\n const ripple = (await import('./components/ripple')).ripple;\n (Array.from(document.getElementsByClassName('rp')) as HTMLElement[]).forEach(el => ripple(el));\n });\n//});\n\n\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/mtproto.worker.08024df6e720e6031331.bundle.worker.js b/public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js similarity index 99% rename from public/mtproto.worker.08024df6e720e6031331.bundle.worker.js rename to public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js index efec324e..f981ac29 100644 --- a/public/mtproto.worker.08024df6e720e6031331.bundle.worker.js +++ b/public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js @@ -1,4 +1,4 @@ !function(e){var t={};function a(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,a),s.l=!0,s.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)a.d(n,s,function(t){return e[t]}.bind(null,s));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e,t,a){ /*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */ -!function(e){"use strict";var t=(e,t,a,n)=>{let s=65535&e|0,i=e>>>16&65535|0,r=0;for(;0!==a;){r=a>2e3?2e3:a,a-=r;do{s=s+t[n++]|0,i=i+s|0}while(--r);s%=65521,i%=65521}return s|i<<16|0};const a=new Uint32Array((()=>{let e,t=[];for(var a=0;a<256;a++){e=a;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t})());var n=(e,t,n,s)=>{const i=a,r=s+n;e^=-1;for(let a=s;a>>8^i[255&(e^t[a])];return-1^e},s=function(e,t){let a,n,s,i,r,p,o,m,d,y,c,l,g,h,u,f,_,v,b,P,w,S,k,I;const C=e.state;a=e.next_in,k=e.input,n=a+(e.avail_in-5),s=e.next_out,I=e.output,i=s-(t-e.avail_out),r=s+(e.avail_out-257),p=C.dmax,o=C.wsize,m=C.whave,d=C.wnext,y=C.window,c=C.hold,l=C.bits,g=C.lencode,h=C.distcode,u=(1<>>24,c>>>=v,l-=v,v=_>>>16&255,0===v)I[s++]=65535&_;else{if(!(16&v)){if(0==(64&v)){_=g[(65535&_)+(c&(1<>>=v,l-=v),l<15&&(c+=k[a++]<>>24,c>>>=v,l-=v,v=_>>>16&255,!(16&v)){if(0==(64&v)){_=h[(65535&_)+(c&(1<p){e.msg="invalid distance too far back",C.mode=30;break e}if(c>>>=v,l-=v,v=s-i,P>v){if(v=P-v,v>m&&C.sane){e.msg="invalid distance too far back",C.mode=30;break e}if(w=0,S=y,0===d){if(w+=o-v,v2;)I[s++]=S[w++],I[s++]=S[w++],I[s++]=S[w++],b-=3;b&&(I[s++]=S[w++],b>1&&(I[s++]=S[w++]))}else{w=s-P;do{I[s++]=I[w++],I[s++]=I[w++],I[s++]=I[w++],b-=3}while(b>2);b&&(I[s++]=I[w++],b>1&&(I[s++]=I[w++]))}break}}break}}while(a>3,a-=b,l-=b<<3,c&=(1<{const c=y.bits;let l,g,h,u,f,_,v=0,b=0,P=0,w=0,S=0,k=0,I=0,C=0,A=0,M=0,R=null,E=0;const V=new Uint16Array(16),D=new Uint16Array(16);let U,B,T,x=null,F=0;for(v=0;v<=15;v++)V[v]=0;for(b=0;b=1&&0===V[w];w--);if(S>w&&(S=w),0===w)return s[m++]=20971520,s[m++]=20971520,y.bits=1,0;for(P=1;P0&&(0===e||1!==w))return-1;for(D[1]=0,v=1;v<15;v++)D[v+1]=D[v]+V[v];for(b=0;b852||2===e&&A>592)return 1;for(;;){U=v-I,d[b]<_?(B=0,T=d[b]):d[b]>_?(B=x[F+d[b]],T=R[E+d[b]]):(B=96,T=0),l=1<>I)+g]=U<<24|B<<16|T|0}while(0!==g);for(l=1<>=1;if(0!==l?(M&=l-1,M+=l):M=0,b++,0==--V[v]){if(v===w)break;v=t[a+d[b]]}if(v>S&&(M&u)!==h){for(0===I&&(I=S),f+=P,k=v-I,C=1<852||2===e&&A>592)return 1;h=M&u,s[h]=S<<24|k<<16|f-m|0}}return 0!==M&&(s[f+M]=v-I<<24|64<<16|0),y.bits=S,0},d={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:y,Z_BLOCK:c,Z_TREES:l,Z_OK:g,Z_STREAM_END:h,Z_NEED_DICT:u,Z_STREAM_ERROR:f,Z_DATA_ERROR:_,Z_MEM_ERROR:v,Z_BUF_ERROR:b,Z_DEFLATED:P}=d,w=12,S=30,k=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function I(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const C=e=>{if(!e||!e.state)return f;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,g},A=e=>{if(!e||!e.state)return f;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,C(e)},M=(e,t)=>{let a;if(!e||!e.state)return f;const n=e.state;return t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?f:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,A(e))},R=(e,t)=>{if(!e)return f;const a=new I;e.state=a,a.window=null;const n=M(e,t);return n!==g&&(e.state=null),n};let E,V,D=!0;const U=e=>{if(D){E=new Int32Array(512),V=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(m(1,e.lens,0,288,E,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;m(2,e.lens,0,32,V,0,e.work,{bits:5}),D=!1}e.lencode=E,e.lenbits=9,e.distcode=V,e.distbits=5},B=(e,t,a,n)=>{let s;const i=e.state;return null===i.window&&(i.wsize=1<=i.wsize?(i.window.set(t.subarray(a-i.wsize,a),0),i.wnext=0,i.whave=i.wsize):(s=i.wsize-i.wnext,s>n&&(s=n),i.window.set(t.subarray(a-n,a-n+s),i.wnext),(n-=s)?(i.window.set(t.subarray(a-n,a),0),i.wnext=n,i.whave=i.wsize):(i.wnext+=s,i.wnext===i.wsize&&(i.wnext=0),i.whave{let i,r,p,o,d,I,C,A,M,R,E,V,D,T,x,F,L,N,O,q,G,K,z=0;const H=new Uint8Array(4);let j,W;const J=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return f;i=e.state,i.mode===w&&(i.mode=13),d=e.next_out,p=e.output,C=e.avail_out,o=e.next_in,r=e.input,I=e.avail_in,A=i.hold,M=i.bits,R=I,E=C,K=g;e:for(;;)switch(i.mode){case 1:if(0===i.wrap){i.mode=13;break}for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>>8&255,i.check=n(i.check,H,2,0),A=0,M=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&A)<<8)+(A>>8))%31){e.msg="incorrect header check",i.mode=S;break}if((15&A)!==P){e.msg="unknown compression method",i.mode=S;break}if(A>>>=4,M-=4,G=8+(15&A),0===i.wbits)i.wbits=G;else if(G>i.wbits){e.msg="invalid window size",i.mode=S;break}i.dmax=1<>8&1),512&i.flags&&(H[0]=255&A,H[1]=A>>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0,i.mode=3;case 3:for(;M<32;){if(0===I)break e;I--,A+=r[o++]<>>8&255,H[2]=A>>>16&255,H[3]=A>>>24&255,i.check=n(i.check,H,4,0)),A=0,M=0,i.mode=4;case 4:for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>8),512&i.flags&&(H[0]=255&A,H[1]=A>>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0,i.mode=5;case 5:if(1024&i.flags){for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(V=i.length,V>I&&(V=I),V&&(i.head&&(G=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(r.subarray(o,o+V),G)),512&i.flags&&(i.check=n(i.check,r,V,o)),I-=V,o+=V,i.length-=V),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===I)break e;V=0;do{G=r[o+V++],i.head&&G&&i.length<65536&&(i.head.name+=String.fromCharCode(G))}while(G&&V>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=w;break;case 10:for(;M<32;){if(0===I)break e;I--,A+=r[o++]<>>=7&M,M-=7&M,i.mode=27;break}for(;M<3;){if(0===I)break e;I--,A+=r[o++]<>>=1,M-=1,3&A){case 0:i.mode=14;break;case 1:if(U(i),i.mode=20,a===l){A>>>=2,M-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=S}A>>>=2,M-=2;break;case 14:for(A>>>=7&M,M-=7&M;M<32;){if(0===I)break e;I--,A+=r[o++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=S;break}if(i.length=65535&A,A=0,M=0,i.mode=15,a===l)break e;case 15:i.mode=16;case 16:if(V=i.length,V){if(V>I&&(V=I),V>C&&(V=C),0===V)break e;p.set(r.subarray(o,o+V),d),I-=V,o+=V,C-=V,d+=V,i.length-=V;break}i.mode=w;break;case 17:for(;M<14;){if(0===I)break e;I--,A+=r[o++]<>>=5,M-=5,i.ndist=1+(31&A),A>>>=5,M-=5,i.ncode=4+(15&A),A>>>=4,M-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=S;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,M-=3}for(;i.have<19;)i.lens[J[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,j={bits:i.lenbits},K=m(0,i.lens,0,19,i.lencode,0,i.work,j),i.lenbits=j.bits,K){e.msg="invalid code lengths set",i.mode=S;break}i.have=0,i.mode=19;case 19:for(;i.have>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=x,M-=x,i.lens[i.have++]=L;else{if(16===L){for(W=x+2;M>>=x,M-=x,0===i.have){e.msg="invalid bit length repeat",i.mode=S;break}G=i.lens[i.have-1],V=3+(3&A),A>>>=2,M-=2}else if(17===L){for(W=x+3;M>>=x,M-=x,G=0,V=3+(7&A),A>>>=3,M-=3}else{for(W=x+7;M>>=x,M-=x,G=0,V=11+(127&A),A>>>=7,M-=7}if(i.have+V>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=S;break}for(;V--;)i.lens[i.have++]=G}}if(i.mode===S)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=S;break}if(i.lenbits=9,j={bits:i.lenbits},K=m(1,i.lens,0,i.nlen,i.lencode,0,i.work,j),i.lenbits=j.bits,K){e.msg="invalid literal/lengths set",i.mode=S;break}if(i.distbits=6,i.distcode=i.distdyn,j={bits:i.distbits},K=m(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,j),i.distbits=j.bits,K){e.msg="invalid distances set",i.mode=S;break}if(i.mode=20,a===l)break e;case 20:i.mode=21;case 21:if(I>=6&&C>=258){e.next_out=d,e.avail_out=C,e.next_in=o,e.avail_in=I,i.hold=A,i.bits=M,s(e,E),d=e.next_out,p=e.output,C=e.avail_out,o=e.next_in,r=e.input,I=e.avail_in,A=i.hold,M=i.bits,i.mode===w&&(i.back=-1);break}for(i.back=0;z=i.lencode[A&(1<>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>N)],x=z>>>24,F=z>>>16&255,L=65535&z,!(N+x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=N,M-=N,i.back+=N}if(A>>>=x,M-=x,i.back+=x,i.length=L,0===F){i.mode=26;break}if(32&F){i.back=-1,i.mode=w;break}if(64&F){e.msg="invalid literal/length code",i.mode=S;break}i.extra=15&F,i.mode=22;case 22:if(i.extra){for(W=i.extra;M>>=i.extra,M-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;z=i.distcode[A&(1<>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>N)],x=z>>>24,F=z>>>16&255,L=65535&z,!(N+x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=N,M-=N,i.back+=N}if(A>>>=x,M-=x,i.back+=x,64&F){e.msg="invalid distance code",i.mode=S;break}i.offset=L,i.extra=15&F,i.mode=24;case 24:if(i.extra){for(W=i.extra;M>>=i.extra,M-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=S;break}i.mode=25;case 25:if(0===C)break e;if(V=E-C,i.offset>V){if(V=i.offset-V,V>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=S;break}V>i.wnext?(V-=i.wnext,D=i.wsize-V):D=i.wnext-V,V>i.length&&(V=i.length),T=i.window}else T=p,D=d-i.offset,V=i.length;V>C&&(V=C),C-=V,i.length-=V;do{p[d++]=T[D++]}while(--V);0===i.length&&(i.mode=21);break;case 26:if(0===C)break e;p[d++]=i.length,C--,i.mode=21;break;case 27:if(i.wrap){for(;M<32;){if(0===I)break e;I--,A|=r[o++]<{if(!e||!e.state)return f;let t=e.state;return t.window&&(t.window=null),e.state=null,g},N=(e,t)=>{if(!e||!e.state)return f;const a=e.state;return 0==(2&a.wrap)?f:(a.head=t,t.done=!1,g)},O=(e,a)=>{const n=a.length;let s,i,r;return e&&e.state?(s=e.state,0!==s.wrap&&11!==s.mode?f:11===s.mode&&(i=1,i=t(i,a,n,0),i!==s.check)?_:(r=B(e,a,n,n),r?(s.mode=31,v):(s.havedict=1,g))):f};const q=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);let G=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){G=!1}const K=new Uint8Array(256);for(let e=0;e<256;e++)K[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;K[254]=K[254]=1;var z=(e,t)=>{let a,n;const s=t||e.length,i=new Array(2*s);for(n=0,a=0;a4)i[n++]=65533,a+=r-1;else{for(t&=2===r?31:3===r?15:7;r>1&&a1?i[n++]=65533:t<65536?i[n++]=t:(t-=65536,i[n++]=55296|t>>10&1023,i[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&G)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let a="";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let a=t-1;for(;a>=0&&128==(192&e[a]);)a--;return a<0||0===a?t:a+K[e[a]]>t?a:t},j={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},W=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},J=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Z=Object.prototype.toString,{Z_NO_FLUSH:Q,Z_FINISH:X,Z_OK:Y,Z_STREAM_END:$,Z_NEED_DICT:ee,Z_STREAM_ERROR:te,Z_DATA_ERROR:ae,Z_MEM_ERROR:ne}=d;function se(e){this.options=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const t in a)q(a,t)&&(e[t]=a[t])}}return e}({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new W,this.strm.avail_out=0;let a=x(this.strm,t.windowBits);if(a!==Y)throw new Error(j[a]);if(this.header=new J,N(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=(e=>{let t,a,n,s,i,r=e.length,p=0;for(s=0;s>>6,t[i++]=128|63&a):a<65536?(t[i++]=224|a>>>12,t[i++]=128|a>>>6&63,t[i++]=128|63&a):(t[i++]=240|a>>>18,t[i++]=128|a>>>12&63,t[i++]=128|a>>>6&63,t[i++]=128|63&a);return t})(t.dictionary):"[object ArrayBuffer]"===Z.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(a=O(this.strm,t.dictionary),a!==Y)))throw new Error(j[a])}function ie(e,t){const a=new se(t);if(a.push(e),a.err)throw a.msg||j[a.err];return a.result}se.prototype.push=function(e,t){const a=this.strm,n=this.options.chunkSize,s=this.options.dictionary;let i,r,p;if(this.ended)return!1;for(r=t===~~t?t:!0===t?X:Q,"[object ArrayBuffer]"===Z.call(e)?a.input=new Uint8Array(e):a.input=e,a.next_in=0,a.avail_in=a.input.length;;){for(0===a.avail_out&&(a.output=new Uint8Array(n),a.next_out=0,a.avail_out=n),i=F(a,r),i===ee&&s&&(i=O(a,s),i===Y?i=F(a,r):i===ae&&(i=ee));a.avail_in>0&&i===$&&a.state.wrap>0&&0!==e[a.next_in];)T(a),i=F(a,r);switch(i){case te:case ae:case ee:case ne:return this.onEnd(i),this.ended=!0,!1}if(p=a.avail_out,a.next_out&&(0===a.avail_out||i===$))if("string"===this.options.to){let e=H(a.output,a.next_out),t=a.next_out-e,s=z(a.output,e);a.next_out=t,a.avail_out=n-t,t&&a.output.set(a.output.subarray(e,e+t),0),this.onData(s)}else this.onData(a.output.length===a.next_out?a.output:a.output.subarray(0,a.next_out));if(i!==Y||0!==p){if(i===$)return i=L(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===a.avail_in)break}}return!0},se.prototype.onData=function(e){this.chunks.push(e)},se.prototype.onEnd=function(e){e===Y&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=(e=>{let t=0;for(let a=0,n=e.length;ae+(t.byteLength||t.length),0),a=new Uint8Array(t);let n=0;return e.forEach(e=>{a.set(e instanceof ArrayBuffer?new Uint8Array(e):e,n),n+=e.byteLength||e.length}),a}function m(e){const t=new Uint8Array(e.byteLength);for(let a=0,n=4*e.length;a>>2]>>>24-a%4*8&255;return t}function d(e){const t=p(e),a=[];for(let e=0,n=t.length;e>>2]|=t[e]<<24-e%4*8;return new Uint32Array(a)}a.r(t),a.d(t,"isWebpSupported",(function(){return ka})),Object.defineProperty(Uint8Array.prototype,"hex",{get:function(){return n(this)},set:function(e){this.set(s(e))},enumerable:!0,configurable:!0}),Uint8Array.prototype.randomize=function(){if(!crypto||!("getRandomValues"in crypto))throw new Error("NO_SECURE_RANDOM");return crypto.getRandomValues(this),this},Uint8Array.prototype.concat=function(...e){return o(this,...e)},Uint8Array.prototype.toJSON=function(){return[...this]},Array.prototype.findAndSplice=function(e){let t=this.findIndex(e);return-1!==t?this.splice(t,1)[0]:void 0},String.prototype.toHHMMSS=function(e=!1){const t=parseInt(this+"",10),a=Math.floor(t/3600);let n=Math.floor((t-3600*a)/60),s=t-3600*a-60*n;return a&&(e=!0),n<10&&(n=e?"0"+n:n),s<10&&(s="0"+s),(a?a+":":"")+n+":"+s},Promise.prototype.finally=Promise.prototype.finally||function(e){const t=t=>Promise.resolve(e()).then(t);return this.then(e=>t(()=>e),e=>t(()=>Promise.reject(e)))};var y={test:location.search.indexOf("test=1")>0,debug:location.search.indexOf("debug=1")>0,http:!1,ssl:!0,multipleConnections:!0,asServiceWorker:!1};const c=y.debug,l="undefined"!=typeof window?window:self;var g=c;const h="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,u="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,f=h||u,_=(e,...t)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then(a=>{a.length&&a.slice(e?0:-1).forEach(e=>{e.postMessage(...t)})})},v=(...e)=>{self.postMessage(...e)},b=()=>{},P=u?_.bind(null,!1):h?v:b,w=u?_.bind(null,!0):h?v:b;class S{constructor(){this.prefix="",this.cache={},this.useStorage=!0,y.test&&(this.prefix="t_")}get(e,t=!0){if(this.cache.hasOwnProperty(e)&&t)return this.cache[e];if(this.useStorage){let t;try{t=localStorage.getItem(this.prefix+e)}catch(e){this.useStorage=!1}if(null!==t)try{t=JSON.parse(t)}catch(e){}else t=void 0;return t}}set(e,t=!1){for(const a in e)if(e.hasOwnProperty(a)){const n=e[a];if(this.cache[a]=n,this.useStorage&&!t)try{const e=JSON.stringify(n);localStorage.setItem(this.prefix+a,e)}catch(e){this.useStorage=!1}}}delete(e,t=!1){e=""+e,t||delete this.cache[e];try{localStorage.removeItem(this.prefix+e)}catch(e){}}clear(){const e=["dc","server_time_offset","xt_instance","user_auth","state_id"];for(let t=1;t<=5;++t)e.push(`dc${t}_server_salt`),e.push(`dc${t}_auth_key`);for(let t of e)this.delete(t,!0)}toggleStorage(e){if(this.useStorage=e,e)return this.set(this.cache);this.clear()}}class k{constructor(){this.taskId=0,this.tasks={},k.STORAGES.push(this),f||(this.storage=new S)}finishTask(e,t){this.tasks.hasOwnProperty(e)&&(this.tasks[e](t),delete this.tasks[e])}proxy(e,...t){return new Promise((a,n)=>{if(f){const n=this.taskId++;this.tasks[n]=a;P({type:"localStorageProxy",id:n,payload:{type:e,args:t}})}else{t=Array.prototype.slice.call(t);a(this.storage[e].apply(this.storage,t))}})}get(e,t){return this.proxy("get",e,t)}set(e,t){return this.proxy("set",e,t)}delete(e,t){return this.proxy("delete",e,t)}clear(){return this.proxy("clear")}toggleStorage(e){return this.proxy("toggleStorage",e)}}k.STORAGES=[];const I=new k;l.appStorage=I;var C,A=I,M=0,R=0,E="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-";for(M=0;1<1<>=1))-1)+1;var V,D,U=pe(1,1,1),B=(pe(0,1,1),new Array(0)),T=B,x=B,F=B,L=B,N=B,O=B,q=B,G=B,K=B,z=B,H=B,j=B,W=B;function J(e){var t,a,n;for(t=e.length-1;0==e[t]&&t>0;t--);for(a=0,n=e[t];n;n>>=1,a++);return a+=M*t}function Z(e,t){var a=pe(0,(e.length>t?e.length:t)*M,0);return ue(a,e),a}function Q(e,t){var a=he(e);return Re(a,t),De(a,1)}function X(e,t){var a=Z(e,e.length+t.length);return function(e,t){var a;T.length!=2*e.length&&(T=new Array(2*e.length));for(fe(T,0),a=0;at.length?e.length+1:t.length+1);return Ae(a,t),De(a,1)}function ee(e,t){var a=Z(e,e.length>t.length?e.length+1:t.length+1);return Me(a,t),De(a,1)}function te(e,t,a,n,s){var i=0,r=Math.max(e.length,t.length);for(K.length!=r&&(K=new Array(r),z=new Array(r),H=new Array(r),j=new Array(r),W=new Array(r));!(1&e[0]||1&t[0]);)be(e),be(t),i++;for(ue(K,e),ue(a,t),fe(z,1),fe(H,0),fe(j,0),fe(W,1);;){for(;!(1&K[0]);)be(K),1&z[0]||1&H[0]?(Me(z,t),be(z),Ae(H,e),be(H)):(be(z),be(H));for(;!(1&a[0]);)be(a),1&j[0]||1&W[0]?(Me(j,t),be(j),Ae(W,e),be(W)):(be(j),be(W));if(se(a,K)?(Ae(a,K),Ae(j,z),Ae(W,H)):(Ae(K,a),Ae(z,j),Ae(H,W)),me(K,0)){for(;ae(j);)Me(j,t),Ae(W,e);return we(W,-1),ue(n,j),ue(s,W),void Pe(a,i)}}}function ae(e){return e[e.length-1]>>M-1&1}function ne(e,t,a){var n,s=e.length,i=t.length;for(V=s+a=0;n++)if(e[n]>0)return 1;for(n=s-1+a;n0)return 0;for(n=V-1;n>=a;n--){if(e[n-a]>t[n])return 1;if(e[n-a]=0;a--){if(e[a]>t[a])return 1;if(e[a]>=1;for(Pe(t,d=M-d),Pe(n,d),s=n.length;0===n[s-1]&&s>i;s--);for(fe(a,0);!ne(t,n,s-i);)Ce(n,t,s-i),a[s-i]++;for(r=s-1;r>=i;r--){for(n[r]==t[i-1]?a[r-i]=R:a[r-i]=Math.floor((n[r]*C+n[r-1])/t[i-1]);m=(o=(i>1?t[i-2]:0)*a[r-i])>>M,o&=R,m=(p=m+a[r-i]*t[i-1])>>M,p&=R,m==n[r]?p==n[r-1]?o>(r>1?n[r-2]:0):p>n[r-1]:m>n[r];)a[r-i]--;ke(n,t,-a[r-i],r-i),ae(n)&&(Ie(n,t,r-i),a[r-i]--)}ve(t,d),ve(n,d)}function re(e,t){var a,n=0;for(a=e.length-1;a>=0;a--)n=(n*C+e[a])%t;return n}function pe(e,t,a){var n;n=a>(n=Math.ceil(t/M)+1)?a:n;var s=new Array(n);return fe(s,e),s}function oe(e,t,a){var n,s,i,r,p,o=e.length;if(-1===t){for(i=new Array(0);;){for(r=new Array(i.length+1),s=0;s=36&&(n-=26),!(n>=t||n<0));s++)we(i,t),_e(i,n);for(o=i.length;o>0&&!i[o-1];o--);for(o=a>o+1?a:o+1,r=new Array(o),p=ot.length){for(;a0;a--)s+=e[a]+",";s+=e[0]}else for(;!ye(O);)n=Se(O,t),s=E.substring(n,n+1)+s;return 0===s.length&&(s="0"),s}function le(e,t=!0){O.length!==e.length?O=he(e):ue(O,e);const a=[];for(;!ye(O);)B=Se(O,256),a.push(B);return t&&a.reverse(),a}function ge(e,t){return se(e,t)?1:de(e,t)?0:-1}function he(e){return ue(D=Array(e.length),e),D}function ue(e,t){var a,n=e.length>=M}function _e(e,t){var a,n,s,i;for(e[0]+=t,n=e.length,s=0,a=0;a>M))*C),e[a]=s&R,!(s=(s>>M)-i))return}function ve(e,t){var a,n=Math.floor(t/M);if(n){for(a=0;a>t);e[a]>>=t}function be(e){var t;for(t=0;t>1);e[t]=e[t]>>1|e[t]&C>>1}function Pe(e,t){var a,n=Math.floor(t/M);if(n){for(a=e.length;a>=n;a--)e[a]=e[a-n];for(;a>=0;a--)e[a]=0;t%=M}if(t){for(a=e.length-1;a>0;a--)e[a]=R&(e[a]<>M-t);e[a]=R&e[a]<>M))*C),e[a]=s&R,s=(s>>M)-i}function Se(e,t){var a,n,s=0;for(a=e.length-1;a>=0;a--)n=s*C+e[a],e[a]=Math.floor(n/t),s=n%t;return s}function ke(e,t,a,n){var s,i,r,p;for(r=e.length>=M;for(s=r;i&&s>=M}function Ie(e,t,a){var n,s,i,r;for(i=e.length>=M;for(n=i;s&&n>=M}function Ce(e,t,a){var n,s,i,r;for(i=e.length>=M;for(n=i;s&&n>=M}function Ae(e,t){var a,n,s;for(s=e.length>=M;for(a=s;n&&a>=M}function Me(e,t){var a,n,s;for(s=e.length>=M;for(a=s;n&&a>=M}function Re(e,t){L.length!==e.length?L=he(e):ue(L,e),N.length!==e.length&&(N=he(e)),ie(L,t,N,e)}function Ee(e,t,a){var n;for(x.length!=2*e.length&&(x=new Array(2*e.length)),fe(x,0),n=0;n0&&!e[i-1];i--);for(r=i>t.length?2*i:2*t.length,x.length!=r&&(x=new Array(r)),fe(x,0),a=0;a>=M,n=a+1;n>=M;x[a+i]=s}Re(x,t),ue(e,x)}function De(e,t){var a,n;for(a=e.length;a>0&&!e[a-1];a--);return ue(n=new Array(a+t),e),n}function Ue(e,t,a){var n,s,i,r;if(q.length!=a.length&&(q=he(a)),0!=(1&a[0])){for(fe(q,0),i=a.length;i>0&&!a[i-1];i--);for(r=C-function(e,t){for(var a=1,n=0;;){if(1===e)return a;if(0===e)return 0;if(n-=a*Math.floor(t/e),1===(t%=e))return n;if(0===t)return 0;a-=n*Math.floor(e/t),e%=t}}(re(a,C),C),q[i]=1,Ee(e,q,a),F.length!=e.length?F=he(e):ue(F,e),n=t.length-1;n>0&!t[n];n--);if(0!=t[n]){for(s=1<>=1);for(;;){if(!(s>>=1)){if(--n<0)return void Be(e,U,a,r);s=1<0&&0==a[d-1];d--);for(;y>0&&0==t[y-1];y--);for(m=G.length-1,s=0;s>M,o=e[s],i=1;i>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++;for(;i>=M,i++;for(;i>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++;for(;i>=M,i++;for(;i>=M,i++;G[i-1]=r&R}se(a,G)||Ae(G,a),ue(e,G)}function Te(e){return"object"==typeof e&&null!==e}function xe(e){return e>>>0}function Fe(e,t){e=xe(e),t=xe(t);const a=oe(e.toString(16),16,32);Pe(a,32),Me(a,oe(t.toString(16),16,32));return ce(a,10)}function Le(e,t=16,a,n=!1,s=!1){const i=e.byteLength||e.length,r=n?t-i:t-i%t;if(r>0&&r"}],type:"ResPQ"},{id:-1443537003,predicate:"p_q_inner_data_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"}],type:"P_Q_inner_data"},{id:1459478408,predicate:"p_q_inner_data_temp_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"},{name:"expires_in",type:"int"}],type:"P_Q_inner_data"},{id:-790100132,predicate:"server_DH_params_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_answer",type:"bytes"}],type:"Server_DH_Params"},{id:-1249309254,predicate:"server_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"g",type:"int"},{name:"dh_prime",type:"bytes"},{name:"g_a",type:"bytes"},{name:"server_time",type:"int"}],type:"Server_DH_inner_data"},{id:1715713620,predicate:"client_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"retry_id",type:"long"},{name:"g_b",type:"bytes"}],type:"Client_DH_Inner_Data"},{id:1003222836,predicate:"dh_gen_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash1",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1188831161,predicate:"dh_gen_retry",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash2",type:"int128"}],type:"Set_client_DH_params_answer"},{id:-1499615742,predicate:"dh_gen_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash3",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1973679973,predicate:"bind_auth_key_inner",params:[{name:"nonce",type:"long"},{name:"temp_auth_key_id",type:"long"},{name:"perm_auth_key_id",type:"long"},{name:"temp_session_id",type:"long"},{name:"expires_at",type:"int"}],type:"BindAuthKeyInner"},{id:-212046591,predicate:"rpc_result",params:[{name:"req_msg_id",type:"long"},{name:"result",type:"Object"}],type:"RpcResult"},{id:558156313,predicate:"rpc_error",params:[{name:"error_code",type:"int"},{name:"error_message",type:"string"}],type:"RpcError"},{id:1579864942,predicate:"rpc_answer_unknown",params:[],type:"RpcDropAnswer"},{id:-847714938,predicate:"rpc_answer_dropped_running",params:[],type:"RpcDropAnswer"},{id:-1539647305,predicate:"rpc_answer_dropped",params:[{name:"msg_id",type:"long"},{name:"seq_no",type:"int"},{name:"bytes",type:"int"}],type:"RpcDropAnswer"},{id:155834844,predicate:"future_salt",params:[{name:"valid_since",type:"int"},{name:"valid_until",type:"int"},{name:"salt",type:"long"}],type:"FutureSalt"},{id:-1370486635,predicate:"future_salts",params:[{name:"req_msg_id",type:"long"},{name:"now",type:"int"},{name:"salts",type:"vector"}],type:"FutureSalts"},{id:880243653,predicate:"pong",params:[{name:"msg_id",type:"long"},{name:"ping_id",type:"long"}],type:"Pong"},{id:-501201412,predicate:"destroy_session_ok",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:1658015945,predicate:"destroy_session_none",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1631450872,predicate:"new_session_created",params:[{name:"first_msg_id",type:"long"},{name:"unique_id",type:"long"},{name:"server_salt",type:"long"}],type:"NewSession"},{id:1945237724,predicate:"msg_container",params:[{name:"messages",type:"vector<%Message>"}],type:"MessageContainer"},{id:1538843921,predicate:"message",params:[{name:"msg_id",type:"long"},{name:"seqno",type:"int"},{name:"bytes",type:"int"},{name:"body",type:"Object"}],type:"Message"},{id:-530561358,predicate:"msg_copy",params:[{name:"orig_message",type:"Message"}],type:"MessageCopy"},{id:812830625,predicate:"gzip_packed",params:[{name:"packed_data",type:"bytes"}],type:"Object"},{id:1658238041,predicate:"msgs_ack",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsAck"},{id:-1477445615,predicate:"bad_msg_notification",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"}],type:"BadMsgNotification"},{id:-307542917,predicate:"bad_server_salt",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"},{name:"new_server_salt",type:"long"}],type:"BadMsgNotification"},{id:2105940488,predicate:"msg_resend_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgResendReq"},{id:-630588590,predicate:"msgs_state_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsStateReq"},{id:81704317,predicate:"msgs_state_info",params:[{name:"req_msg_id",type:"long"},{name:"info",type:"bytes"}],type:"MsgsStateInfo"},{id:-1933520591,predicate:"msgs_all_info",params:[{name:"msg_ids",type:"Vector"},{name:"info",type:"bytes"}],type:"MsgsAllInfo"},{id:661470918,predicate:"msg_detailed_info",params:[{name:"msg_id",type:"long"},{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-2137147681,predicate:"msg_new_detailed_info",params:[{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-161422892,predicate:"destroy_auth_key_ok",params:[],type:"DestroyAuthKeyRes"},{id:178201177,predicate:"destroy_auth_key_none",params:[],type:"DestroyAuthKeyRes"},{id:-368010477,predicate:"destroy_auth_key_fail",params:[],type:"DestroyAuthKeyRes"}],methods:[{id:-1099002127,method:"req_pq_multi",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:-686627650,method:"req_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"public_key_fingerprint",type:"long"},{name:"encrypted_data",type:"bytes"}],type:"Server_DH_Params"},{id:-184262881,method:"set_client_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_data",type:"bytes"}],type:"Set_client_DH_params_answer"},{id:1491380032,method:"rpc_drop_answer",params:[{name:"req_msg_id",type:"long"}],type:"RpcDropAnswer"},{id:-1188971260,method:"get_future_salts",params:[{name:"num",type:"int"}],type:"FutureSalts"},{id:2059302892,method:"ping",params:[{name:"ping_id",type:"long"}],type:"Pong"},{id:-213746804,method:"ping_delay_disconnect",params:[{name:"ping_id",type:"long"},{name:"disconnect_delay",type:"int"}],type:"Pong"},{id:-414113498,method:"destroy_session",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1835453025,method:"http_wait",params:[{name:"max_delay",type:"int"},{name:"wait_after",type:"int"},{name:"max_wait",type:"int"}],type:"HttpWait"},{id:-784117408,method:"destroy_auth_key",params:[],type:"DestroyAuthKeyRes"}]},API:{constructors:[{id:-1132882121,predicate:"boolFalse",params:[],type:"Bool"},{id:-1720552011,predicate:"boolTrue",params:[],type:"Bool"},{id:1072550713,predicate:"true",params:[],type:"True"},{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:-994444869,predicate:"error",params:[{name:"code",type:"int"},{name:"text",type:"string"}],type:"Error"},{id:1450380236,predicate:"null",params:[],type:"Null"},{id:2134579434,predicate:"inputPeerEmpty",params:[],type:"InputPeer"},{id:2107670217,predicate:"inputPeerSelf",params:[],type:"InputPeer"},{id:396093539,predicate:"inputPeerChat",params:[{name:"chat_id",type:"int"}],type:"InputPeer"},{id:-1182234929,predicate:"inputUserEmpty",params:[],type:"InputUser"},{id:-138301121,predicate:"inputUserSelf",params:[],type:"InputUser"},{id:-208488460,predicate:"inputPhoneContact",params:[{name:"client_id",type:"long"},{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"InputContact"},{id:-181407105,predicate:"inputFile",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"},{name:"md5_checksum",type:"string"}],type:"InputFile"},{id:-1771768449,predicate:"inputMediaEmpty",params:[],type:"InputMedia"},{id:505969924,predicate:"inputMediaUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:-1279654347,predicate:"inputMediaPhoto",params:[{name:"flags",type:"#"},{name:"id",type:"InputPhoto"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-104578748,predicate:"inputMediaGeoPoint",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"InputMedia"},{id:-122978821,predicate:"inputMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"}],type:"InputMedia"},{id:480546647,predicate:"inputChatPhotoEmpty",params:[],type:"InputChatPhoto"},{id:-968723890,predicate:"inputChatUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"}],type:"InputChatPhoto"},{id:-1991004873,predicate:"inputChatPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputChatPhoto"},{id:-457104426,predicate:"inputGeoPointEmpty",params:[],type:"InputGeoPoint"},{id:1210199983,predicate:"inputGeoPoint",params:[{name:"flags",type:"#"},{name:"lat",type:"double"},{name:"long",type:"double"},{name:"accuracy_radius",type:"flags.0?int"}],type:"InputGeoPoint"},{id:483901197,predicate:"inputPhotoEmpty",params:[],type:"InputPhoto"},{id:1001634122,predicate:"inputPhoto",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputPhoto"},{id:-539317279,predicate:"inputFileLocation",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputFileLocation"},{id:-1649296275,predicate:"peerUser",params:[{name:"user_id",type:"int"}],type:"Peer"},{id:-1160714821,predicate:"peerChat",params:[{name:"chat_id",type:"int"}],type:"Peer"},{id:-1432995067,predicate:"storage.fileUnknown",params:[],type:"storage.FileType"},{id:1086091090,predicate:"storage.filePartial",params:[],type:"storage.FileType"},{id:8322574,predicate:"storage.fileJpeg",params:[],type:"storage.FileType"},{id:-891180321,predicate:"storage.fileGif",params:[],type:"storage.FileType"},{id:172975040,predicate:"storage.filePng",params:[],type:"storage.FileType"},{id:-1373745011,predicate:"storage.filePdf",params:[],type:"storage.FileType"},{id:1384777335,predicate:"storage.fileMp3",params:[],type:"storage.FileType"},{id:1258941372,predicate:"storage.fileMov",params:[],type:"storage.FileType"},{id:-1278304028,predicate:"storage.fileMp4",params:[],type:"storage.FileType"},{id:276907596,predicate:"storage.fileWebp",params:[],type:"storage.FileType"},{id:537022650,predicate:"userEmpty",params:[{name:"id",type:"int"}],type:"User"},{id:1326562017,predicate:"userProfilePhotoEmpty",params:[],type:"UserProfilePhoto"},{id:-2100168954,predicate:"userProfilePhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"UserProfilePhoto"},{id:164646985,predicate:"userStatusEmpty",params:[],type:"UserStatus"},{id:-306628279,predicate:"userStatusOnline",params:[{name:"expires",type:"int"}],type:"UserStatus"},{id:9203775,predicate:"userStatusOffline",params:[{name:"was_online",type:"int"}],type:"UserStatus"},{id:-1683826688,predicate:"chatEmpty",params:[{name:"id",type:"int"}],type:"Chat"},{id:1004149726,predicate:"chat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"kicked",type:"flags.1?true"},{name:"left",type:"flags.2?true"},{name:"deactivated",type:"flags.5?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"ChatPhoto"},{name:"participants_count",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"migrated_to",type:"flags.6?InputChannel"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"}],type:"Chat"},{id:120753115,predicate:"chatForbidden",params:[{name:"id",type:"int"},{name:"title",type:"string"}],type:"Chat"},{id:-1977734781,predicate:"chatFull",params:[{name:"flags",type:"#"},{name:"can_set_username",type:"flags.7?true"},{name:"has_scheduled",type:"flags.8?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants",type:"ChatParticipants"},{name:"chat_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.13?ExportedChatInvite"},{name:"bot_info",type:"flags.3?Vector"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"folder_id",type:"flags.11?int"},{name:"call",type:"flags.12?InputGroupCall"},{name:"ttl_period",type:"flags.14?int"},{name:"groupcall_default_join_as",type:"flags.15?Peer"}],type:"ChatFull"},{id:-925415106,predicate:"chatParticipant",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-57668565,predicate:"chatParticipantsForbidden",params:[{name:"flags",type:"#"},{name:"chat_id",type:"int"},{name:"self_participant",type:"flags.0?ChatParticipant"}],type:"ChatParticipants"},{id:1061556205,predicate:"chatParticipants",params:[{name:"chat_id",type:"int"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"ChatParticipants"},{id:935395612,predicate:"chatPhotoEmpty",params:[],type:"ChatPhoto"},{id:476978193,predicate:"chatPhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"ChatPhoto"},{id:-1868117372,predicate:"messageEmpty",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"peer_id",type:"flags.0?Peer"}],type:"Message"},{id:-1125940270,predicate:"message",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"from_scheduled",type:"flags.18?true"},{name:"legacy",type:"flags.19?true"},{name:"edit_hide",type:"flags.21?true"},{name:"pinned",type:"flags.24?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"message",type:"string"},{name:"media",type:"flags.9?MessageMedia"},{name:"reply_markup",type:"flags.6?ReplyMarkup"},{name:"entities",type:"flags.7?Vector"},{name:"views",type:"flags.10?int"},{name:"forwards",type:"flags.10?int"},{name:"replies",type:"flags.23?MessageReplies"},{name:"edit_date",type:"flags.15?int"},{name:"post_author",type:"flags.16?string"},{name:"grouped_id",type:"flags.17?long"},{name:"restriction_reason",type:"flags.22?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:721967202,predicate:"messageService",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"legacy",type:"flags.19?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"action",type:"MessageAction"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:1038967584,predicate:"messageMediaEmpty",params:[],type:"MessageMedia"},{id:1766936791,predicate:"messageMediaPhoto",params:[{name:"flags",type:"#"},{name:"photo",type:"flags.0?Photo"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1457575028,predicate:"messageMediaGeo",params:[{name:"geo",type:"GeoPoint"}],type:"MessageMedia"},{id:-873313984,predicate:"messageMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"user_id",type:"int"}],type:"MessageMedia"},{id:-1618676578,predicate:"messageMediaUnsupported",params:[],type:"MessageMedia"},{id:-1230047312,predicate:"messageActionEmpty",params:[],type:"MessageAction"},{id:-1503425638,predicate:"messageActionChatCreate",params:[{name:"title",type:"string"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1247687078,predicate:"messageActionChatEditTitle",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:2144015272,predicate:"messageActionChatEditPhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-1780220945,predicate:"messageActionChatDeletePhoto",params:[],type:"MessageAction"},{id:1217033015,predicate:"messageActionChatAddUser",params:[{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1297179892,predicate:"messageActionChatDeleteUser",params:[{name:"user_id",type:"int"}],type:"MessageAction"},{id:739712882,predicate:"dialog",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"unread_mark",type:"flags.3?true"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"pts",type:"flags.0?int"},{name:"draft",type:"flags.1?DraftMessage"},{name:"folder_id",type:"flags.4?int"}],type:"Dialog"},{id:590459437,predicate:"photoEmpty",params:[{name:"id",type:"long"}],type:"Photo"},{id:-82216347,predicate:"photo",params:[{name:"flags",type:"#"},{name:"has_stickers",type:"flags.0?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"sizes",type:"Vector"},{name:"video_sizes",type:"flags.1?Vector"},{name:"dc_id",type:"int"}],type:"Photo"},{id:236446268,predicate:"photoSizeEmpty",params:[{name:"type",type:"string"}],type:"PhotoSize"},{id:1976012384,predicate:"photoSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"}],type:"PhotoSize"},{id:35527382,predicate:"photoCachedSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:286776671,predicate:"geoPointEmpty",params:[],type:"GeoPoint"},{id:-1297942941,predicate:"geoPoint",params:[{name:"flags",type:"#"},{name:"long",type:"double"},{name:"lat",type:"double"},{name:"access_hash",type:"long"},{name:"accuracy_radius",type:"flags.0?int"}],type:"GeoPoint"},{id:1577067778,predicate:"auth.sentCode",params:[{name:"flags",type:"#"},{name:"type",type:"auth.SentCodeType"},{name:"phone_code_hash",type:"string"},{name:"next_type",type:"flags.1?auth.CodeType"},{name:"timeout",type:"flags.2?int"}],type:"auth.SentCode"},{id:-855308010,predicate:"auth.authorization",params:[{name:"flags",type:"#"},{name:"tmp_sessions",type:"flags.0?int"},{name:"user",type:"User"}],type:"auth.Authorization"},{id:-543777747,predicate:"auth.exportedAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.ExportedAuthorization"},{id:-1195615476,predicate:"inputNotifyPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputNotifyPeer"},{id:423314455,predicate:"inputNotifyUsers",params:[],type:"InputNotifyPeer"},{id:1251338318,predicate:"inputNotifyChats",params:[],type:"InputNotifyPeer"},{id:-1673717362,predicate:"inputPeerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"InputPeerNotifySettings"},{id:-1353671392,predicate:"peerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"PeerNotifySettings"},{id:1933519201,predicate:"peerSettings",params:[{name:"flags",type:"#"},{name:"report_spam",type:"flags.0?true"},{name:"add_contact",type:"flags.1?true"},{name:"block_contact",type:"flags.2?true"},{name:"share_contact",type:"flags.3?true"},{name:"need_contacts_exception",type:"flags.4?true"},{name:"report_geo",type:"flags.5?true"},{name:"autoarchived",type:"flags.7?true"},{name:"invite_members",type:"flags.8?true"},{name:"geo_distance",type:"flags.6?int"}],type:"PeerSettings"},{id:-1539849235,predicate:"wallPaper",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"pattern",type:"flags.3?true"},{name:"dark",type:"flags.4?true"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"document",type:"Document"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:1490799288,predicate:"inputReportReasonSpam",params:[],type:"ReportReason"},{id:505595789,predicate:"inputReportReasonViolence",params:[],type:"ReportReason"},{id:777640226,predicate:"inputReportReasonPornography",params:[],type:"ReportReason"},{id:-1376497949,predicate:"inputReportReasonChildAbuse",params:[],type:"ReportReason"},{id:-1041980751,predicate:"inputReportReasonOther",params:[],type:"ReportReason"},{id:328899191,predicate:"userFull",params:[{name:"flags",type:"#"},{name:"blocked",type:"flags.0?true"},{name:"phone_calls_available",type:"flags.4?true"},{name:"phone_calls_private",type:"flags.5?true"},{name:"can_pin_message",type:"flags.7?true"},{name:"has_scheduled",type:"flags.12?true"},{name:"video_calls_available",type:"flags.13?true"},{name:"user",type:"User"},{name:"about",type:"flags.1?string"},{name:"settings",type:"PeerSettings"},{name:"profile_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"bot_info",type:"flags.3?BotInfo"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"common_chats_count",type:"int"},{name:"folder_id",type:"flags.11?int"},{name:"ttl_period",type:"flags.14?int"}],type:"UserFull"},{id:-116274796,predicate:"contact",params:[{name:"user_id",type:"int"},{name:"mutual",type:"Bool"}],type:"Contact"},{id:-805141448,predicate:"importedContact",params:[{name:"user_id",type:"int"},{name:"client_id",type:"long"}],type:"ImportedContact"},{id:-748155807,predicate:"contactStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"ContactStatus"},{id:-1219778094,predicate:"contacts.contactsNotModified",params:[],type:"contacts.Contacts"},{id:-353862078,predicate:"contacts.contacts",params:[{name:"contacts",type:"Vector"},{name:"saved_count",type:"int"},{name:"users",type:"Vector"}],type:"contacts.Contacts"},{id:2010127419,predicate:"contacts.importedContacts",params:[{name:"imported",type:"Vector"},{name:"popular_invites",type:"Vector"},{name:"retry_contacts",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ImportedContacts"},{id:182326673,predicate:"contacts.blocked",params:[{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:-513392236,predicate:"contacts.blockedSlice",params:[{name:"count",type:"int"},{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:364538944,predicate:"messages.dialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:1910543603,predicate:"messages.dialogsSlice",params:[{name:"count",type:"int"},{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:-1938715001,predicate:"messages.messages",params:[{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:978610270,predicate:"messages.messagesSlice",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"count",type:"int"},{name:"next_rate",type:"flags.0?int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:1694474197,predicate:"messages.chats",params:[{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-438840932,predicate:"messages.chatFull",params:[{name:"full_chat",type:"ChatFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatFull"},{id:-1269012015,predicate:"messages.affectedHistory",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"}],type:"messages.AffectedHistory"},{id:1474492012,predicate:"inputMessagesFilterEmpty",params:[],type:"MessagesFilter"},{id:-1777752804,predicate:"inputMessagesFilterPhotos",params:[],type:"MessagesFilter"},{id:-1614803355,predicate:"inputMessagesFilterVideo",params:[],type:"MessagesFilter"},{id:1458172132,predicate:"inputMessagesFilterPhotoVideo",params:[],type:"MessagesFilter"},{id:-1629621880,predicate:"inputMessagesFilterDocument",params:[],type:"MessagesFilter"},{id:2129714567,predicate:"inputMessagesFilterUrl",params:[],type:"MessagesFilter"},{id:-3644025,predicate:"inputMessagesFilterGif",params:[],type:"MessagesFilter"},{id:522914557,predicate:"updateNewMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1318109142,predicate:"updateMessageID",params:[{name:"id",type:"int"},{name:"random_id",type:"long"}],type:"Update"},{id:-1576161051,predicate:"updateDeleteMessages",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1548249383,predicate:"updateUserTyping",params:[{name:"user_id",type:"int"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-2033525908,predicate:"updateChatUserTyping",params:[{name:"chat_id",type:"int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:125178264,predicate:"updateChatParticipants",params:[{name:"participants",type:"ChatParticipants"}],type:"Update"},{id:469489699,predicate:"updateUserStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"Update"},{id:-1489818765,predicate:"updateUserName",params:[{name:"user_id",type:"int"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"username",type:"string"}],type:"Update"},{id:-1791935732,predicate:"updateUserPhoto",params:[{name:"user_id",type:"int"},{name:"date",type:"int"},{name:"photo",type:"UserProfilePhoto"},{name:"previous",type:"Bool"}],type:"Update"},{id:-1519637954,predicate:"updates.state",params:[{name:"pts",type:"int"},{name:"qts",type:"int"},{name:"date",type:"int"},{name:"seq",type:"int"},{name:"unread_count",type:"int"}],type:"updates.State"},{id:1567990072,predicate:"updates.differenceEmpty",params:[{name:"date",type:"int"},{name:"seq",type:"int"}],type:"updates.Difference"},{id:16030880,predicate:"updates.difference",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"updates.Difference"},{id:-1459938943,predicate:"updates.differenceSlice",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"intermediate_state",type:"updates.State"}],type:"updates.Difference"},{id:-484987010,predicate:"updatesTooLong",params:[],type:"Updates"},{id:-84936653,predicate:"updateShortMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"user_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:290961496,predicate:"updateShortChatMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"from_id",type:"int"},{name:"chat_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:2027216577,predicate:"updateShort",params:[{name:"update",type:"Update"},{name:"date",type:"int"}],type:"Updates"},{id:1918567619,predicate:"updatesCombined",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq_start",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:1957577280,predicate:"updates",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:-1916114267,predicate:"photos.photos",params:[{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:352657236,predicate:"photos.photosSlice",params:[{name:"count",type:"int"},{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:539045032,predicate:"photos.photo",params:[{name:"photo",type:"Photo"},{name:"users",type:"Vector"}],type:"photos.Photo"},{id:157948117,predicate:"upload.file",params:[{name:"type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.File"},{id:414687501,predicate:"dcOption",params:[{name:"flags",type:"#"},{name:"ipv6",type:"flags.0?true"},{name:"media_only",type:"flags.1?true"},{name:"tcpo_only",type:"flags.2?true"},{name:"cdn",type:"flags.3?true"},{name:"static",type:"flags.4?true"},{name:"id",type:"int"},{name:"ip_address",type:"string"},{name:"port",type:"int"},{name:"secret",type:"flags.10?bytes"}],type:"DcOption"},{id:856375399,predicate:"config",params:[{name:"flags",type:"#"},{name:"phonecalls_enabled",type:"flags.1?true"},{name:"default_p2p_contacts",type:"flags.3?true"},{name:"preload_featured_stickers",type:"flags.4?true"},{name:"ignore_phone_entities",type:"flags.5?true"},{name:"revoke_pm_inbox",type:"flags.6?true"},{name:"blocked_mode",type:"flags.8?true"},{name:"pfs_enabled",type:"flags.13?true"},{name:"date",type:"int"},{name:"expires",type:"int"},{name:"test_mode",type:"Bool"},{name:"this_dc",type:"int"},{name:"dc_options",type:"Vector"},{name:"dc_txt_domain_name",type:"string"},{name:"chat_size_max",type:"int"},{name:"megagroup_size_max",type:"int"},{name:"forwarded_count_max",type:"int"},{name:"online_update_period_ms",type:"int"},{name:"offline_blur_timeout_ms",type:"int"},{name:"offline_idle_timeout_ms",type:"int"},{name:"online_cloud_timeout_ms",type:"int"},{name:"notify_cloud_delay_ms",type:"int"},{name:"notify_default_delay_ms",type:"int"},{name:"push_chat_period_ms",type:"int"},{name:"push_chat_limit",type:"int"},{name:"saved_gifs_limit",type:"int"},{name:"edit_time_limit",type:"int"},{name:"revoke_time_limit",type:"int"},{name:"revoke_pm_time_limit",type:"int"},{name:"rating_e_decay",type:"int"},{name:"stickers_recent_limit",type:"int"},{name:"stickers_faved_limit",type:"int"},{name:"channels_read_media_period",type:"int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"pinned_dialogs_count_max",type:"int"},{name:"pinned_infolder_count_max",type:"int"},{name:"call_receive_timeout_ms",type:"int"},{name:"call_ring_timeout_ms",type:"int"},{name:"call_connect_timeout_ms",type:"int"},{name:"call_packet_timeout_ms",type:"int"},{name:"me_url_prefix",type:"string"},{name:"autoupdate_url_prefix",type:"flags.7?string"},{name:"gif_search_username",type:"flags.9?string"},{name:"venue_search_username",type:"flags.10?string"},{name:"img_search_username",type:"flags.11?string"},{name:"static_maps_provider",type:"flags.12?string"},{name:"caption_length_max",type:"int"},{name:"message_length_max",type:"int"},{name:"webfile_dc_id",type:"int"},{name:"suggested_lang_code",type:"flags.2?string"},{name:"lang_pack_version",type:"flags.2?int"},{name:"base_lang_pack_version",type:"flags.2?int"}],type:"Config"},{id:-1910892683,predicate:"nearestDc",params:[{name:"country",type:"string"},{name:"this_dc",type:"int"},{name:"nearest_dc",type:"int"}],type:"NearestDc"},{id:-860107216,predicate:"help.appUpdate",params:[{name:"flags",type:"#"},{name:"can_not_skip",type:"flags.0?true"},{name:"id",type:"int"},{name:"version",type:"string"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"document",type:"flags.1?Document"},{name:"url",type:"flags.2?string"},{name:"sticker",type:"flags.3?Document"}],type:"help.AppUpdate"},{id:-1000708810,predicate:"help.noAppUpdate",params:[],type:"help.AppUpdate"},{id:415997816,predicate:"help.inviteText",params:[{name:"message",type:"string"}],type:"help.InviteText"},{id:314359194,predicate:"updateNewEncryptedMessage",params:[{name:"message",type:"EncryptedMessage"},{name:"qts",type:"int"}],type:"Update"},{id:386986326,predicate:"updateEncryptedChatTyping",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-1264392051,predicate:"updateEncryption",params:[{name:"chat",type:"EncryptedChat"},{name:"date",type:"int"}],type:"Update"},{id:956179895,predicate:"updateEncryptedMessagesRead",params:[{name:"chat_id",type:"int"},{name:"max_date",type:"int"},{name:"date",type:"int"}],type:"Update"},{id:-1417756512,predicate:"encryptedChatEmpty",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:1006044124,predicate:"encryptedChatWaiting",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"}],type:"EncryptedChat"},{id:1651608194,predicate:"encryptedChatRequested",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:-94974410,predicate:"encryptedChat",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:505183301,predicate:"encryptedChatDiscarded",params:[{name:"flags",type:"#"},{name:"history_deleted",type:"flags.0?true"},{name:"id",type:"int"}],type:"EncryptedChat"},{id:-247351839,predicate:"inputEncryptedChat",params:[{name:"chat_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputEncryptedChat"},{id:-1038136962,predicate:"encryptedFileEmpty",params:[],type:"EncryptedFile"},{id:1248893260,predicate:"encryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"key_fingerprint",type:"int"}],type:"EncryptedFile"},{id:406307684,predicate:"inputEncryptedFileEmpty",params:[],type:"InputEncryptedFile"},{id:1690108678,predicate:"inputEncryptedFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1511503333,predicate:"inputEncryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputEncryptedFile"},{id:-182231723,predicate:"inputEncryptedFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:-317144808,predicate:"encryptedMessage",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"},{name:"file",type:"EncryptedFile"}],type:"EncryptedMessage"},{id:594758406,predicate:"encryptedMessageService",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"}],type:"EncryptedMessage"},{id:-1058912715,predicate:"messages.dhConfigNotModified",params:[{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:740433629,predicate:"messages.dhConfig",params:[{name:"g",type:"int"},{name:"p",type:"bytes"},{name:"version",type:"int"},{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:1443858741,predicate:"messages.sentEncryptedMessage",params:[{name:"date",type:"int"}],type:"messages.SentEncryptedMessage"},{id:-1802240206,predicate:"messages.sentEncryptedFile",params:[{name:"date",type:"int"},{name:"file",type:"EncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:-95482955,predicate:"inputFileBig",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"}],type:"InputFile"},{id:767652808,predicate:"inputEncryptedFileBigUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:-364179876,predicate:"updateChatParticipantAdd",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:1851755554,predicate:"updateChatParticipantDelete",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:-1906403213,predicate:"updateDcOptions",params:[{name:"dc_options",type:"Vector"}],type:"Update"},{id:1530447553,predicate:"inputMediaUploadedDocument",params:[{name:"flags",type:"#"},{name:"nosound_video",type:"flags.3?true"},{name:"force_file",type:"flags.4?true"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.2?InputFile"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:860303448,predicate:"inputMediaDocument",params:[{name:"flags",type:"#"},{name:"id",type:"InputDocument"},{name:"ttl_seconds",type:"flags.0?int"},{name:"query",type:"flags.1?string"}],type:"InputMedia"},{id:-1666158377,predicate:"messageMediaDocument",params:[{name:"flags",type:"#"},{name:"document",type:"flags.0?Document"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1928391342,predicate:"inputDocumentEmpty",params:[],type:"InputDocument"},{id:448771445,predicate:"inputDocument",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputDocument"},{id:-1160743548,predicate:"inputDocumentFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:922273905,predicate:"documentEmpty",params:[{name:"id",type:"long"}],type:"Document"},{id:512177195,predicate:"document",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"mime_type",type:"string"},{name:"size",type:"int"},{name:"thumbs",type:"flags.0?Vector"},{name:"video_thumbs",type:"flags.1?Vector"},{name:"dc_id",type:"int"},{name:"attributes",type:"Vector"}],type:"Document"},{id:398898678,predicate:"help.support",params:[{name:"phone_number",type:"string"},{name:"user",type:"User"}],type:"help.Support"},{id:-1613493288,predicate:"notifyPeer",params:[{name:"peer",type:"Peer"}],type:"NotifyPeer"},{id:-1261946036,predicate:"notifyUsers",params:[],type:"NotifyPeer"},{id:-1073230141,predicate:"notifyChats",params:[],type:"NotifyPeer"},{id:-1094555409,predicate:"updateNotifySettings",params:[{name:"peer",type:"NotifyPeer"},{name:"notify_settings",type:"PeerNotifySettings"}],type:"Update"},{id:381645902,predicate:"sendMessageTypingAction",params:[],type:"SendMessageAction"},{id:-44119819,predicate:"sendMessageCancelAction",params:[],type:"SendMessageAction"},{id:-1584933265,predicate:"sendMessageRecordVideoAction",params:[],type:"SendMessageAction"},{id:-378127636,predicate:"sendMessageUploadVideoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-718310409,predicate:"sendMessageRecordAudioAction",params:[],type:"SendMessageAction"},{id:-212740181,predicate:"sendMessageUploadAudioAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-774682074,predicate:"sendMessageUploadPhotoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-1441998364,predicate:"sendMessageUploadDocumentAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:393186209,predicate:"sendMessageGeoLocationAction",params:[],type:"SendMessageAction"},{id:1653390447,predicate:"sendMessageChooseContactAction",params:[],type:"SendMessageAction"},{id:-1290580579,predicate:"contacts.found",params:[{name:"my_results",type:"Vector"},{name:"results",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Found"},{id:-337352679,predicate:"updateServiceNotification",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"inbox_date",type:"flags.1?int"},{name:"type",type:"string"},{name:"message",type:"string"},{name:"media",type:"MessageMedia"},{name:"entities",type:"Vector"}],type:"Update"},{id:-496024847,predicate:"userStatusRecently",params:[],type:"UserStatus"},{id:129960444,predicate:"userStatusLastWeek",params:[],type:"UserStatus"},{id:2011940674,predicate:"userStatusLastMonth",params:[],type:"UserStatus"},{id:-298113238,predicate:"updatePrivacy",params:[{name:"key",type:"PrivacyKey"},{name:"rules",type:"Vector"}],type:"Update"},{id:1335282456,predicate:"inputPrivacyKeyStatusTimestamp",params:[],type:"InputPrivacyKey"},{id:-1137792208,predicate:"privacyKeyStatusTimestamp",params:[],type:"PrivacyKey"},{id:218751099,predicate:"inputPrivacyValueAllowContacts",params:[],type:"InputPrivacyRule"},{id:407582158,predicate:"inputPrivacyValueAllowAll",params:[],type:"InputPrivacyRule"},{id:320652927,predicate:"inputPrivacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:195371015,predicate:"inputPrivacyValueDisallowContacts",params:[],type:"InputPrivacyRule"},{id:-697604407,predicate:"inputPrivacyValueDisallowAll",params:[],type:"InputPrivacyRule"},{id:-1877932953,predicate:"inputPrivacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:-123988,predicate:"privacyValueAllowContacts",params:[],type:"PrivacyRule"},{id:1698855810,predicate:"privacyValueAllowAll",params:[],type:"PrivacyRule"},{id:1297858060,predicate:"privacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:-125240806,predicate:"privacyValueDisallowContacts",params:[],type:"PrivacyRule"},{id:-1955338397,predicate:"privacyValueDisallowAll",params:[],type:"PrivacyRule"},{id:209668535,predicate:"privacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:1352683077,predicate:"account.privacyRules",params:[{name:"rules",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.PrivacyRules"},{id:-1194283041,predicate:"accountDaysTTL",params:[{name:"days",type:"int"}],type:"AccountDaysTTL"},{id:314130811,predicate:"updateUserPhone",params:[{name:"user_id",type:"int"},{name:"phone",type:"string"}],type:"Update"},{id:1815593308,predicate:"documentAttributeImageSize",params:[{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:297109817,predicate:"documentAttributeAnimated",params:[],type:"DocumentAttribute"},{id:1662637586,predicate:"documentAttributeSticker",params:[{name:"flags",type:"#"},{name:"mask",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"DocumentAttribute"},{id:250621158,predicate:"documentAttributeVideo",params:[{name:"flags",type:"#"},{name:"round_message",type:"flags.0?true"},{name:"supports_streaming",type:"flags.1?true"},{name:"duration",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:-1739392570,predicate:"documentAttributeAudio",params:[{name:"flags",type:"#"},{name:"voice",type:"flags.10?true"},{name:"duration",type:"int"},{name:"title",type:"flags.0?string"},{name:"performer",type:"flags.1?string"},{name:"waveform",type:"flags.2?bytes"}],type:"DocumentAttribute"},{id:358154344,predicate:"documentAttributeFilename",params:[{name:"file_name",type:"string"}],type:"DocumentAttribute"},{id:-244016606,predicate:"messages.stickersNotModified",params:[],type:"messages.Stickers"},{id:-463889475,predicate:"messages.stickers",params:[{name:"hash",type:"int"},{name:"stickers",type:"Vector"}],type:"messages.Stickers"},{id:313694676,predicate:"stickerPack",params:[{name:"emoticon",type:"string"},{name:"documents",type:"Vector"}],type:"StickerPack"},{id:-395967805,predicate:"messages.allStickersNotModified",params:[],type:"messages.AllStickers"},{id:-302170017,predicate:"messages.allStickers",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.AllStickers"},{id:-1667805217,predicate:"updateReadHistoryInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:791617983,predicate:"updateReadHistoryOutbox",params:[{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2066640507,predicate:"messages.affectedMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"messages.AffectedMessages"},{id:2139689491,predicate:"updateWebPage",params:[{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-350980120,predicate:"webPageEmpty",params:[{name:"id",type:"long"}],type:"WebPage"},{id:-981018084,predicate:"webPagePending",params:[{name:"id",type:"long"},{name:"date",type:"int"}],type:"WebPage"},{id:-392411726,predicate:"webPage",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"url",type:"string"},{name:"display_url",type:"string"},{name:"hash",type:"int"},{name:"type",type:"flags.0?string"},{name:"site_name",type:"flags.1?string"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"photo",type:"flags.4?Photo"},{name:"embed_url",type:"flags.5?string"},{name:"embed_type",type:"flags.5?string"},{name:"embed_width",type:"flags.6?int"},{name:"embed_height",type:"flags.6?int"},{name:"duration",type:"flags.7?int"},{name:"author",type:"flags.8?string"},{name:"document",type:"flags.9?Document"},{name:"cached_page",type:"flags.10?Page"},{name:"attributes",type:"flags.12?Vector"}],type:"WebPage"},{id:-1557277184,predicate:"messageMediaWebPage",params:[{name:"webpage",type:"WebPage"}],type:"MessageMedia"},{id:-1392388579,predicate:"authorization",params:[{name:"flags",type:"#"},{name:"current",type:"flags.0?true"},{name:"official_app",type:"flags.1?true"},{name:"password_pending",type:"flags.2?true"},{name:"hash",type:"long"},{name:"device_model",type:"string"},{name:"platform",type:"string"},{name:"system_version",type:"string"},{name:"api_id",type:"int"},{name:"app_name",type:"string"},{name:"app_version",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"country",type:"string"},{name:"region",type:"string"}],type:"Authorization"},{id:307276766,predicate:"account.authorizations",params:[{name:"authorizations",type:"Vector"}],type:"account.Authorizations"},{id:408623183,predicate:"account.password",params:[{name:"flags",type:"#"},{name:"has_recovery",type:"flags.0?true"},{name:"has_secure_values",type:"flags.1?true"},{name:"has_password",type:"flags.2?true"},{name:"current_algo",type:"flags.2?PasswordKdfAlgo"},{name:"srp_B",type:"flags.2?bytes"},{name:"srp_id",type:"flags.2?long"},{name:"hint",type:"flags.3?string"},{name:"email_unconfirmed_pattern",type:"flags.4?string"},{name:"new_algo",type:"PasswordKdfAlgo"},{name:"new_secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_random",type:"bytes"},{name:"pending_reset_date",type:"flags.5?int"}],type:"account.Password"},{id:-1705233435,predicate:"account.passwordSettings",params:[{name:"flags",type:"#"},{name:"email",type:"flags.0?string"},{name:"secure_settings",type:"flags.1?SecureSecretSettings"}],type:"account.PasswordSettings"},{id:-1036572727,predicate:"account.passwordInputSettings",params:[{name:"flags",type:"#"},{name:"new_algo",type:"flags.0?PasswordKdfAlgo"},{name:"new_password_hash",type:"flags.0?bytes"},{name:"hint",type:"flags.0?string"},{name:"email",type:"flags.1?string"},{name:"new_secure_settings",type:"flags.2?SecureSecretSettings"}],type:"account.PasswordInputSettings"},{id:326715557,predicate:"auth.passwordRecovery",params:[{name:"email_pattern",type:"string"}],type:"auth.PasswordRecovery"},{id:-1052959727,predicate:"inputMediaVenue",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"InputMedia"},{id:784356159,predicate:"messageMediaVenue",params:[{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"MessageMedia"},{id:-1551583367,predicate:"receivedNotifyMessage",params:[{name:"id",type:"int"},{name:"flags",type:"int"}],type:"ReceivedNotifyMessage"},{id:1847917725,predicate:"chatInviteExported",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.0?true"},{name:"permanent",type:"flags.5?true"},{name:"link",type:"string"},{name:"admin_id",type:"int"},{name:"date",type:"int"},{name:"start_date",type:"flags.4?int"},{name:"expire_date",type:"flags.1?int"},{name:"usage_limit",type:"flags.2?int"},{name:"usage",type:"flags.3?int"}],type:"ExportedChatInvite"},{id:1516793212,predicate:"chatInviteAlready",params:[{name:"chat",type:"Chat"}],type:"ChatInvite"},{id:-540871282,predicate:"chatInvite",params:[{name:"flags",type:"#"},{name:"channel",type:"flags.0?true"},{name:"broadcast",type:"flags.1?true"},{name:"public",type:"flags.2?true"},{name:"megagroup",type:"flags.3?true"},{name:"title",type:"string"},{name:"photo",type:"Photo"},{name:"participants_count",type:"int"},{name:"participants",type:"flags.4?Vector"}],type:"ChatInvite"},{id:-123931160,predicate:"messageActionChatJoinedByLink",params:[{name:"inviter_id",type:"int"}],type:"MessageAction"},{id:1757493555,predicate:"updateReadMessagesContents",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-4838507,predicate:"inputStickerSetEmpty",params:[],type:"InputStickerSet"},{id:-1645763991,predicate:"inputStickerSetID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputStickerSet"},{id:-2044933984,predicate:"inputStickerSetShortName",params:[{name:"short_name",type:"string"}],type:"InputStickerSet"},{id:-673242758,predicate:"stickerSet",params:[{name:"flags",type:"#"},{name:"archived",type:"flags.1?true"},{name:"official",type:"flags.2?true"},{name:"masks",type:"flags.3?true"},{name:"animated",type:"flags.5?true"},{name:"installed_date",type:"flags.0?int"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumbs",type:"flags.4?Vector"},{name:"thumb_dc_id",type:"flags.4?int"},{name:"thumb_version",type:"flags.4?int"},{name:"count",type:"int"},{name:"hash",type:"int"}],type:"StickerSet"},{id:-1240849242,predicate:"messages.stickerSet",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"documents",type:"Vector"}],type:"messages.StickerSet"},{id:-1820043071,predicate:"user",params:[{name:"flags",type:"#"},{name:"self",type:"flags.10?true"},{name:"contact",type:"flags.11?true"},{name:"mutual_contact",type:"flags.12?true"},{name:"deleted",type:"flags.13?true"},{name:"bot",type:"flags.14?true"},{name:"bot_chat_history",type:"flags.15?true"},{name:"bot_nochats",type:"flags.16?true"},{name:"verified",type:"flags.17?true"},{name:"restricted",type:"flags.18?true"},{name:"min",type:"flags.20?true"},{name:"bot_inline_geo",type:"flags.21?true"},{name:"support",type:"flags.23?true"},{name:"scam",type:"flags.24?true"},{name:"apply_min_photo",type:"flags.25?true"},{name:"fake",type:"flags.26?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.0?long"},{name:"first_name",type:"flags.1?string"},{name:"last_name",type:"flags.2?string"},{name:"username",type:"flags.3?string"},{name:"phone",type:"flags.4?string"},{name:"photo",type:"flags.5?UserProfilePhoto"},{name:"status",type:"flags.6?UserStatus"},{name:"bot_info_version",type:"flags.14?int"},{name:"restriction_reason",type:"flags.18?Vector"},{name:"bot_inline_placeholder",type:"flags.19?string"},{name:"lang_code",type:"flags.22?string"}],type:"User"},{id:-1032140601,predicate:"botCommand",params:[{name:"command",type:"string"},{name:"description",type:"string"}],type:"BotCommand"},{id:-1729618630,predicate:"botInfo",params:[{name:"user_id",type:"int"},{name:"description",type:"string"},{name:"commands",type:"Vector"}],type:"BotInfo"},{id:-1560655744,predicate:"keyboardButton",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:2002815875,predicate:"keyboardButtonRow",params:[{name:"buttons",type:"Vector"}],type:"KeyboardButtonRow"},{id:-1606526075,predicate:"replyKeyboardHide",params:[{name:"flags",type:"#"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:-2035021048,predicate:"replyKeyboardForceReply",params:[{name:"flags",type:"#"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-2049074735,predicate:"replyKeyboardMarkup",params:[{name:"flags",type:"#"},{name:"resize",type:"flags.0?true"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"rows",type:"Vector"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:2072935910,predicate:"inputPeerUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-668391402,predicate:"inputUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputUser"},{id:-1148011883,predicate:"messageEntityUnknown",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-100378723,predicate:"messageEntityMention",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1868782349,predicate:"messageEntityHashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1827637959,predicate:"messageEntityBotCommand",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1859134776,predicate:"messageEntityUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1692693954,predicate:"messageEntityEmail",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1117713463,predicate:"messageEntityBold",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-2106619040,predicate:"messageEntityItalic",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:681706865,predicate:"messageEntityCode",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1938967520,predicate:"messageEntityPre",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"language",type:"string"}],type:"MessageEntity"},{id:1990644519,predicate:"messageEntityTextUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"url",type:"string"}],type:"MessageEntity"},{id:-1877614335,predicate:"updateShortSentMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"media",type:"flags.9?MessageMedia"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:-292807034,predicate:"inputChannelEmpty",params:[],type:"InputChannel"},{id:-1343524562,predicate:"inputChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputChannel"},{id:-1109531342,predicate:"peerChannel",params:[{name:"channel_id",type:"int"}],type:"Peer"},{id:548253432,predicate:"inputPeerChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-753232354,predicate:"channel",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"broadcast",type:"flags.5?true"},{name:"verified",type:"flags.7?true"},{name:"megagroup",type:"flags.8?true"},{name:"restricted",type:"flags.9?true"},{name:"signatures",type:"flags.11?true"},{name:"min",type:"flags.12?true"},{name:"scam",type:"flags.19?true"},{name:"has_link",type:"flags.20?true"},{name:"has_geo",type:"flags.21?true"},{name:"slowmode_enabled",type:"flags.22?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"fake",type:"flags.25?true"},{name:"gigagroup",type:"flags.26?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.13?long"},{name:"title",type:"string"},{name:"username",type:"flags.6?string"},{name:"photo",type:"ChatPhoto"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"restriction_reason",type:"flags.9?Vector"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"banned_rights",type:"flags.15?ChatBannedRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"},{name:"participants_count",type:"flags.17?int"}],type:"Chat"},{id:681420594,predicate:"channelForbidden",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.5?true"},{name:"megagroup",type:"flags.8?true"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"until_date",type:"flags.16?int"}],type:"Chat"},{id:2131196633,predicate:"contacts.resolvedPeer",params:[{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ResolvedPeer"},{id:1418477459,predicate:"channelFull",params:[{name:"flags",type:"#"},{name:"can_view_participants",type:"flags.3?true"},{name:"can_set_username",type:"flags.6?true"},{name:"can_set_stickers",type:"flags.7?true"},{name:"hidden_prehistory",type:"flags.10?true"},{name:"can_set_location",type:"flags.16?true"},{name:"has_scheduled",type:"flags.19?true"},{name:"can_view_stats",type:"flags.20?true"},{name:"blocked",type:"flags.22?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants_count",type:"flags.0?int"},{name:"admins_count",type:"flags.1?int"},{name:"kicked_count",type:"flags.2?int"},{name:"banned_count",type:"flags.2?int"},{name:"online_count",type:"flags.13?int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"chat_photo",type:"Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.23?ExportedChatInvite"},{name:"bot_info",type:"Vector"},{name:"migrated_from_chat_id",type:"flags.4?int"},{name:"migrated_from_max_id",type:"flags.4?int"},{name:"pinned_msg_id",type:"flags.5?int"},{name:"stickerset",type:"flags.8?StickerSet"},{name:"available_min_id",type:"flags.9?int"},{name:"folder_id",type:"flags.11?int"},{name:"linked_chat_id",type:"flags.14?int"},{name:"location",type:"flags.15?ChannelLocation"},{name:"slowmode_seconds",type:"flags.17?int"},{name:"slowmode_next_send_date",type:"flags.18?int"},{name:"stats_dc",type:"flags.12?int"},{name:"pts",type:"int"},{name:"call",type:"flags.21?InputGroupCall"},{name:"ttl_period",type:"flags.24?int"},{name:"pending_suggestions",type:"flags.25?Vector"},{name:"groupcall_default_join_as",type:"flags.26?Peer"}],type:"ChatFull"},{id:182649427,predicate:"messageRange",params:[{name:"min_id",type:"int"},{name:"max_id",type:"int"}],type:"MessageRange"},{id:1682413576,predicate:"messages.channelMessages",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"pts",type:"int"},{name:"count",type:"int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:-1781355374,predicate:"messageActionChannelCreate",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:-352032773,predicate:"updateChannelTooLong",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"pts",type:"flags.0?int"}],type:"Update"},{id:-1227598250,predicate:"updateChannel",params:[{name:"channel_id",type:"int"}],type:"Update"},{id:1656358105,predicate:"updateNewChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:856380452,predicate:"updateReadChannelInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"channel_id",type:"int"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"}],type:"Update"},{id:-1015733815,predicate:"updateDeleteChannelMessages",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1734268085,predicate:"updateChannelMessageViews",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"},{name:"views",type:"int"}],type:"Update"},{id:1041346555,predicate:"updates.channelDifferenceEmpty",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"}],type:"updates.ChannelDifference"},{id:-1531132162,predicate:"updates.channelDifferenceTooLong",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"timeout",type:"flags.1?int"},{name:"dialog",type:"Dialog"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:543450958,predicate:"updates.channelDifference",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"},{name:"new_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:-1798033689,predicate:"channelMessagesFilterEmpty",params:[],type:"ChannelMessagesFilter"},{id:-847783593,predicate:"channelMessagesFilter",params:[{name:"flags",type:"#"},{name:"exclude_new_messages",type:"flags.1?true"},{name:"ranges",type:"Vector"}],type:"ChannelMessagesFilter"},{id:367766557,predicate:"channelParticipant",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:-1557620115,predicate:"channelParticipantSelf",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:1149094475,predicate:"channelParticipantCreator",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.0?string"}],type:"ChannelParticipant"},{id:-566281095,predicate:"channelParticipantsRecent",params:[],type:"ChannelParticipantsFilter"},{id:-1268741783,predicate:"channelParticipantsAdmins",params:[],type:"ChannelParticipantsFilter"},{id:-1548400251,predicate:"channelParticipantsKicked",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-1699676497,predicate:"channels.channelParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipants"},{id:-541588713,predicate:"channels.channelParticipant",params:[{name:"participant",type:"ChannelParticipant"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipant"},{id:-636267638,predicate:"chatParticipantCreator",params:[{name:"user_id",type:"int"}],type:"ChatParticipant"},{id:-489233354,predicate:"chatParticipantAdmin",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-1232070311,predicate:"updateChatParticipantAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"is_admin",type:"Bool"},{name:"version",type:"int"}],type:"Update"},{id:1371385889,predicate:"messageActionChatMigrateTo",params:[{name:"channel_id",type:"int"}],type:"MessageAction"},{id:-1336546578,predicate:"messageActionChannelMigrateFrom",params:[{name:"title",type:"string"},{name:"chat_id",type:"int"}],type:"MessageAction"},{id:-1328445861,predicate:"channelParticipantsBots",params:[],type:"ChannelParticipantsFilter"},{id:2013922064,predicate:"help.termsOfService",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"id",type:"DataJSON"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"min_age_confirm",type:"flags.1?int"}],type:"help.TermsOfService"},{id:1753886890,predicate:"updateNewStickerSet",params:[{name:"stickerset",type:"messages.StickerSet"}],type:"Update"},{id:196268545,predicate:"updateStickerSetsOrder",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Update"},{id:1135492588,predicate:"updateStickerSets",params:[],type:"Update"},{id:-402498398,predicate:"messages.savedGifsNotModified",params:[],type:"messages.SavedGifs"},{id:772213157,predicate:"messages.savedGifs",params:[{name:"hash",type:"int"},{name:"gifs",type:"Vector"}],type:"messages.SavedGifs"},{id:-1821035490,predicate:"updateSavedGifs",params:[],type:"Update"},{id:864077702,predicate:"inputBotInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1036876423,predicate:"inputBotInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-2000710887,predicate:"inputBotInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?InputWebDocument"},{name:"content",type:"flags.5?InputWebDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1984755728,predicate:"botInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1937807902,predicate:"botInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:295067450,predicate:"botInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?WebDocument"},{name:"content",type:"flags.5?WebDocument"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1803769784,predicate:"messages.botResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"query_id",type:"long"},{name:"next_offset",type:"flags.1?string"},{name:"switch_pm",type:"flags.2?InlineBotSwitchPM"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"users",type:"Vector"}],type:"messages.BotResults"},{id:1059076315,predicate:"updateBotInlineQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"peer_type",type:"flags.1?InlineQueryPeerType"},{name:"offset",type:"string"}],type:"Update"},{id:239663460,predicate:"updateBotInlineSend",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"id",type:"string"},{name:"msg_id",type:"flags.1?InputBotInlineMessageID"}],type:"Update"},{id:1358283666,predicate:"inputMessagesFilterVoice",params:[],type:"MessagesFilter"},{id:928101534,predicate:"inputMessagesFilterMusic",params:[],type:"MessagesFilter"},{id:-1107622874,predicate:"inputPrivacyKeyChatInvite",params:[],type:"InputPrivacyKey"},{id:1343122938,predicate:"privacyKeyChatInvite",params:[],type:"PrivacyKey"},{id:1571494644,predicate:"exportedMessageLink",params:[{name:"link",type:"string"},{name:"html",type:"string"}],type:"ExportedMessageLink"},{id:1601666510,predicate:"messageFwdHeader",params:[{name:"flags",type:"#"},{name:"imported",type:"flags.7?true"},{name:"from_id",type:"flags.0?Peer"},{name:"from_name",type:"flags.5?string"},{name:"date",type:"int"},{name:"channel_post",type:"flags.2?int"},{name:"post_author",type:"flags.3?string"},{name:"saved_from_peer",type:"flags.4?Peer"},{name:"saved_from_msg_id",type:"flags.4?int"},{name:"psa_type",type:"flags.6?string"}],type:"MessageFwdHeader"},{id:457133559,predicate:"updateEditChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1799538451,predicate:"messageActionPinMessage",params:[],type:"MessageAction"},{id:1923290508,predicate:"auth.codeTypeSms",params:[],type:"auth.CodeType"},{id:1948046307,predicate:"auth.codeTypeCall",params:[],type:"auth.CodeType"},{id:577556219,predicate:"auth.codeTypeFlashCall",params:[],type:"auth.CodeType"},{id:1035688326,predicate:"auth.sentCodeTypeApp",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1073693790,predicate:"auth.sentCodeTypeSms",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1398007207,predicate:"auth.sentCodeTypeCall",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1425815847,predicate:"auth.sentCodeTypeFlashCall",params:[{name:"pattern",type:"string"}],type:"auth.SentCodeType"},{id:629866245,predicate:"keyboardButtonUrl",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:901503851,predicate:"keyboardButtonCallback",params:[{name:"flags",type:"#"},{name:"requires_password",type:"flags.0?true"},{name:"text",type:"string"},{name:"data",type:"bytes"}],type:"KeyboardButton"},{id:-1318425559,predicate:"keyboardButtonRequestPhone",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-59151553,predicate:"keyboardButtonRequestGeoLocation",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:90744648,predicate:"keyboardButtonSwitchInline",params:[{name:"flags",type:"#"},{name:"same_peer",type:"flags.0?true"},{name:"text",type:"string"},{name:"query",type:"string"}],type:"KeyboardButton"},{id:1218642516,predicate:"replyInlineMarkup",params:[{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:911761060,predicate:"messages.botCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"has_url",type:"flags.3?true"},{name:"native_ui",type:"flags.4?true"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"messages.BotCallbackAnswer"},{id:-415938591,predicate:"updateBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:649453030,predicate:"messages.messageEditData",params:[{name:"flags",type:"#"},{name:"caption",type:"flags.0?true"}],type:"messages.MessageEditData"},{id:-469536605,predicate:"updateEditMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1768777083,predicate:"inputBotInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1098628881,predicate:"inputBotInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-1494368259,predicate:"inputBotInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:85477117,predicate:"botInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1970903652,predicate:"botInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:416402882,predicate:"botInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1462213465,predicate:"inputBotInlineResultPhoto",params:[{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"InputPhoto"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:-459324,predicate:"inputBotInlineResultDocument",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"document",type:"InputDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:400266251,predicate:"botInlineMediaResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"flags.0?Photo"},{name:"document",type:"flags.1?Document"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1995686519,predicate:"inputBotInlineMessageID",params:[{name:"dc_id",type:"int"},{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:-103646630,predicate:"updateInlineBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"msg_id",type:"InputBotInlineMessageID"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:1008755359,predicate:"inlineBotSwitchPM",params:[{name:"text",type:"string"},{name:"start_param",type:"string"}],type:"InlineBotSwitchPM"},{id:863093588,predicate:"messages.peerDialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"messages.PeerDialogs"},{id:-305282981,predicate:"topPeer",params:[{name:"peer",type:"Peer"},{name:"rating",type:"double"}],type:"TopPeer"},{id:-1419371685,predicate:"topPeerCategoryBotsPM",params:[],type:"TopPeerCategory"},{id:344356834,predicate:"topPeerCategoryBotsInline",params:[],type:"TopPeerCategory"},{id:104314861,predicate:"topPeerCategoryCorrespondents",params:[],type:"TopPeerCategory"},{id:-1122524854,predicate:"topPeerCategoryGroups",params:[],type:"TopPeerCategory"},{id:371037736,predicate:"topPeerCategoryChannels",params:[],type:"TopPeerCategory"},{id:-75283823,predicate:"topPeerCategoryPeers",params:[{name:"category",type:"TopPeerCategory"},{name:"count",type:"int"},{name:"peers",type:"Vector"}],type:"TopPeerCategoryPeers"},{id:-567906571,predicate:"contacts.topPeersNotModified",params:[],type:"contacts.TopPeers"},{id:1891070632,predicate:"contacts.topPeers",params:[{name:"categories",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.TopPeers"},{id:892193368,predicate:"messageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"int"}],type:"MessageEntity"},{id:546203849,predicate:"inputMessageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"InputUser"}],type:"MessageEntity"},{id:975236280,predicate:"inputMessagesFilterChatPhotos",params:[],type:"MessagesFilter"},{id:634833351,predicate:"updateReadChannelOutbox",params:[{name:"channel_id",type:"int"},{name:"max_id",type:"int"}],type:"Update"},{id:-299124375,predicate:"updateDraftMessage",params:[{name:"peer",type:"Peer"},{name:"draft",type:"DraftMessage"}],type:"Update"},{id:453805082,predicate:"draftMessageEmpty",params:[{name:"flags",type:"#"},{name:"date",type:"flags.0?int"}],type:"DraftMessage"},{id:-40996577,predicate:"draftMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"},{name:"date",type:"int"}],type:"DraftMessage"},{id:-1615153660,predicate:"messageActionHistoryClear",params:[],type:"MessageAction"},{id:-958657434,predicate:"messages.featuredStickersNotModified",params:[{name:"count",type:"int"}],type:"messages.FeaturedStickers"},{id:-1230257343,predicate:"messages.featuredStickers",params:[{name:"hash",type:"int"},{name:"count",type:"int"},{name:"sets",type:"Vector"},{name:"unread",type:"Vector"}],type:"messages.FeaturedStickers"},{id:1461528386,predicate:"updateReadFeaturedStickers",params:[],type:"Update"},{id:186120336,predicate:"messages.recentStickersNotModified",params:[],type:"messages.RecentStickers"},{id:586395571,predicate:"messages.recentStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"},{name:"dates",type:"Vector"}],type:"messages.RecentStickers"},{id:-1706939360,predicate:"updateRecentStickers",params:[],type:"Update"},{id:1338747336,predicate:"messages.archivedStickers",params:[{name:"count",type:"int"},{name:"sets",type:"Vector"}],type:"messages.ArchivedStickers"},{id:946083368,predicate:"messages.stickerSetInstallResultSuccess",params:[],type:"messages.StickerSetInstallResult"},{id:904138920,predicate:"messages.stickerSetInstallResultArchive",params:[{name:"sets",type:"Vector"}],type:"messages.StickerSetInstallResult"},{id:1678812626,predicate:"stickerSetCovered",params:[{name:"set",type:"StickerSet"},{name:"cover",type:"Document"}],type:"StickerSetCovered"},{id:-1574314746,predicate:"updateConfig",params:[],type:"Update"},{id:861169551,predicate:"updatePtsChanged",params:[],type:"Update"},{id:-440664550,predicate:"inputMediaPhotoExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-78455655,predicate:"inputMediaDocumentExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:872932635,predicate:"stickerSetMultiCovered",params:[{name:"set",type:"StickerSet"},{name:"covers",type:"Vector"}],type:"StickerSetCovered"},{id:-1361650766,predicate:"maskCoords",params:[{name:"n",type:"int"},{name:"x",type:"double"},{name:"y",type:"double"},{name:"zoom",type:"double"}],type:"MaskCoords"},{id:-1744710921,predicate:"documentAttributeHasStickers",params:[],type:"DocumentAttribute"},{id:1251549527,predicate:"inputStickeredMediaPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputStickeredMedia"},{id:70813275,predicate:"inputStickeredMediaDocument",params:[{name:"id",type:"InputDocument"}],type:"InputStickeredMedia"},{id:-1107729093,predicate:"game",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"short_name",type:"string"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"flags.0?Document"}],type:"Game"},{id:1336154098,predicate:"inputBotInlineResultGame",params:[{name:"id",type:"string"},{name:"short_name",type:"string"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1262639204,predicate:"inputBotInlineMessageGame",params:[{name:"flags",type:"#"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-38694904,predicate:"messageMediaGame",params:[{name:"game",type:"Game"}],type:"MessageMedia"},{id:-750828557,predicate:"inputMediaGame",params:[{name:"id",type:"InputGame"}],type:"InputMedia"},{id:53231223,predicate:"inputGameID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGame"},{id:-1020139510,predicate:"inputGameShortName",params:[{name:"bot_id",type:"InputUser"},{name:"short_name",type:"string"}],type:"InputGame"},{id:1358175439,predicate:"keyboardButtonGame",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1834538890,predicate:"messageActionGameScore",params:[{name:"game_id",type:"long"},{name:"score",type:"int"}],type:"MessageAction"},{id:1493171408,predicate:"highScore",params:[{name:"pos",type:"int"},{name:"user_id",type:"int"},{name:"score",type:"int"}],type:"HighScore"},{id:-1707344487,predicate:"messages.highScores",params:[{name:"scores",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.HighScores"},{id:1258196845,predicate:"updates.differenceTooLong",params:[{name:"pts",type:"int"}],type:"updates.Difference"},{id:1081547008,predicate:"updateChannelWebPage",params:[{name:"channel_id",type:"int"},{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1663561404,predicate:"messages.chatsSlice",params:[{name:"count",type:"int"},{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-599948721,predicate:"textEmpty",params:[],type:"RichText"},{id:1950782688,predicate:"textPlain",params:[{name:"text",type:"string"}],type:"RichText"},{id:1730456516,predicate:"textBold",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-653089380,predicate:"textItalic",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1054465340,predicate:"textUnderline",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1678197867,predicate:"textStrike",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1816074681,predicate:"textFixed",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1009288385,predicate:"textUrl",params:[{name:"text",type:"RichText"},{name:"url",type:"string"},{name:"webpage_id",type:"long"}],type:"RichText"},{id:-564523562,predicate:"textEmail",params:[{name:"text",type:"RichText"},{name:"email",type:"string"}],type:"RichText"},{id:2120376535,predicate:"textConcat",params:[{name:"texts",type:"Vector"}],type:"RichText"},{id:324435594,predicate:"pageBlockUnsupported",params:[],type:"PageBlock"},{id:1890305021,predicate:"pageBlockTitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1879401953,predicate:"pageBlockSubtitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1162877472,predicate:"pageBlockAuthorDate",params:[{name:"author",type:"RichText"},{name:"published_date",type:"int"}],type:"PageBlock"},{id:-1076861716,predicate:"pageBlockHeader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-248793375,predicate:"pageBlockSubheader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:1182402406,predicate:"pageBlockParagraph",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1066346178,predicate:"pageBlockPreformatted",params:[{name:"text",type:"RichText"},{name:"language",type:"string"}],type:"PageBlock"},{id:1216809369,predicate:"pageBlockFooter",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-618614392,predicate:"pageBlockDivider",params:[],type:"PageBlock"},{id:-837994576,predicate:"pageBlockAnchor",params:[{name:"name",type:"string"}],type:"PageBlock"},{id:-454524911,predicate:"pageBlockList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:641563686,predicate:"pageBlockBlockquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:1329878739,predicate:"pageBlockPullquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:391759200,predicate:"pageBlockPhoto",params:[{name:"flags",type:"#"},{name:"photo_id",type:"long"},{name:"caption",type:"PageCaption"},{name:"url",type:"flags.0?string"},{name:"webpage_id",type:"flags.0?long"}],type:"PageBlock"},{id:2089805750,predicate:"pageBlockVideo",params:[{name:"flags",type:"#"},{name:"autoplay",type:"flags.0?true"},{name:"loop",type:"flags.1?true"},{name:"video_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:972174080,predicate:"pageBlockCover",params:[{name:"cover",type:"PageBlock"}],type:"PageBlock"},{id:-1468953147,predicate:"pageBlockEmbed",params:[{name:"flags",type:"#"},{name:"full_width",type:"flags.0?true"},{name:"allow_scrolling",type:"flags.3?true"},{name:"url",type:"flags.1?string"},{name:"html",type:"flags.2?string"},{name:"poster_photo_id",type:"flags.4?long"},{name:"w",type:"flags.5?int"},{name:"h",type:"flags.5?int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-229005301,predicate:"pageBlockEmbedPost",params:[{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"author_photo_id",type:"long"},{name:"author",type:"string"},{name:"date",type:"int"},{name:"blocks",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1705048653,predicate:"pageBlockCollage",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:52401552,predicate:"pageBlockSlideshow",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1930545681,predicate:"webPageNotModified",params:[{name:"flags",type:"#"},{name:"cached_page_views",type:"flags.0?int"}],type:"WebPage"},{id:-88417185,predicate:"inputPrivacyKeyPhoneCall",params:[],type:"InputPrivacyKey"},{id:1030105979,predicate:"privacyKeyPhoneCall",params:[],type:"PrivacyKey"},{id:-580219064,predicate:"sendMessageGamePlayAction",params:[],type:"SendMessageAction"},{id:-2048646399,predicate:"phoneCallDiscardReasonMissed",params:[],type:"PhoneCallDiscardReason"},{id:-527056480,predicate:"phoneCallDiscardReasonDisconnect",params:[],type:"PhoneCallDiscardReason"},{id:1471006352,predicate:"phoneCallDiscardReasonHangup",params:[],type:"PhoneCallDiscardReason"},{id:-84416311,predicate:"phoneCallDiscardReasonBusy",params:[],type:"PhoneCallDiscardReason"},{id:1852826908,predicate:"updateDialogPinned",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-99664734,predicate:"updatePinnedDialogs",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.1?int"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:2104790276,predicate:"dataJSON",params:[{name:"data",type:"string"}],type:"DataJSON"},{id:-2095595325,predicate:"updateBotWebhookJSON",params:[{name:"data",type:"DataJSON"}],type:"Update"},{id:-1684914010,predicate:"updateBotWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"},{name:"timeout",type:"int"}],type:"Update"},{id:-886477832,predicate:"labeledPrice",params:[{name:"label",type:"string"},{name:"amount",type:"long"}],type:"LabeledPrice"},{id:215516896,predicate:"invoice",params:[{name:"flags",type:"#"},{name:"test",type:"flags.0?true"},{name:"name_requested",type:"flags.1?true"},{name:"phone_requested",type:"flags.2?true"},{name:"email_requested",type:"flags.3?true"},{name:"shipping_address_requested",type:"flags.4?true"},{name:"flexible",type:"flags.5?true"},{name:"phone_to_provider",type:"flags.6?true"},{name:"email_to_provider",type:"flags.7?true"},{name:"currency",type:"string"},{name:"prices",type:"Vector"},{name:"max_tip_amount",type:"flags.8?long"},{name:"suggested_tip_amounts",type:"flags.8?Vector"}],type:"Invoice"},{id:-646342540,predicate:"inputMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"start_param",type:"flags.1?string"}],type:"InputMedia"},{id:-368917890,predicate:"paymentCharge",params:[{name:"id",type:"string"},{name:"provider_charge_id",type:"string"}],type:"PaymentCharge"},{id:-1892568281,predicate:"messageActionPaymentSentMe",params:[{name:"flags",type:"#"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"charge",type:"PaymentCharge"}],type:"MessageAction"},{id:-2074799289,predicate:"messageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"receipt_msg_id",type:"flags.2?int"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"start_param",type:"string"}],type:"MessageMedia"},{id:512535275,predicate:"postAddress",params:[{name:"street_line1",type:"string"},{name:"street_line2",type:"string"},{name:"city",type:"string"},{name:"state",type:"string"},{name:"country_iso2",type:"string"},{name:"post_code",type:"string"}],type:"PostAddress"},{id:-1868808300,predicate:"paymentRequestedInfo",params:[{name:"flags",type:"#"},{name:"name",type:"flags.0?string"},{name:"phone",type:"flags.1?string"},{name:"email",type:"flags.2?string"},{name:"shipping_address",type:"flags.3?PostAddress"}],type:"PaymentRequestedInfo"},{id:-1344716869,predicate:"keyboardButtonBuy",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:1080663248,predicate:"messageActionPaymentSent",params:[{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"MessageAction"},{id:-842892769,predicate:"paymentSavedCredentialsCard",params:[{name:"id",type:"string"},{name:"title",type:"string"}],type:"PaymentSavedCredentials"},{id:475467473,predicate:"webDocument",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:-1678949555,predicate:"inputWebDocument",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"InputWebDocument"},{id:-1036396922,predicate:"inputWebFileLocation",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"}],type:"InputWebFileLocation"},{id:568808380,predicate:"upload.webFile",params:[{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"file_type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.WebFile"},{id:-1928649707,predicate:"payments.paymentForm",params:[{name:"flags",type:"#"},{name:"can_save_credentials",type:"flags.2?true"},{name:"password_missing",type:"flags.3?true"},{name:"form_id",type:"long"},{name:"bot_id",type:"int"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"int"},{name:"url",type:"string"},{name:"native_provider",type:"flags.4?string"},{name:"native_params",type:"flags.4?DataJSON"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"},{name:"saved_credentials",type:"flags.1?PaymentSavedCredentials"},{name:"users",type:"Vector"}],type:"payments.PaymentForm"},{id:-784000893,predicate:"payments.validatedRequestedInfo",params:[{name:"flags",type:"#"},{name:"id",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"payments.ValidatedRequestedInfo"},{id:1314881805,predicate:"payments.paymentResult",params:[{name:"updates",type:"Updates"}],type:"payments.PaymentResult"},{id:280319440,predicate:"payments.paymentReceipt",params:[{name:"flags",type:"#"},{name:"date",type:"int"},{name:"bot_id",type:"int"},{name:"provider_id",type:"int"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.2?WebDocument"},{name:"invoice",type:"Invoice"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping",type:"flags.1?ShippingOption"},{name:"tip_amount",type:"flags.3?long"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"credentials_title",type:"string"},{name:"users",type:"Vector"}],type:"payments.PaymentReceipt"},{id:-74456004,predicate:"payments.savedInfo",params:[{name:"flags",type:"#"},{name:"has_saved_credentials",type:"flags.1?true"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"}],type:"payments.SavedInfo"},{id:-1056001329,predicate:"inputPaymentCredentialsSaved",params:[{name:"id",type:"string"},{name:"tmp_password",type:"bytes"}],type:"InputPaymentCredentials"},{id:873977640,predicate:"inputPaymentCredentials",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-614138572,predicate:"account.tmpPassword",params:[{name:"tmp_password",type:"bytes"},{name:"valid_until",type:"int"}],type:"account.TmpPassword"},{id:-1239335713,predicate:"shippingOption",params:[{name:"id",type:"string"},{name:"title",type:"string"},{name:"prices",type:"Vector"}],type:"ShippingOption"},{id:-523384512,predicate:"updateBotShippingQuery",params:[{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"shipping_address",type:"PostAddress"}],type:"Update"},{id:1563376297,predicate:"updateBotPrecheckoutQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"Update"},{id:-6249322,predicate:"inputStickerSetItem",params:[{name:"flags",type:"#"},{name:"document",type:"InputDocument"},{name:"emoji",type:"string"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"InputStickerSetItem"},{id:-1425052898,predicate:"updatePhoneCall",params:[{name:"phone_call",type:"PhoneCall"}],type:"Update"},{id:506920429,predicate:"inputPhoneCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPhoneCall"},{id:1399245077,predicate:"phoneCallEmpty",params:[{name:"id",type:"long"}],type:"PhoneCall"},{id:462375633,predicate:"phoneCallWaiting",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"protocol",type:"PhoneCallProtocol"},{name:"receive_date",type:"flags.0?int"}],type:"PhoneCall"},{id:-2014659757,predicate:"phoneCallRequested",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-1719909046,predicate:"phoneCallAccepted",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-2025673089,predicate:"phoneCall",params:[{name:"flags",type:"#"},{name:"p2p_allowed",type:"flags.5?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"connections",type:"Vector"},{name:"start_date",type:"int"}],type:"PhoneCall"},{id:1355435489,predicate:"phoneCallDiscarded",params:[{name:"flags",type:"#"},{name:"need_rating",type:"flags.2?true"},{name:"need_debug",type:"flags.3?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"PhoneCall"},{id:-1655957568,predicate:"phoneConnection",params:[{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"peer_tag",type:"bytes"}],type:"PhoneConnection"},{id:-58224696,predicate:"phoneCallProtocol",params:[{name:"flags",type:"#"},{name:"udp_p2p",type:"flags.0?true"},{name:"udp_reflector",type:"flags.1?true"},{name:"min_layer",type:"int"},{name:"max_layer",type:"int"},{name:"library_versions",type:"Vector"}],type:"PhoneCallProtocol"},{id:-326966976,predicate:"phone.phoneCall",params:[{name:"phone_call",type:"PhoneCall"},{name:"users",type:"Vector"}],type:"phone.PhoneCall"},{id:-2134272152,predicate:"inputMessagesFilterPhoneCalls",params:[{name:"flags",type:"#"},{name:"missed",type:"flags.0?true"}],type:"MessagesFilter"},{id:-2132731265,predicate:"messageActionPhoneCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.2?true"},{name:"call_id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"MessageAction"},{id:2054952868,predicate:"inputMessagesFilterRoundVoice",params:[],type:"MessagesFilter"},{id:-1253451181,predicate:"inputMessagesFilterRoundVideo",params:[],type:"MessagesFilter"},{id:-1997373508,predicate:"sendMessageRecordRoundAction",params:[],type:"SendMessageAction"},{id:608050278,predicate:"sendMessageUploadRoundAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-242427324,predicate:"upload.fileCdnRedirect",params:[{name:"dc_id",type:"int"},{name:"file_token",type:"bytes"},{name:"encryption_key",type:"bytes"},{name:"encryption_iv",type:"bytes"},{name:"file_hashes",type:"Vector"}],type:"upload.File"},{id:-290921362,predicate:"upload.cdnFileReuploadNeeded",params:[{name:"request_token",type:"bytes"}],type:"upload.CdnFile"},{id:-1449145777,predicate:"upload.cdnFile",params:[{name:"bytes",type:"bytes"}],type:"upload.CdnFile"},{id:-914167110,predicate:"cdnPublicKey",params:[{name:"dc_id",type:"int"},{name:"public_key",type:"string"}],type:"CdnPublicKey"},{id:1462101002,predicate:"cdnConfig",params:[{name:"public_keys",type:"Vector"}],type:"CdnConfig"},{id:-283684427,predicate:"pageBlockChannel",params:[{name:"channel",type:"Chat"}],type:"PageBlock"},{id:-892239370,predicate:"langPackString",params:[{name:"key",type:"string"},{name:"value",type:"string"}],type:"LangPackString"},{id:1816636575,predicate:"langPackStringPluralized",params:[{name:"flags",type:"#"},{name:"key",type:"string"},{name:"zero_value",type:"flags.0?string"},{name:"one_value",type:"flags.1?string"},{name:"two_value",type:"flags.2?string"},{name:"few_value",type:"flags.3?string"},{name:"many_value",type:"flags.4?string"},{name:"other_value",type:"string"}],type:"LangPackString"},{id:695856818,predicate:"langPackStringDeleted",params:[{name:"key",type:"string"}],type:"LangPackString"},{id:-209337866,predicate:"langPackDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"strings",type:"Vector"}],type:"LangPackDifference"},{id:-288727837,predicate:"langPackLanguage",params:[{name:"flags",type:"#"},{name:"official",type:"flags.0?true"},{name:"rtl",type:"flags.2?true"},{name:"beta",type:"flags.3?true"},{name:"name",type:"string"},{name:"native_name",type:"string"},{name:"lang_code",type:"string"},{name:"base_lang_code",type:"flags.1?string"},{name:"plural_code",type:"string"},{name:"strings_count",type:"int"},{name:"translated_count",type:"int"},{name:"translations_url",type:"string"}],type:"LangPackLanguage"},{id:1180041828,predicate:"updateLangPackTooLong",params:[{name:"lang_code",type:"string"}],type:"Update"},{id:1442983757,predicate:"updateLangPack",params:[{name:"difference",type:"LangPackDifference"}],type:"Update"},{id:-859915345,predicate:"channelParticipantAdmin",params:[{name:"flags",type:"#"},{name:"can_edit",type:"flags.0?true"},{name:"self",type:"flags.1?true"},{name:"user_id",type:"int"},{name:"inviter_id",type:"flags.1?int"},{name:"promoted_by",type:"int"},{name:"date",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.2?string"}],type:"ChannelParticipant"},{id:1352785878,predicate:"channelParticipantBanned",params:[{name:"flags",type:"#"},{name:"left",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"kicked_by",type:"int"},{name:"date",type:"int"},{name:"banned_rights",type:"ChatBannedRights"}],type:"ChannelParticipant"},{id:338142689,predicate:"channelParticipantsBanned",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:106343499,predicate:"channelParticipantsSearch",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-421545947,predicate:"channelAdminLogEventActionChangeTitle",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1427671598,predicate:"channelAdminLogEventActionChangeAbout",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1783299128,predicate:"channelAdminLogEventActionChangeUsername",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1129042607,predicate:"channelAdminLogEventActionChangePhoto",params:[{name:"prev_photo",type:"Photo"},{name:"new_photo",type:"Photo"}],type:"ChannelAdminLogEventAction"},{id:460916654,predicate:"channelAdminLogEventActionToggleInvites",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:648939889,predicate:"channelAdminLogEventActionToggleSignatures",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-370660328,predicate:"channelAdminLogEventActionUpdatePinned",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1889215493,predicate:"channelAdminLogEventActionEditMessage",params:[{name:"prev_message",type:"Message"},{name:"new_message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1121994683,predicate:"channelAdminLogEventActionDeleteMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:405815507,predicate:"channelAdminLogEventActionParticipantJoin",params:[],type:"ChannelAdminLogEventAction"},{id:-124291086,predicate:"channelAdminLogEventActionParticipantLeave",params:[],type:"ChannelAdminLogEventAction"},{id:-484690728,predicate:"channelAdminLogEventActionParticipantInvite",params:[{name:"participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-422036098,predicate:"channelAdminLogEventActionParticipantToggleBan",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-714643696,predicate:"channelAdminLogEventActionParticipantToggleAdmin",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:995769920,predicate:"channelAdminLogEvent",params:[{name:"id",type:"long"},{name:"date",type:"int"},{name:"user_id",type:"int"},{name:"action",type:"ChannelAdminLogEventAction"}],type:"ChannelAdminLogEvent"},{id:-309659827,predicate:"channels.adminLogResults",params:[{name:"events",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.AdminLogResults"},{id:-368018716,predicate:"channelAdminLogEventsFilter",params:[{name:"flags",type:"#"},{name:"join",type:"flags.0?true"},{name:"leave",type:"flags.1?true"},{name:"invite",type:"flags.2?true"},{name:"ban",type:"flags.3?true"},{name:"unban",type:"flags.4?true"},{name:"kick",type:"flags.5?true"},{name:"unkick",type:"flags.6?true"},{name:"promote",type:"flags.7?true"},{name:"demote",type:"flags.8?true"},{name:"info",type:"flags.9?true"},{name:"settings",type:"flags.10?true"},{name:"pinned",type:"flags.11?true"},{name:"edit",type:"flags.12?true"},{name:"delete",type:"flags.13?true"},{name:"group_call",type:"flags.14?true"},{name:"invites",type:"flags.15?true"}],type:"ChannelAdminLogEventsFilter"},{id:511092620,predicate:"topPeerCategoryPhoneCalls",params:[],type:"TopPeerCategory"},{id:-2143067670,predicate:"pageBlockAudio",params:[{name:"audio_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1558266229,predicate:"popularContact",params:[{name:"client_id",type:"long"},{name:"importers",type:"int"}],type:"PopularContact"},{id:1200788123,predicate:"messageActionScreenshotTaken",params:[],type:"MessageAction"},{id:-1634752813,predicate:"messages.favedStickersNotModified",params:[],type:"messages.FavedStickers"},{id:-209768682,predicate:"messages.favedStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"}],type:"messages.FavedStickers"},{id:-451831443,predicate:"updateFavedStickers",params:[],type:"Update"},{id:-1987495099,predicate:"updateChannelReadMessagesContents",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"}],type:"Update"},{id:-1040652646,predicate:"inputMessagesFilterMyMentions",params:[],type:"MessagesFilter"},{id:1887741886,predicate:"updateContactsReset",params:[],type:"Update"},{id:-1312568665,predicate:"channelAdminLogEventActionChangeStickerSet",params:[{name:"prev_stickerset",type:"InputStickerSet"},{name:"new_stickerset",type:"InputStickerSet"}],type:"ChannelAdminLogEventAction"},{id:-85549226,predicate:"messageActionCustomAction",params:[{name:"message",type:"string"}],type:"MessageAction"},{id:178373535,predicate:"inputPaymentCredentialsApplePay",params:[{name:"payment_data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-419271411,predicate:"inputMessagesFilterGeo",params:[],type:"MessagesFilter"},{id:-530392189,predicate:"inputMessagesFilterContacts",params:[],type:"MessagesFilter"},{id:1893427255,predicate:"updateChannelAvailableMessages",params:[{name:"channel_id",type:"int"},{name:"available_min_id",type:"int"}],type:"Update"},{id:1599903217,predicate:"channelAdminLogEventActionTogglePreHistoryHidden",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1759532989,predicate:"inputMediaGeoLive",params:[{name:"flags",type:"#"},{name:"stopped",type:"flags.0?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.2?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"}],type:"InputMedia"},{id:-1186937242,predicate:"messageMediaGeoLive",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"int"},{name:"proximity_notification_radius",type:"flags.1?int"}],type:"MessageMedia"},{id:1189204285,predicate:"recentMeUrlUnknown",params:[{name:"url",type:"string"}],type:"RecentMeUrl"},{id:-1917045962,predicate:"recentMeUrlUser",params:[{name:"url",type:"string"},{name:"user_id",type:"int"}],type:"RecentMeUrl"},{id:-1608834311,predicate:"recentMeUrlChat",params:[{name:"url",type:"string"},{name:"chat_id",type:"int"}],type:"RecentMeUrl"},{id:-347535331,predicate:"recentMeUrlChatInvite",params:[{name:"url",type:"string"},{name:"chat_invite",type:"ChatInvite"}],type:"RecentMeUrl"},{id:-1140172836,predicate:"recentMeUrlStickerSet",params:[{name:"url",type:"string"},{name:"set",type:"StickerSetCovered"}],type:"RecentMeUrl"},{id:235081943,predicate:"help.recentMeUrls",params:[{name:"urls",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.RecentMeUrls"},{id:-266911767,predicate:"channels.channelParticipantsNotModified",params:[],type:"channels.ChannelParticipants"},{id:1951620897,predicate:"messages.messagesNotModified",params:[{name:"count",type:"int"}],type:"messages.Messages"},{id:482797855,predicate:"inputSingleMedia",params:[{name:"flags",type:"#"},{name:"media",type:"InputMedia"},{name:"random_id",type:"long"},{name:"message",type:"string"},{name:"entities",type:"flags.0?Vector"}],type:"InputSingleMedia"},{id:-892779534,predicate:"webAuthorization",params:[{name:"hash",type:"long"},{name:"bot_id",type:"int"},{name:"domain",type:"string"},{name:"browser",type:"string"},{name:"platform",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"region",type:"string"}],type:"WebAuthorization"},{id:-313079300,predicate:"account.webAuthorizations",params:[{name:"authorizations",type:"Vector"},{name:"users",type:"Vector"}],type:"account.WebAuthorizations"},{id:-1502174430,predicate:"inputMessageID",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-1160215659,predicate:"inputMessageReplyTo",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-2037963464,predicate:"inputMessagePinned",params:[],type:"InputMessage"},{id:-1687559349,predicate:"messageEntityPhone",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1280209983,predicate:"messageEntityCashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1410748418,predicate:"messageActionBotAllowed",params:[{name:"domain",type:"string"}],type:"MessageAction"},{id:-55902537,predicate:"inputDialogPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputDialogPeer"},{id:-445792507,predicate:"dialogPeer",params:[{name:"peer",type:"Peer"}],type:"DialogPeer"},{id:223655517,predicate:"messages.foundStickerSetsNotModified",params:[],type:"messages.FoundStickerSets"},{id:1359533640,predicate:"messages.foundStickerSets",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.FoundStickerSets"},{id:1648543603,predicate:"fileHash",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"bytes"}],type:"FileHash"},{id:-104284986,predicate:"webDocumentNoProxy",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:1968737087,predicate:"inputClientProxy",params:[{name:"address",type:"string"},{name:"port",type:"int"}],type:"InputClientProxy"},{id:-483352705,predicate:"help.termsOfServiceUpdateEmpty",params:[{name:"expires",type:"int"}],type:"help.TermsOfServiceUpdate"},{id:686618977,predicate:"help.termsOfServiceUpdate",params:[{name:"expires",type:"int"},{name:"terms_of_service",type:"help.TermsOfService"}],type:"help.TermsOfServiceUpdate"},{id:859091184,predicate:"inputSecureFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"InputSecureFile"},{id:1399317950,predicate:"inputSecureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputSecureFile"},{id:-876089816,predicate:"inputSecureFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:1679398724,predicate:"secureFileEmpty",params:[],type:"SecureFile"},{id:-534283678,predicate:"secureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"date",type:"int"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureFile"},{id:-1964327229,predicate:"secureData",params:[{name:"data",type:"bytes"},{name:"data_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureData"},{id:2103482845,predicate:"securePlainPhone",params:[{name:"phone",type:"string"}],type:"SecurePlainData"},{id:569137759,predicate:"securePlainEmail",params:[{name:"email",type:"string"}],type:"SecurePlainData"},{id:-1658158621,predicate:"secureValueTypePersonalDetails",params:[],type:"SecureValueType"},{id:1034709504,predicate:"secureValueTypePassport",params:[],type:"SecureValueType"},{id:115615172,predicate:"secureValueTypeDriverLicense",params:[],type:"SecureValueType"},{id:-1596951477,predicate:"secureValueTypeIdentityCard",params:[],type:"SecureValueType"},{id:-1717268701,predicate:"secureValueTypeInternalPassport",params:[],type:"SecureValueType"},{id:-874308058,predicate:"secureValueTypeAddress",params:[],type:"SecureValueType"},{id:-63531698,predicate:"secureValueTypeUtilityBill",params:[],type:"SecureValueType"},{id:-1995211763,predicate:"secureValueTypeBankStatement",params:[],type:"SecureValueType"},{id:-1954007928,predicate:"secureValueTypeRentalAgreement",params:[],type:"SecureValueType"},{id:-1713143702,predicate:"secureValueTypePassportRegistration",params:[],type:"SecureValueType"},{id:-368907213,predicate:"secureValueTypeTemporaryRegistration",params:[],type:"SecureValueType"},{id:-1289704741,predicate:"secureValueTypePhone",params:[],type:"SecureValueType"},{id:-1908627474,predicate:"secureValueTypeEmail",params:[],type:"SecureValueType"},{id:411017418,predicate:"secureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?SecureFile"},{name:"reverse_side",type:"flags.2?SecureFile"},{name:"selfie",type:"flags.3?SecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"},{name:"hash",type:"bytes"}],type:"SecureValue"},{id:-618540889,predicate:"inputSecureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?InputSecureFile"},{name:"reverse_side",type:"flags.2?InputSecureFile"},{name:"selfie",type:"flags.3?InputSecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"}],type:"InputSecureValue"},{id:-316748368,predicate:"secureValueHash",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"}],type:"SecureValueHash"},{id:-391902247,predicate:"secureValueErrorData",params:[{name:"type",type:"SecureValueType"},{name:"data_hash",type:"bytes"},{name:"field",type:"string"},{name:"text",type:"string"}],type:"SecureValueError"},{id:12467706,predicate:"secureValueErrorFrontSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2037765467,predicate:"secureValueErrorReverseSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-449327402,predicate:"secureValueErrorSelfie",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:2054162547,predicate:"secureValueErrorFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:1717706985,predicate:"secureValueErrorFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:871426631,predicate:"secureCredentialsEncrypted",params:[{name:"data",type:"bytes"},{name:"hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureCredentialsEncrypted"},{id:-1389486888,predicate:"account.authorizationForm",params:[{name:"flags",type:"#"},{name:"required_types",type:"Vector"},{name:"values",type:"Vector"},{name:"errors",type:"Vector"},{name:"users",type:"Vector"},{name:"privacy_policy_url",type:"flags.0?string"}],type:"account.AuthorizationForm"},{id:-2128640689,predicate:"account.sentEmailCode",params:[{name:"email_pattern",type:"string"},{name:"length",type:"int"}],type:"account.SentEmailCode"},{id:455635795,predicate:"messageActionSecureValuesSentMe",params:[{name:"values",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"MessageAction"},{id:-648257196,predicate:"messageActionSecureValuesSent",params:[{name:"types",type:"Vector"}],type:"MessageAction"},{id:1722786150,predicate:"help.deepLinkInfoEmpty",params:[],type:"help.DeepLinkInfo"},{id:1783556146,predicate:"help.deepLinkInfo",params:[{name:"flags",type:"#"},{name:"update_app",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"help.DeepLinkInfo"},{id:289586518,predicate:"savedPhoneContact",params:[{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"date",type:"int"}],type:"SavedContact"},{id:1304052993,predicate:"account.takeout",params:[{name:"id",type:"long"}],type:"account.Takeout"},{id:700340377,predicate:"inputTakeoutFileLocation",params:[],type:"InputFileLocation"},{id:-513517117,predicate:"updateDialogUnreadMark",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-253500010,predicate:"messages.dialogsNotModified",params:[{name:"count",type:"int"}],type:"messages.Dialogs"},{id:-1625153079,predicate:"inputWebFileGeoPointLocation",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"access_hash",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"zoom",type:"int"},{name:"scale",type:"int"}],type:"InputWebFileLocation"},{id:-1255369827,predicate:"contacts.topPeersDisabled",params:[],type:"contacts.TopPeers"},{id:-1685456582,predicate:"inputReportReasonCopyright",params:[],type:"ReportReason"},{id:-732254058,predicate:"passwordKdfAlgoUnknown",params:[],type:"PasswordKdfAlgo"},{id:4883767,predicate:"securePasswordKdfAlgoUnknown",params:[],type:"SecurePasswordKdfAlgo"},{id:-1141711456,predicate:"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:-2042159726,predicate:"securePasswordKdfAlgoSHA512",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:354925740,predicate:"secureSecretSettings",params:[{name:"secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_secret",type:"bytes"},{name:"secure_secret_id",type:"long"}],type:"SecureSecretSettings"},{id:982592842,predicate:"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow",params:[{name:"salt1",type:"bytes"},{name:"salt2",type:"bytes"},{name:"g",type:"int"},{name:"p",type:"bytes"}],type:"PasswordKdfAlgo"},{id:-1736378792,predicate:"inputCheckPasswordEmpty",params:[],type:"InputCheckPasswordSRP"},{id:-763367294,predicate:"inputCheckPasswordSRP",params:[{name:"srp_id",type:"long"},{name:"A",type:"bytes"},{name:"M1",type:"bytes"}],type:"InputCheckPasswordSRP"},{id:-2036501105,predicate:"secureValueError",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-1592506512,predicate:"secureValueErrorTranslationFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:878931416,predicate:"secureValueErrorTranslationFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2103600678,predicate:"secureRequiredType",params:[{name:"flags",type:"#"},{name:"native_names",type:"flags.0?true"},{name:"selfie_required",type:"flags.1?true"},{name:"translation_required",type:"flags.2?true"},{name:"type",type:"SecureValueType"}],type:"SecureRequiredType"},{id:41187252,predicate:"secureRequiredTypeOneOf",params:[{name:"types",type:"Vector"}],type:"SecureRequiredType"},{id:-1078332329,predicate:"help.passportConfigNotModified",params:[],type:"help.PassportConfig"},{id:-1600596305,predicate:"help.passportConfig",params:[{name:"hash",type:"int"},{name:"countries_langs",type:"DataJSON"}],type:"help.PassportConfig"},{id:488313413,predicate:"inputAppEvent",params:[{name:"time",type:"double"},{name:"type",type:"string"},{name:"peer",type:"long"},{name:"data",type:"JSONValue"}],type:"InputAppEvent"},{id:-1059185703,predicate:"jsonObjectValue",params:[{name:"key",type:"string"},{name:"value",type:"JSONValue"}],type:"JSONObjectValue"},{id:1064139624,predicate:"jsonNull",params:[],type:"JSONValue"},{id:-952869270,predicate:"jsonBool",params:[{name:"value",type:"Bool"}],type:"JSONValue"},{id:736157604,predicate:"jsonNumber",params:[{name:"value",type:"double"}],type:"JSONValue"},{id:-1222740358,predicate:"jsonString",params:[{name:"value",type:"string"}],type:"JSONValue"},{id:-146520221,predicate:"jsonArray",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1715350371,predicate:"jsonObject",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1311015810,predicate:"inputNotifyBroadcasts",params:[],type:"InputNotifyPeer"},{id:-703403793,predicate:"notifyBroadcasts",params:[],type:"NotifyPeer"},{id:-311786236,predicate:"textSubscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-939827711,predicate:"textSuperscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:55281185,predicate:"textMarked",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:483104362,predicate:"textPhone",params:[{name:"text",type:"RichText"},{name:"phone",type:"string"}],type:"RichText"},{id:136105807,predicate:"textImage",params:[{name:"document_id",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"RichText"},{id:504660880,predicate:"pageBlockKicker",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:878078826,predicate:"pageTableCell",params:[{name:"flags",type:"#"},{name:"header",type:"flags.0?true"},{name:"align_center",type:"flags.3?true"},{name:"align_right",type:"flags.4?true"},{name:"valign_middle",type:"flags.5?true"},{name:"valign_bottom",type:"flags.6?true"},{name:"text",type:"flags.7?RichText"},{name:"colspan",type:"flags.1?int"},{name:"rowspan",type:"flags.2?int"}],type:"PageTableCell"},{id:-524237339,predicate:"pageTableRow",params:[{name:"cells",type:"Vector"}],type:"PageTableRow"},{id:-1085412734,predicate:"pageBlockTable",params:[{name:"flags",type:"#"},{name:"bordered",type:"flags.0?true"},{name:"striped",type:"flags.1?true"},{name:"title",type:"RichText"},{name:"rows",type:"Vector"}],type:"PageBlock"},{id:1869903447,predicate:"pageCaption",params:[{name:"text",type:"RichText"},{name:"credit",type:"RichText"}],type:"PageCaption"},{id:-1188055347,predicate:"pageListItemText",params:[{name:"text",type:"RichText"}],type:"PageListItem"},{id:635466748,predicate:"pageListItemBlocks",params:[{name:"blocks",type:"Vector"}],type:"PageListItem"},{id:1577484359,predicate:"pageListOrderedItemText",params:[{name:"num",type:"string"},{name:"text",type:"RichText"}],type:"PageListOrderedItem"},{id:-1730311882,predicate:"pageListOrderedItemBlocks",params:[{name:"num",type:"string"},{name:"blocks",type:"Vector"}],type:"PageListOrderedItem"},{id:-1702174239,predicate:"pageBlockOrderedList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:1987480557,predicate:"pageBlockDetails",params:[{name:"flags",type:"#"},{name:"open",type:"flags.0?true"},{name:"blocks",type:"Vector"},{name:"title",type:"RichText"}],type:"PageBlock"},{id:-1282352120,predicate:"pageRelatedArticle",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"title",type:"flags.0?string"},{name:"description",type:"flags.1?string"},{name:"photo_id",type:"flags.2?long"},{name:"author",type:"flags.3?string"},{name:"published_date",type:"flags.4?int"}],type:"PageRelatedArticle"},{id:370236054,predicate:"pageBlockRelatedArticles",params:[{name:"title",type:"RichText"},{name:"articles",type:"Vector"}],type:"PageBlock"},{id:-1538310410,predicate:"pageBlockMap",params:[{name:"geo",type:"GeoPoint"},{name:"zoom",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-1738178803,predicate:"page",params:[{name:"flags",type:"#"},{name:"part",type:"flags.0?true"},{name:"rtl",type:"flags.1?true"},{name:"v2",type:"flags.2?true"},{name:"url",type:"string"},{name:"blocks",type:"Vector"},{name:"photos",type:"Vector"},{name:"documents",type:"Vector"},{name:"views",type:"flags.3?int"}],type:"Page"},{id:-610373422,predicate:"inputPrivacyKeyPhoneP2P",params:[],type:"InputPrivacyKey"},{id:961092808,predicate:"privacyKeyPhoneP2P",params:[],type:"PrivacyKey"},{id:894777186,predicate:"textAnchor",params:[{name:"text",type:"RichText"},{name:"name",type:"string"}],type:"RichText"},{id:-1945767479,predicate:"help.supportName",params:[{name:"name",type:"string"}],type:"help.SupportName"},{id:-206688531,predicate:"help.userInfoEmpty",params:[],type:"help.UserInfo"},{id:32192344,predicate:"help.userInfo",params:[{name:"message",type:"string"},{name:"entities",type:"Vector"},{name:"author",type:"string"},{name:"date",type:"int"}],type:"help.UserInfo"},{id:-202219658,predicate:"messageActionContactSignUp",params:[],type:"MessageAction"},{id:-1398708869,predicate:"updateMessagePoll",params:[{name:"flags",type:"#"},{name:"poll_id",type:"long"},{name:"poll",type:"flags.0?Poll"},{name:"results",type:"PollResults"}],type:"Update"},{id:1823064809,predicate:"pollAnswer",params:[{name:"text",type:"string"},{name:"option",type:"bytes"}],type:"PollAnswer"},{id:-2032041631,predicate:"poll",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"closed",type:"flags.0?true"},{name:"public_voters",type:"flags.1?true"},{name:"multiple_choice",type:"flags.2?true"},{name:"quiz",type:"flags.3?true"},{name:"question",type:"string"},{name:"answers",type:"Vector"},{name:"close_period",type:"flags.4?int"},{name:"close_date",type:"flags.5?int"}],type:"Poll"},{id:997055186,predicate:"pollAnswerVoters",params:[{name:"flags",type:"#"},{name:"chosen",type:"flags.0?true"},{name:"correct",type:"flags.1?true"},{name:"option",type:"bytes"},{name:"voters",type:"int"}],type:"PollAnswerVoters"},{id:-1159937629,predicate:"pollResults",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"results",type:"flags.1?Vector"},{name:"total_voters",type:"flags.2?int"},{name:"recent_voters",type:"flags.3?Vector"},{name:"solution",type:"flags.4?string"},{name:"solution_entities",type:"flags.4?Vector"}],type:"PollResults"},{id:261416433,predicate:"inputMediaPoll",params:[{name:"flags",type:"#"},{name:"poll",type:"Poll"},{name:"correct_answers",type:"flags.0?Vector"},{name:"solution",type:"flags.1?string"},{name:"solution_entities",type:"flags.1?Vector"}],type:"InputMedia"},{id:1272375192,predicate:"messageMediaPoll",params:[{name:"poll",type:"Poll"},{name:"results",type:"PollResults"}],type:"MessageMedia"},{id:-264117680,predicate:"chatOnlines",params:[{name:"onlines",type:"int"}],type:"ChatOnlines"},{id:1202287072,predicate:"statsURL",params:[{name:"url",type:"string"}],type:"StatsURL"},{id:-525288402,predicate:"photoStrippedSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:1605510357,predicate:"chatAdminRights",params:[{name:"flags",type:"#"},{name:"change_info",type:"flags.0?true"},{name:"post_messages",type:"flags.1?true"},{name:"edit_messages",type:"flags.2?true"},{name:"delete_messages",type:"flags.3?true"},{name:"ban_users",type:"flags.4?true"},{name:"invite_users",type:"flags.5?true"},{name:"pin_messages",type:"flags.7?true"},{name:"add_admins",type:"flags.9?true"},{name:"anonymous",type:"flags.10?true"},{name:"manage_call",type:"flags.11?true"},{name:"other",type:"flags.12?true"}],type:"ChatAdminRights"},{id:-1626209256,predicate:"chatBannedRights",params:[{name:"flags",type:"#"},{name:"view_messages",type:"flags.0?true"},{name:"send_messages",type:"flags.1?true"},{name:"send_media",type:"flags.2?true"},{name:"send_stickers",type:"flags.3?true"},{name:"send_gifs",type:"flags.4?true"},{name:"send_games",type:"flags.5?true"},{name:"send_inline",type:"flags.6?true"},{name:"embed_links",type:"flags.7?true"},{name:"send_polls",type:"flags.8?true"},{name:"change_info",type:"flags.10?true"},{name:"invite_users",type:"flags.15?true"},{name:"pin_messages",type:"flags.17?true"},{name:"until_date",type:"int"}],type:"ChatBannedRights"},{id:1421875280,predicate:"updateChatDefaultBannedRights",params:[{name:"peer",type:"Peer"},{name:"default_banned_rights",type:"ChatBannedRights"},{name:"version",type:"int"}],type:"Update"},{id:-433014407,predicate:"inputWallPaper",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputWallPaper"},{id:1913199744,predicate:"inputWallPaperSlug",params:[{name:"slug",type:"string"}],type:"InputWallPaper"},{id:-1150621555,predicate:"channelParticipantsContacts",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:771095562,predicate:"channelAdminLogEventActionDefaultBannedRights",params:[{name:"prev_banned_rights",type:"ChatBannedRights"},{name:"new_banned_rights",type:"ChatBannedRights"}],type:"ChannelAdminLogEventAction"},{id:-1895328189,predicate:"channelAdminLogEventActionStopPoll",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:471437699,predicate:"account.wallPapersNotModified",params:[],type:"account.WallPapers"},{id:1881892265,predicate:"account.wallPapers",params:[{name:"hash",type:"int"},{name:"wallpapers",type:"Vector"}],type:"account.WallPapers"},{id:-557924733,predicate:"codeSettings",params:[{name:"flags",type:"#"},{name:"allow_flashcall",type:"flags.0?true"},{name:"current_number",type:"flags.1?true"},{name:"allow_app_hash",type:"flags.4?true"}],type:"CodeSettings"},{id:499236004,predicate:"wallPaperSettings",params:[{name:"flags",type:"#"},{name:"blur",type:"flags.1?true"},{name:"motion",type:"flags.2?true"},{name:"background_color",type:"flags.0?int"},{name:"second_background_color",type:"flags.4?int"},{name:"third_background_color",type:"flags.5?int"},{name:"fourth_background_color",type:"flags.6?int"},{name:"intensity",type:"flags.3?int"},{name:"rotation",type:"flags.4?int"}],type:"WallPaperSettings"},{id:-532532493,predicate:"autoDownloadSettings",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"video_preload_large",type:"flags.1?true"},{name:"audio_preload_next",type:"flags.2?true"},{name:"phonecalls_less_data",type:"flags.3?true"},{name:"photo_size_max",type:"int"},{name:"video_size_max",type:"int"},{name:"file_size_max",type:"int"},{name:"video_upload_maxbitrate",type:"int"}],type:"AutoDownloadSettings"},{id:1674235686,predicate:"account.autoDownloadSettings",params:[{name:"low",type:"AutoDownloadSettings"},{name:"medium",type:"AutoDownloadSettings"},{name:"high",type:"AutoDownloadSettings"}],type:"account.AutoDownloadSettings"},{id:-709641735,predicate:"emojiKeyword",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:594408994,predicate:"emojiKeywordDeleted",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:1556570557,predicate:"emojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"keywords",type:"Vector"}],type:"EmojiKeywordsDifference"},{id:-1519029347,predicate:"emojiURL",params:[{name:"url",type:"string"}],type:"EmojiURL"},{id:-1275374751,predicate:"emojiLanguage",params:[{name:"lang_code",type:"string"}],type:"EmojiLanguage"},{id:-1529000952,predicate:"inputPrivacyKeyForwards",params:[],type:"InputPrivacyKey"},{id:1777096355,predicate:"privacyKeyForwards",params:[],type:"PrivacyKey"},{id:1461304012,predicate:"inputPrivacyKeyProfilePhoto",params:[],type:"InputPrivacyKey"},{id:-1777000467,predicate:"privacyKeyProfilePhoto",params:[],type:"PrivacyKey"},{id:1075322878,predicate:"inputPhotoFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:-667654413,predicate:"inputPhotoLegacyFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"}],type:"InputFileLocation"},{id:925204121,predicate:"inputPeerPhotoFileLocation",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"photo_id",type:"long"}],type:"InputFileLocation"},{id:-1652231205,predicate:"inputStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb_version",type:"int"}],type:"InputFileLocation"},{id:-11252123,predicate:"folder",params:[{name:"flags",type:"#"},{name:"autofill_new_broadcasts",type:"flags.0?true"},{name:"autofill_public_groups",type:"flags.1?true"},{name:"autofill_new_correspondents",type:"flags.2?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"flags.3?ChatPhoto"}],type:"Folder"},{id:1908216652,predicate:"dialogFolder",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"folder",type:"Folder"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"unread_muted_peers_count",type:"int"},{name:"unread_unmuted_peers_count",type:"int"},{name:"unread_muted_messages_count",type:"int"},{name:"unread_unmuted_messages_count",type:"int"}],type:"Dialog"},{id:1684014375,predicate:"inputDialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"InputDialogPeer"},{id:1363483106,predicate:"dialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"DialogPeer"},{id:-70073706,predicate:"inputFolderPeer",params:[{name:"peer",type:"InputPeer"},{name:"folder_id",type:"int"}],type:"InputFolderPeer"},{id:-373643672,predicate:"folderPeer",params:[{name:"peer",type:"Peer"},{name:"folder_id",type:"int"}],type:"FolderPeer"},{id:422972864,predicate:"updateFolderPeers",params:[{name:"folder_peers",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:756118935,predicate:"inputUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputUser"},{id:707290417,predicate:"inputChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputChannel"},{id:398123750,predicate:"inputPeerUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputPeer"},{id:-1667893317,predicate:"inputPeerChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputPeer"},{id:55761658,predicate:"inputPrivacyKeyPhoneNumber",params:[],type:"InputPrivacyKey"},{id:-778378131,predicate:"privacyKeyPhoneNumber",params:[],type:"PrivacyKey"},{id:-1472172887,predicate:"topPeerCategoryForwardUsers",params:[],type:"TopPeerCategory"},{id:-68239120,predicate:"topPeerCategoryForwardChats",params:[],type:"TopPeerCategory"},{id:-1569748965,predicate:"channelAdminLogEventActionChangeLinkedChat",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-398136321,predicate:"messages.searchCounter",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"filter",type:"MessagesFilter"},{name:"count",type:"int"}],type:"messages.SearchCounter"},{id:280464681,predicate:"keyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.0?string"},{name:"url",type:"string"},{name:"button_id",type:"int"}],type:"KeyboardButton"},{id:-802258988,predicate:"inputKeyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.1?string"},{name:"url",type:"string"},{name:"bot",type:"InputUser"}],type:"KeyboardButton"},{id:-1831650802,predicate:"urlAuthResultRequest",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"bot",type:"User"},{name:"domain",type:"string"}],type:"UrlAuthResult"},{id:-1886646706,predicate:"urlAuthResultAccepted",params:[{name:"url",type:"string"}],type:"UrlAuthResult"},{id:-1445536993,predicate:"urlAuthResultDefault",params:[],type:"UrlAuthResult"},{id:1283572154,predicate:"inputPrivacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:-668769361,predicate:"inputPrivacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:415136107,predicate:"privacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1397881200,predicate:"privacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1672577397,predicate:"messageEntityUnderline",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1090087980,predicate:"messageEntityStrike",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:34469328,predicate:"messageEntityBlockquote",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1786671974,predicate:"updatePeerSettings",params:[{name:"peer",type:"Peer"},{name:"settings",type:"PeerSettings"}],type:"Update"},{id:-1078612597,predicate:"channelLocationEmpty",params:[],type:"ChannelLocation"},{id:547062491,predicate:"channelLocation",params:[{name:"geo_point",type:"GeoPoint"},{name:"address",type:"string"}],type:"ChannelLocation"},{id:-901375139,predicate:"peerLocated",params:[{name:"peer",type:"Peer"},{name:"expires",type:"int"},{name:"distance",type:"int"}],type:"PeerLocated"},{id:-1263546448,predicate:"updatePeerLocated",params:[{name:"peers",type:"Vector"}],type:"Update"},{id:241923758,predicate:"channelAdminLogEventActionChangeLocation",params:[{name:"prev_value",type:"ChannelLocation"},{name:"new_value",type:"ChannelLocation"}],type:"ChannelAdminLogEventAction"},{id:-606798099,predicate:"inputReportReasonGeoIrrelevant",params:[],type:"ReportReason"},{id:1401984889,predicate:"channelAdminLogEventActionToggleSlowMode",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:1148485274,predicate:"auth.authorizationSignUpRequired",params:[{name:"flags",type:"#"},{name:"terms_of_service",type:"flags.0?help.TermsOfService"}],type:"auth.Authorization"},{id:-666824391,predicate:"payments.paymentVerificationNeeded",params:[{name:"url",type:"string"}],type:"payments.PaymentResult"},{id:42402760,predicate:"inputStickerSetAnimatedEmoji",params:[],type:"InputStickerSet"},{id:967122427,predicate:"updateNewScheduledMessage",params:[{name:"message",type:"Message"}],type:"Update"},{id:-1870238482,predicate:"updateDeleteScheduledMessages",params:[{name:"peer",type:"Peer"},{name:"messages",type:"Vector"}],type:"Update"},{id:-797791052,predicate:"restrictionReason",params:[{name:"platform",type:"string"},{name:"reason",type:"string"},{name:"text",type:"string"}],type:"RestrictionReason"},{id:1012306921,predicate:"inputTheme",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputTheme"},{id:-175567375,predicate:"inputThemeSlug",params:[{name:"slug",type:"string"}],type:"InputTheme"},{id:42930452,predicate:"theme",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?Document"},{name:"settings",type:"flags.3?ThemeSettings"},{name:"installs_count",type:"int"}],type:"Theme"},{id:-199313886,predicate:"account.themesNotModified",params:[],type:"account.Themes"},{id:2137482273,predicate:"account.themes",params:[{name:"hash",type:"int"},{name:"themes",type:"Vector"}],type:"account.Themes"},{id:-2112423005,predicate:"updateTheme",params:[{name:"theme",type:"Theme"}],type:"Update"},{id:-786326563,predicate:"inputPrivacyKeyAddedByPhone",params:[],type:"InputPrivacyKey"},{id:1124062251,predicate:"privacyKeyAddedByPhone",params:[],type:"PrivacyKey"},{id:-2027964103,predicate:"updateGeoLiveViewed",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"}],type:"Update"},{id:1448076945,predicate:"updateLoginToken",params:[],type:"Update"},{id:1654593920,predicate:"auth.loginToken",params:[{name:"expires",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:110008598,predicate:"auth.loginTokenMigrateTo",params:[{name:"dc_id",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:957176926,predicate:"auth.loginTokenSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.LoginToken"},{id:1474462241,predicate:"account.contentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"},{name:"sensitive_can_change",type:"flags.1?true"}],type:"account.ContentSettings"},{id:-1456996667,predicate:"messages.inactiveChats",params:[{name:"dates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.InactiveChats"},{id:-1012849566,predicate:"baseThemeClassic",params:[],type:"BaseTheme"},{id:-69724536,predicate:"baseThemeDay",params:[],type:"BaseTheme"},{id:-1212997976,predicate:"baseThemeNight",params:[],type:"BaseTheme"},{id:1834973166,predicate:"baseThemeTinted",params:[],type:"BaseTheme"},{id:1527845466,predicate:"baseThemeArctic",params:[],type:"BaseTheme"},{id:-1770371538,predicate:"inputWallPaperNoFile",params:[{name:"id",type:"long"}],type:"InputWallPaper"},{id:-528465642,predicate:"wallPaperNoFile",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"default",type:"flags.1?true"},{name:"dark",type:"flags.4?true"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:-1118798639,predicate:"inputThemeSettings",params:[{name:"flags",type:"#"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"message_top_color",type:"flags.0?int"},{name:"message_bottom_color",type:"flags.0?int"},{name:"wallpaper",type:"flags.1?InputWallPaper"},{name:"wallpaper_settings",type:"flags.1?WallPaperSettings"}],type:"InputThemeSettings"},{id:-1676371894,predicate:"themeSettings",params:[{name:"flags",type:"#"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"message_top_color",type:"flags.0?int"},{name:"message_bottom_color",type:"flags.0?int"},{name:"wallpaper",type:"flags.1?WallPaper"}],type:"ThemeSettings"},{id:1421174295,predicate:"webPageAttributeTheme",params:[{name:"flags",type:"#"},{name:"documents",type:"flags.0?Vector"},{name:"settings",type:"flags.1?ThemeSettings"}],type:"WebPageAttribute"},{id:938909451,predicate:"updateMessagePollVote",params:[{name:"poll_id",type:"long"},{name:"user_id",type:"int"},{name:"options",type:"Vector"},{name:"qts",type:"int"}],type:"Update"},{id:-1567730343,predicate:"messageUserVote",params:[{name:"user_id",type:"int"},{name:"option",type:"bytes"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:909603888,predicate:"messageUserVoteInputOption",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:244310238,predicate:"messageUserVoteMultiple",params:[{name:"user_id",type:"int"},{name:"options",type:"Vector"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:136574537,predicate:"messages.votesList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"votes",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.VotesList"},{id:-1144565411,predicate:"keyboardButtonRequestPoll",params:[{name:"flags",type:"#"},{name:"quiz",type:"flags.0?Bool"},{name:"text",type:"string"}],type:"KeyboardButton"},{id:1981704948,predicate:"messageEntityBankCard",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-177732982,predicate:"bankCardOpenUrl",params:[{name:"url",type:"string"},{name:"name",type:"string"}],type:"BankCardOpenUrl"},{id:1042605427,predicate:"payments.bankCardData",params:[{name:"title",type:"string"},{name:"open_urls",type:"Vector"}],type:"payments.BankCardData"},{id:-118740917,predicate:"peerSelfLocated",params:[{name:"expires",type:"int"}],type:"PeerLocated"},{id:1949890536,predicate:"dialogFilter",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"non_contacts",type:"flags.1?true"},{name:"groups",type:"flags.2?true"},{name:"broadcasts",type:"flags.3?true"},{name:"bots",type:"flags.4?true"},{name:"exclude_muted",type:"flags.11?true"},{name:"exclude_read",type:"flags.12?true"},{name:"exclude_archived",type:"flags.13?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"emoticon",type:"flags.25?string"},{name:"pinned_peers",type:"Vector"},{name:"include_peers",type:"Vector"},{name:"exclude_peers",type:"Vector"}],type:"DialogFilter"},{id:2004110666,predicate:"dialogFilterSuggested",params:[{name:"filter",type:"DialogFilter"},{name:"description",type:"string"}],type:"DialogFilterSuggested"},{id:654302845,predicate:"updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Update"},{id:-1512627963,predicate:"updateDialogFilterOrder",params:[{name:"order",type:"Vector"}],type:"Update"},{id:889491791,predicate:"updateDialogFilters",params:[],type:"Update"},{id:-1237848657,predicate:"statsDateRangeDays",params:[{name:"min_date",type:"int"},{name:"max_date",type:"int"}],type:"StatsDateRangeDays"},{id:-884757282,predicate:"statsAbsValueAndPrev",params:[{name:"current",type:"double"},{name:"previous",type:"double"}],type:"StatsAbsValueAndPrev"},{id:-875679776,predicate:"statsPercentValue",params:[{name:"part",type:"double"},{name:"total",type:"double"}],type:"StatsPercentValue"},{id:1244130093,predicate:"statsGraphAsync",params:[{name:"token",type:"string"}],type:"StatsGraph"},{id:-1092839390,predicate:"statsGraphError",params:[{name:"error",type:"string"}],type:"StatsGraph"},{id:-1901828938,predicate:"statsGraph",params:[{name:"flags",type:"#"},{name:"json",type:"DataJSON"},{name:"zoom_token",type:"flags.0?string"}],type:"StatsGraph"},{id:-1387279939,predicate:"messageInteractionCounters",params:[{name:"msg_id",type:"int"},{name:"views",type:"int"},{name:"forwards",type:"int"}],type:"MessageInteractionCounters"},{id:-1107852396,predicate:"stats.broadcastStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"followers",type:"StatsAbsValueAndPrev"},{name:"views_per_post",type:"StatsAbsValueAndPrev"},{name:"shares_per_post",type:"StatsAbsValueAndPrev"},{name:"enabled_notifications",type:"StatsPercentValue"},{name:"growth_graph",type:"StatsGraph"},{name:"followers_graph",type:"StatsGraph"},{name:"mute_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"interactions_graph",type:"StatsGraph"},{name:"iv_interactions_graph",type:"StatsGraph"},{name:"views_by_source_graph",type:"StatsGraph"},{name:"new_followers_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"recent_message_interactions",type:"Vector"}],type:"stats.BroadcastStats"},{id:-428884101,predicate:"inputMediaDice",params:[{name:"emoticon",type:"string"}],type:"InputMedia"},{id:1065280907,predicate:"messageMediaDice",params:[{name:"value",type:"int"},{name:"emoticon",type:"string"}],type:"MessageMedia"},{id:-427863538,predicate:"inputStickerSetDice",params:[{name:"emoticon",type:"string"}],type:"InputStickerSet"},{id:-1728664459,predicate:"help.promoDataEmpty",params:[{name:"expires",type:"int"}],type:"help.PromoData"},{id:-1942390465,predicate:"help.promoData",params:[{name:"flags",type:"#"},{name:"proxy",type:"flags.0?true"},{name:"expires",type:"int"},{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"psa_type",type:"flags.1?string"},{name:"psa_message",type:"flags.2?string"}],type:"help.PromoData"},{id:-567037804,predicate:"videoSize",params:[{name:"flags",type:"#"},{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"},{name:"video_start_ts",type:"flags.0?double"}],type:"VideoSize"},{id:643940105,predicate:"updatePhoneCallSignalingData",params:[{name:"phone_call_id",type:"long"},{name:"data",type:"bytes"}],type:"Update"},{id:1634294960,predicate:"chatInvitePeek",params:[{name:"chat",type:"Chat"},{name:"expires",type:"int"}],type:"ChatInvite"},{id:418631927,predicate:"statsGroupTopPoster",params:[{name:"user_id",type:"int"},{name:"messages",type:"int"},{name:"avg_chars",type:"int"}],type:"StatsGroupTopPoster"},{id:1611985938,predicate:"statsGroupTopAdmin",params:[{name:"user_id",type:"int"},{name:"deleted",type:"int"},{name:"kicked",type:"int"},{name:"banned",type:"int"}],type:"StatsGroupTopAdmin"},{id:831924812,predicate:"statsGroupTopInviter",params:[{name:"user_id",type:"int"},{name:"invitations",type:"int"}],type:"StatsGroupTopInviter"},{id:-276825834,predicate:"stats.megagroupStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"members",type:"StatsAbsValueAndPrev"},{name:"messages",type:"StatsAbsValueAndPrev"},{name:"viewers",type:"StatsAbsValueAndPrev"},{name:"posters",type:"StatsAbsValueAndPrev"},{name:"growth_graph",type:"StatsGraph"},{name:"members_graph",type:"StatsGraph"},{name:"new_members_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"messages_graph",type:"StatsGraph"},{name:"actions_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"weekdays_graph",type:"StatsGraph"},{name:"top_posters",type:"Vector"},{name:"top_admins",type:"Vector"},{name:"top_inviters",type:"Vector"},{name:"users",type:"Vector"}],type:"stats.MegagroupStats"},{id:-1096616924,predicate:"globalPrivacySettings",params:[{name:"flags",type:"#"},{name:"archive_and_mute_new_noncontact_peers",type:"flags.0?Bool"}],type:"GlobalPrivacySettings"},{id:1667228533,predicate:"phoneConnectionWebrtc",params:[{name:"flags",type:"#"},{name:"turn",type:"flags.0?true"},{name:"stun",type:"flags.1?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"username",type:"string"},{name:"password",type:"string"}],type:"PhoneConnection"},{id:1107543535,predicate:"help.countryCode",params:[{name:"flags",type:"#"},{name:"country_code",type:"string"},{name:"prefixes",type:"flags.0?Vector"},{name:"patterns",type:"flags.1?Vector"}],type:"help.CountryCode"},{id:-1014526429,predicate:"help.country",params:[{name:"flags",type:"#"},{name:"hidden",type:"flags.0?true"},{name:"iso2",type:"string"},{name:"default_name",type:"string"},{name:"name",type:"flags.1?string"},{name:"country_codes",type:"Vector"}],type:"help.Country"},{id:-1815339214,predicate:"help.countriesListNotModified",params:[],type:"help.CountriesList"},{id:-2016381538,predicate:"help.countriesList",params:[{name:"countries",type:"Vector"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:1163625789,predicate:"messageViews",params:[{name:"flags",type:"#"},{name:"views",type:"flags.0?int"},{name:"forwards",type:"flags.1?int"},{name:"replies",type:"flags.2?MessageReplies"}],type:"MessageViews"},{id:1854571743,predicate:"updateChannelMessageForwards",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"},{name:"forwards",type:"int"}],type:"Update"},{id:-96535659,predicate:"photoSizeProgressive",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"sizes",type:"Vector"}],type:"PhotoSize"},{id:-1228606141,predicate:"messages.messageViews",params:[{name:"views",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.MessageViews"},{id:482860628,predicate:"updateReadChannelDiscussionInbox",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"},{name:"broadcast_id",type:"flags.0?int"},{name:"broadcast_post",type:"flags.0?int"}],type:"Update"},{id:1178116716,predicate:"updateReadChannelDiscussionOutbox",params:[{name:"channel_id",type:"int"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Update"},{id:-170029155,predicate:"messages.discussionMessage",params:[{name:"flags",type:"#"},{name:"messages",type:"Vector"},{name:"max_id",type:"flags.0?int"},{name:"read_inbox_max_id",type:"flags.1?int"},{name:"read_outbox_max_id",type:"flags.2?int"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.DiscussionMessage"},{id:-1495959709,predicate:"messageReplyHeader",params:[{name:"flags",type:"#"},{name:"reply_to_msg_id",type:"int"},{name:"reply_to_peer_id",type:"flags.0?Peer"},{name:"reply_to_top_id",type:"flags.1?int"}],type:"MessageReplyHeader"},{id:1093204652,predicate:"messageReplies",params:[{name:"flags",type:"#"},{name:"comments",type:"flags.0?true"},{name:"replies",type:"int"},{name:"replies_pts",type:"int"},{name:"recent_repliers",type:"flags.1?Vector"},{name:"channel_id",type:"flags.0?int"},{name:"max_id",type:"flags.2?int"},{name:"read_max_id",type:"flags.3?int"}],type:"MessageReplies"},{id:610945826,predicate:"updatePeerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"blocked",type:"Bool"}],type:"Update"},{id:-386039788,predicate:"peerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"date",type:"int"}],type:"PeerBlocked"},{id:1796675352,predicate:"updateChannelUserTyping",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"top_msg_id",type:"flags.0?int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-1392895362,predicate:"inputMessageCallbackQuery",params:[{name:"id",type:"int"},{name:"query_id",type:"long"}],type:"InputMessage"},{id:453242886,predicate:"channelParticipantLeft",params:[{name:"peer",type:"Peer"}],type:"ChannelParticipant"},{id:-531931925,predicate:"channelParticipantsMentions",params:[{name:"flags",type:"#"},{name:"q",type:"flags.0?string"},{name:"top_msg_id",type:"flags.1?int"}],type:"ChannelParticipantsFilter"},{id:-309990731,predicate:"updatePinnedMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2054649973,predicate:"updatePinnedChannelMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"int"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:464520273,predicate:"inputMessagesFilterPinned",params:[],type:"MessagesFilter"},{id:-1986399595,predicate:"stats.messageStats",params:[{name:"views_graph",type:"StatsGraph"}],type:"stats.MessageStats"},{id:-1730095465,predicate:"messageActionGeoProximityReached",params:[{name:"from_id",type:"Peer"},{name:"to_id",type:"Peer"},{name:"distance",type:"int"}],type:"MessageAction"},{id:-668906175,predicate:"photoPathSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:-651419003,predicate:"speakingInGroupCallAction",params:[],type:"SendMessageAction"},{id:2004925620,predicate:"groupCallDiscarded",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"duration",type:"int"}],type:"GroupCall"},{id:-711498484,predicate:"groupCall",params:[{name:"flags",type:"#"},{name:"join_muted",type:"flags.1?true"},{name:"can_change_join_muted",type:"flags.2?true"},{name:"join_date_asc",type:"flags.6?true"},{name:"schedule_start_subscribed",type:"flags.8?true"},{name:"can_start_video",type:"flags.9?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"participants_count",type:"int"},{name:"title",type:"flags.3?string"},{name:"stream_dc_id",type:"flags.4?int"},{name:"record_start_date",type:"flags.5?int"},{name:"schedule_date",type:"flags.7?int"},{name:"unmuted_video_count",type:"flags.10?int"},{name:"unmuted_video_limit",type:"int"},{name:"version",type:"int"}],type:"GroupCall"},{id:-659913713,predicate:"inputGroupCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGroupCall"},{id:2047704898,predicate:"messageActionGroupCall",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"duration",type:"flags.0?int"}],type:"MessageAction"},{id:1991897370,predicate:"messageActionInviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-341428482,predicate:"groupCallParticipant",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"left",type:"flags.1?true"},{name:"can_self_unmute",type:"flags.2?true"},{name:"just_joined",type:"flags.4?true"},{name:"versioned",type:"flags.5?true"},{name:"min",type:"flags.8?true"},{name:"muted_by_you",type:"flags.9?true"},{name:"volume_by_admin",type:"flags.10?true"},{name:"self",type:"flags.12?true"},{name:"video_joined",type:"flags.15?true"},{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"active_date",type:"flags.3?int"},{name:"source",type:"int"},{name:"volume",type:"flags.7?int"},{name:"about",type:"flags.11?string"},{name:"raise_hand_rating",type:"flags.13?long"},{name:"video",type:"flags.6?GroupCallParticipantVideo"},{name:"presentation",type:"flags.14?GroupCallParticipantVideo"}],type:"GroupCallParticipant"},{id:321954198,predicate:"updateChat",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-219423922,predicate:"updateGroupCallParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"Update"},{id:-1537295973,predicate:"updateGroupCall",params:[{name:"chat_id",type:"int"},{name:"call",type:"GroupCall"}],type:"Update"},{id:-1636664659,predicate:"phone.groupCall",params:[{name:"call",type:"GroupCall"},{name:"participants",type:"Vector"},{name:"participants_next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.GroupCall"},{id:-193506890,predicate:"phone.groupParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"version",type:"int"}],type:"phone.GroupParticipants"},{id:813821341,predicate:"inlineQueryPeerTypeSameBotPM",params:[],type:"InlineQueryPeerType"},{id:-2093215828,predicate:"inlineQueryPeerTypePM",params:[],type:"InlineQueryPeerType"},{id:-681130742,predicate:"inlineQueryPeerTypeChat",params:[],type:"InlineQueryPeerType"},{id:1589952067,predicate:"inlineQueryPeerTypeMegagroup",params:[],type:"InlineQueryPeerType"},{id:1664413338,predicate:"inlineQueryPeerTypeBroadcast",params:[],type:"InlineQueryPeerType"},{id:589338437,predicate:"channelAdminLogEventActionStartGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-610299584,predicate:"channelAdminLogEventActionDiscardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-115071790,predicate:"channelAdminLogEventActionParticipantMute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:-431740480,predicate:"channelAdminLogEventActionParticipantUnmute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1456906823,predicate:"channelAdminLogEventActionToggleGroupCallSetting",params:[{name:"join_muted",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1966921727,predicate:"inputPaymentCredentialsGooglePay",params:[{name:"payment_token",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:375566091,predicate:"messages.historyImport",params:[{name:"id",type:"long"}],type:"messages.HistoryImport"},{id:-606432698,predicate:"sendMessageHistoryImportAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:1578088377,predicate:"messages.historyImportParsed",params:[{name:"flags",type:"#"},{name:"pm",type:"flags.0?true"},{name:"group",type:"flags.1?true"},{name:"title",type:"flags.2?string"}],type:"messages.HistoryImportParsed"},{id:-170010905,predicate:"inputReportReasonFake",params:[],type:"ReportReason"},{id:-275956116,predicate:"messages.affectedFoundMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"},{name:"messages",type:"Vector"}],type:"messages.AffectedFoundMessages"},{id:-1441072131,predicate:"messageActionSetMessagesTTL",params:[{name:"period",type:"int"}],type:"MessageAction"},{id:-1147422299,predicate:"updatePeerHistoryTTL",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"ttl_period",type:"flags.0?int"}],type:"Update"},{id:-206342113,predicate:"updateChatParticipant",params:[{name:"flags",type:"#"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"actor_id",type:"int"},{name:"user_id",type:"int"},{name:"prev_participant",type:"flags.0?ChatParticipant"},{name:"new_participant",type:"flags.1?ChatParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:2146218476,predicate:"updateChannelParticipant",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"date",type:"int"},{name:"actor_id",type:"int"},{name:"user_id",type:"int"},{name:"prev_participant",type:"flags.0?ChannelParticipant"},{name:"new_participant",type:"flags.1?ChannelParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:133777546,predicate:"updateBotStopped",params:[{name:"user_id",type:"int"},{name:"date",type:"int"},{name:"stopped",type:"Bool"},{name:"qts",type:"int"}],type:"Update"},{id:507405952,predicate:"chatInviteImporter",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ChatInviteImporter"},{id:-1111085620,predicate:"messages.exportedChatInvites",params:[{name:"count",type:"int"},{name:"invites",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvites"},{id:410107472,predicate:"messages.exportedChatInvite",params:[{name:"invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:572915951,predicate:"messages.exportedChatInviteReplaced",params:[{name:"invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:-2118733814,predicate:"messages.chatInviteImporters",params:[{name:"count",type:"int"},{name:"importers",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatInviteImporters"},{id:-539872497,predicate:"chatAdminWithInvites",params:[{name:"admin_id",type:"int"},{name:"invites_count",type:"int"},{name:"revoked_invites_count",type:"int"}],type:"ChatAdminWithInvites"},{id:-1231326505,predicate:"messages.chatAdminsWithInvites",params:[{name:"admins",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatAdminsWithInvites"},{id:1557846647,predicate:"channelAdminLogEventActionParticipantJoinByInvite",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1515256996,predicate:"channelAdminLogEventActionExportedInviteDelete",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1091179342,predicate:"channelAdminLogEventActionExportedInviteRevoke",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:-384910503,predicate:"channelAdminLogEventActionExportedInviteEdit",params:[{name:"prev_invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1048537159,predicate:"channelAdminLogEventActionParticipantVolume",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1855199800,predicate:"channelAdminLogEventActionChangeHistoryTTL",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-1571952873,predicate:"messages.checkedHistoryImportPeer",params:[{name:"confirm_text",type:"string"}],type:"messages.CheckedHistoryImportPeer"},{id:-1146808775,predicate:"inputGroupCallStream",params:[{name:"call",type:"InputGroupCall"},{name:"time_ms",type:"long"},{name:"scale",type:"int"}],type:"InputFileLocation"},{id:-1343921601,predicate:"phone.joinAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.JoinAsPeers"},{id:541839704,predicate:"phone.exportedGroupCallInvite",params:[{name:"link",type:"string"}],type:"phone.ExportedGroupCallInvite"},{id:-672693723,predicate:"inputBotInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:894081801,predicate:"botInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1281329567,predicate:"messageActionGroupCallScheduled",params:[{name:"call",type:"InputGroupCall"},{name:"schedule_date",type:"int"}],type:"MessageAction"},{id:-592373577,predicate:"groupCallParticipantVideoSourceGroup",params:[{name:"semantics",type:"string"},{name:"sources",type:"Vector"}],type:"GroupCallParticipantVideoSourceGroup"},{id:1735736008,predicate:"groupCallParticipantVideo",params:[{name:"flags",type:"#"},{name:"paused",type:"flags.0?true"},{name:"endpoint",type:"string"},{name:"source_groups",type:"Vector"},{name:"audio_source",type:"flags.1?int"}],type:"GroupCallParticipantVideo"},{id:192428418,predicate:"updateGroupCallConnection",params:[{name:"flags",type:"#"},{name:"presentation",type:"flags.0?true"},{name:"params",type:"DataJSON"}],type:"Update"},{id:-2046910401,predicate:"stickers.suggestedShortName",params:[{name:"short_name",type:"string"}],type:"stickers.SuggestedShortName"},{id:795652779,predicate:"botCommandScopeDefault",params:[],type:"BotCommandScope"},{id:1011811544,predicate:"botCommandScopeUsers",params:[],type:"BotCommandScope"},{id:1877059713,predicate:"botCommandScopeChats",params:[],type:"BotCommandScope"},{id:-1180016534,predicate:"botCommandScopeChatAdmins",params:[],type:"BotCommandScope"},{id:-610432643,predicate:"botCommandScopePeer",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:1071145937,predicate:"botCommandScopePeerAdmins",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:169026035,predicate:"botCommandScopePeerUser",params:[{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"BotCommandScope"},{id:-478701471,predicate:"account.resetPasswordFailedWait",params:[{name:"retry_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-370148227,predicate:"account.resetPasswordRequestedWait",params:[{name:"until_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-383330754,predicate:"account.resetPasswordOk",params:[],type:"account.ResetPasswordResult"},{id:-813823885,predicate:"updateBotCommands",params:[{name:"peer",type:"Peer"},{name:"bot_id",type:"int"},{name:"commands",type:"Vector"}],type:"Update"}],methods:[{id:-878758099,method:"invokeAfterMsg",params:[{name:"msg_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:1036301552,method:"invokeAfterMsgs",params:[{name:"msg_ids",type:"Vector"},{name:"query",type:"!X"}],type:"X"},{id:-1502141361,method:"auth.sendCode",params:[{name:"phone_number",type:"string"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:-2131827673,method:"auth.signUp",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"auth.Authorization"},{id:-1126886015,method:"auth.signIn",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"auth.Authorization"},{id:1461180992,method:"auth.logOut",params:[],type:"Bool"},{id:-1616179942,method:"auth.resetAuthorizations",params:[],type:"Bool"},{id:-440401971,method:"auth.exportAuthorization",params:[{name:"dc_id",type:"int"}],type:"auth.ExportedAuthorization"},{id:-470837741,method:"auth.importAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.Authorization"},{id:-841733627,method:"auth.bindTempAuthKey",params:[{name:"perm_auth_key_id",type:"long"},{name:"nonce",type:"long"},{name:"expires_at",type:"int"},{name:"encrypted_message",type:"bytes"}],type:"Bool"},{id:1754754159,method:"account.registerDevice",params:[{name:"flags",type:"#"},{name:"no_muted",type:"flags.0?true"},{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"app_sandbox",type:"Bool"},{name:"secret",type:"bytes"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:813089983,method:"account.unregisterDevice",params:[{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:-2067899501,method:"account.updateNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"},{name:"settings",type:"InputPeerNotifySettings"}],type:"Bool"},{id:313765169,method:"account.getNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"}],type:"PeerNotifySettings"},{id:-612493497,method:"account.resetNotifySettings",params:[],type:"Bool"},{id:2018596725,method:"account.updateProfile",params:[{name:"flags",type:"#"},{name:"first_name",type:"flags.0?string"},{name:"last_name",type:"flags.1?string"},{name:"about",type:"flags.2?string"}],type:"User"},{id:1713919532,method:"account.updateStatus",params:[{name:"offline",type:"Bool"}],type:"Bool"},{id:-1430579357,method:"account.getWallPapers",params:[{name:"hash",type:"int"}],type:"account.WallPapers"},{id:-977650298,method:"account.reportPeer",params:[{name:"peer",type:"InputPeer"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:227648840,method:"users.getUsers",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-902781519,method:"users.getFullUser",params:[{name:"id",type:"InputUser"}],type:"UserFull"},{id:749357634,method:"contacts.getContactIDs",params:[{name:"hash",type:"int"}],type:"Vector"},{id:-995929106,method:"contacts.getStatuses",params:[],type:"Vector"},{id:-1071414113,method:"contacts.getContacts",params:[{name:"hash",type:"int"}],type:"contacts.Contacts"},{id:746589157,method:"contacts.importContacts",params:[{name:"contacts",type:"Vector"}],type:"contacts.ImportedContacts"},{id:157945344,method:"contacts.deleteContacts",params:[{name:"id",type:"Vector"}],type:"Updates"},{id:269745566,method:"contacts.deleteByPhones",params:[{name:"phones",type:"Vector"}],type:"Bool"},{id:1758204945,method:"contacts.block",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-1096393392,method:"contacts.unblock",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-176409329,method:"contacts.getBlocked",params:[{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"contacts.Blocked"},{id:1673946374,method:"messages.getMessages",params:[{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1594999949,method:"messages.getDialogs",params:[{name:"flags",type:"#"},{name:"exclude_pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Dialogs"},{id:-591691168,method:"messages.getHistory",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:204812012,method:"messages.search",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"q",type:"string"},{name:"from_id",type:"flags.0?InputPeer"},{name:"top_msg_id",type:"flags.1?int"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:238054714,method:"messages.readHistory",params:[{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedMessages"},{id:469850889,method:"messages.deleteHistory",params:[{name:"flags",type:"#"},{name:"just_clear",type:"flags.0?true"},{name:"revoke",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedHistory"},{id:-443640366,method:"messages.deleteMessages",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:94983360,method:"messages.receivedMessages",params:[{name:"max_id",type:"int"}],type:"Vector"},{id:1486110434,method:"messages.setTyping",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"action",type:"SendMessageAction"}],type:"Bool"},{id:1376532592,method:"messages.sendMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:881978281,method:"messages.sendMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"media",type:"InputMedia"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-637606386,method:"messages.forwardMessages",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"with_my_score",type:"flags.8?true"},{name:"from_peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"random_id",type:"Vector"},{name:"to_peer",type:"InputPeer"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-820669733,method:"messages.reportSpam",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:913498268,method:"messages.getPeerSettings",params:[{name:"peer",type:"InputPeer"}],type:"PeerSettings"},{id:-1991005362,method:"messages.report",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:1013621127,method:"messages.getChats",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:998448230,method:"messages.getFullChat",params:[{name:"chat_id",type:"int"}],type:"messages.ChatFull"},{id:-599447467,method:"messages.editChatTitle",params:[{name:"chat_id",type:"int"},{name:"title",type:"string"}],type:"Updates"},{id:-900957736,method:"messages.editChatPhoto",params:[{name:"chat_id",type:"int"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:-106911223,method:"messages.addChatUser",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"fwd_limit",type:"int"}],type:"Updates"},{id:-986430054,method:"messages.deleteChatUser",params:[{name:"flags",type:"#"},{name:"revoke_history",type:"flags.0?true"},{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:164303470,method:"messages.createChat",params:[{name:"users",type:"Vector"},{name:"title",type:"string"}],type:"Updates"},{id:-304838614,method:"updates.getState",params:[],type:"updates.State"},{id:630429265,method:"updates.getDifference",params:[{name:"flags",type:"#"},{name:"pts",type:"int"},{name:"pts_total_limit",type:"flags.0?int"},{name:"date",type:"int"},{name:"qts",type:"int"}],type:"updates.Difference"},{id:1926525996,method:"photos.updateProfilePhoto",params:[{name:"id",type:"InputPhoto"}],type:"photos.Photo"},{id:-1980559511,method:"photos.uploadProfilePhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"}],type:"photos.Photo"},{id:-2016444625,method:"photos.deletePhotos",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1291540959,method:"upload.saveFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1319462148,method:"upload.getFile",params:[{name:"flags",type:"#"},{name:"precise",type:"flags.0?true"},{name:"cdn_supported",type:"flags.1?true"},{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.File"},{id:-990308245,method:"help.getConfig",params:[],type:"Config"},{id:531836966,method:"help.getNearestDc",params:[],type:"NearestDc"},{id:1378703997,method:"help.getAppUpdate",params:[{name:"source",type:"string"}],type:"help.AppUpdate"},{id:1295590211,method:"help.getInviteText",params:[],type:"help.InviteText"},{id:-1848823128,method:"photos.getUserPhotos",params:[{name:"user_id",type:"InputUser"},{name:"offset",type:"int"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"photos.Photos"},{id:651135312,method:"messages.getDhConfig",params:[{name:"version",type:"int"},{name:"random_length",type:"int"}],type:"messages.DhConfig"},{id:-162681021,method:"messages.requestEncryption",params:[{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1035731989,method:"messages.acceptEncryption",params:[{name:"peer",type:"InputEncryptedChat"},{name:"g_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:-208425312,method:"messages.discardEncryption",params:[{name:"flags",type:"#"},{name:"delete_history",type:"flags.0?true"},{name:"chat_id",type:"int"}],type:"Bool"},{id:2031374829,method:"messages.setEncryptedTyping",params:[{name:"peer",type:"InputEncryptedChat"},{name:"typing",type:"Bool"}],type:"Bool"},{id:2135648522,method:"messages.readEncryptedHistory",params:[{name:"peer",type:"InputEncryptedChat"},{name:"max_date",type:"int"}],type:"Bool"},{id:1157265941,method:"messages.sendEncrypted",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1431914525,method:"messages.sendEncryptedFile",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"},{name:"file",type:"InputEncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:852769188,method:"messages.sendEncryptedService",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1436924774,method:"messages.receivedQueue",params:[{name:"max_qts",type:"int"}],type:"Vector"},{id:1259113487,method:"messages.reportEncryptedSpam",params:[{name:"peer",type:"InputEncryptedChat"}],type:"Bool"},{id:-562337987,method:"upload.saveBigFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"file_total_parts",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1043505495,method:"initConnection",params:[{name:"flags",type:"#"},{name:"api_id",type:"int"},{name:"device_model",type:"string"},{name:"system_version",type:"string"},{name:"app_version",type:"string"},{name:"system_lang_code",type:"string"},{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"proxy",type:"flags.0?InputClientProxy"},{name:"params",type:"flags.1?JSONValue"},{name:"query",type:"!X"}],type:"X"},{id:-1663104819,method:"help.getSupport",params:[],type:"help.Support"},{id:916930423,method:"messages.readMessageContents",params:[{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:655677548,method:"account.checkUsername",params:[{name:"username",type:"string"}],type:"Bool"},{id:1040964988,method:"account.updateUsername",params:[{name:"username",type:"string"}],type:"User"},{id:301470424,method:"contacts.search",params:[{name:"q",type:"string"},{name:"limit",type:"int"}],type:"contacts.Found"},{id:-623130288,method:"account.getPrivacy",params:[{name:"key",type:"InputPrivacyKey"}],type:"account.PrivacyRules"},{id:-906486552,method:"account.setPrivacy",params:[{name:"key",type:"InputPrivacyKey"},{name:"rules",type:"Vector"}],type:"account.PrivacyRules"},{id:1099779595,method:"account.deleteAccount",params:[{name:"reason",type:"string"}],type:"Bool"},{id:150761757,method:"account.getAccountTTL",params:[],type:"AccountDaysTTL"},{id:608323678,method:"account.setAccountTTL",params:[{name:"ttl",type:"AccountDaysTTL"}],type:"Bool"},{id:-627372787,method:"invokeWithLayer",params:[{name:"layer",type:"int"},{name:"query",type:"!X"}],type:"X"},{id:-113456221,method:"contacts.resolveUsername",params:[{name:"username",type:"string"}],type:"contacts.ResolvedPeer"},{id:-2108208411,method:"account.sendChangePhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1891839707,method:"account.changePhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"User"},{id:71126828,method:"messages.getStickers",params:[{name:"emoticon",type:"string"},{name:"hash",type:"int"}],type:"messages.Stickers"},{id:479598769,method:"messages.getAllStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:954152242,method:"account.updateDeviceLocked",params:[{name:"period",type:"int"}],type:"Bool"},{id:1738800940,method:"auth.importBotAuthorization",params:[{name:"flags",type:"int"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"bot_auth_token",type:"string"}],type:"auth.Authorization"},{id:-1956073268,method:"messages.getWebPagePreview",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"MessageMedia"},{id:-484392616,method:"account.getAuthorizations",params:[],type:"account.Authorizations"},{id:-545786948,method:"account.resetAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1418342645,method:"account.getPassword",params:[],type:"account.Password"},{id:-1663767815,method:"account.getPasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"account.PasswordSettings"},{id:-1516564433,method:"account.updatePasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"new_settings",type:"account.PasswordInputSettings"}],type:"Bool"},{id:-779399914,method:"auth.checkPassword",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"auth.Authorization"},{id:-661144474,method:"auth.requestPasswordRecovery",params:[],type:"auth.PasswordRecovery"},{id:923364464,method:"auth.recoverPassword",params:[{name:"flags",type:"#"},{name:"code",type:"string"},{name:"new_settings",type:"flags.0?account.PasswordInputSettings"}],type:"auth.Authorization"},{id:-1080796745,method:"invokeWithoutUpdates",params:[{name:"query",type:"!X"}],type:"X"},{id:347716823,method:"messages.exportChatInvite",params:[{name:"flags",type:"#"},{name:"legacy_revoke_permanent",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"}],type:"ExportedChatInvite"},{id:1051570619,method:"messages.checkChatInvite",params:[{name:"hash",type:"string"}],type:"ChatInvite"},{id:1817183516,method:"messages.importChatInvite",params:[{name:"hash",type:"string"}],type:"Updates"},{id:639215886,method:"messages.getStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"messages.StickerSet"},{id:-946871200,method:"messages.installStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"archived",type:"Bool"}],type:"messages.StickerSetInstallResult"},{id:-110209570,method:"messages.uninstallStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:-421563528,method:"messages.startBot",params:[{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"long"},{name:"start_param",type:"string"}],type:"Updates"},{id:-1877938321,method:"help.getAppChangelog",params:[{name:"prev_app_version",type:"string"}],type:"Updates"},{id:1468322785,method:"messages.getMessagesViews",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"increment",type:"Bool"}],type:"messages.MessageViews"},{id:-871347913,method:"channels.readHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:-2067661490,method:"channels.deleteMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:-787622117,method:"channels.deleteUserHistory",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"}],type:"messages.AffectedHistory"},{id:-32999408,method:"channels.reportSpam",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"id",type:"Vector"}],type:"Bool"},{id:-1383294429,method:"channels.getMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:306054633,method:"channels.getParticipants",params:[{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelParticipantsFilter"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"channels.ChannelParticipants"},{id:-1599378234,method:"channels.getParticipant",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"channels.ChannelParticipant"},{id:176122811,method:"channels.getChannels",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:141781513,method:"channels.getFullChannel",params:[{name:"channel",type:"InputChannel"}],type:"messages.ChatFull"},{id:1029681423,method:"channels.createChannel",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.0?true"},{name:"megagroup",type:"flags.1?true"},{name:"for_import",type:"flags.3?true"},{name:"title",type:"string"},{name:"about",type:"string"},{name:"geo_point",type:"flags.2?InputGeoPoint"},{name:"address",type:"flags.2?string"}],type:"Updates"},{id:-751007486,method:"channels.editAdmin",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"string"}],type:"Updates"},{id:1450044624,method:"channels.editTitle",params:[{name:"channel",type:"InputChannel"},{name:"title",type:"string"}],type:"Updates"},{id:-248621111,method:"channels.editPhoto",params:[{name:"channel",type:"InputChannel"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:283557164,method:"channels.checkUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:890549214,method:"channels.updateUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:615851205,method:"channels.joinChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:-130635115,method:"channels.leaveChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:429865580,method:"channels.inviteToChannel",params:[{name:"channel",type:"InputChannel"},{name:"users",type:"Vector"}],type:"Updates"},{id:-1072619549,method:"channels.deleteChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:51854712,method:"updates.getChannelDifference",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelMessagesFilter"},{name:"pts",type:"int"},{name:"limit",type:"int"}],type:"updates.ChannelDifference"},{id:-1444503762,method:"messages.editChatAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"is_admin",type:"Bool"}],type:"Bool"},{id:363051235,method:"messages.migrateChat",params:[{name:"chat_id",type:"int"}],type:"Updates"},{id:1271290010,method:"messages.searchGlobal",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:2016638777,method:"messages.reorderStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Bool"},{id:864953444,method:"messages.getDocumentByHash",params:[{name:"sha256",type:"bytes"},{name:"size",type:"int"},{name:"mime_type",type:"string"}],type:"Document"},{id:-2084618926,method:"messages.getSavedGifs",params:[{name:"hash",type:"int"}],type:"messages.SavedGifs"},{id:846868683,method:"messages.saveGif",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:1364105629,method:"messages.getInlineBotResults",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"geo_point",type:"flags.0?InputGeoPoint"},{name:"query",type:"string"},{name:"offset",type:"string"}],type:"messages.BotResults"},{id:-346119674,method:"messages.setInlineBotResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"private",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"next_offset",type:"flags.2?string"},{name:"switch_pm",type:"flags.3?InlineBotSwitchPM"}],type:"Bool"},{id:570955184,method:"messages.sendInlineBotResult",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"hide_via",type:"flags.11?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"random_id",type:"long"},{name:"query_id",type:"long"},{name:"id",type:"string"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-432034325,method:"channels.exportMessageLink",params:[{name:"flags",type:"#"},{name:"grouped",type:"flags.0?true"},{name:"thread",type:"flags.1?true"},{name:"channel",type:"InputChannel"},{name:"id",type:"int"}],type:"ExportedMessageLink"},{id:527021574,method:"channels.toggleSignatures",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1056025023,method:"auth.resendCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"auth.SentCode"},{id:520357240,method:"auth.cancelCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"Bool"},{id:-39416522,method:"messages.getMessageEditData",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"messages.MessageEditData"},{id:1224152952,method:"messages.editMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.15?int"}],type:"Updates"},{id:-2091549254,method:"messages.editInlineBotMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:-1824339449,method:"messages.getBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"game",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"data",type:"flags.0?bytes"},{name:"password",type:"flags.2?InputCheckPasswordSRP"}],type:"messages.BotCallbackAnswer"},{id:-712043766,method:"messages.setBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"Bool"},{id:-728224331,method:"contacts.getTopPeers",params:[{name:"flags",type:"#"},{name:"correspondents",type:"flags.0?true"},{name:"bots_pm",type:"flags.1?true"},{name:"bots_inline",type:"flags.2?true"},{name:"phone_calls",type:"flags.3?true"},{name:"forward_users",type:"flags.4?true"},{name:"forward_chats",type:"flags.5?true"},{name:"groups",type:"flags.10?true"},{name:"channels",type:"flags.15?true"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"contacts.TopPeers"},{id:451113900,method:"contacts.resetTopPeerRating",params:[{name:"category",type:"TopPeerCategory"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-462373635,method:"messages.getPeerDialogs",params:[{name:"peers",type:"Vector"}],type:"messages.PeerDialogs"},{id:-1137057461,method:"messages.saveDraft",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"peer",type:"InputPeer"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:1782549861,method:"messages.getAllDrafts",params:[],type:"Updates"},{id:766298703,method:"messages.getFeaturedStickers",params:[{name:"hash",type:"int"}],type:"messages.FeaturedStickers"},{id:1527873830,method:"messages.readFeaturedStickers",params:[{name:"id",type:"Vector"}],type:"Bool"},{id:1587647177,method:"messages.getRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"hash",type:"int"}],type:"messages.RecentStickers"},{id:958863608,method:"messages.saveRecentSticker",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-1986437075,method:"messages.clearRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"}],type:"Bool"},{id:1475442322,method:"messages.getArchivedStickers",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"offset_id",type:"long"},{name:"limit",type:"int"}],type:"messages.ArchivedStickers"},{id:457157256,method:"account.sendConfirmPhoneCode",params:[{name:"hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1596029123,method:"account.confirmPhone",params:[{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-122669393,method:"channels.getAdminedPublicChannels",params:[{name:"flags",type:"#"},{name:"by_location",type:"flags.0?true"},{name:"check_limit",type:"flags.1?true"}],type:"messages.Chats"},{id:1706608543,method:"messages.getMaskStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:-866424884,method:"messages.getAttachedStickers",params:[{name:"media",type:"InputStickeredMedia"}],type:"Vector"},{id:-1907842680,method:"auth.dropTempAuthKeys",params:[{name:"except_auth_keys",type:"Vector"}],type:"Bool"},{id:-1896289088,method:"messages.setGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Updates"},{id:363700068,method:"messages.setInlineGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Bool"},{id:-400399203,method:"messages.getGameHighScores",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:258170395,method:"messages.getInlineGameHighScores",params:[{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:218777796,method:"messages.getCommonChats",params:[{name:"user_id",type:"InputUser"},{name:"max_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Chats"},{id:-341307408,method:"messages.getAllChats",params:[{name:"except_ids",type:"Vector"}],type:"messages.Chats"},{id:-333262899,method:"help.setBotUpdatesStatus",params:[{name:"pending_updates_count",type:"int"},{name:"message",type:"string"}],type:"Bool"},{id:852135825,method:"messages.getWebPage",params:[{name:"url",type:"string"},{name:"hash",type:"int"}],type:"WebPage"},{id:-1489903017,method:"messages.toggleDialogPin",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:991616823,method:"messages.reorderPinnedDialogs",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"folder_id",type:"int"},{name:"order",type:"Vector"}],type:"Bool"},{id:-692498958,method:"messages.getPinnedDialogs",params:[{name:"folder_id",type:"int"}],type:"messages.PeerDialogs"},{id:-1440257555,method:"bots.sendCustomRequest",params:[{name:"custom_method",type:"string"},{name:"params",type:"DataJSON"}],type:"DataJSON"},{id:-434028723,method:"bots.answerWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"}],type:"Bool"},{id:619086221,method:"upload.getWebFile",params:[{name:"location",type:"InputWebFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.WebFile"},{id:-1976353651,method:"payments.getPaymentForm",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"theme_params",type:"flags.0?DataJSON"}],type:"payments.PaymentForm"},{id:611897804,method:"payments.getPaymentReceipt",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"payments.PaymentReceipt"},{id:-619695760,method:"payments.validateRequestedInfo",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"info",type:"PaymentRequestedInfo"}],type:"payments.ValidatedRequestedInfo"},{id:818134173,method:"payments.sendPaymentForm",params:[{name:"flags",type:"#"},{name:"form_id",type:"long"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"requested_info_id",type:"flags.0?string"},{name:"shipping_option_id",type:"flags.1?string"},{name:"credentials",type:"InputPaymentCredentials"},{name:"tip_amount",type:"flags.2?long"}],type:"payments.PaymentResult"},{id:1151208273,method:"account.getTmpPassword",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"period",type:"int"}],type:"account.TmpPassword"},{id:578650699,method:"payments.getSavedInfo",params:[],type:"payments.SavedInfo"},{id:-667062079,method:"payments.clearSavedInfo",params:[{name:"flags",type:"#"},{name:"credentials",type:"flags.0?true"},{name:"info",type:"flags.1?true"}],type:"Bool"},{id:-436833542,method:"messages.setBotShippingResults",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"Bool"},{id:163765653,method:"messages.setBotPrecheckoutResults",params:[{name:"flags",type:"#"},{name:"success",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"}],type:"Bool"},{id:-1876841625,method:"stickers.createStickerSet",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"animated",type:"flags.1?true"},{name:"user_id",type:"InputUser"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumb",type:"flags.2?InputDocument"},{name:"stickers",type:"Vector"},{name:"software",type:"flags.3?string"}],type:"messages.StickerSet"},{id:-143257775,method:"stickers.removeStickerFromSet",params:[{name:"sticker",type:"InputDocument"}],type:"messages.StickerSet"},{id:-4795190,method:"stickers.changeStickerPosition",params:[{name:"sticker",type:"InputDocument"},{name:"position",type:"int"}],type:"messages.StickerSet"},{id:-2041315650,method:"stickers.addStickerToSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker",type:"InputStickerSetItem"}],type:"messages.StickerSet"},{id:1369162417,method:"messages.uploadMedia",params:[{name:"peer",type:"InputPeer"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:1430593449,method:"phone.getCallConfig",params:[],type:"DataJSON"},{id:1124046573,method:"phone.requestCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:1003664544,method:"phone.acceptCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:788404002,method:"phone.confirmCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_a",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:399855457,method:"phone.receivedCall",params:[{name:"peer",type:"InputPhoneCall"}],type:"Bool"},{id:-1295269440,method:"phone.discardCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"duration",type:"int"},{name:"reason",type:"PhoneCallDiscardReason"},{name:"connection_id",type:"long"}],type:"Updates"},{id:1508562471,method:"phone.setCallRating",params:[{name:"flags",type:"#"},{name:"user_initiative",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"rating",type:"int"},{name:"comment",type:"string"}],type:"Updates"},{id:662363518,method:"phone.saveCallDebug",params:[{name:"peer",type:"InputPhoneCall"},{name:"debug",type:"DataJSON"}],type:"Bool"},{id:536919235,method:"upload.getCdnFile",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.CdnFile"},{id:-1691921240,method:"upload.reuploadCdnFile",params:[{name:"file_token",type:"bytes"},{name:"request_token",type:"bytes"}],type:"Vector"},{id:1375900482,method:"help.getCdnConfig",params:[],type:"CdnConfig"},{id:-219008246,method:"langpack.getLangPack",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackDifference"},{id:-269862909,method:"langpack.getStrings",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"keys",type:"Vector"}],type:"Vector"},{id:-845657435,method:"langpack.getDifference",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"LangPackDifference"},{id:1120311183,method:"langpack.getLanguages",params:[{name:"lang_pack",type:"string"}],type:"Vector"},{id:-1763259007,method:"channels.editBanned",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:870184064,method:"channels.getAdminLog",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"string"},{name:"events_filter",type:"flags.0?ChannelAdminLogEventsFilter"},{name:"admins",type:"flags.1?Vector"},{name:"max_id",type:"long"},{name:"min_id",type:"long"},{name:"limit",type:"int"}],type:"channels.AdminLogResults"},{id:1302676017,method:"upload.getCdnFileHashes",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"}],type:"Vector"},{id:-914493408,method:"messages.sendScreenshotNotification",params:[{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"int"},{name:"random_id",type:"long"}],type:"Updates"},{id:-359881479,method:"channels.setStickers",params:[{name:"channel",type:"InputChannel"},{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:567151374,method:"messages.getFavedStickers",params:[{name:"hash",type:"int"}],type:"messages.FavedStickers"},{id:-1174420133,method:"messages.faveSticker",params:[{name:"id",type:"InputDocument"},{name:"unfave",type:"Bool"}],type:"Bool"},{id:-357180360,method:"channels.readMessageContents",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"Bool"},{id:-2020263951,method:"contacts.resetSaved",params:[],type:"Bool"},{id:1180140658,method:"messages.getUnreadMentions",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:-1355375294,method:"channels.deleteHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:1036054804,method:"help.getRecentMeUrls",params:[{name:"referer",type:"string"}],type:"help.RecentMeUrls"},{id:-356796084,method:"channels.togglePreHistoryHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:251759059,method:"messages.readMentions",params:[{name:"peer",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:-1144759543,method:"messages.getRecentLocations",params:[{name:"peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:-872345397,method:"messages.sendMultiMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"multi_media",type:"Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:1347929239,method:"messages.uploadEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"file",type:"InputEncryptedFile"}],type:"EncryptedFile"},{id:405695855,method:"account.getWebAuthorizations",params:[],type:"account.WebAuthorizations"},{id:755087855,method:"account.resetWebAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1747789204,method:"account.resetWebAuthorizations",params:[],type:"Bool"},{id:-1028140917,method:"messages.searchStickerSets",params:[{name:"flags",type:"#"},{name:"exclude_featured",type:"flags.0?true"},{name:"q",type:"string"},{name:"hash",type:"int"}],type:"messages.FoundStickerSets"},{id:-956147407,method:"upload.getFileHashes",params:[{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"}],type:"Vector"},{id:749019089,method:"help.getTermsOfServiceUpdate",params:[],type:"help.TermsOfServiceUpdate"},{id:-294455398,method:"help.acceptTermsOfService",params:[{name:"id",type:"DataJSON"}],type:"Bool"},{id:-1299661699,method:"account.getAllSecureValues",params:[],type:"Vector"},{id:1936088002,method:"account.getSecureValue",params:[{name:"types",type:"Vector"}],type:"Vector"},{id:-1986010339,method:"account.saveSecureValue",params:[{name:"value",type:"InputSecureValue"},{name:"secure_secret_id",type:"long"}],type:"SecureValue"},{id:-1199522741,method:"account.deleteSecureValue",params:[{name:"types",type:"Vector"}],type:"Bool"},{id:-1865902923,method:"users.setSecureValueErrors",params:[{name:"id",type:"InputUser"},{name:"errors",type:"Vector"}],type:"Bool"},{id:-1200903967,method:"account.getAuthorizationForm",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"}],type:"account.AuthorizationForm"},{id:-419267436,method:"account.acceptAuthorization",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"},{name:"value_hashes",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"Bool"},{id:-1516022023,method:"account.sendVerifyPhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1305716726,method:"account.verifyPhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:1880182943,method:"account.sendVerifyEmailCode",params:[{name:"email",type:"string"}],type:"account.SentEmailCode"},{id:-323339813,method:"account.verifyEmail",params:[{name:"email",type:"string"},{name:"code",type:"string"}],type:"Bool"},{id:1072547679,method:"help.getDeepLinkInfo",params:[{name:"path",type:"string"}],type:"help.DeepLinkInfo"},{id:-2098076769,method:"contacts.getSaved",params:[],type:"Vector"},{id:-2092831552,method:"channels.getLeftChannels",params:[{name:"offset",type:"int"}],type:"messages.Chats"},{id:-262453244,method:"account.initTakeoutSession",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"message_users",type:"flags.1?true"},{name:"message_chats",type:"flags.2?true"},{name:"message_megagroups",type:"flags.3?true"},{name:"message_channels",type:"flags.4?true"},{name:"files",type:"flags.5?true"},{name:"file_max_size",type:"flags.5?int"}],type:"account.Takeout"},{id:489050862,method:"account.finishTakeoutSession",params:[{name:"flags",type:"#"},{name:"success",type:"flags.0?true"}],type:"Bool"},{id:486505992,method:"messages.getSplitRanges",params:[],type:"Vector"},{id:911373810,method:"invokeWithMessagesRange",params:[{name:"range",type:"MessageRange"},{name:"query",type:"!X"}],type:"X"},{id:-1398145746,method:"invokeWithTakeout",params:[{name:"takeout_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:-1031349873,method:"messages.markDialogUnread",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:585256482,method:"messages.getDialogUnreadMarks",params:[],type:"Vector"},{id:-2062238246,method:"contacts.toggleTopPeers",params:[{name:"enabled",type:"Bool"}],type:"Bool"},{id:2119757468,method:"messages.clearAllDrafts",params:[],type:"Bool"},{id:-1735311088,method:"help.getAppConfig",params:[],type:"JSONValue"},{id:1862465352,method:"help.saveAppLog",params:[{name:"events",type:"Vector"}],type:"Bool"},{id:-966677240,method:"help.getPassportConfig",params:[{name:"hash",type:"int"}],type:"help.PassportConfig"},{id:1784243458,method:"langpack.getLanguage",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackLanguage"},{id:-760547348,method:"messages.updatePinnedMessage",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"unpin",type:"flags.1?true"},{name:"pm_oneside",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"Updates"},{id:-1881204448,method:"account.confirmPasswordEmail",params:[{name:"code",type:"string"}],type:"Bool"},{id:2055154197,method:"account.resendPasswordEmail",params:[],type:"Bool"},{id:-1043606090,method:"account.cancelPasswordEmail",params:[],type:"Bool"},{id:-748624084,method:"help.getSupportName",params:[],type:"help.SupportName"},{id:59377875,method:"help.getUserInfo",params:[{name:"user_id",type:"InputUser"}],type:"help.UserInfo"},{id:1723407216,method:"help.editUserInfo",params:[{name:"user_id",type:"InputUser"},{name:"message",type:"string"},{name:"entities",type:"Vector"}],type:"help.UserInfo"},{id:-1626880216,method:"account.getContactSignUpNotification",params:[],type:"Bool"},{id:-806076575,method:"account.setContactSignUpNotification",params:[{name:"silent",type:"Bool"}],type:"Bool"},{id:1398240377,method:"account.getNotifyExceptions",params:[{name:"flags",type:"#"},{name:"compare_sound",type:"flags.1?true"},{name:"peer",type:"flags.0?InputNotifyPeer"}],type:"Updates"},{id:283795844,method:"messages.sendVote",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"options",type:"Vector"}],type:"Updates"},{id:1941660731,method:"messages.getPollResults",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1848369232,method:"messages.getOnlines",params:[{name:"peer",type:"InputPeer"}],type:"ChatOnlines"},{id:-2127811866,method:"messages.getStatsURL",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"params",type:"string"}],type:"StatsURL"},{id:-554301545,method:"messages.editChatAbout",params:[{name:"peer",type:"InputPeer"},{name:"about",type:"string"}],type:"Bool"},{id:-1517917375,method:"messages.editChatDefaultBannedRights",params:[{name:"peer",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:-57811990,method:"account.getWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"}],type:"WallPaper"},{id:-578472351,method:"account.uploadWallPaper",params:[{name:"file",type:"InputFile"},{name:"mime_type",type:"string"},{name:"settings",type:"WallPaperSettings"}],type:"WallPaper"},{id:1817860919,method:"account.saveWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"unsave",type:"Bool"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-18000023,method:"account.installWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-1153722364,method:"account.resetWallPapers",params:[],type:"Bool"},{id:1457130303,method:"account.getAutoDownloadSettings",params:[],type:"account.AutoDownloadSettings"},{id:1995661875,method:"account.saveAutoDownloadSettings",params:[{name:"flags",type:"#"},{name:"low",type:"flags.0?true"},{name:"high",type:"flags.1?true"},{name:"settings",type:"AutoDownloadSettings"}],type:"Bool"},{id:899735650,method:"messages.getEmojiKeywords",params:[{name:"lang_code",type:"string"}],type:"EmojiKeywordsDifference"},{id:352892591,method:"messages.getEmojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"EmojiKeywordsDifference"},{id:1318675378,method:"messages.getEmojiKeywordsLanguages",params:[{name:"lang_codes",type:"Vector"}],type:"Vector"},{id:-709817306,method:"messages.getEmojiURL",params:[{name:"lang_code",type:"string"}],type:"EmojiURL"},{id:1749536939,method:"folders.editPeerFolders",params:[{name:"folder_peers",type:"Vector"}],type:"Updates"},{id:472471681,method:"folders.deleteFolder",params:[{name:"folder_id",type:"int"}],type:"Updates"},{id:1932455680,method:"messages.getSearchCounters",params:[{name:"peer",type:"InputPeer"},{name:"filters",type:"Vector"}],type:"Vector"},{id:-170208392,method:"channels.getGroupsForDiscussion",params:[],type:"messages.Chats"},{id:1079520178,method:"channels.setDiscussionGroup",params:[{name:"broadcast",type:"InputChannel"},{name:"group",type:"InputChannel"}],type:"Bool"},{id:428848198,method:"messages.requestUrlAuth",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:-1322487515,method:"messages.acceptUrlAuth",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:1336717624,method:"messages.hidePeerSettingsBar",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-386636848,method:"contacts.addContact",params:[{name:"flags",type:"#"},{name:"add_phone_privacy_exception",type:"flags.0?true"},{name:"id",type:"InputUser"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"phone",type:"string"}],type:"Updates"},{id:-130964977,method:"contacts.acceptContact",params:[{name:"id",type:"InputUser"}],type:"Updates"},{id:-1892102881,method:"channels.editCreator",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"password",type:"InputCheckPasswordSRP"}],type:"Updates"},{id:-750207932,method:"contacts.getLocated",params:[{name:"flags",type:"#"},{name:"background",type:"flags.1?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"self_expires",type:"flags.0?int"}],type:"Updates"},{id:1491484525,method:"channels.editLocation",params:[{name:"channel",type:"InputChannel"},{name:"geo_point",type:"InputGeoPoint"},{name:"address",type:"string"}],type:"Bool"},{id:-304832784,method:"channels.toggleSlowMode",params:[{name:"channel",type:"InputChannel"},{name:"seconds",type:"int"}],type:"Updates"},{id:-490575781,method:"messages.getScheduledHistory",params:[{name:"peer",type:"InputPeer"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:-1111817116,method:"messages.getScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1120369398,method:"messages.sendScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1504586518,method:"messages.deleteScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:473805619,method:"account.uploadTheme",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.0?InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:-2077048289,method:"account.createTheme",params:[{name:"flags",type:"#"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?InputThemeSettings"}],type:"Theme"},{id:1555261397,method:"account.updateTheme",params:[{name:"flags",type:"#"},{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"slug",type:"flags.0?string"},{name:"title",type:"flags.1?string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?InputThemeSettings"}],type:"Theme"},{id:-229175188,method:"account.saveTheme",params:[{name:"theme",type:"InputTheme"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:2061776695,method:"account.installTheme",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"format",type:"flags.1?string"},{name:"theme",type:"flags.1?InputTheme"}],type:"Bool"},{id:-1919060949,method:"account.getTheme",params:[{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"document_id",type:"long"}],type:"Theme"},{id:676939512,method:"account.getThemes",params:[{name:"format",type:"string"},{name:"hash",type:"int"}],type:"account.Themes"},{id:-1313598185,method:"auth.exportLoginToken",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"except_ids",type:"Vector"}],type:"auth.LoginToken"},{id:-1783866140,method:"auth.importLoginToken",params:[{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:-392909491,method:"auth.acceptLoginToken",params:[{name:"token",type:"bytes"}],type:"Authorization"},{id:-1250643605,method:"account.setContentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"}],type:"Bool"},{id:-1952756306,method:"account.getContentSettings",params:[],type:"account.ContentSettings"},{id:300429806,method:"channels.getInactiveChannels",params:[],type:"messages.InactiveChats"},{id:1705865692,method:"account.getMultiWallPapers",params:[{name:"wallpapers",type:"Vector"}],type:"Vector"},{id:-1200736242,method:"messages.getPollVotes",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"option",type:"flags.0?bytes"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.VotesList"},{id:-1257951254,method:"messages.toggleStickerSets",params:[{name:"flags",type:"#"},{name:"uninstall",type:"flags.0?true"},{name:"archive",type:"flags.1?true"},{name:"unarchive",type:"flags.2?true"},{name:"stickersets",type:"Vector"}],type:"Bool"},{id:779736953,method:"payments.getBankCardData",params:[{name:"number",type:"string"}],type:"payments.BankCardData"},{id:-241247891,method:"messages.getDialogFilters",params:[],type:"Vector"},{id:-1566780372,method:"messages.getSuggestedDialogFilters",params:[],type:"Vector"},{id:450142282,method:"messages.updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Bool"},{id:-983318044,method:"messages.updateDialogFiltersOrder",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:-1421720550,method:"stats.getBroadcastStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.BroadcastStats"},{id:1646092192,method:"stats.loadAsyncGraph",params:[{name:"flags",type:"#"},{name:"token",type:"string"},{name:"x",type:"flags.0?long"}],type:"StatsGraph"},{id:-1707717072,method:"stickers.setStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb",type:"InputDocument"}],type:"messages.StickerSet"},{id:85399130,method:"bots.setBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"},{name:"commands",type:"Vector"}],type:"Bool"},{id:1608974939,method:"messages.getOldFeaturedStickers",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.FeaturedStickers"},{id:-1063816159,method:"help.getPromoData",params:[],type:"help.PromoData"},{id:505748629,method:"help.hidePromoData",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-8744061,method:"phone.sendSignalingData",params:[{name:"peer",type:"InputPhoneCall"},{name:"data",type:"bytes"}],type:"Bool"},{id:-589330937,method:"stats.getMegagroupStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.MegagroupStats"},{id:-349483786,method:"account.getGlobalPrivacySettings",params:[],type:"GlobalPrivacySettings"},{id:517647042,method:"account.setGlobalPrivacySettings",params:[{name:"settings",type:"GlobalPrivacySettings"}],type:"GlobalPrivacySettings"},{id:-183649631,method:"help.dismissSuggestion",params:[{name:"peer",type:"InputPeer"},{name:"suggestion",type:"string"}],type:"Bool"},{id:1935116200,method:"help.getCountriesList",params:[{name:"lang_code",type:"string"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:615875002,method:"messages.getReplies",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:1147761405,method:"messages.getDiscussionMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.DiscussionMessage"},{id:-147740172,method:"messages.readDiscussion",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Bool"},{id:698914348,method:"contacts.blockFromReplies",params:[{name:"flags",type:"#"},{name:"delete_message",type:"flags.0?true"},{name:"delete_history",type:"flags.1?true"},{name:"report_spam",type:"flags.2?true"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1445996571,method:"stats.getMessagePublicForwards",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:-1226791947,method:"stats.getMessageStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"stats.MessageStats"},{id:-265962357,method:"messages.unpinAllMessages",params:[{name:"peer",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:1221445336,method:"phone.createGroupCall",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"schedule_date",type:"flags.1?int"}],type:"Updates"},{id:-1322057861,method:"phone.joinGroupCall",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"video_stopped",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"join_as",type:"InputPeer"},{name:"invite_hash",type:"flags.1?string"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:1342404601,method:"phone.leaveGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"source",type:"int"}],type:"Updates"},{id:2067345760,method:"phone.inviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"Updates"},{id:2054648117,method:"phone.discardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1958458429,method:"phone.toggleGroupCallSettings",params:[{name:"flags",type:"#"},{name:"reset_invite_hash",type:"flags.1?true"},{name:"call",type:"InputGroupCall"},{name:"join_muted",type:"flags.0?Bool"}],type:"Updates"},{id:68699611,method:"phone.getGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"limit",type:"int"}],type:"phone.GroupCall"},{id:-984033109,method:"phone.getGroupParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"ids",type:"Vector"},{name:"sources",type:"Vector"},{name:"offset",type:"string"},{name:"limit",type:"int"}],type:"phone.GroupParticipants"},{id:-1248003721,method:"phone.checkGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"sources",type:"Vector"}],type:"Vector"},{id:-2094760687,method:"messages.deleteChat",params:[{name:"chat_id",type:"int"}],type:"Bool"},{id:-104078327,method:"messages.deletePhoneCallHistory",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"}],type:"messages.AffectedFoundMessages"},{id:1140726259,method:"messages.checkHistoryImport",params:[{name:"import_head",type:"string"}],type:"messages.HistoryImportParsed"},{id:873008187,method:"messages.initHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"file",type:"InputFile"},{name:"media_count",type:"int"}],type:"messages.HistoryImport"},{id:713433234,method:"messages.uploadImportedMedia",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"},{name:"file_name",type:"string"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:-1271008444,method:"messages.startHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"}],type:"Bool"},{id:-1565154314,method:"messages.getExportedChatInvites",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"},{name:"offset_date",type:"flags.2?int"},{name:"offset_link",type:"flags.2?string"},{name:"limit",type:"int"}],type:"messages.ExportedChatInvites"},{id:1937010524,method:"messages.getExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"messages.ExportedChatInvite"},{id:48562110,method:"messages.editExportedChatInvite",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"}],type:"messages.ExportedChatInvite"},{id:1452833749,method:"messages.deleteRevokedExportedChatInvites",params:[{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"}],type:"Bool"},{id:-731601877,method:"messages.deleteExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"Bool"},{id:958457583,method:"messages.getAdminsWithInvites",params:[{name:"peer",type:"InputPeer"}],type:"messages.ChatAdminsWithInvites"},{id:654013065,method:"messages.getChatInviteImporters",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"offset_date",type:"int"},{name:"offset_user",type:"InputUser"},{name:"limit",type:"int"}],type:"messages.ChatInviteImporters"},{id:-1207017500,method:"messages.setHistoryTTL",params:[{name:"peer",type:"InputPeer"},{name:"period",type:"int"}],type:"Updates"},{id:-91437323,method:"account.reportProfilePhoto",params:[{name:"peer",type:"InputPeer"},{name:"photo_id",type:"InputPhoto"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:187239529,method:"channels.convertToGigagroup",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:1573261059,method:"messages.checkHistoryImportPeer",params:[{name:"peer",type:"InputPeer"}],type:"messages.CheckedHistoryImportPeer"},{id:-1070962985,method:"phone.toggleGroupCallRecord",params:[{name:"flags",type:"#"},{name:"start",type:"flags.0?true"},{name:"call",type:"InputGroupCall"},{name:"title",type:"flags.1?string"}],type:"Updates"},{id:-1524155713,method:"phone.editGroupCallParticipant",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"participant",type:"InputPeer"},{name:"muted",type:"flags.0?Bool"},{name:"volume",type:"flags.1?int"},{name:"raise_hand",type:"flags.2?Bool"},{name:"video_stopped",type:"flags.3?Bool"},{name:"video_paused",type:"flags.4?Bool"},{name:"presentation_paused",type:"flags.5?Bool"}],type:"Updates"},{id:480685066,method:"phone.editGroupCallTitle",params:[{name:"call",type:"InputGroupCall"},{name:"title",type:"string"}],type:"Updates"},{id:-277077702,method:"phone.getGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"}],type:"phone.JoinAsPeers"},{id:-425040769,method:"phone.exportGroupCallInvite",params:[{name:"flags",type:"#"},{name:"can_self_unmute",type:"flags.0?true"},{name:"call",type:"InputGroupCall"}],type:"phone.ExportedGroupCallInvite"},{id:563885286,method:"phone.toggleGroupCallStartSubscription",params:[{name:"call",type:"InputGroupCall"},{name:"subscribed",type:"Bool"}],type:"Updates"},{id:1451287362,method:"phone.startScheduledGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1465786252,method:"phone.saveDefaultGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"},{name:"join_as",type:"InputPeer"}],type:"Bool"},{id:-873829436,method:"phone.joinGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:475058500,method:"phone.leaveGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:676017721,method:"stickers.checkShortName",params:[{name:"short_name",type:"string"}],type:"Bool"},{id:1303364867,method:"stickers.suggestShortName",params:[{name:"title",type:"string"}],type:"stickers.SuggestedShortName"},{id:1032708345,method:"bots.resetBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Bool"},{id:-481554986,method:"bots.getBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Vector"},{id:-1828139493,method:"account.resetPassword",params:[],type:"account.ResetPasswordResult"},{id:1284770294,method:"account.declinePasswordReset",params:[],type:"Bool"},{id:221691769,method:"auth.checkRecoveryPassword",params:[{name:"code",type:"string"}],type:"Bool"}]},layer:131},Oe=new Uint8Array(256),qe=new Uint8Array(256),Ge=new Uint32Array(256),Ke=new Uint32Array(256),ze=new Uint32Array(256),He=new Uint32Array(256),je=new Uint32Array(256),We=new Uint32Array(256),Je=new Uint32Array(256),Ze=new Uint32Array(256);function Qe(e){if(e instanceof Uint32Array)return e;if("string"==typeof e){if(e.length%4!=0)for(var t=e.length%4;t<=4;t++)e+="\0x00";var a=new Uint32Array(e.length/4);for(t=0;t>7),r[i[m]^m]=m;for(;!Oe[p];p^=e||1)a=(a=o^o<<1^o<<2^o<<3^o<<4)>>8^255&a^99,Oe[p]=a,qe[a]=p,s=16843009*i[t=i[e=i[p]]]^65537*t^257*e^16843008*p,n=257*i[a]^16843008*a,Ge[p]=n=n<<24^n>>>8,Ke[p]=n=n<<24^n>>>8,ze[p]=n=n<<24^n>>>8,He[p]=n=n<<24^n>>>8,je[a]=s=s<<24^s>>>8,We[a]=s=s<<24^s>>>8,Je[a]=s=s<<24^s>>>8,Ze[a]=s=s<<24^s>>>8,o=r[o]||1}();var Ye=function(){function e(e){var t=Qe(e);if(4!==t.length&&6!==t.length&&8!==t.length)throw new Error("Invalid key size");this.encKey=new Uint32Array(4*t.length+28),this.decKey=new Uint32Array(4*t.length+28),this.encKey.set(t);for(var a,n=1,s=t.length;s<4*t.length+28;s++)a=this.encKey[s-1],(s%t.length==0||8===t.length&&s%t.length==4)&&(a=Oe[a>>>24]<<24^Oe[a>>16&255]<<16^Oe[a>>8&255]<<8^Oe[255&a],s%t.length==0&&(a=a<<8^a>>>24^n<<24,n=n<<1^283*(n>>7))),this.encKey[s]=this.encKey[s-t.length]^a;for(var i=0;s;i++,s--)a=this.encKey[3&i?s:s-4],this.decKey[i]=s<=4||i<4?a:je[Oe[a>>>24]]^We[Oe[a>>16&255]]^Je[Oe[a>>8&255]]^Ze[Oe[255&a]]}return e.prototype.encrypt=function(e){for(var t,a,n,s=Qe(e),i=new Uint32Array(4),r=s[0]^this.encKey[0],p=s[1]^this.encKey[1],o=s[2]^this.encKey[2],m=s[3]^this.encKey[3],d=this.encKey.length/4-2,y=4,c=0;c>>24]^Ke[p>>16&255]^ze[o>>8&255]^He[255&m]^this.encKey[y],a=Ge[p>>>24]^Ke[o>>16&255]^ze[m>>8&255]^He[255&r]^this.encKey[y+1],n=Ge[o>>>24]^Ke[m>>16&255]^ze[r>>8&255]^He[255&p]^this.encKey[y+2],m=Ge[m>>>24]^Ke[r>>16&255]^ze[p>>8&255]^He[255&o]^this.encKey[y+3],r=t,p=a,o=n,y+=4;for(c=0;c<4;c++)i[c]=Oe[r>>>24]<<24^Oe[p>>16&255]<<16^Oe[o>>8&255]<<8^Oe[255&m]^this.encKey[y++],t=r,r=p,p=o,o=m,m=t;return i},e.prototype.decrypt=function(e){for(var t,a,n,s=Qe(e),i=new Uint32Array(4),r=s[0]^this.decKey[0],p=s[3]^this.decKey[1],o=s[2]^this.decKey[2],m=s[1]^this.decKey[3],d=this.decKey.length/4-2,y=4,c=0;c>>24]^We[p>>16&255]^Je[o>>8&255]^Ze[255&m]^this.decKey[y],a=je[p>>>24]^We[o>>16&255]^Je[m>>8&255]^Ze[255&r]^this.decKey[y+1],n=je[o>>>24]^We[m>>16&255]^Je[r>>8&255]^Ze[255&p]^this.decKey[y+2],m=je[m>>>24]^We[r>>16&255]^Je[p>>8&255]^Ze[255&o]^this.decKey[y+3],r=t,p=a,o=n,y+=4;for(c=0;c<4;c++)i[3&-c]=qe[r>>>24]<<24^qe[p>>16&255]<<16^qe[o>>8&255]<<8^qe[255&m]^this.decKey[y++],t=r,r=p,p=o,o=m,m=t;return i},e}(),$e=function(){function e(e,t,a){void 0===a&&(a=16),this.key=Qe(e),this.iv=Qe(t),this.cipher=new Ye(e),this.blockSize=a/4}return e.prototype.encrypt=function(e,t){for(var a=Qe(e),n=t||new Uint32Array(a.length),s=this.iv.subarray(this.blockSize,this.iv.length),i=this.iv.subarray(0,this.blockSize),r=new Uint32Array(this.blockSize),p=0;p=this.blockSize&&this.incrementCounter(),s&&(i-=s,s=0)}return this.offset=(this.offset+a.length%4)%4,n},e.prototype.decrypt=function(e,t){return this.encrypt(e,t)},e.prototype.incrementCounter=function(){for(var e=this.counter.length-1;e>=0&&!(++this.counter[e]<4294967295);e--);}}(),Ye),tt=a(0),at=a.n(tt);const nt={8:new Uint8Array(1),16:new Uint16Array(1),32:new Uint32Array(1)};function st(e){const t=nt[e];return crypto.getRandomValues(t),t[0]}var it=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const rt="undefined"!=typeof window&&"crypto"in window?window.crypto.subtle:self.crypto.subtle;function pt(e){return rt.digest("SHA-1",p(e)).then(e=>new Uint8Array(e))}function ot(e){return rt.digest("SHA-256",p(e)).then(e=>new Uint8Array(e))}function mt(e,t,a){e=Le(e);return m(new $e(d(t),d(a)).encrypt(d(e)))}function dt(e,t,a){return m(new $e(d(t),d(a)).decrypt(d(e)))}function yt(e,t){const a=oe(t.modulus,16),i=oe(t.exponent,16);return s(ce(Y(oe(n(e),16),i,a),16))}function ct(e,t,a){return it(this,void 0,void 0,(function*(){const n=yield rt.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]);return rt.deriveBits({name:"PBKDF2",salt:t,iterations:a,hash:{name:"SHA-512"}},n,512).then(e=>new Uint8Array(e))}))}function lt(e){let t;try{t=function(e){var t,a,n,s,i,r,p=Math.ceil(64/M)+1,o=0,m=new Array(p),d=new Array(p),y=new Array(p),c=new Array(p),l=new Array(p),g=new Array(p),h=new Array(p);for(t=0;t<3;++t){for(a=17+(15&st(8)),ue(g,Q(pe(st(32),32,0),e)),ue(h,g),s=1<"boolFalse"===e.predicate).id,ft=+Ne.API.constructors.find(e=>"boolTrue"===e.predicate).id,_t=+Ne.API.constructors.find(e=>"vector"===e.predicate).id,vt=+Ne.MTProto.constructors.find(e=>"gzip_packed"===e.predicate).id;class bt{constructor(e={}){this.maxLength=2048,this.offset=0,this.mtproto=!1,this.debug=!1,this.maxLength=e.startMaxLength||2048,this.mtproto=e.mtproto||!1,this.createBuffer()}createBuffer(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)}getArray(){const e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t}getBuffer(){return this.getArray().buffer}getBytes(e=!0){if(e){const e=new ArrayBuffer(this.offset),t=new Uint8Array(e);return t.set(this.byteView.subarray(0,this.offset)),t}const t=new Array(this.offset);for(let e=0;e>>",e.toString(16),e,t);const a=this.offset/4;return this.checkLength(4),this.intView[a]=e,this.offset+=4,a}storeInt(e,t){return this.writeInt(e,(t||"")+":int")}storeBool(e,t){e?this.writeInt(ft,(t||"")+":bool"):this.writeInt(ut,(t||"")+":bool")}storeLongP(e,t,a){this.writeInt(t,(a||"")+":long[low]"),this.writeInt(e,(a||"")+":long[high]")}storeLong(e,t){if(Array.isArray(e))return 2===e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);"string"!=typeof e&&(e=e?e.toString():"0");const a=4294967296,n=oe(e,10,64),s=he(n),i=he(n);ie(n,oe(a.toString(16),16,64),s,i);const r=+ce(s,10);let p=+ce(i,10);r>>",e,(t||"")+":string"),void 0===e&&(e="");const a=unescape(encodeURIComponent(e));this.checkLength(a.length+8);const n=a.length;n<=253?this.byteView[this.offset++]=n:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&n,this.byteView[this.offset++]=(65280&n)>>8,this.byteView[this.offset++]=(16711680&n)>>16);for(let e=0;e>>",n(e),(t||"")+":bytes");const a=e.length;for(this.checkLength(a+8),a<=253?this.byteView[this.offset++]=a:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&a,this.byteView[this.offset++]=(65280&a)>>8,this.byteView[this.offset++]=(16711680&a)>>16),this.byteView.set(e,this.offset),this.offset+=a;this.offset%4;)this.byteView[this.offset++]=0}storeIntBytes(e,t,a){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const s=e.length;if(t%32||8*s!==t){const n=new Error("Invalid bits: "+t+", "+s);throw console.error(n,e,a),n}this.debug&&console.log(">>>",n(e),(a||"")+":int"+t),this.checkLength(s),this.byteView.set(e,this.offset),this.offset+=s}storeRawBytes(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const a=e.length;this.debug&&console.log(">>>",n(e),t||""),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a}storeMethod(e,t){const a=(this.mtproto?Ne.MTProto:Ne.API).methods.find(t=>t.method===e);if(!a)throw new Error("No method "+e+" found");this.storeInt(a.id,e+"[id]");const n=t.pFlags||t,s={};for(const i of a.params){let a=i.type;if(-1!==a.indexOf("?")){const e=a.split("?"),s=e[0].split(".");if(!(t[s[0]]&1<<+s[1])){if(!("true"===e[1]?n[i.name]:void 0!==t[i.name]))continue;t[s[0]]|=1<<+s[1]}a=e[1]}const r=this.storeObject(t[i.name],a,e+"["+i.name+"]");"#"===a&&(t[i.name]=t[i.name]||0,s[i.name]=r)}for(let e in s)this.intView[s[e]]=t[e];return a.type}storeObject(e,t,a){switch(t){case"#":e=e||0;case"int":return this.storeInt(e,a);case"long":return this.storeLong(e,a);case"int128":return this.storeIntBytes(e,128,a);case"int256":return this.storeIntBytes(e,256,a);case"int512":return this.storeIntBytes(e,512,a);case"string":return this.storeString(e,a);case"bytes":return this.storeBytes(e,a);case"double":return this.storeDouble(e,a);case"Bool":return this.storeBool(e,a);case"true":return}if(Array.isArray(e)){if("Vector"===t.substr(0,6))this.writeInt(_t,a+"[id]");else if("vector"!==t.substr(0,6))throw new Error("Invalid vector type "+t);const n=t.substr(7,t.length-8);this.writeInt(e.length,a+"[count]");for(let t=0;te.predicate===s);if((i="%"===t.charAt(0))&&(t=t.substr(1)),!r)throw new Error("No predicate "+s+" found");s===t&&(i=!0),i||this.writeInt(r.id,a+"["+s+"][id]");const p=e.pFlags,o={};for(const t of r.params){let n=t.type;if(-1!==n.indexOf("?")){const a=n.split("?"),s=a[0].split(".");if(!(e[s[0]]&1<<+s[1])){if(!("true"===a[1]?p&&p[t.name]:void 0!==e[t.name]))continue;e[s[0]]|=1<<+s[1]}n=a[1]}const i=this.storeObject(e[t.name],n,a+"["+s+"]["+t.name+"]");"#"===n&&(e[t.name]=e[t.name]||0,o[t.name]=i)}for(let t in o)this.intView[o[t]]=e[t];return r.type}}class Pt{constructor(e,t={}){this.offset=0,this.mtproto=!1,e instanceof ArrayBuffer?(this.buffer=e,this.intView=new Int32Array(e),this.byteView=new Uint8Array(this.buffer)):(this.buffer=e.buffer,this.intView=new Int32Array(e.buffer),this.byteView=e),this.override="override"in t?t.override:{},this.mtproto="mtproto"in t&&t.mtproto,this.debug=void 0!==t.debug&&t.debug}readInt(e){if(this.byteView.length-this.offset<4)throw console.error(this.byteView,this.offset),new Error("Nothing to fetch: "+e);const t=this.intView[this.offset/4];return this.debug&&console.log("<<<",t.toString(16),t,e,this.byteView.slice(this.offset-16,this.offset+16),this.byteView.slice(this.offset-16,this.offset+16).hex),this.offset+=4,t}fetchInt(e){return this.readInt((e||"")+":int")}fetchDouble(e){const t=new ArrayBuffer(8),a=new Int32Array(t),n=new Float64Array(t);return a[0]=this.readInt((e||"")+":double[low]"),a[1]=this.readInt((e||"")+":double[high]"),n[0]}fetchLong(e){const t=this.readInt((e||"")+":long[low]");return Fe(this.readInt((e||"")+":long[high]"),t)}fetchBool(e){const t=this.readInt((e||"")+":bool");return t===ft||t!==ut&&(this.offset-=4,this.fetchObject("Object",e))}fetchString(e){let t=this.byteView[this.offset++];254===t&&(t=this.byteView[this.offset++]|this.byteView[this.offset++]<<8|this.byteView[this.offset++]<<16);let a,n="";for(let e=0;ethis.byteView.byteLength)throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){const t=new Uint8Array(e);return t.set(this.byteView.subarray(this.offset,this.offset+e)),this.offset+=e,t}const s=new Array(e);for(let t=0;t0){const s=e.substr(7,e.length-8);for(let e=0;ee.type===t),!n)throw new Error("Constructor not found for type: "+e)}else{const i=this.readInt(t+"[id]");if(i===vt){const a=ht(this.fetchBytes(t+"[packed_string]"));return new Pt(a).fetchObject(e,t)}if(i===_t)return this.fetchVector(e,t);let r=a.constructorsIndex;if(!r){a.constructorsIndex=r={};for(let e=0,t=a.constructors.length;ee|t,0)},n}var At=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};Ct("SRP",wt.Error);function Mt(e,t,a){return At(this,void 0,void 0,(function*(){const i=a?t.new_algo:t.current_algo,m=oe(n(i.p),16),d=oe(n(t.srp_B),16),y=pe(i.g,32,256),c=oe(n(yield function(e,t,a){return At(this,void 0,void 0,(function*(){let n=yield Rt.invokeCrypto("sha256-hash",o(t,(new TextEncoder).encode(e),t));n=o(a,n,a),n=yield Rt.invokeCrypto("sha256-hash",n);let s=yield Rt.invokeCrypto("pbkdf2",new Uint8Array(n),t,1e5);return s=o(a,s,a),n=yield Rt.invokeCrypto("sha256-hash",s),n}))}(e,i.salt1,i.salt2)),16),l=function(e,t){return e instanceof Uint8Array||(e=p(e)),Le(e,t,!0,!0,!0)},g=l(s(ce(m,16)),256),h=l(s(ce(y,16)),256),u=l(s(ce(d,16)),256),f=Y(y,c,m),_=e=>{const t=new Uint8Array(e.length);for(let a=0;a{const a=$(t,e);return!(ae(a)||J(a)<1984||J(e)<1984||Math.floor((J(e)+7)/8)>256)},{a:P,a_for_hash:w,u:S}=yield(()=>At(this,void 0,void 0,(function*(){for(;;){const e=oe(n(_(t.secure_random)),16),a=Y(y,e,m);if(b(a,m)){const t=s(ce(a,16)),n=oe((yield Rt.invokeCrypto("sha256-hash",o(t,u))).hex,16);if(!ye(n)&&!ae(n))return{a:e,a_for_hash:t,u:n}}}})))();let k;k=se(d,v)?d:ee(d,m),k=Q($(k,v),m);const I=Y(k,ee(P,X(S,c)),m),C=yield Rt.invokeCrypto("sha256-hash",l(s(ce(I,16)),256));let A=yield Rt.invokeCrypto("sha256-hash",g);A=r(A,yield Rt.invokeCrypto("sha256-hash",h));const M=o(A,yield Rt.invokeCrypto("sha256-hash",i.salt1),yield Rt.invokeCrypto("sha256-hash",i.salt2),w,u,C),R=yield Rt.invokeCrypto("sha256-hash",M);return{_:"inputCheckPasswordSRP",srp_id:t.srp_id,A:new Uint8Array(w),M1:R}}))}var Rt=new class extends class{invokeCrypto(e,...t){return this.performTaskWorker(e,...t)}}{constructor(){super(),this.webWorker=!1,this.taskId=0,this.awaiting={},this.pending=[],this.debug=!1,console.log("CW constructor"),this.utils={"sha1-hash":pt,"sha256-hash":ot,pbkdf2:ct,"aes-encrypt":mt,"aes-decrypt":dt,"rsa-encrypt":yt,factorize:lt,"mod-pow":gt,gzipUncompress:ht,computeSRP:Mt}}performTaskWorker(e,...t){return this.debug&&console.log("CW start",e,t),Promise.resolve(this.utils[e](...t))}};const Et=new class{constructor(){this.lastMessageId=[0,0],this.timeOffset=0,A.get("server_time_offset").then(e=>{e&&(this.timeOffset=e)})}generateId(){const e=Date.now();let t=[Math.floor(e/1e3)+this.timeOffset,e%1e3<<21|st(16)<<3|4];(this.lastMessageId[0]>t[0]||this.lastMessageId[0]===t[0]&&this.lastMessageId[1]>=t[1])&&(t=[this.lastMessageId[0],this.lastMessageId[1]+4]),this.lastMessageId=t;return Fe(t[0],t[1])}applyServerTime(e,t){const a=e-(t=(t||Date.now())/1e3|0),n=Math.abs(this.timeOffset-a)>10;A.set({server_time_offset:a}),this.lastMessageId=[0,0],this.timeOffset=a;return P({type:"applyServerTimeOffset",payload:a}),n}};l.timeManager=Et;var Vt=Et;const Dt={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"0.8.6",versionFull:"0.8.6 (4)",langPackVersion:"0.3.3",langPack:"macos",langPackCode:"en",domains:["web.telegram.org"],baseDcId:2,isMainDomain:"web.telegram.org"===location.hostname,suffix:"K"};Dt.isMainDomain&&(Dt.id=2496,Dt.hash="8da85b0d5bfe62527e5b244c209159c3");var Ut=Dt;var Bt;!function(e){e[e.Connected=0]="Connected",e[e.Connecting=1]="Connecting",e[e.Closed=2]="Closed",e[e.TimedOut=3]="TimedOut"}(Bt||(Bt={}));var Tt=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};let xt;class Ft{constructor(e,t,a,n,s,i={}){this.dcId=e,this.authKey=t,this.authKeyId=a,this.transport=s,this.lastServerMessages=[],this.sentMessages={},this.pendingMessages={},this.pendingAcks=[],this.pendingResends=[],this.connectionInited=!1,this.nextReq=0,this.seqNo=0,this.lastResendReq=null,this.isOnline=!1,this.status=Bt.Closed,this.lastResponseTime=0,this.debug=g||y.debug,this.activeRequests=0,this.authKeyUint8=p(this.authKey),this.serverSalt=p(n),this.isFileUpload=!!i.fileUpload,this.isFileDownload=!!i.fileDownload,this.isFileNetworker=this.isFileUpload||this.isFileDownload;const r=this.isFileUpload?"-U":this.isFileDownload?"-D":"";this.name="NET-"+e+r,this.log=Ct(this.name,wt.Log|wt.Error|wt.Warn),this.log("constructor"),this.updateSession(),this.transport.networker=this,this.transport.connected&&this.setConnectionStatus(Bt.Connected)}updateSession(){this.seqNo=0,this.prevSessionId=this.sessionId,this.sessionId=new Uint8Array(8).randomize()}updateSentMessage(e){const t=this.sentMessages[e];return!!t&&(t.container&&function(e,t){for(let a=e.length-1;a>=0;--a)t(e[a],a,e)}(t.inner,(e,a)=>{const n=this.updateSentMessage(e);n?t.inner[a]=n.msg_id:t.inner.splice(a,1)}),t.msg_id=Vt.generateId(),t.seq_no=this.generateSeqNo(t.notContentRelated||t.container),this.sentMessages[t.msg_id]=t,delete this.sentMessages[e],t)}generateSeqNo(e){let t=2*this.seqNo;return e||(t++,this.seqNo++),t}wrapMtpCall(e,t,a){const n=new bt({mtproto:!0});n.storeMethod(e,t);const s=Vt.generateId(),i=this.generateSeqNo(),r={msg_id:s,seq_no:i,body:n.getBytes(!0)};return y.debug&&this.log("MT call",e,t,s,i),this.pushMessage(r,a)}wrapMtpMessage(e,t){const a=new bt({mtproto:!0});a.storeObject(e,"Object");const n=Vt.generateId(),s=this.generateSeqNo(t.notContentRelated),i={msg_id:n,seq_no:s,body:a.getBytes(!0)};return y.debug&&this.log("MT message",e,n,s),this.pushMessage(i,t)}wrapApiCall(e,t={},a={}){const n=new bt(a);if(!this.connectionInited){const e=Ne.API.methods.find(e=>"invokeWithLayer"===e.method);if(!e)throw new Error("no invokeWithLayer!");n.storeInt(+e.id,"invokeWithLayer"),n.storeInt(Ne.layer,"layer");const t=Ne.API.methods.find(e=>"initConnection"===e.method);if(!t)throw new Error("no initConnection!");n.storeInt(+t.id,"initConnection"),n.storeInt(0,"flags"),n.storeInt(Ut.id,"api_id"),n.storeString(Nt.userAgent||"Unknown UserAgent","device_model"),n.storeString(navigator.platform||"Unknown Platform","system_version"),n.storeString(Ut.version+(Ut.isMainDomain?" "+Ut.suffix:""),"app_version"),n.storeString(navigator.language||"en","system_lang_code"),n.storeString(Ut.langPack,"lang_pack"),n.storeString(Nt.language,"lang_code")}if(a.afterMessageId){if(void 0===xt){const e=Ne.API.methods.find(e=>"invokeAfterMsg"===e.method);xt=e?+e.id:0}xt?(n.storeInt(xt,"invokeAfterMsg"),n.storeLong(a.afterMessageId,"msg_id")):this.log.error("no invokeAfterMsg!")}a.resultType=n.storeMethod(e,t);const s={msg_id:Vt.generateId(),seq_no:this.generateSeqNo(),body:n.getBytes(!0),isAPI:!0};return y.debug?this.log("Api call",e,s,t,a):this.debug&&this.log("Api call",e,t,a),this.pushMessage(s,a)}destroy(){this.transport.destroy()}forceReconnectTimeout(){this.transport.reconnect&&this.transport.reconnect()}forceReconnect(){this.transport.forceReconnect&&this.transport.forceReconnect()}pushMessage(e,t){const a=new Promise((a,n)=>{this.sentMessages[e.msg_id]=Object.assign(e,t,t.notContentRelated?void 0:{deferred:{resolve:a,reject:n}}),this.pendingMessages[e.msg_id]=0,t.noSchedule||this.scheduleRequest(),Te(t)&&(t.messageId=e.msg_id)});if(!t.notContentRelated&&!t.noResponse){const t=setTimeout(()=>{this.lastResponseTime&&Date.now()-this.lastResponseTime<5e3||(this.log.error("timeout",e),this.isOnline&&this.setConnectionStatus(Bt.TimedOut))},5e3);a.finally(()=>{clearTimeout(t),this.setConnectionStatus(Bt.Connected),--this.activeRequests,this.setDrainTimeout()}),++this.activeRequests,void 0!==this.onDrainTimeout&&(clearTimeout(this.onDrainTimeout),this.onDrainTimeout=void 0)}return a}setDrainTimeout(){!this.activeRequests&&this.onDrain&&void 0===this.onDrainTimeout&&(this.onDrainTimeout=self.setTimeout(()=>{this.onDrainTimeout=void 0,this.log("drain"),this.onDrain()},1e4))}setConnectionStatus(e,t){const a=e===Bt.Connected,n=this.status!==e;this.isOnline=a,this.status=e,n&&(Nt.onConnectionStatusChange&&Nt.onConnectionStatusChange({_:"networkerStatus",status:e,dcId:this.dcId,name:this.name,isFileNetworker:this.isFileNetworker,isFileDownload:this.isFileDownload,isFileUpload:this.isFileUpload,retryAt:t}),this.isOnline&&this.scheduleRequest())}pushResend(e,t=100){const a=t?Date.now()+t:0,n=this.sentMessages[e];if(n.container)for(const e of n.inner)this.pendingMessages[e]=a;else this.pendingMessages[e]=a;n.acked&&this.log.error("pushResend: acked message?",n),this.debug&&this.log.debug("pushResend:",e,n,this.pendingMessages,t),this.scheduleRequest(t)}getMsgKey(e,t){return Tt(this,void 0,void 0,(function*(){const a=t?0:8,n=o(this.authKeyUint8.subarray(88+a,88+a+32),e),s=yield Rt.invokeCrypto("sha256-hash",n);return new Uint8Array(s).subarray(8,24)}))}getAesKeyIv(e,t){const a=t?0:8,n=new Uint8Array(52),s=new Uint8Array(52),i=[];return n.set(e,0),n.set(this.authKeyUint8.subarray(a,a+36),16),i.push(Rt.invokeCrypto("sha256-hash",n)),s.set(this.authKeyUint8.subarray(40+a,40+a+36),0),s.set(e,36),i.push(Rt.invokeCrypto("sha256-hash",s)),Promise.all(i).then(e=>{const t=new Uint8Array(32),a=new Uint8Array(32),n=new Uint8Array(e[0]),s=new Uint8Array(e[1]);return t.set(n.subarray(0,8)),t.set(s.subarray(8,24),8),t.set(n.subarray(24,32),24),a.set(s.subarray(0,8)),a.set(n.subarray(8,24),8),a.set(s.subarray(24,32),24),[t,a]})}isStopped(){return Nt.akStopped&&!this.isFileNetworker}performScheduledRequest(){if(this.isStopped())return!1;if(this.pendingAcks.length){const e=this.pendingAcks.slice();this.wrapMtpMessage({_:"msgs_ack",msg_ids:e},{notContentRelated:!0,noSchedule:!0})}if(this.pendingResends.length){const e=this.pendingResends.slice(),t={noSchedule:!0,notContentRelated:!0,messageId:""};this.wrapMtpMessage({_:"msg_resend_req",msg_ids:e},t),this.lastResendReq={req_msg_id:t.messageId,resend_msg_ids:e}}let e;const t=[];let a=0,n=!1;const s=Object.keys(this.pendingMessages).map(e=>oe(e,10)).sort((e,t)=>ge(e,t)).map(e=>ce(e,10));for(const i of s){const s=this.sentMessages[i];if(s&&s.body){const i=s.body.length+32;if(a+i>655360&&(this.log.warn("lengthOverflow",s,t),n=!0,e))break;t.push(s),a+=i,e=s}delete this.pendingMessages[i]}if(!t.length)return;if(t.length>1){const n=this.generateContainerMessage(a,t);e=n.messageWithBody,this.sentMessages[e.msg_id]=n.message}else this.sentMessages[e.msg_id]=e;this.pendingAcks=[];this.sendEncryptedRequest(e);this.cleanupSent(),n&&this.scheduleRequest()}generateContainerMessage(e,t){const a=new bt({mtproto:!0,startMaxLength:e+64});a.storeInt(1945237724,"CONTAINER[id]"),a.storeInt(t.length,"CONTAINER[count]");const n=[];t.forEach((e,t)=>{n.push(e.msg_id),a.storeLong(e.msg_id,"CONTAINER["+t+"][msg_id]"),a.storeInt(e.seq_no,"CONTAINER["+t+"][seq_no]"),a.storeInt(e.body.length,"CONTAINER["+t+"][bytes]"),a.storeRawBytes(e.body,"CONTAINER["+t+"][body]")});const s={msg_id:Vt.generateId(),seq_no:this.generateSeqNo(!0),container:!0,inner:n};return y.debug&&this.log.warn("Container",n,s.msg_id,s.seq_no),{message:s,messageWithBody:Object.assign({body:a.getBytes(!0)},s)}}getEncryptedMessage(e){return Tt(this,void 0,void 0,(function*(){const t=yield this.getMsgKey(e,!0),a=yield this.getAesKeyIv(t,!0);return{bytes:yield Rt.invokeCrypto("aes-encrypt",e,a[0],a[1]),msgKey:t}}))}getDecryptedMessage(e,t){return this.getAesKeyIv(e,!1).then(e=>Rt.invokeCrypto("aes-decrypt",t,e[0],e[1]))}getEncryptedOutput(e){const t=new bt({startMaxLength:e.body.length+2048});t.storeIntBytes(this.serverSalt,64,"salt"),t.storeIntBytes(this.sessionId,64,"session_id"),t.storeLong(e.msg_id,"message_id"),t.storeInt(e.seq_no,"seq_no"),t.storeInt(e.body.length,"message_data_length"),t.storeRawBytes(e.body,"message_data");const a=t.getBuffer(),n=16-t.getOffset()%16+16*(1+st(8)%5),s=o(a,new Uint8Array(n).randomize());return this.getEncryptedMessage(s).then(e=>{const t=new bt({startMaxLength:e.bytes.length+256});t.storeIntBytes(this.authKeyId,64,"auth_key_id"),t.storeIntBytes(e.msgKey,128,"msg_key"),t.storeRawBytes(e.bytes,"encrypted_data");return t.getBytes(!0)})}sendEncryptedRequest(e){return this.getEncryptedOutput(e).then(t=>{this.debug&&this.log.debug("sendEncryptedRequest: launching message into space:",e,[e.msg_id].concat(e.inner||[]));return this.transport.send(t)})}parseResponse(e){this.lastResponseTime=Date.now();const t=new Pt(e),a=t.fetchIntBytes(64,!0,"auth_key_id");if(!i(a,this.authKeyId))throw new Error("[MT] Invalid server auth_key_id: "+a.hex);const s=t.fetchIntBytes(128,!0,"msg_key"),r=t.fetchRawBytes(e.byteLength-t.getOffset(),!0,"encrypted_data");return this.getDecryptedMessage(s,r).then(e=>this.getMsgKey(e,!1).then(t=>{if(!i(s,t))throw this.log.warn("[MT] msg_keys",s,t),this.updateSession(),new Error("[MT] server msgKey mismatch, updating session");let a=new Pt(e,{mtproto:!0});a.fetchIntBytes(64,!0,"salt");const r=a.fetchIntBytes(64,!0,"session_id"),p=a.fetchLong("message_id");if(!(i(r,this.sessionId)||this.prevSessionId&&i(r,this.prevSessionId)))throw this.log.warn("Sessions",r,this.sessionId,this.prevSessionId,e),new Error("[MT] Invalid server session_id: "+n(r));const o=a.fetchInt("seq_no"),m=e.byteLength,d=a.fetchInt("message_data[length]");let y=a.getOffset();if(d%4||d>m-y)throw new Error("[MT] Invalid body length: "+d);const c=a.fetchRawBytes(d,!0,"message_data");y=a.getOffset();const l=m-y;if(l<12||l>1024)throw new Error("[MT] Invalid padding length: "+l);a=new Pt(c,{mtproto:!0,override:{mt_message:(e,t)=>{e.msg_id=a.fetchLong(t+"[msg_id]"),e.seqno=a.fetchInt(t+"[seqno]"),e.bytes=a.fetchInt(t+"[bytes]");const n=a.getOffset();try{e.body=a.fetchObject("Object",t+"[body]")}catch(t){this.log.error("parse error",t.message,t.stack),e.body={_:"parse_error",error:t}}a.getOffset()!==n+e.bytes&&a.setOffset(n+e.bytes)},mt_rpc_result:(e,t)=>{e.req_msg_id=a.fetchLong(t+"[req_msg_id]");const n=this.sentMessages[e.req_msg_id],s=n&&n.resultType||"Object";e.req_msg_id&&!n||(e.result=a.fetchObject(s,t+"[result]"))}}});return{response:a.fetchObject("","INPUT"),messageId:p,sessionId:r,seqNo:o}}))}applyServerSalt(e){const t=Le(new Uint8Array(le(oe(e,10),!1)),8,!0,!1,!1);A.set({["dc"+this.dcId+"_server_salt"]:n(t)}),this.serverSalt=new Uint8Array(t)}scheduleRequest(e){const t=Date.now()+(e||0);if(this.nextReq&&(void 0===e||this.nextReq<=t))return;this.nextReqTimeout&&clearTimeout(this.nextReqTimeout);const a=()=>{this.nextReqTimeout=0,this.nextReq=0,this.performScheduledRequest()};this.nextReq=t,e?this.nextReqTimeout=self.setTimeout(a,e):a()}ackMessage(e){this.pendingAcks.push(e),this.scheduleRequest()}reqResendMessage(e){this.debug&&this.log.debug("Req resend",e),this.pendingResends.push(e),this.scheduleRequest(100)}cleanupSent(){let e=!1;return Object.keys(this.sentMessages).forEach(t=>{const a=this.sentMessages[t];if(a.notContentRelated&&void 0===this.pendingMessages[t])delete this.sentMessages[t];else if(a.container){for(const t of a.inner)if(void 0!==this.sentMessages[t])return void(e=!0);delete this.sentMessages[t]}else e=!0}),!e}processMessageAck(e){const t=this.sentMessages[e];t&&!t.acked&&(t.acked=!0)}processError(e){const t=(e.error_message||"").match(/^([A-Z_0-9]+\b)(: (.+))?/)||[];return e.error_code=e.error_code,{code:!e.error_code||e.error_code<=0?500:e.error_code,type:t[1]||"UNKNOWN",description:t[3]||"CODE#"+e.error_code+" "+e.error_message,originalError:e}}resend(){for(const e in this.sentMessages){const t=this.sentMessages[e];(t.body||t.container)&&this.pushResend(e)}}processMessage(e,t,a){if("messageEmpty"===e._)return void this.log.warn("processMessage: messageEmpty",e,t);if(parseInt(t.substr(0,-10),10)%2)this.log.warn("Server even message id: ",t,e);else switch(e._){case"msg_container":for(const t of e.messages)this.processMessage(t,t.msg_id,a);break;case"bad_server_salt":this.log("Bad server salt",e),this.applyServerSalt(e.new_server_salt),this.sentMessages[e.bad_msg_id]&&this.pushResend(e.bad_msg_id),this.ackMessage(t);break;case"bad_msg_notification":switch(this.log.error("Bad msg notification",e),e.error_code){case 16:case 17:case 32:case 33:case 64:{const a=oe(t,10);ve(a,32);const n=Vt.applyServerTime(+ce(a,10));(17===e.error_code||n)&&(this.log("Update session"),this.updateSession());const s=this.updateSentMessage(e.bad_msg_id);s&&this.pushResend(s.msg_id)}}break;case"message":if(-1!==this.lastServerMessages.indexOf(t))return void this.ackMessage(t);this.lastServerMessages.push(t),this.lastServerMessages.length>100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(t),this.debug&&this.log.debug("new_session_created",e),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt),A.get("dc").then(t=>{t===this.dcId&&!this.isFileNetworker&&Nt.updatesProcessor&&Nt.updatesProcessor(e)});break;case"msgs_ack":for(const t of e.msg_ids)this.processMessageAck(t);break;case"msg_detailed_info":if(!this.sentMessages[e.msg_id]){this.ackMessage(e.answer_msg_id);break}case"msg_new_detailed_info":if(this.pendingAcks.indexOf(e.answer_msg_id))break;this.reqResendMessage(e.answer_msg_id);break;case"msgs_state_info":if(this.ackMessage(e.answer_msg_id),this.lastResendReq&&this.lastResendReq.req_msg_id===e.req_msg_id&&this.pendingResends.length)for(const e of this.lastResendReq.resend_msg_ids){const t=this.pendingResends.indexOf(e);-1!==t&&this.pendingResends.splice(t,1)}break;case"rpc_result":{this.ackMessage(t);const a=e.req_msg_id,n=this.sentMessages[a];if(this.processMessageAck(a),n){const t=n.deferred;if("rpc_error"===e.result._){const a=this.processError(e.result);this.log("Rpc error",a),t&&t.reject(a)}else t&&t.resolve(e.result),n.isAPI&&!this.connectionInited&&(this.connectionInited=!0);delete this.sentMessages[a]}else this.debug&&this.log("Rpc result for unknown message:",a,e);break}case"pong":if(this.transport.networker){const t=e.msg_id,a=this.sentMessages[t];a&&(a.deferred.resolve(e),delete this.sentMessages[t])}break;default:this.ackMessage(t),null!==Nt.updatesProcessor&&Nt.updatesProcessor(e)}}}const Lt=new class{constructor(){this.networkers=[],this.language=navigator.language||Ut.langPackCode,this.updatesProcessor=null,this.onConnectionStatusChange=null,this.akStopped=!1,this.userAgent=navigator.userAgent}removeNetworker(e){const t=this.networkers.indexOf(e);-1!==t&&this.networkers.splice(t,1)}setUpdatesProcessor(e){this.updatesProcessor=e}getNetworker(e,t,a,n,s,i){const r=new Ft(e,t,a,n,s,i);return this.networkers.push(r),r}startAll(){if(this.akStopped){const e=this.networkers.filter(e=>e.isStopped());this.akStopped=!1,this.updatesProcessor&&this.updatesProcessor({_:"new_session_created"});for(const t of e)t.scheduleRequest()}}stopAll(){this.akStopped=!0}setLanguage(e){this.language=e;for(const e of this.networkers)e.isFileNetworker||(e.connectionInited=!1)}forceReconnectTimeout(){for(const e of this.networkers)e.forceReconnectTimeout()}forceReconnect(){for(const e of this.networkers)if(!e.isFileNetworker){e.forceReconnect();break}}};l&&(l.networkerFactory=Lt);var Nt=Lt;class Ot{constructor(e){this._constructor(e)}_constructor(e=!1){this.reuseResults=e,this.listeners={},this.listenerResults={}}addEventListener(e,t,a){var n,s;(null!==(n=this.listeners[e])&&void 0!==n?n:this.listeners[e]=[]).push({callback:t,options:a}),this.listenerResults.hasOwnProperty(e)&&(t(...this.listenerResults[e]),null===(s=a)||void 0===s?void 0:s.once)&&this.listeners[e].pop()}addMultipleEventsListeners(e){for(const t in e)this.addEventListener(t,e[t])}removeEventListener(e,t,a){this.listeners[e]&&this.listeners[e].findAndSplice(e=>e.callback===t)}dispatchEvent(e,...t){this.reuseResults&&(this.listenerResults[e]=t);const a=[],n=this.listeners[e];if(n){n.slice().forEach(s=>{var i;-1!==n.findIndex(e=>e.callback===s.callback)&&(a.push(s.callback(...t)),(null===(i=s.options)||void 0===i?void 0:i.once)&&this.removeEventListener(e,s.callback))})}return a}cleanup(){this.listeners={},this.listenerResults={}}}class qt extends Ot{constructor(e,t,a){super(),this.dcId=e,this.url=t,this.debug=y.debug&&!1,this.handleOpen=()=>{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=e=>{this.log.error("handleError",e),this.close()},this.handleClose=()=>{this.log("closed"),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=e=>{this.debug&&this.log.debug("<-","handleMessage",e.data.byteLength),this.dispatchEvent("message",e.data)},this.send=e=>{this.debug&&this.log.debug("-> body length to send:",e.length),this.ws.send(e)};let n=wt.Error|wt.Log;return this.debug&&(n|=wt.Debug),this.log=Ct("WS-"+e+a,n),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(e){}this.handleClose()}}}class Gt{constructor(e){this._counter=e}increment(){for(let e=15;e>=0;e--){if(255!==this._counter[e]){this._counter[e]++;break}this._counter[e]=0}}}class Kt{constructor(e,t){this._remainingCounter=null,this._remainingCounterIndex=16,this._counter=new Gt(t),this._aes=new et(e)}update(e){const t=e.slice();for(let e=0;e{this.connected=!0;const e=this.obfuscation.init(this.codec);if(this.connection.send(e),this.networker)this.pending.length=0,this.networker.setConnectionStatus(Bt.Connected),this.networker.cleanupSent(),this.networker.resend();else for(const e of this.pending)e.encoded&&e.body&&(e.encoded=this.encodeBody(e.body));setTimeout(()=>{this.releasePending()},0)},this.onMessage=e=>{let t=this.obfuscation.decode(new Uint8Array(e));if(t=this.codec.readPacket(t),this.networker)return this.debug&&this.log.debug("redirecting to networker",t.length),void this.networker.parseResponse(t).then(e=>{this.debug&&this.log.debug("redirecting to networker response:",e);try{this.networker.processMessage(e.response,e.messageId,e.sessionId)}catch(e){this.log.error("handleMessage networker processMessage error",e)}}).catch(e=>{this.log.error("handleMessage networker parseResponse error",e)});const a=this.pending.shift();a?a.resolve(t):this.debug&&this.log.debug("no pending for res:",t.hex)},this.onClose=()=>{let e,t;if(this.clear(),this.autoReconnect){const a=Date.now(),n=a-this.lastCloseTime;e=!isNaN(n)&&n{if(void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0),!this.connection){if(this.log("trying to reconnect..."),this.lastCloseTime=Date.now(),this.networker)this.networker.setConnectionStatus(Bt.Connecting);else for(const e of this.pending)e.bodySent&&(e.bodySent=!1);this.connect()}};let i=wt.Error|wt.Log;this.debug&&(i|=wt.Debug),this.log=Ct("TCP-"+t+n,i),this.log("constructor"),this.connect()}clear(){this.connected=!1,this.connection&&(this.connection.removeEventListener("open",this.onOpen),this.connection.removeEventListener("close",this.onClose),this.connection.removeEventListener("message",this.onMessage),this.connection=void 0)}forceReconnect(){this.close(),this.reconnect()}destroy(){this.setAutoReconnect(!1),this.close()}close(){const e=this.connection;if(e){const t=this.connected;this.clear(),t&&(e.addEventListener("message",this.onMessage),e.addEventListener("close",()=>{e.removeEventListener("message",this.onMessage)},{once:!0}),e.close())}}setAutoReconnect(e){this.autoReconnect=e,e?this.connection||void 0!==this.reconnectTimeout||this.reconnect():void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}connect(){this.connection&&this.close(),this.connection=new this.Connection(this.dcId,this.url,this.logSuffix),this.connection.addEventListener("open",this.onOpen),this.connection.addEventListener("close",this.onClose),this.connection.addEventListener("message",this.onMessage)}encodeBody(e){const t=this.codec.encodePacket(e);return this.obfuscation.encode(t)}send(e){this.debug&&this.log.debug("-> body length to pending:",e.length);const t=this.connected?this.encodeBody(e):void 0;if(!this.networker){const a=new Promise((a,n)=>{this.pending.push({resolve:a,reject:n,body:e,encoded:t})});return this.releasePending(),a}this.pending.push({body:e,encoded:t}),this.releasePending()}releasePending(){if(!this.connected)return;let e=this.pending.length;for(let t=0;t body length to send:",n.length),i||(i=a.encoded=this.encodeBody(n)),this.connection.send(i),a.resolve?a.bodySent=!0:(this.pending.splice(t--,1),e--))}}}var Wt="undefined"!=typeof window?window:self;const Jt=navigator?navigator.userAgent:null,Zt=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&Wt.MSStream,!!("safari"in Wt)||!(!Jt||!(/\b(iPad|iPhone|iPod)\b/.test(Jt)||Jt.match("Safari")&&!Jt.match("Chrome"))));navigator.userAgent.toLowerCase().indexOf("firefox"),navigator.maxTouchPoints>0&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i);let Qt=0;class Xt extends Ot{constructor(e,t,a){super(),this.dcId=e,this.url=t,this.id=++Qt,Yt.set(this.id,this);const n={type:"socketProxy",payload:{type:"setup",payload:{dcId:e,url:t,logSuffix:a},id:this.id}};w(n)}send(e){const t={type:"socketProxy",payload:{type:"send",payload:e,id:this.id}};w(t)}close(){const e={type:"socketProxy",payload:{type:"close",id:this.id}};w(e)}}const Yt=new Map,$t=y.test?"_test":"";class ea{constructor(){this.sslSubdomains=["pluto","venus","aurora","vesta","flora"],this.dcOptions=y.test?[{id:1,host:"149.154.175.10",port:80},{id:2,host:"149.154.167.40",port:80},{id:3,host:"149.154.175.117",port:80}]:[{id:1,host:"149.154.175.50",port:80},{id:2,host:"149.154.167.50",port:80},{id:3,host:"149.154.175.100",port:80},{id:4,host:"149.154.167.91",port:80},{id:5,host:"149.154.171.5",port:80}],this.chosenServers={},this.transportSocket=(e,t,a)=>{const n="apiws"+$t,s=`wss://${Ut.suffix.toLowerCase()}ws${e}${a}.web.telegram.org/${n}`;return new jt(Zt&&h&&void 0!==Xt?Xt:qt,e,s,"upload"===t?"-U":"download"===t?"-D":"",1e4)}}chooseServer(e,t="client",a="websocket",n=!0){this.chosenServers.hasOwnProperty(a)||(this.chosenServers[a]={client:{},download:{},upload:{}});const s=this.chosenServers[a][t];e in s||(s[e]=[]);const i=s[e];if(!i.length||!n){let a;const s="client"===t?"":"-1";return a=this.transportSocket(e,t,s),a?(n&&i.push(a),a):(console.error("No chosenServer!",e),null)}return i[0]}static removeTransport(e,t){for(const a in e)for(const n in e[a])for(const s in e[a][n]){const i=e[a][n][s],r=i.indexOf(t);-1!==r&&i.splice(r,1)}}}var ta=new ea,aa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};var na=new class{constructor(){this.testPublicKeysHex=[{modulus:"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",exponent:"010001"}],this.publisKeysHex=[{modulus:"e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3",exponent:"010001"}],this.publicKeysParsed={},this.prepared=!1,this.preparePromise=null,y.test&&(this.publisKeysHex=this.testPublicKeysHex)}prepare(){return this.preparePromise?this.preparePromise:this.prepared?Promise.resolve():this.preparePromise=Promise.all(this.publisKeysHex.map(e=>{const t=new bt;t.storeBytes(s(e.modulus),"n"),t.storeBytes(s(e.exponent),"e");const a=t.getBuffer();return Rt.invokeCrypto("sha1-hash",a).then(t=>{const a=t.slice(-8);a.reverse(),this.publicKeysParsed[n(a).toLowerCase()]={modulus:e.modulus,exponent:e.exponent}})})).then(()=>{this.prepared=!0,this.preparePromise=null})}select(e){return aa(this,void 0,void 0,(function*(){yield this.prepare();for(let t=0;t{if(g&&this.log("mtpSendPlainRequest: in good sector",e),!e||!e.byteLength)throw p;try{const t=new Pt(e,{mtproto:!0});if(4===e.length){const e=t.fetchInt();throw this.log.error("mtpSendPlainRequest: wrong response, error code:",e),e}const a=t.fetchLong("auth_key_id");"0"!==a&&this.log.error("auth_key_id !== 0",a);const n=t.fetchLong("msg_id");"0"===n&&this.log.error("msg_id === 0",n);const s=t.fetchInt("msg_len");return s||this.log.error("no msg_len",s),t}catch(e){this.log.error("mtpSendPlainRequest: deserialization went bad",e);throw Object.assign(p,{originalError:e})}},e=>{throw e.message||e.type||(e=Object.assign(p,{originalError:e})),e})}sendReqPQ(e){return sa(this,void 0,void 0,(function*(){const t=new bt({mtproto:!0});let a;t.storeMethod("req_pq_multi",{nonce:e.nonce}),g&&this.log("Send req_pq",e.nonce.hex);try{const n=this.sendPlainRequest(e.dcId,t.getBytes(!0));na.prepare(),a=yield n}catch(e){throw this.log.error("req_pq error",e.message),e}const s=a.fetchObject("ResPQ");if("resPQ"!==s._)throw new Error("[MT] resPQ response invalid: "+s._);if(!i(e.nonce,s.nonce))throw this.log.error(e.nonce,s.nonce),new Error("[MT] resPQ nonce mismatch");e.serverNonce=s.server_nonce,e.pq=s.pq,e.fingerprints=s.server_public_key_fingerprints,g&&this.log("Got ResPQ",n(e.serverNonce),n(e.pq),e.fingerprints);const r=yield na.select(e.fingerprints);if(!r)throw new Error("[MT] No public key found");e.publicKey=r,g&&this.log("PQ factorization start",e.pq);try{var p=yield Rt.invokeCrypto("factorize",e.pq)}catch(e){throw this.log.error("worker error factorize",e),e}return e.p=p[0],e.q=p[1],g&&this.log("PQ factorization done",p),this.sendReqDhParams(e)}))}sendReqDhParams(e){return sa(this,void 0,void 0,(function*(){e.newNonce=new Uint8Array(32).randomize();const t={_:"p_q_inner_data_dc",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce,dc:0},a=new bt({mtproto:!0});a.storeObject(t,"P_Q_inner_data","DECRYPTED_DATA");const s=a.getBytes(!0);if(s.length>144)throw"DH_params: data is more than 144 bytes!";const p=Le(s,192,!1,!0,!1),o=p.slice().reverse(),m=yield(()=>sa(this,void 0,void 0,(function*(){for(;;){const t=new Uint8Array(32).randomize(),a=o.concat(yield Rt.invokeCrypto("sha256-hash",t.concat(p)));if(224!==a.length)throw"DH_params: dataWithHash !== 224 bytes!";const s=yield Rt.invokeCrypto("aes-encrypt",a,t,new Uint8Array([0])),i=r(t,yield Rt.invokeCrypto("sha256-hash",s)).concat(s);if(-1===ge(oe(n(i),16),oe(e.publicKey.modulus,16)))return i}})))(),d=Le(yield Rt.invokeCrypto("rsa-encrypt",m,e.publicKey),256,!0,!0,!0),y={nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:d},c=new bt({mtproto:!0});c.storeMethod("req_DH_params",y);const l=c.getBytes(!0);let h;g&&this.log("Send req_DH_params",y);try{h=yield this.sendPlainRequest(e.dcId,l)}catch(e){throw this.log.error("Send req_DH_params FAIL!",e),e}const u=h.fetchObject("Server_DH_Params","RESPONSE");if(g&&this.log("Sent req_DH_params, response:",u),"server_DH_params_fail"!==u._&&"server_DH_params_ok"!==u._)throw new Error("[MT] Server_DH_Params response invalid: "+u._);if(!i(e.nonce,u.nonce))throw new Error("[MT] Server_DH_Params nonce mismatch");if(!i(e.serverNonce,u.server_nonce))throw new Error("[MT] Server_DH_Params server_nonce mismatch");if("server_DH_params_fail"===u._){if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce)).slice(-16),u.new_nonce_hash))throw new Error("[MT] server_DH_params_fail new_nonce_hash mismatch");throw new Error("[MT] server_DH_params_fail")}try{yield this.decryptServerDhDataAnswer(e,u.encrypted_answer)}catch(e){throw this.log.error("mtpDecryptServerDhDataAnswer FAILED!",e),e}return this.sendSetClientDhParams(e)}))}decryptServerDhDataAnswer(e,t){return sa(this,void 0,void 0,(function*(){e.localTime=Date.now(),e.tmpAesKey=(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat(e.serverNonce))).concat((yield Rt.invokeCrypto("sha1-hash",e.serverNonce.concat(e.newNonce))).slice(0,12)),e.tmpAesIv=(yield Rt.invokeCrypto("sha1-hash",e.serverNonce.concat(e.newNonce))).slice(12).concat(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat(e.newNonce)),e.newNonce.slice(0,4));const a=new Uint8Array(yield Rt.invokeCrypto("aes-decrypt",t,e.tmpAesKey,e.tmpAesIv)),n=a.slice(0,20),s=a.slice(20),r=new Pt(s,{mtproto:!0}),p=r.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!==p._)throw new Error("[MT] server_DH_inner_data response invalid: "+p);if(!i(e.nonce,p.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!i(e.serverNonce,p.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");g&&this.log("Done decrypting answer"),e.g=p.g,e.dhPrime=p.dh_prime,e.gA=p.g_a,e.serverTime=p.server_time,e.retry=0,this.verifyDhParams(e.g,e.dhPrime,e.gA);const o=r.getOffset();if(!i(n,yield Rt.invokeCrypto("sha1-hash",s.slice(0,o))))throw new Error("[MT] server_DH_inner_data SHA1-hash mismatch");Vt.applyServerTime(e.serverTime,e.localTime)}))}verifyDhParams(e,t,a){g&&this.log("Verifying DH params",e,t,a);const s=n(t);if(3!==e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==s)throw new Error("[MT] DH params are not verified: unknown dhPrime");g&&this.log("dhPrime cmp OK");const i=oe(n(a),16),r=oe(s,16);if(ge(i,U)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(ge(i,$(r,U))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");g&&this.log("1 < gA < dhPrime-1 OK");const p=function(e,t){let a=he(e);t-=1;for(let n=0;n=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return g&&this.log("2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}sendSetClientDhParams(e){return sa(this,void 0,void 0,(function*(){const t=s(e.g.toString(16));e.b=new Uint8Array(256).randomize();try{var a=yield Rt.invokeCrypto("mod-pow",t,e.b,e.dhPrime)}catch(e){throw e}const n=new bt({mtproto:!0});n.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:a},"Client_DH_Inner_Data");const p=(yield Rt.invokeCrypto("sha1-hash",n.getBuffer())).concat(n.getBytes(!0)),o=yield Rt.invokeCrypto("aes-encrypt",p,e.tmpAesKey,e.tmpAesIv),m=new bt({mtproto:!0});let d;m.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:o}),g&&this.log("Send set_client_DH_params");try{d=yield this.sendPlainRequest(e.dcId,m.getBytes(!0))}catch(e){throw e}const y=d.fetchObject("Set_client_DH_params_answer");if("dh_gen_ok"!==y._&&"dh_gen_retry"!==y._&&"dh_gen_fail"!==y._)throw new Error("[MT] Set_client_DH_params_answer response invalid: "+y._);if(!i(e.nonce,y.nonce))throw new Error("[MT] Set_client_DH_params_answer nonce mismatch");if(!i(e.serverNonce,y.server_nonce))throw new Error("[MT] Set_client_DH_params_answer server_nonce mismatch");try{var c=yield Rt.invokeCrypto("mod-pow",e.gA,e.b,e.dhPrime)}catch(e){throw c}const l=yield Rt.invokeCrypto("sha1-hash",c),h=l.slice(0,8),u=l.slice(-8);switch(g&&this.log("Got Set_client_DH_params_answer",y._,c),y._){case"dh_gen_ok":{const t=(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([1],h))).slice(-16);if(!i(t,y.new_nonce_hash1))throw this.log.error("Set_client_DH_params_answer new_nonce_hash1 mismatch",t,y),new Error("new_nonce_hash1 mismatch");const a=r(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));return g&&this.log("Auth successfull!",u,c,a),e.authKeyId=u,e.authKey=c,e.serverSalt=a,e}case"dh_gen_retry":if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([2],h))).slice(-16),y.new_nonce_hash2))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch");return this.sendSetClientDhParams(e);case"dh_gen_fail":if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([3],h))).slice(-16),y.new_nonce_hash3))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch");throw new Error("[MT] Set_client_DH_params_answer fail")}}))}auth(e){return sa(this,void 0,void 0,(function*(){if(e in this.cached)return this.cached[e];const t=new Uint8Array(16).randomize();if(!ta.chooseServer(e))throw new Error("[MT] No server found for dc "+e);const a={dcId:e,nonce:t,localTry:1};try{const t=this.sendReqPQ(a);return this.cached[e]=t,yield t}catch(t){if(a.localTry<=3)return this.sendReqPQ({dcId:a.dcId,nonce:new Uint8Array(16).randomize(),localTry:a.localTry+1});throw delete this.cached[e],t}}))}};function ra(){}function pa(){let e={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...t)=>{e.lastNotify=t,e.listeners.forEach(e=>e(...t))},listeners:[],addNotifyListener:t=>{e.lastNotify&&t(...e.lastNotify),e.listeners.push(t)}},t=new Promise((a,n)=>{e.resolve=e=>{t.isFulfilled||t.isRejected||(t.isFulfilled=!0,a(e))},e.reject=(...e)=>{t.isRejected||t.isFulfilled||(t.isRejected=!0,n(...e))}});return t.catch(ra).finally(()=>{t.notify=t.notifyAll=t.lastNotify=null,t.listeners.length=0,t.cancel&&(t.cancel=()=>{})}),Object.assign(t,e),t}function oa(e,t){return new Promise(a=>{const n=new FileReader;n.addEventListener("loadend",e=>a(e.target.result)),n[t](e)})}function ma(e){return oa(e,"readAsArrayBuffer")}function da(e,t=""){let a;const n=function(e){if(-1===["image/jpeg","image/png","image/gif","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","application/json","application/pdf"].indexOf(e))return"application/octet-stream";return e}(t);try{a=new Blob(e,{type:n})}catch(t){let s=new BlobBuilder;e.forEach(e=>{s.append(e)}),a=s.getBlob(n)}return a}class ya{constructor(e,t){this.storageIsAvailable=!0,function(e,t){if(t)for(let a in t)void 0!==t[a]&&(e[a]=t[a])}(this,e),y.test&&(this.name+="_test"),this.storeName=t,this.log=Ct("IDB-"+this.storeName),this.openDatabase(!0),ya.STORAGES.push(this)}static closeDatabases(e){this.STORAGES.forEach(t=>{if(e&&e===t)return;const a=t.db;a&&(a.onclose=()=>{},a.close())})}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;try{var t=indexedDB.open(this.name,this.version);if(!t)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let a=!1;return setTimeout(()=>{a||t.onerror({type:"IDB_CREATE_TIMEOUT"})},3e3),this.openDbPromise=new Promise((e,n)=>{t.onsuccess=s=>{a=!0;const i=t.result;let r=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},i.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},t.onerror=e=>{a=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},t.onupgradeneeded=e=>{a=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);var t=e.target.result;this.stores.forEach(e=>{t.objectStoreNames.contains(e.name)||((e,t)=>{var a;const n=e.createObjectStore(t.name);if(null===(a=t.indexes)||void 0===a?void 0:a.length)for(const e of t.indexes)n.createIndex(e.indexName,e.keyPath,e.objectParameters)})(t,e)})}})}delete(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readwrite",t=>e.map(e=>t.delete(e)),"")}clear(e){return this.getObjectStore("readwrite",e=>e.clear(),"",e)}save(e,t){return Array.isArray(e)||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",a=>e.map((e,n)=>a.put(t[n],e)),"")}saveFile(e,t){return t instanceof Blob||(t=da([t])),this.save(e,t)}get(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readonly",t=>e.map(e=>t.get(e)),"")}getObjectStore(e,t,a,n=this.storeName){let s;return a&&(s=performance.now(),this.log(a+": start")),this.openDatabase().then(i=>new Promise((r,p)=>{const o=i.transaction([n],e);o.onerror=e=>{clearTimeout(m),p(o.error)},o.oncomplete=e=>{clearTimeout(m),a&&this.log(a+": end",performance.now()-s);const t=c.map(e=>e.result);r(y?t:t[0])};const m=setTimeout(()=>{this.log.error("transaction not finished",o)},1e4),d=t(o.objectStore(n)),y=Array.isArray(d),c=y?d:[].concat(d)}))}getAll(){return this.getObjectStore("readonly",e=>e.getAll(),"")}}ya.STORAGES=[];var ca=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const la=new class{constructor(){this.cachedNetworkers={},this.cachedExportPromise={},this.gettingNetworkers={},this.baseDcId=0,this.log=Ct("API"),this.afterMessageTempIds={}}getBaseDcId(){return ca(this,void 0,void 0,(function*(){if(this.baseDcId)return this.baseDcId;const e=yield A.get("dc");return this.baseDcId||(e?this.baseDcId=e:this.setBaseDcId(Ut.baseDcId)),this.baseDcId}))}setUserAuth(e){return ca(this,void 0,void 0,(function*(){if(!e.dcID){const t=yield this.getBaseDcId();e.dcID=t}A.set({user_auth:e})}))}setBaseDcId(e){const t=this.baseDcId;t&&this.getNetworker(t).then(e=>{this.setOnDrainIfNeeded(e)}),this.baseDcId=e,A.set({dc:this.baseDcId})}logOut(){return ca(this,void 0,void 0,(function*(){const e=[];for(let t=1;t<=5;t++)e.push("dc"+t+"_auth_key");const t=yield Promise.all(e.map(e=>A.get(e))),a=[];for(let e=0;e{this.baseDcId=void 0,ya.closeDatabases(),self.postMessage({type:"clear"})};return setTimeout(n,1e3),Promise.all(a).catch(e=>{e.handled=!0}).finally(n)}))}getNetworker(e,t={}){const a=t.fileDownload?"download":t.fileUpload?"upload":"client",i="websocket";this.cachedNetworkers.hasOwnProperty(i)||(this.cachedNetworkers[i]={client:{},download:{},upload:{}});const r=this.cachedNetworkers[i][a];e in r||(r[e]=[]);const p=r[e],o="client"===a||"https"===i?1:3;if(p.length>=o){let e=p.length-1,t=!1;for(;e>=0;--e)if(p[e].isOnline){t=!0;break}const a=t?p.splice(e,1)[0]:p.pop();return p.unshift(a),Promise.resolve(a)}const m=[e,i,a].join("-");if(this.gettingNetworkers[m])return this.gettingNetworkers[m];const d=`dc${e}_auth_key`,y=`dc${e}_server_salt`;return this.gettingNetworkers[m]=Promise.all([d,y].map(e=>A.get(e))).then(([r,o])=>ca(this,void 0,void 0,(function*(){const c=ta.chooseServer(e,a,i,"client"===a);let l;if(r&&512===r.length){o&&16===o.length||(o="AAAAAAAAAAAAAAAA");const a=s(r),n=(yield Rt.invokeCrypto("sha1-hash",a)).slice(-8),i=s(o);l=Nt.getNetworker(e,a,n,i,c,t)}else try{const a=yield ia.auth(e),s={[d]:n(a.authKey),[y]:n(a.serverSalt)};A.set(s),l=Nt.getNetworker(e,a.authKey,a.authKeyId,a.serverSalt,c,t)}catch(e){throw this.log("Get networker error",e,e.stack),delete this.gettingNetworkers[m],e}return delete this.gettingNetworkers[m],p.unshift(l),this.setOnDrainIfNeeded(l),l})))}setOnDrainIfNeeded(e){if(e.onDrain)return;(e.isFileNetworker?Promise.resolve(!0):this.getBaseDcId().then(t=>e.dcId!==t)).then(t=>{e.onDrain||t&&(e.onDrain=()=>{this.log("networker drain",e.dcId),e.onDrain=void 0,e.destroy(),Nt.removeNetworker(e),ea.removeTransport(this.cachedNetworkers,e),ea.removeTransport(ta.chosenServers,e.transport)},e.setDrainTimeout())})}invokeApi(e,t={},a={}){const n=pa();let{afterMessageId:s,prepareTempMessageId:i}=a;if(i&&n.then(()=>{delete this.afterMessageTempIds[i]}),l){const s=Date.now(),i=Wt.setInterval(()=>{o&&o.isStopped()||this.log.error("Request is still processing:",e,t,a,"time:",(Date.now()-s)/1e3)},5e3);n.finally(()=>{clearInterval(i)})}const r=t=>{t?Te(t)||(t={message:t}):t={type:"ERROR_EMPTY"},n.reject(t),(401===t.code&&"SESSION_REVOKED"===t.type||406===t.code&&"AUTH_KEY_DUPLICATED"===t.type)&&this.logOut(),a.ignoreErrors||(406===t.code&&(t.handled=!0),a.noErrorBox||(t.input=e,t.stack=m||t.originalError&&t.originalError.stack||t.stack||(new Error).stack,setTimeout(()=>{t.handled||(401===t.code&&this.logOut(),t.handled=!0)},100)))};let p,o,m=(new Error).stack||"empty stack";const d=m=>{if(s){const e=this.afterMessageTempIds[s];e&&(a.afterMessageId=e.messageId)}const y=(o=m).wrapApiCall(e,t,a);return i&&(this.afterMessageTempIds[i]={messageId:a.messageId,promise:n}),y.then(n.resolve,i=>{if("FILE_REFERENCE_EXPIRED"!==i.type&&this.log.error("Error",i.code,i.type,this.baseDcId,p,e,t),401===i.code&&this.baseDcId===p)"SESSION_PASSWORD_NEEDED"!==i.type&&(A.delete("dc"),A.delete("user_auth")),r(i);else if(401===i.code&&this.baseDcId&&p!==this.baseDcId){if(void 0===this.cachedExportPromise[p]){const e=new Promise((e,t)=>{this.invokeApi("auth.exportAuthorization",{dc_id:p},{noErrorBox:!0}).then(a=>{this.invokeApi("auth.importAuthorization",{id:a.id,bytes:a.bytes},{dcId:p,noErrorBox:!0}).then(e,t)},t)});this.cachedExportPromise[p]=e}this.cachedExportPromise[p].then(()=>{this.invokeApi(e,t,a).then(n.resolve,r)},r)}else if(303===i.code){const s=+i.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];s!==p&&(a.dcId?a.dcId=s:this.setBaseDcId(s),this.getNetworker(s,a).then(s=>{s.wrapApiCall(e,t,a).then(n.resolve,r)},r))}else if(400===i.code&&0===i.type.indexOf("FILE_MIGRATE")){const s=+i.type.match(/^(FILE_MIGRATE_)(\d+)/)[2];s!==p?this.getNetworker(s,a).then(s=>{s.wrapApiCall(e,t,a).then(n.resolve,r)},r):r(i)}else if(a.rawError||420!==i.code)if(!a.rawError&&["MSG_WAIT_FAILED","MSG_WAIT_TIMEOUT"].includes(i.type)){const e=this.afterMessageTempIds[s];s=void 0,delete a.afterMessageId,e?e.promise.then(()=>d(o)):d(o)}else if(a.rawError||500!==i.code)"UNKNOWN"===i.type?setTimeout(()=>{d(o)},1e3):r(i);else{const e=Date.now();if(a.stopTime&&e>=a.stopTime)return r(i);a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,setTimeout(()=>{d(o)},1e3*a.waitTime)}else{const e=+i.type.match(/^FLOOD_WAIT_(\d+)/)[1]||1;if(e>(void 0!==a.floodMaxTimeout?a.floodMaxTimeout:60)&&!a.prepareTempMessageId)return r(i);setTimeout(()=>{d(o)},1e3*e)}})};return(p=a.dcId||this.baseDcId)?this.getNetworker(p,a).then(d,r):this.getBaseDcId().then(e=>{this.getNetworker(p=e,a).then(d,r)}),n}};l.apiManager=la;var ga=la;var ha=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};var ua=new class{constructor(){this.blobSupported=!0;try{da([],"")}catch(e){this.blobSupported=!1}}isAvailable(){return this.blobSupported}write(e,t){return t instanceof Blob?(a=t,ma(a).then(e=>new Uint8Array(e))).then(t=>e.write(t)):e.write(t);var a}getFakeFileWriter(e,t){const a=[];return{write:e=>ha(this,void 0,void 0,(function*(){if(!this.blobSupported)throw!1;a.push(e)})),truncate:()=>{a.length=0},finalize:(n=!0)=>{const s=da(a,e);return n&&t&&t(s),s}}}},fa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};class _a{constructor(e){this.dbName=e,this.useStorage=!0,y.test&&(this.dbName+="_test"),_a.STORAGES.length&&(this.useStorage=_a.STORAGES[0].useStorage),this.openDatabase(),_a.STORAGES.push(this)}openDatabase(){var e;return null!==(e=this.openDbPromise)&&void 0!==e?e:this.openDbPromise=caches.open(this.dbName)}delete(e){return this.timeoutOperation(t=>t.delete("/"+e))}deleteAll(){return caches.delete(this.dbName)}get(e){return this.timeoutOperation(t=>t.match("/"+e))}save(e,t){return this.timeoutOperation(a=>a.put("/"+e,t))}getFile(e,t="blob"){return this.get(e).then(e=>{if(!e)throw"NO_ENTRY_FOUND";return e[t]()})}saveFile(e,t){t instanceof Blob||(t=da(t));const a=new Response(t,{headers:{"Content-Length":""+t.size}});return this.save(e,a).then(()=>t)}timeoutOperation(e){return this.useStorage?new Promise((t,a)=>fa(this,void 0,void 0,(function*(){let n=!1;const s=setTimeout(()=>{a(),n=!0},15e3);try{const a=yield this.openDatabase();if(!a)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const s=yield e(a);if(n)return;t(s)}catch(e){a(e)}clearTimeout(s)}))):Promise.reject("STORAGE_OFFLINE")}getFileWriter(e,t){const a=ua.getFakeFileWriter(t,t=>this.saveFile(e,t).catch(()=>t));return Promise.resolve(a)}static toggleStorage(e){return Promise.all(this.STORAGES.map(t=>{if(t.useStorage=e,!e)return t.deleteAll()}))}}_a.STORAGES=[];var va=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const ba=new class{constructor(){this.cacheStorage=new _a("cachedFiles"),this.cachedDownloadPromises={},this.uploadPromises={},this.downloadPulls={},this.downloadActives={},this.webpConvertPromises={},this.refreshReferencePromises={},this.log=Ct("AFM",wt.Error|wt.Log),this.tempId=0,this.queueId=0,this.debug=y.debug,this.uncompressTGS=(e,t)=>Rt.invokeCrypto("gzipUncompress",e.slice().buffer,!0),this.convertWebp=(e,t)=>{const a=pa();return P({type:"convertWebp",payload:{fileName:t,bytes:e}}),this.webpConvertPromises[t]=a},setInterval(()=>{for(const e in this.refreshReferencePromises){const{deferred:t}=this.refreshReferencePromises[e];(t.isFulfilled||t.isRejected)&&delete this.refreshReferencePromises[e]}},18e5)}downloadRequest(e,t,a,n,s=0){void 0===this.downloadPulls[e]&&(this.downloadPulls[e]=[],this.downloadActives[e]=0);const i=this.downloadPulls[e],r=new Promise((e,r)=>{i.push({id:t,queueId:s,cb:a,deferred:{resolve:e,reject:r},activeDelta:n})});return setTimeout(()=>{this.downloadCheck(e)},0),r}downloadCheck(e){const t=this.downloadPulls[e],a="upload"===e?24:36;if(this.downloadActives[e]>=a||!t||!t.length)return!1;const n=t.findAndSplice(e=>0===e.queueId)||t.findAndSplice(e=>e.queueId===this.queueId)||t.shift(),s=n.activeDelta||1;this.downloadActives[e]+=s,n.cb().then(t=>{this.downloadActives[e]-=s,this.downloadCheck(e),n.deferred.resolve(t)},t=>{t&&t.type&&("DOWNLOAD_CANCELED"===t.type||"UPLOAD_CANCELED"===t.type)||this.log.error("downloadCheck error:",t),this.downloadActives[e]-=s,this.downloadCheck(e),n.deferred.reject(t)})}setQueueId(e){this.queueId=e}getFileStorage(){return this.cacheStorage}cancelDownload(e){const t=(this.cachedDownloadPromises[e]?[this.cachedDownloadPromises[e]]:void 0)||(this.uploadPromises[e]?Array.from(this.uploadPromises[e]):[]);let a=!1;for(let e=0,n=t.length;eva(this,void 0,void 0,(function*(){return r&&r(),ga.invokeApi("upload.getWebFile",{location:t,offset:a,limit:n},{dcId:e,fileDownload:!0})})),this.getDelta(n),i)}requestFilePart(e,t,a,s,i=0,r=0,p){return this.downloadRequest(e,i,()=>va(this,void 0,void 0,(function*(){p&&p();const i=()=>va(this,void 0,void 0,(function*(){p&&p();return ga.invokeApi("upload.getFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0}).catch(e=>{if("FILE_REFERENCE_EXPIRED"===e.type)return this.refreshReference(t).then(i);throw e})})),r=t.file_reference;if(r&&!t.checkedReference){t.checkedReference=!0;const e=n(r);if(this.refreshReferencePromises[e])return this.refreshReference(t).then(i)}return i()})),this.getDelta(s),r)}getDelta(e){return e/1024/128}getLimitPart(e){let t;return t=512,524288}refreshReference(e){const t=e.file_reference,a=n(t);let s=this.refreshReferencePromises[a];if(!s){const n=pa();s=this.refreshReferencePromises[a]={deferred:n,timeout:Wt.setTimeout(()=>{this.log.error("Didn't refresh the reference:",e),n.reject("REFERENCE_IS_NOT_REFRESHED")},6e4)},n.finally(()=>{clearTimeout(s.timeout)});P({type:"refreshReference",payload:t})}return s.deferred.then(t=>{if(a===n(t))throw"REFERENCE_IS_NOT_REFRESHED";e.file_reference=t})}downloadFile(e){var t;if(!ua.isAvailable())return Promise.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});const a=null!==(t=e.size)&&void 0!==t?t:0,{dcId:n,location:s}=e;let i;"image/webp"!==e.mimeType||ka()?"application/x-tgsticker"===e.mimeType&&(i=this.uncompressTGS,e.mimeType="application/json"):(i=this.convertWebp,e.mimeType="image/png");const r=function(e,t){const a=""["".length-1]||"";let n;switch(e._){case"inputPhotoFileLocation":n=["photo",""[0],e.id,e.thumb_size].filter(Boolean).join("_");break;case"inputDocumentFileLocation":n=["document",""[0],e.id,e.thumb_size].filter(Boolean).join("_");break;case"inputPeerPhotoFileLocation":n=["peerPhoto",e.photo_id,e.pFlags.big?"big":"small"].join("_");break;case"inputStickerSetThumb":n=["stickerSetThumb",e.stickerset.id||e.stickerset.short_name||e.stickerset.emoticon||e.stickerset._,e.thumb_version].join("_");break;case"inputFileLocation":n=e.volume_id+"_"+e.local_id;break;case"inputWebFileLocation":n=["webFile",e.url].join("_");break;default:console.error("Unrecognized location:",e),n=""}return n+(a?"."+a:a)}(s,e.fileName),p=this.cachedDownloadPromises[r],o=this.getFileStorage();if(this.debug&&this.log("downloadFile",r,a,s,e.mimeType),p)return a?p.then(t=>t.sizethis.downloadFile(e)).catch(()=>this.downloadFile(e))):t):p;const m=pa(),d=e.mimeType||"image/jpeg";let y,c=!1,l=!1,g=e=>{delete this.cachedDownloadPromises[r],m.reject(e),g=()=>{},!y||e&&"DOWNLOAD_CANCELED"===e.type||y.truncate()};const h=this.tempId++;o.getFile(r).then(e=>va(this,void 0,void 0,(function*(){if(e.size{o.getFileWriter(r,d).then(t=>{y=t;const p=e.limitPart||this.getLimitPart(a);let o,d,c=Promise.resolve();const f=(e,t)=>va(this,void 0,void 0,(function*(){if(i){return yield i(e,r)}return e})),_="inputWebFileLocation"===s._?this.requestWebFilePart.bind(this):this.requestFilePart.bind(this),v=[];o=0;do{d=pa(),v.push({offset:o,writeFilePromise:c,writeFileDeferred:d}),c=d,o+=p}while(ova(this,void 0,void 0,(function*(){const{offset:i,writeFilePromise:o,writeFileDeferred:d}=v.shift();try{const y=yield _(n,s,i,p,h,e.queueId,u),c=y.bytes;v.length&&P(),this.debug&&this.log("downloadFile requestFilePart result:",r,y);const g=i+p>=a||!c.byteLength;if(c.byteLength){b+=c.byteLength,m.notify({done:b,offset:i,total:a});const e=yield f(c);u(),yield o,u(),yield ua.write(t,e)}d.resolve(),g&&(l=!0,m.resolve(t.finalize(a<2e7)))}catch(e){g(e)}}));for(let e=0,t=Math.min(1/0,v.length);e{["STORAGE_OFFLINE"].includes(e)||this.log.error("saveFile error:",e)})});const u=()=>{if(c){const e=new Error("Canceled");throw e.type="DOWNLOAD_CANCELED",e}};return m.cancel=()=>{c||l||(c=!0,delete this.cachedDownloadPromises[r],g({type:"DOWNLOAD_CANCELED"}))},m.notify=e=>{w({progress:Object.assign({fileName:r},e)})},this.cachedDownloadPromises[r]=m,m.finally(()=>{delete this.cachedDownloadPromises[r]}),m}deleteFile(e){return delete this.cachedDownloadPromises[e],this.getFileStorage().delete(e)}uploadFile({file:e,fileName:t}){var a;const n=e.size,s=n>=10485760;let i=!1,r=!1,p=0,o=262144;n>67108864?o=524288:n<102400&&(o=32768);const m=this.getDelta(o),d=Math.ceil(n/o),y=""+st(32)+st(32)%16777215;let c=0;const l={_:s?"inputFileBig":"inputFile",id:y,parts:d,name:t,md5_checksum:""},g={notify:e=>{}},h=new Promise((e,t)=>{if(d>4e3)return t({type:"FILE_TOO_BIG"});g.resolve=e,g.reject=t});if(Object.assign(h,g),d>4e3)return h;let u=e=>{"UPLOAD_CANCELED"!==(null==e?void 0:e.type)&&this.log.error("Up Error",e),h.reject(e),i=!0,u=()=>{}};const f=s?"upload.saveBigFilePart":"upload.saveFilePart",_=this.tempId++,v=this;const b=function*(){for(let t=0;tma(e.slice(t,t+o)).then(e=>{if(i)throw{type:"UPLOAD_CANCELED"};return v.debug&&v.log("Upload file part, isBig:",s,a,e.byteLength,new Uint8Array(e).length,new Uint8Array(e).slice().length),ga.invokeApi(f,{file_id:y,file_part:a,file_total_parts:d,bytes:e},{fileUpload:!0}).then(e=>{p++,h.notify({done:p*o,total:n}),p>=d&&(h.resolve(l),r=!0)},u)}),m).catch(u)}}(),P=()=>{if(i)return;const e=b.next();e.done||i||e.value.then(P)};for(let e=0,t=Math.min(1/0,d);e{i||r||(i=!0,u({type:"UPLOAD_CANCELED"}))},h.notify=e=>{w({progress:Object.assign({fileName:t},e)})},h.finally(()=>{S.delete(h),S.size||delete this.uploadPromises[t]});const S=null!==(a=this.uploadPromises[t])&&void 0!==a?a:this.uploadPromises[t]=new Set;return S.add(h),h}};l.apiFileManager=ba;var Pa=ba,wa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};let Sa=!1;const ka=()=>Sa;Nt.setUpdatesProcessor(e=>{w({update:e})}),Nt.onConnectionStatusChange=e=>{w({type:"connectionStatusChange",payload:e})};const Ia={convertWebp:e=>{const{fileName:t,bytes:a}=e.payload,n=Pa.webpConvertPromises[t];n&&(n.resolve(a),delete Pa.webpConvertPromises[t])},webpSupport:e=>{Sa=e.payload},socketProxy:e=>{const t=e.payload,a=t.id,n=Yt.get(a);"message"===t.type?n.dispatchEvent("message",t.payload):"open"===t.type?n.dispatchEvent("open"):"close"===t.type&&(n.dispatchEvent("close"),Yt.delete(a))},localStorageProxy:e=>{A.finishTask(e.id,e.payload)},userAgent:e=>{Nt.userAgent=e.payload},online:()=>{Nt.forceReconnectTimeout()},forceReconnect:()=>{Nt.forceReconnect()},toggleStorage:e=>{const t=e.payload;_a.toggleStorage(t)},refreshReference:e=>{const t=n(e.originalPayload),a=Pa.refreshReferencePromises[t],s=null==a?void 0:a.deferred;s&&(e.error?s.reject(e.error):s.resolve(e.payload))}};Wt.addEventListener("message",e=>wa(void 0,void 0,void 0,(function*(){try{const t=e.data,a=t.taskId,n=Ia[t.type];if(n)return void n(t);if(!t.task)return;switch(t.task){case"computeSRP":case"gzipUncompress":return Rt.invokeCrypto(t.task,...t.args).then(e=>{w({taskId:a,result:e})});case"requestFilePart":case"setQueueId":case"cancelDownload":case"uploadFile":case"downloadFile":try{let e=Pa[t.task].apply(Pa,t.args);e instanceof Promise&&(e=yield e),w({taskId:a,result:e})}catch(e){w({taskId:a,error:e})}break;case"getNetworker":ga[t.task].apply(ga,t.args).finally(()=>{w({taskId:a,result:null})});break;case"setLanguage":case"startAll":case"stopAll":Nt[t.task].apply(Nt,t.args);break;default:try{let e=ga[t.task].apply(ga,t.args);e instanceof Promise&&(e=yield e),w({taskId:a,result:e})}catch(e){w({taskId:a,error:e})}}}catch(e){console.error("worker task error:",e)}}))),w("ready")}]); -//# sourceMappingURL=mtproto.worker.08024df6e720e6031331.bundle.worker.js.map \ No newline at end of file +!function(e){"use strict";var t=(e,t,a,n)=>{let s=65535&e|0,i=e>>>16&65535|0,r=0;for(;0!==a;){r=a>2e3?2e3:a,a-=r;do{s=s+t[n++]|0,i=i+s|0}while(--r);s%=65521,i%=65521}return s|i<<16|0};const a=new Uint32Array((()=>{let e,t=[];for(var a=0;a<256;a++){e=a;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[a]=e}return t})());var n=(e,t,n,s)=>{const i=a,r=s+n;e^=-1;for(let a=s;a>>8^i[255&(e^t[a])];return-1^e},s=function(e,t){let a,n,s,i,r,p,o,m,d,y,c,l,g,h,u,f,_,v,b,P,w,S,k,I;const C=e.state;a=e.next_in,k=e.input,n=a+(e.avail_in-5),s=e.next_out,I=e.output,i=s-(t-e.avail_out),r=s+(e.avail_out-257),p=C.dmax,o=C.wsize,m=C.whave,d=C.wnext,y=C.window,c=C.hold,l=C.bits,g=C.lencode,h=C.distcode,u=(1<>>24,c>>>=v,l-=v,v=_>>>16&255,0===v)I[s++]=65535&_;else{if(!(16&v)){if(0==(64&v)){_=g[(65535&_)+(c&(1<>>=v,l-=v),l<15&&(c+=k[a++]<>>24,c>>>=v,l-=v,v=_>>>16&255,!(16&v)){if(0==(64&v)){_=h[(65535&_)+(c&(1<p){e.msg="invalid distance too far back",C.mode=30;break e}if(c>>>=v,l-=v,v=s-i,P>v){if(v=P-v,v>m&&C.sane){e.msg="invalid distance too far back",C.mode=30;break e}if(w=0,S=y,0===d){if(w+=o-v,v2;)I[s++]=S[w++],I[s++]=S[w++],I[s++]=S[w++],b-=3;b&&(I[s++]=S[w++],b>1&&(I[s++]=S[w++]))}else{w=s-P;do{I[s++]=I[w++],I[s++]=I[w++],I[s++]=I[w++],b-=3}while(b>2);b&&(I[s++]=I[w++],b>1&&(I[s++]=I[w++]))}break}}break}}while(a>3,a-=b,l-=b<<3,c&=(1<{const c=y.bits;let l,g,h,u,f,_,v=0,b=0,P=0,w=0,S=0,k=0,I=0,C=0,A=0,M=0,R=null,E=0;const V=new Uint16Array(16),D=new Uint16Array(16);let U,B,T,x=null,F=0;for(v=0;v<=15;v++)V[v]=0;for(b=0;b=1&&0===V[w];w--);if(S>w&&(S=w),0===w)return s[m++]=20971520,s[m++]=20971520,y.bits=1,0;for(P=1;P0&&(0===e||1!==w))return-1;for(D[1]=0,v=1;v<15;v++)D[v+1]=D[v]+V[v];for(b=0;b852||2===e&&A>592)return 1;for(;;){U=v-I,d[b]<_?(B=0,T=d[b]):d[b]>_?(B=x[F+d[b]],T=R[E+d[b]]):(B=96,T=0),l=1<>I)+g]=U<<24|B<<16|T|0}while(0!==g);for(l=1<>=1;if(0!==l?(M&=l-1,M+=l):M=0,b++,0==--V[v]){if(v===w)break;v=t[a+d[b]]}if(v>S&&(M&u)!==h){for(0===I&&(I=S),f+=P,k=v-I,C=1<852||2===e&&A>592)return 1;h=M&u,s[h]=S<<24|k<<16|f-m|0}}return 0!==M&&(s[f+M]=v-I<<24|64<<16|0),y.bits=S,0},d={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:y,Z_BLOCK:c,Z_TREES:l,Z_OK:g,Z_STREAM_END:h,Z_NEED_DICT:u,Z_STREAM_ERROR:f,Z_DATA_ERROR:_,Z_MEM_ERROR:v,Z_BUF_ERROR:b,Z_DEFLATED:P}=d,w=12,S=30,k=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function I(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const C=e=>{if(!e||!e.state)return f;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,g},A=e=>{if(!e||!e.state)return f;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,C(e)},M=(e,t)=>{let a;if(!e||!e.state)return f;const n=e.state;return t<0?(a=0,t=-t):(a=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?f:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=a,n.wbits=t,A(e))},R=(e,t)=>{if(!e)return f;const a=new I;e.state=a,a.window=null;const n=M(e,t);return n!==g&&(e.state=null),n};let E,V,D=!0;const U=e=>{if(D){E=new Int32Array(512),V=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(m(1,e.lens,0,288,E,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;m(2,e.lens,0,32,V,0,e.work,{bits:5}),D=!1}e.lencode=E,e.lenbits=9,e.distcode=V,e.distbits=5},B=(e,t,a,n)=>{let s;const i=e.state;return null===i.window&&(i.wsize=1<=i.wsize?(i.window.set(t.subarray(a-i.wsize,a),0),i.wnext=0,i.whave=i.wsize):(s=i.wsize-i.wnext,s>n&&(s=n),i.window.set(t.subarray(a-n,a-n+s),i.wnext),(n-=s)?(i.window.set(t.subarray(a-n,a),0),i.wnext=n,i.whave=i.wsize):(i.wnext+=s,i.wnext===i.wsize&&(i.wnext=0),i.whave{let i,r,p,o,d,I,C,A,M,R,E,V,D,T,x,F,L,N,O,q,G,K,z=0;const H=new Uint8Array(4);let j,W;const J=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return f;i=e.state,i.mode===w&&(i.mode=13),d=e.next_out,p=e.output,C=e.avail_out,o=e.next_in,r=e.input,I=e.avail_in,A=i.hold,M=i.bits,R=I,E=C,K=g;e:for(;;)switch(i.mode){case 1:if(0===i.wrap){i.mode=13;break}for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>>8&255,i.check=n(i.check,H,2,0),A=0,M=0,i.mode=2;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&A)<<8)+(A>>8))%31){e.msg="incorrect header check",i.mode=S;break}if((15&A)!==P){e.msg="unknown compression method",i.mode=S;break}if(A>>>=4,M-=4,G=8+(15&A),0===i.wbits)i.wbits=G;else if(G>i.wbits){e.msg="invalid window size",i.mode=S;break}i.dmax=1<>8&1),512&i.flags&&(H[0]=255&A,H[1]=A>>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0,i.mode=3;case 3:for(;M<32;){if(0===I)break e;I--,A+=r[o++]<>>8&255,H[2]=A>>>16&255,H[3]=A>>>24&255,i.check=n(i.check,H,4,0)),A=0,M=0,i.mode=4;case 4:for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>8),512&i.flags&&(H[0]=255&A,H[1]=A>>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0,i.mode=5;case 5:if(1024&i.flags){for(;M<16;){if(0===I)break e;I--,A+=r[o++]<>>8&255,i.check=n(i.check,H,2,0)),A=0,M=0}else i.head&&(i.head.extra=null);i.mode=6;case 6:if(1024&i.flags&&(V=i.length,V>I&&(V=I),V&&(i.head&&(G=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(r.subarray(o,o+V),G)),512&i.flags&&(i.check=n(i.check,r,V,o)),I-=V,o+=V,i.length-=V),i.length))break e;i.length=0,i.mode=7;case 7:if(2048&i.flags){if(0===I)break e;V=0;do{G=r[o+V++],i.head&&G&&i.length<65536&&(i.head.name+=String.fromCharCode(G))}while(G&&V>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=w;break;case 10:for(;M<32;){if(0===I)break e;I--,A+=r[o++]<>>=7&M,M-=7&M,i.mode=27;break}for(;M<3;){if(0===I)break e;I--,A+=r[o++]<>>=1,M-=1,3&A){case 0:i.mode=14;break;case 1:if(U(i),i.mode=20,a===l){A>>>=2,M-=2;break e}break;case 2:i.mode=17;break;case 3:e.msg="invalid block type",i.mode=S}A>>>=2,M-=2;break;case 14:for(A>>>=7&M,M-=7&M;M<32;){if(0===I)break e;I--,A+=r[o++]<>>16^65535)){e.msg="invalid stored block lengths",i.mode=S;break}if(i.length=65535&A,A=0,M=0,i.mode=15,a===l)break e;case 15:i.mode=16;case 16:if(V=i.length,V){if(V>I&&(V=I),V>C&&(V=C),0===V)break e;p.set(r.subarray(o,o+V),d),I-=V,o+=V,C-=V,d+=V,i.length-=V;break}i.mode=w;break;case 17:for(;M<14;){if(0===I)break e;I--,A+=r[o++]<>>=5,M-=5,i.ndist=1+(31&A),A>>>=5,M-=5,i.ncode=4+(15&A),A>>>=4,M-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=S;break}i.have=0,i.mode=18;case 18:for(;i.have>>=3,M-=3}for(;i.have<19;)i.lens[J[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,j={bits:i.lenbits},K=m(0,i.lens,0,19,i.lencode,0,i.work,j),i.lenbits=j.bits,K){e.msg="invalid code lengths set",i.mode=S;break}i.have=0,i.mode=19;case 19:for(;i.have>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=x,M-=x,i.lens[i.have++]=L;else{if(16===L){for(W=x+2;M>>=x,M-=x,0===i.have){e.msg="invalid bit length repeat",i.mode=S;break}G=i.lens[i.have-1],V=3+(3&A),A>>>=2,M-=2}else if(17===L){for(W=x+3;M>>=x,M-=x,G=0,V=3+(7&A),A>>>=3,M-=3}else{for(W=x+7;M>>=x,M-=x,G=0,V=11+(127&A),A>>>=7,M-=7}if(i.have+V>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=S;break}for(;V--;)i.lens[i.have++]=G}}if(i.mode===S)break;if(0===i.lens[256]){e.msg="invalid code -- missing end-of-block",i.mode=S;break}if(i.lenbits=9,j={bits:i.lenbits},K=m(1,i.lens,0,i.nlen,i.lencode,0,i.work,j),i.lenbits=j.bits,K){e.msg="invalid literal/lengths set",i.mode=S;break}if(i.distbits=6,i.distcode=i.distdyn,j={bits:i.distbits},K=m(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,j),i.distbits=j.bits,K){e.msg="invalid distances set",i.mode=S;break}if(i.mode=20,a===l)break e;case 20:i.mode=21;case 21:if(I>=6&&C>=258){e.next_out=d,e.avail_out=C,e.next_in=o,e.avail_in=I,i.hold=A,i.bits=M,s(e,E),d=e.next_out,p=e.output,C=e.avail_out,o=e.next_in,r=e.input,I=e.avail_in,A=i.hold,M=i.bits,i.mode===w&&(i.back=-1);break}for(i.back=0;z=i.lencode[A&(1<>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>N)],x=z>>>24,F=z>>>16&255,L=65535&z,!(N+x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=N,M-=N,i.back+=N}if(A>>>=x,M-=x,i.back+=x,i.length=L,0===F){i.mode=26;break}if(32&F){i.back=-1,i.mode=w;break}if(64&F){e.msg="invalid literal/length code",i.mode=S;break}i.extra=15&F,i.mode=22;case 22:if(i.extra){for(W=i.extra;M>>=i.extra,M-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=23;case 23:for(;z=i.distcode[A&(1<>>24,F=z>>>16&255,L=65535&z,!(x<=M);){if(0===I)break e;I--,A+=r[o++]<>N)],x=z>>>24,F=z>>>16&255,L=65535&z,!(N+x<=M);){if(0===I)break e;I--,A+=r[o++]<>>=N,M-=N,i.back+=N}if(A>>>=x,M-=x,i.back+=x,64&F){e.msg="invalid distance code",i.mode=S;break}i.offset=L,i.extra=15&F,i.mode=24;case 24:if(i.extra){for(W=i.extra;M>>=i.extra,M-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=S;break}i.mode=25;case 25:if(0===C)break e;if(V=E-C,i.offset>V){if(V=i.offset-V,V>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=S;break}V>i.wnext?(V-=i.wnext,D=i.wsize-V):D=i.wnext-V,V>i.length&&(V=i.length),T=i.window}else T=p,D=d-i.offset,V=i.length;V>C&&(V=C),C-=V,i.length-=V;do{p[d++]=T[D++]}while(--V);0===i.length&&(i.mode=21);break;case 26:if(0===C)break e;p[d++]=i.length,C--,i.mode=21;break;case 27:if(i.wrap){for(;M<32;){if(0===I)break e;I--,A|=r[o++]<{if(!e||!e.state)return f;let t=e.state;return t.window&&(t.window=null),e.state=null,g},N=(e,t)=>{if(!e||!e.state)return f;const a=e.state;return 0==(2&a.wrap)?f:(a.head=t,t.done=!1,g)},O=(e,a)=>{const n=a.length;let s,i,r;return e&&e.state?(s=e.state,0!==s.wrap&&11!==s.mode?f:11===s.mode&&(i=1,i=t(i,a,n,0),i!==s.check)?_:(r=B(e,a,n,n),r?(s.mode=31,v):(s.havedict=1,g))):f};const q=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);let G=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){G=!1}const K=new Uint8Array(256);for(let e=0;e<256;e++)K[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;K[254]=K[254]=1;var z=(e,t)=>{let a,n;const s=t||e.length,i=new Array(2*s);for(n=0,a=0;a4)i[n++]=65533,a+=r-1;else{for(t&=2===r?31:3===r?15:7;r>1&&a1?i[n++]=65533:t<65536?i[n++]=t:(t-=65536,i[n++]=55296|t>>10&1023,i[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&G)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let a="";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let a=t-1;for(;a>=0&&128==(192&e[a]);)a--;return a<0||0===a?t:a+K[e[a]]>t?a:t},j={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},W=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0},J=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const Z=Object.prototype.toString,{Z_NO_FLUSH:Q,Z_FINISH:X,Z_OK:Y,Z_STREAM_END:$,Z_NEED_DICT:ee,Z_STREAM_ERROR:te,Z_DATA_ERROR:ae,Z_MEM_ERROR:ne}=d;function se(e){this.options=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const a=t.shift();if(a){if("object"!=typeof a)throw new TypeError(a+"must be non-object");for(const t in a)q(a,t)&&(e[t]=a[t])}}return e}({chunkSize:65536,windowBits:15,to:""},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new W,this.strm.avail_out=0;let a=x(this.strm,t.windowBits);if(a!==Y)throw new Error(j[a]);if(this.header=new J,N(this.strm,this.header),t.dictionary&&("string"==typeof t.dictionary?t.dictionary=(e=>{let t,a,n,s,i,r=e.length,p=0;for(s=0;s>>6,t[i++]=128|63&a):a<65536?(t[i++]=224|a>>>12,t[i++]=128|a>>>6&63,t[i++]=128|63&a):(t[i++]=240|a>>>18,t[i++]=128|a>>>12&63,t[i++]=128|a>>>6&63,t[i++]=128|63&a);return t})(t.dictionary):"[object ArrayBuffer]"===Z.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(a=O(this.strm,t.dictionary),a!==Y)))throw new Error(j[a])}function ie(e,t){const a=new se(t);if(a.push(e),a.err)throw a.msg||j[a.err];return a.result}se.prototype.push=function(e,t){const a=this.strm,n=this.options.chunkSize,s=this.options.dictionary;let i,r,p;if(this.ended)return!1;for(r=t===~~t?t:!0===t?X:Q,"[object ArrayBuffer]"===Z.call(e)?a.input=new Uint8Array(e):a.input=e,a.next_in=0,a.avail_in=a.input.length;;){for(0===a.avail_out&&(a.output=new Uint8Array(n),a.next_out=0,a.avail_out=n),i=F(a,r),i===ee&&s&&(i=O(a,s),i===Y?i=F(a,r):i===ae&&(i=ee));a.avail_in>0&&i===$&&a.state.wrap>0&&0!==e[a.next_in];)T(a),i=F(a,r);switch(i){case te:case ae:case ee:case ne:return this.onEnd(i),this.ended=!0,!1}if(p=a.avail_out,a.next_out&&(0===a.avail_out||i===$))if("string"===this.options.to){let e=H(a.output,a.next_out),t=a.next_out-e,s=z(a.output,e);a.next_out=t,a.avail_out=n-t,t&&a.output.set(a.output.subarray(e,e+t),0),this.onData(s)}else this.onData(a.output.length===a.next_out?a.output:a.output.subarray(0,a.next_out));if(i!==Y||0!==p){if(i===$)return i=L(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===a.avail_in)break}}return!0},se.prototype.onData=function(e){this.chunks.push(e)},se.prototype.onEnd=function(e){e===Y&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=(e=>{let t=0;for(let a=0,n=e.length;ae+(t.byteLength||t.length),0),a=new Uint8Array(t);let n=0;return e.forEach(e=>{a.set(e instanceof ArrayBuffer?new Uint8Array(e):e,n),n+=e.byteLength||e.length}),a}function m(e){const t=new Uint8Array(e.byteLength);for(let a=0,n=4*e.length;a>>2]>>>24-a%4*8&255;return t}function d(e){const t=p(e),a=[];for(let e=0,n=t.length;e>>2]|=t[e]<<24-e%4*8;return new Uint32Array(a)}a.r(t),a.d(t,"isWebpSupported",(function(){return ka})),Object.defineProperty(Uint8Array.prototype,"hex",{get:function(){return n(this)},set:function(e){this.set(s(e))},enumerable:!0,configurable:!0}),Uint8Array.prototype.randomize=function(){if(!crypto||!("getRandomValues"in crypto))throw new Error("NO_SECURE_RANDOM");return crypto.getRandomValues(this),this},Uint8Array.prototype.concat=function(...e){return o(this,...e)},Uint8Array.prototype.toJSON=function(){return[...this]},Array.prototype.findAndSplice=function(e){let t=this.findIndex(e);return-1!==t?this.splice(t,1)[0]:void 0},String.prototype.toHHMMSS=function(e=!1){const t=parseInt(this+"",10),a=Math.floor(t/3600);let n=Math.floor((t-3600*a)/60),s=t-3600*a-60*n;return a&&(e=!0),n<10&&(n=e?"0"+n:n),s<10&&(s="0"+s),(a?a+":":"")+n+":"+s},Promise.prototype.finally=Promise.prototype.finally||function(e){const t=t=>Promise.resolve(e()).then(t);return this.then(e=>t(()=>e),e=>t(()=>Promise.reject(e)))};var y={test:location.search.indexOf("test=1")>0,debug:location.search.indexOf("debug=1")>0,http:!1,ssl:!0,multipleConnections:!0,asServiceWorker:!1};const c=y.debug,l="undefined"!=typeof window?window:self;var g=c;const h="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,u="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,f=h||u,_=(e,...t)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then(a=>{a.length&&a.slice(e?0:-1).forEach(e=>{e.postMessage(...t)})})},v=(...e)=>{self.postMessage(...e)},b=()=>{},P=u?_.bind(null,!1):h?v:b,w=u?_.bind(null,!0):h?v:b;class S{constructor(){this.prefix="",this.cache={},this.useStorage=!0,y.test&&(this.prefix="t_")}get(e,t=!0){if(this.cache.hasOwnProperty(e)&&t)return this.cache[e];if(this.useStorage){let t;try{t=localStorage.getItem(this.prefix+e)}catch(e){this.useStorage=!1}if(null!==t)try{t=JSON.parse(t)}catch(e){}else t=void 0;return t}}set(e,t=!1){for(const a in e)if(e.hasOwnProperty(a)){const n=e[a];if(this.cache[a]=n,this.useStorage&&!t)try{const e=JSON.stringify(n);localStorage.setItem(this.prefix+a,e)}catch(e){this.useStorage=!1}}}delete(e,t=!1){e=""+e,t||delete this.cache[e];try{localStorage.removeItem(this.prefix+e)}catch(e){}}clear(){const e=["dc","server_time_offset","xt_instance","user_auth","state_id"];for(let t=1;t<=5;++t)e.push(`dc${t}_server_salt`),e.push(`dc${t}_auth_key`);for(let t of e)this.delete(t,!0)}toggleStorage(e){if(this.useStorage=e,e)return this.set(this.cache);this.clear()}}class k{constructor(){this.taskId=0,this.tasks={},k.STORAGES.push(this),f||(this.storage=new S)}finishTask(e,t){this.tasks.hasOwnProperty(e)&&(this.tasks[e](t),delete this.tasks[e])}proxy(e,...t){return new Promise((a,n)=>{if(f){const n=this.taskId++;this.tasks[n]=a;P({type:"localStorageProxy",id:n,payload:{type:e,args:t}})}else{t=Array.prototype.slice.call(t);a(this.storage[e].apply(this.storage,t))}})}get(e,t){return this.proxy("get",e,t)}set(e,t){return this.proxy("set",e,t)}delete(e,t){return this.proxy("delete",e,t)}clear(){return this.proxy("clear")}toggleStorage(e){return this.proxy("toggleStorage",e)}}k.STORAGES=[];const I=new k;l.appStorage=I;var C,A=I,M=0,R=0,E="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\'\"+-";for(M=0;1<1<>=1))-1)+1;var V,D,U=pe(1,1,1),B=(pe(0,1,1),new Array(0)),T=B,x=B,F=B,L=B,N=B,O=B,q=B,G=B,K=B,z=B,H=B,j=B,W=B;function J(e){var t,a,n;for(t=e.length-1;0==e[t]&&t>0;t--);for(a=0,n=e[t];n;n>>=1,a++);return a+=M*t}function Z(e,t){var a=pe(0,(e.length>t?e.length:t)*M,0);return ue(a,e),a}function Q(e,t){var a=he(e);return Re(a,t),De(a,1)}function X(e,t){var a=Z(e,e.length+t.length);return function(e,t){var a;T.length!=2*e.length&&(T=new Array(2*e.length));for(fe(T,0),a=0;at.length?e.length+1:t.length+1);return Ae(a,t),De(a,1)}function ee(e,t){var a=Z(e,e.length>t.length?e.length+1:t.length+1);return Me(a,t),De(a,1)}function te(e,t,a,n,s){var i=0,r=Math.max(e.length,t.length);for(K.length!=r&&(K=new Array(r),z=new Array(r),H=new Array(r),j=new Array(r),W=new Array(r));!(1&e[0]||1&t[0]);)be(e),be(t),i++;for(ue(K,e),ue(a,t),fe(z,1),fe(H,0),fe(j,0),fe(W,1);;){for(;!(1&K[0]);)be(K),1&z[0]||1&H[0]?(Me(z,t),be(z),Ae(H,e),be(H)):(be(z),be(H));for(;!(1&a[0]);)be(a),1&j[0]||1&W[0]?(Me(j,t),be(j),Ae(W,e),be(W)):(be(j),be(W));if(se(a,K)?(Ae(a,K),Ae(j,z),Ae(W,H)):(Ae(K,a),Ae(z,j),Ae(H,W)),me(K,0)){for(;ae(j);)Me(j,t),Ae(W,e);return we(W,-1),ue(n,j),ue(s,W),void Pe(a,i)}}}function ae(e){return e[e.length-1]>>M-1&1}function ne(e,t,a){var n,s=e.length,i=t.length;for(V=s+a=0;n++)if(e[n]>0)return 1;for(n=s-1+a;n0)return 0;for(n=V-1;n>=a;n--){if(e[n-a]>t[n])return 1;if(e[n-a]=0;a--){if(e[a]>t[a])return 1;if(e[a]>=1;for(Pe(t,d=M-d),Pe(n,d),s=n.length;0===n[s-1]&&s>i;s--);for(fe(a,0);!ne(t,n,s-i);)Ce(n,t,s-i),a[s-i]++;for(r=s-1;r>=i;r--){for(n[r]==t[i-1]?a[r-i]=R:a[r-i]=Math.floor((n[r]*C+n[r-1])/t[i-1]);m=(o=(i>1?t[i-2]:0)*a[r-i])>>M,o&=R,m=(p=m+a[r-i]*t[i-1])>>M,p&=R,m==n[r]?p==n[r-1]?o>(r>1?n[r-2]:0):p>n[r-1]:m>n[r];)a[r-i]--;ke(n,t,-a[r-i],r-i),ae(n)&&(Ie(n,t,r-i),a[r-i]--)}ve(t,d),ve(n,d)}function re(e,t){var a,n=0;for(a=e.length-1;a>=0;a--)n=(n*C+e[a])%t;return n}function pe(e,t,a){var n;n=a>(n=Math.ceil(t/M)+1)?a:n;var s=new Array(n);return fe(s,e),s}function oe(e,t,a){var n,s,i,r,p,o=e.length;if(-1===t){for(i=new Array(0);;){for(r=new Array(i.length+1),s=0;s=36&&(n-=26),!(n>=t||n<0));s++)we(i,t),_e(i,n);for(o=i.length;o>0&&!i[o-1];o--);for(o=a>o+1?a:o+1,r=new Array(o),p=ot.length){for(;a0;a--)s+=e[a]+",";s+=e[0]}else for(;!ye(O);)n=Se(O,t),s=E.substring(n,n+1)+s;return 0===s.length&&(s="0"),s}function le(e,t=!0){O.length!==e.length?O=he(e):ue(O,e);const a=[];for(;!ye(O);)B=Se(O,256),a.push(B);return t&&a.reverse(),a}function ge(e,t){return se(e,t)?1:de(e,t)?0:-1}function he(e){return ue(D=Array(e.length),e),D}function ue(e,t){var a,n=e.length>=M}function _e(e,t){var a,n,s,i;for(e[0]+=t,n=e.length,s=0,a=0;a>M))*C),e[a]=s&R,!(s=(s>>M)-i))return}function ve(e,t){var a,n=Math.floor(t/M);if(n){for(a=0;a>t);e[a]>>=t}function be(e){var t;for(t=0;t>1);e[t]=e[t]>>1|e[t]&C>>1}function Pe(e,t){var a,n=Math.floor(t/M);if(n){for(a=e.length;a>=n;a--)e[a]=e[a-n];for(;a>=0;a--)e[a]=0;t%=M}if(t){for(a=e.length-1;a>0;a--)e[a]=R&(e[a]<>M-t);e[a]=R&e[a]<>M))*C),e[a]=s&R,s=(s>>M)-i}function Se(e,t){var a,n,s=0;for(a=e.length-1;a>=0;a--)n=s*C+e[a],e[a]=Math.floor(n/t),s=n%t;return s}function ke(e,t,a,n){var s,i,r,p;for(r=e.length>=M;for(s=r;i&&s>=M}function Ie(e,t,a){var n,s,i,r;for(i=e.length>=M;for(n=i;s&&n>=M}function Ce(e,t,a){var n,s,i,r;for(i=e.length>=M;for(n=i;s&&n>=M}function Ae(e,t){var a,n,s;for(s=e.length>=M;for(a=s;n&&a>=M}function Me(e,t){var a,n,s;for(s=e.length>=M;for(a=s;n&&a>=M}function Re(e,t){L.length!==e.length?L=he(e):ue(L,e),N.length!==e.length&&(N=he(e)),ie(L,t,N,e)}function Ee(e,t,a){var n;for(x.length!=2*e.length&&(x=new Array(2*e.length)),fe(x,0),n=0;n0&&!e[i-1];i--);for(r=i>t.length?2*i:2*t.length,x.length!=r&&(x=new Array(r)),fe(x,0),a=0;a>=M,n=a+1;n>=M;x[a+i]=s}Re(x,t),ue(e,x)}function De(e,t){var a,n;for(a=e.length;a>0&&!e[a-1];a--);return ue(n=new Array(a+t),e),n}function Ue(e,t,a){var n,s,i,r;if(q.length!=a.length&&(q=he(a)),0!=(1&a[0])){for(fe(q,0),i=a.length;i>0&&!a[i-1];i--);for(r=C-function(e,t){for(var a=1,n=0;;){if(1===e)return a;if(0===e)return 0;if(n-=a*Math.floor(t/e),1===(t%=e))return n;if(0===t)return 0;a-=n*Math.floor(e/t),e%=t}}(re(a,C),C),q[i]=1,Ee(e,q,a),F.length!=e.length?F=he(e):ue(F,e),n=t.length-1;n>0&!t[n];n--);if(0!=t[n]){for(s=1<>=1);for(;;){if(!(s>>=1)){if(--n<0)return void Be(e,U,a,r);s=1<0&&0==a[d-1];d--);for(;y>0&&0==t[y-1];y--);for(m=G.length-1,s=0;s>M,o=e[s],i=1;i>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i]+o*t[i],G[i-1]=r&R,r>>=M,i++;for(;i>=M,i++;for(;i>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++,r+=G[i]+p*a[i],G[i-1]=r&R,r>>=M,i++;for(;i>=M,i++;for(;i>=M,i++;G[i-1]=r&R}se(a,G)||Ae(G,a),ue(e,G)}function Te(e){return"object"==typeof e&&null!==e}function xe(e){return e>>>0}function Fe(e,t){e=xe(e),t=xe(t);const a=oe(e.toString(16),16,32);Pe(a,32),Me(a,oe(t.toString(16),16,32));return ce(a,10)}function Le(e,t=16,a,n=!1,s=!1){const i=e.byteLength||e.length,r=n?t-i:t-i%t;if(r>0&&r"}],type:"ResPQ"},{id:-1443537003,predicate:"p_q_inner_data_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"}],type:"P_Q_inner_data"},{id:1459478408,predicate:"p_q_inner_data_temp_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"},{name:"expires_in",type:"int"}],type:"P_Q_inner_data"},{id:-790100132,predicate:"server_DH_params_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_answer",type:"bytes"}],type:"Server_DH_Params"},{id:-1249309254,predicate:"server_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"g",type:"int"},{name:"dh_prime",type:"bytes"},{name:"g_a",type:"bytes"},{name:"server_time",type:"int"}],type:"Server_DH_inner_data"},{id:1715713620,predicate:"client_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"retry_id",type:"long"},{name:"g_b",type:"bytes"}],type:"Client_DH_Inner_Data"},{id:1003222836,predicate:"dh_gen_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash1",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1188831161,predicate:"dh_gen_retry",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash2",type:"int128"}],type:"Set_client_DH_params_answer"},{id:-1499615742,predicate:"dh_gen_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash3",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1973679973,predicate:"bind_auth_key_inner",params:[{name:"nonce",type:"long"},{name:"temp_auth_key_id",type:"long"},{name:"perm_auth_key_id",type:"long"},{name:"temp_session_id",type:"long"},{name:"expires_at",type:"int"}],type:"BindAuthKeyInner"},{id:-212046591,predicate:"rpc_result",params:[{name:"req_msg_id",type:"long"},{name:"result",type:"Object"}],type:"RpcResult"},{id:558156313,predicate:"rpc_error",params:[{name:"error_code",type:"int"},{name:"error_message",type:"string"}],type:"RpcError"},{id:1579864942,predicate:"rpc_answer_unknown",params:[],type:"RpcDropAnswer"},{id:-847714938,predicate:"rpc_answer_dropped_running",params:[],type:"RpcDropAnswer"},{id:-1539647305,predicate:"rpc_answer_dropped",params:[{name:"msg_id",type:"long"},{name:"seq_no",type:"int"},{name:"bytes",type:"int"}],type:"RpcDropAnswer"},{id:155834844,predicate:"future_salt",params:[{name:"valid_since",type:"int"},{name:"valid_until",type:"int"},{name:"salt",type:"long"}],type:"FutureSalt"},{id:-1370486635,predicate:"future_salts",params:[{name:"req_msg_id",type:"long"},{name:"now",type:"int"},{name:"salts",type:"vector"}],type:"FutureSalts"},{id:880243653,predicate:"pong",params:[{name:"msg_id",type:"long"},{name:"ping_id",type:"long"}],type:"Pong"},{id:-501201412,predicate:"destroy_session_ok",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:1658015945,predicate:"destroy_session_none",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1631450872,predicate:"new_session_created",params:[{name:"first_msg_id",type:"long"},{name:"unique_id",type:"long"},{name:"server_salt",type:"long"}],type:"NewSession"},{id:1945237724,predicate:"msg_container",params:[{name:"messages",type:"vector<%Message>"}],type:"MessageContainer"},{id:1538843921,predicate:"message",params:[{name:"msg_id",type:"long"},{name:"seqno",type:"int"},{name:"bytes",type:"int"},{name:"body",type:"Object"}],type:"Message"},{id:-530561358,predicate:"msg_copy",params:[{name:"orig_message",type:"Message"}],type:"MessageCopy"},{id:812830625,predicate:"gzip_packed",params:[{name:"packed_data",type:"bytes"}],type:"Object"},{id:1658238041,predicate:"msgs_ack",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsAck"},{id:-1477445615,predicate:"bad_msg_notification",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"}],type:"BadMsgNotification"},{id:-307542917,predicate:"bad_server_salt",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"},{name:"new_server_salt",type:"long"}],type:"BadMsgNotification"},{id:2105940488,predicate:"msg_resend_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgResendReq"},{id:-630588590,predicate:"msgs_state_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsStateReq"},{id:81704317,predicate:"msgs_state_info",params:[{name:"req_msg_id",type:"long"},{name:"info",type:"bytes"}],type:"MsgsStateInfo"},{id:-1933520591,predicate:"msgs_all_info",params:[{name:"msg_ids",type:"Vector"},{name:"info",type:"bytes"}],type:"MsgsAllInfo"},{id:661470918,predicate:"msg_detailed_info",params:[{name:"msg_id",type:"long"},{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-2137147681,predicate:"msg_new_detailed_info",params:[{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-161422892,predicate:"destroy_auth_key_ok",params:[],type:"DestroyAuthKeyRes"},{id:178201177,predicate:"destroy_auth_key_none",params:[],type:"DestroyAuthKeyRes"},{id:-368010477,predicate:"destroy_auth_key_fail",params:[],type:"DestroyAuthKeyRes"}],methods:[{id:-1099002127,method:"req_pq_multi",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:-686627650,method:"req_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"public_key_fingerprint",type:"long"},{name:"encrypted_data",type:"bytes"}],type:"Server_DH_Params"},{id:-184262881,method:"set_client_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_data",type:"bytes"}],type:"Set_client_DH_params_answer"},{id:1491380032,method:"rpc_drop_answer",params:[{name:"req_msg_id",type:"long"}],type:"RpcDropAnswer"},{id:-1188971260,method:"get_future_salts",params:[{name:"num",type:"int"}],type:"FutureSalts"},{id:2059302892,method:"ping",params:[{name:"ping_id",type:"long"}],type:"Pong"},{id:-213746804,method:"ping_delay_disconnect",params:[{name:"ping_id",type:"long"},{name:"disconnect_delay",type:"int"}],type:"Pong"},{id:-414113498,method:"destroy_session",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1835453025,method:"http_wait",params:[{name:"max_delay",type:"int"},{name:"wait_after",type:"int"},{name:"max_wait",type:"int"}],type:"HttpWait"},{id:-784117408,method:"destroy_auth_key",params:[],type:"DestroyAuthKeyRes"}]},API:{constructors:[{id:-1132882121,predicate:"boolFalse",params:[],type:"Bool"},{id:-1720552011,predicate:"boolTrue",params:[],type:"Bool"},{id:1072550713,predicate:"true",params:[],type:"True"},{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:-994444869,predicate:"error",params:[{name:"code",type:"int"},{name:"text",type:"string"}],type:"Error"},{id:1450380236,predicate:"null",params:[],type:"Null"},{id:2134579434,predicate:"inputPeerEmpty",params:[],type:"InputPeer"},{id:2107670217,predicate:"inputPeerSelf",params:[],type:"InputPeer"},{id:396093539,predicate:"inputPeerChat",params:[{name:"chat_id",type:"int"}],type:"InputPeer"},{id:-1182234929,predicate:"inputUserEmpty",params:[],type:"InputUser"},{id:-138301121,predicate:"inputUserSelf",params:[],type:"InputUser"},{id:-208488460,predicate:"inputPhoneContact",params:[{name:"client_id",type:"long"},{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"InputContact"},{id:-181407105,predicate:"inputFile",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"},{name:"md5_checksum",type:"string"}],type:"InputFile"},{id:-1771768449,predicate:"inputMediaEmpty",params:[],type:"InputMedia"},{id:505969924,predicate:"inputMediaUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:-1279654347,predicate:"inputMediaPhoto",params:[{name:"flags",type:"#"},{name:"id",type:"InputPhoto"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-104578748,predicate:"inputMediaGeoPoint",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"InputMedia"},{id:-122978821,predicate:"inputMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"}],type:"InputMedia"},{id:480546647,predicate:"inputChatPhotoEmpty",params:[],type:"InputChatPhoto"},{id:-968723890,predicate:"inputChatUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"}],type:"InputChatPhoto"},{id:-1991004873,predicate:"inputChatPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputChatPhoto"},{id:-457104426,predicate:"inputGeoPointEmpty",params:[],type:"InputGeoPoint"},{id:1210199983,predicate:"inputGeoPoint",params:[{name:"flags",type:"#"},{name:"lat",type:"double"},{name:"long",type:"double"},{name:"accuracy_radius",type:"flags.0?int"}],type:"InputGeoPoint"},{id:483901197,predicate:"inputPhotoEmpty",params:[],type:"InputPhoto"},{id:1001634122,predicate:"inputPhoto",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputPhoto"},{id:-539317279,predicate:"inputFileLocation",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputFileLocation"},{id:-1649296275,predicate:"peerUser",params:[{name:"user_id",type:"int"}],type:"Peer"},{id:-1160714821,predicate:"peerChat",params:[{name:"chat_id",type:"int"}],type:"Peer"},{id:-1432995067,predicate:"storage.fileUnknown",params:[],type:"storage.FileType"},{id:1086091090,predicate:"storage.filePartial",params:[],type:"storage.FileType"},{id:8322574,predicate:"storage.fileJpeg",params:[],type:"storage.FileType"},{id:-891180321,predicate:"storage.fileGif",params:[],type:"storage.FileType"},{id:172975040,predicate:"storage.filePng",params:[],type:"storage.FileType"},{id:-1373745011,predicate:"storage.filePdf",params:[],type:"storage.FileType"},{id:1384777335,predicate:"storage.fileMp3",params:[],type:"storage.FileType"},{id:1258941372,predicate:"storage.fileMov",params:[],type:"storage.FileType"},{id:-1278304028,predicate:"storage.fileMp4",params:[],type:"storage.FileType"},{id:276907596,predicate:"storage.fileWebp",params:[],type:"storage.FileType"},{id:537022650,predicate:"userEmpty",params:[{name:"id",type:"int"}],type:"User"},{id:1326562017,predicate:"userProfilePhotoEmpty",params:[],type:"UserProfilePhoto"},{id:-2100168954,predicate:"userProfilePhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"UserProfilePhoto"},{id:164646985,predicate:"userStatusEmpty",params:[],type:"UserStatus"},{id:-306628279,predicate:"userStatusOnline",params:[{name:"expires",type:"int"}],type:"UserStatus"},{id:9203775,predicate:"userStatusOffline",params:[{name:"was_online",type:"int"}],type:"UserStatus"},{id:-1683826688,predicate:"chatEmpty",params:[{name:"id",type:"int"}],type:"Chat"},{id:1004149726,predicate:"chat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"kicked",type:"flags.1?true"},{name:"left",type:"flags.2?true"},{name:"deactivated",type:"flags.5?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"ChatPhoto"},{name:"participants_count",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"migrated_to",type:"flags.6?InputChannel"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"}],type:"Chat"},{id:120753115,predicate:"chatForbidden",params:[{name:"id",type:"int"},{name:"title",type:"string"}],type:"Chat"},{id:-1977734781,predicate:"chatFull",params:[{name:"flags",type:"#"},{name:"can_set_username",type:"flags.7?true"},{name:"has_scheduled",type:"flags.8?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants",type:"ChatParticipants"},{name:"chat_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.13?ExportedChatInvite"},{name:"bot_info",type:"flags.3?Vector"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"folder_id",type:"flags.11?int"},{name:"call",type:"flags.12?InputGroupCall"},{name:"ttl_period",type:"flags.14?int"},{name:"groupcall_default_join_as",type:"flags.15?Peer"}],type:"ChatFull"},{id:-925415106,predicate:"chatParticipant",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-57668565,predicate:"chatParticipantsForbidden",params:[{name:"flags",type:"#"},{name:"chat_id",type:"int"},{name:"self_participant",type:"flags.0?ChatParticipant"}],type:"ChatParticipants"},{id:1061556205,predicate:"chatParticipants",params:[{name:"chat_id",type:"int"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"ChatParticipants"},{id:935395612,predicate:"chatPhotoEmpty",params:[],type:"ChatPhoto"},{id:476978193,predicate:"chatPhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"ChatPhoto"},{id:-1868117372,predicate:"messageEmpty",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"peer_id",type:"flags.0?Peer"}],type:"Message"},{id:-1125940270,predicate:"message",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"from_scheduled",type:"flags.18?true"},{name:"legacy",type:"flags.19?true"},{name:"edit_hide",type:"flags.21?true"},{name:"pinned",type:"flags.24?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"message",type:"string"},{name:"media",type:"flags.9?MessageMedia"},{name:"reply_markup",type:"flags.6?ReplyMarkup"},{name:"entities",type:"flags.7?Vector"},{name:"views",type:"flags.10?int"},{name:"forwards",type:"flags.10?int"},{name:"replies",type:"flags.23?MessageReplies"},{name:"edit_date",type:"flags.15?int"},{name:"post_author",type:"flags.16?string"},{name:"grouped_id",type:"flags.17?long"},{name:"restriction_reason",type:"flags.22?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:721967202,predicate:"messageService",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"legacy",type:"flags.19?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"action",type:"MessageAction"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:1038967584,predicate:"messageMediaEmpty",params:[],type:"MessageMedia"},{id:1766936791,predicate:"messageMediaPhoto",params:[{name:"flags",type:"#"},{name:"photo",type:"flags.0?Photo"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1457575028,predicate:"messageMediaGeo",params:[{name:"geo",type:"GeoPoint"}],type:"MessageMedia"},{id:-873313984,predicate:"messageMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"user_id",type:"int"}],type:"MessageMedia"},{id:-1618676578,predicate:"messageMediaUnsupported",params:[],type:"MessageMedia"},{id:-1230047312,predicate:"messageActionEmpty",params:[],type:"MessageAction"},{id:-1503425638,predicate:"messageActionChatCreate",params:[{name:"title",type:"string"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1247687078,predicate:"messageActionChatEditTitle",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:2144015272,predicate:"messageActionChatEditPhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-1780220945,predicate:"messageActionChatDeletePhoto",params:[],type:"MessageAction"},{id:1217033015,predicate:"messageActionChatAddUser",params:[{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1297179892,predicate:"messageActionChatDeleteUser",params:[{name:"user_id",type:"int"}],type:"MessageAction"},{id:739712882,predicate:"dialog",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"unread_mark",type:"flags.3?true"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"pts",type:"flags.0?int"},{name:"draft",type:"flags.1?DraftMessage"},{name:"folder_id",type:"flags.4?int"}],type:"Dialog"},{id:590459437,predicate:"photoEmpty",params:[{name:"id",type:"long"}],type:"Photo"},{id:-82216347,predicate:"photo",params:[{name:"flags",type:"#"},{name:"has_stickers",type:"flags.0?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"sizes",type:"Vector"},{name:"video_sizes",type:"flags.1?Vector"},{name:"dc_id",type:"int"}],type:"Photo"},{id:236446268,predicate:"photoSizeEmpty",params:[{name:"type",type:"string"}],type:"PhotoSize"},{id:1976012384,predicate:"photoSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"}],type:"PhotoSize"},{id:35527382,predicate:"photoCachedSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:286776671,predicate:"geoPointEmpty",params:[],type:"GeoPoint"},{id:-1297942941,predicate:"geoPoint",params:[{name:"flags",type:"#"},{name:"long",type:"double"},{name:"lat",type:"double"},{name:"access_hash",type:"long"},{name:"accuracy_radius",type:"flags.0?int"}],type:"GeoPoint"},{id:1577067778,predicate:"auth.sentCode",params:[{name:"flags",type:"#"},{name:"type",type:"auth.SentCodeType"},{name:"phone_code_hash",type:"string"},{name:"next_type",type:"flags.1?auth.CodeType"},{name:"timeout",type:"flags.2?int"}],type:"auth.SentCode"},{id:-855308010,predicate:"auth.authorization",params:[{name:"flags",type:"#"},{name:"tmp_sessions",type:"flags.0?int"},{name:"user",type:"User"}],type:"auth.Authorization"},{id:-543777747,predicate:"auth.exportedAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.ExportedAuthorization"},{id:-1195615476,predicate:"inputNotifyPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputNotifyPeer"},{id:423314455,predicate:"inputNotifyUsers",params:[],type:"InputNotifyPeer"},{id:1251338318,predicate:"inputNotifyChats",params:[],type:"InputNotifyPeer"},{id:-1673717362,predicate:"inputPeerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"InputPeerNotifySettings"},{id:-1353671392,predicate:"peerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?string"}],type:"PeerNotifySettings"},{id:1933519201,predicate:"peerSettings",params:[{name:"flags",type:"#"},{name:"report_spam",type:"flags.0?true"},{name:"add_contact",type:"flags.1?true"},{name:"block_contact",type:"flags.2?true"},{name:"share_contact",type:"flags.3?true"},{name:"need_contacts_exception",type:"flags.4?true"},{name:"report_geo",type:"flags.5?true"},{name:"autoarchived",type:"flags.7?true"},{name:"invite_members",type:"flags.8?true"},{name:"geo_distance",type:"flags.6?int"}],type:"PeerSettings"},{id:-1539849235,predicate:"wallPaper",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"pattern",type:"flags.3?true"},{name:"dark",type:"flags.4?true"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"document",type:"Document"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:1490799288,predicate:"inputReportReasonSpam",params:[],type:"ReportReason"},{id:505595789,predicate:"inputReportReasonViolence",params:[],type:"ReportReason"},{id:777640226,predicate:"inputReportReasonPornography",params:[],type:"ReportReason"},{id:-1376497949,predicate:"inputReportReasonChildAbuse",params:[],type:"ReportReason"},{id:-1041980751,predicate:"inputReportReasonOther",params:[],type:"ReportReason"},{id:328899191,predicate:"userFull",params:[{name:"flags",type:"#"},{name:"blocked",type:"flags.0?true"},{name:"phone_calls_available",type:"flags.4?true"},{name:"phone_calls_private",type:"flags.5?true"},{name:"can_pin_message",type:"flags.7?true"},{name:"has_scheduled",type:"flags.12?true"},{name:"video_calls_available",type:"flags.13?true"},{name:"user",type:"User"},{name:"about",type:"flags.1?string"},{name:"settings",type:"PeerSettings"},{name:"profile_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"bot_info",type:"flags.3?BotInfo"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"common_chats_count",type:"int"},{name:"folder_id",type:"flags.11?int"},{name:"ttl_period",type:"flags.14?int"}],type:"UserFull"},{id:-116274796,predicate:"contact",params:[{name:"user_id",type:"int"},{name:"mutual",type:"Bool"}],type:"Contact"},{id:-805141448,predicate:"importedContact",params:[{name:"user_id",type:"int"},{name:"client_id",type:"long"}],type:"ImportedContact"},{id:-748155807,predicate:"contactStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"ContactStatus"},{id:-1219778094,predicate:"contacts.contactsNotModified",params:[],type:"contacts.Contacts"},{id:-353862078,predicate:"contacts.contacts",params:[{name:"contacts",type:"Vector"},{name:"saved_count",type:"int"},{name:"users",type:"Vector"}],type:"contacts.Contacts"},{id:2010127419,predicate:"contacts.importedContacts",params:[{name:"imported",type:"Vector"},{name:"popular_invites",type:"Vector"},{name:"retry_contacts",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ImportedContacts"},{id:182326673,predicate:"contacts.blocked",params:[{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:-513392236,predicate:"contacts.blockedSlice",params:[{name:"count",type:"int"},{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:364538944,predicate:"messages.dialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:1910543603,predicate:"messages.dialogsSlice",params:[{name:"count",type:"int"},{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:-1938715001,predicate:"messages.messages",params:[{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:978610270,predicate:"messages.messagesSlice",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"count",type:"int"},{name:"next_rate",type:"flags.0?int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:1694474197,predicate:"messages.chats",params:[{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-438840932,predicate:"messages.chatFull",params:[{name:"full_chat",type:"ChatFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatFull"},{id:-1269012015,predicate:"messages.affectedHistory",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"}],type:"messages.AffectedHistory"},{id:1474492012,predicate:"inputMessagesFilterEmpty",params:[],type:"MessagesFilter"},{id:-1777752804,predicate:"inputMessagesFilterPhotos",params:[],type:"MessagesFilter"},{id:-1614803355,predicate:"inputMessagesFilterVideo",params:[],type:"MessagesFilter"},{id:1458172132,predicate:"inputMessagesFilterPhotoVideo",params:[],type:"MessagesFilter"},{id:-1629621880,predicate:"inputMessagesFilterDocument",params:[],type:"MessagesFilter"},{id:2129714567,predicate:"inputMessagesFilterUrl",params:[],type:"MessagesFilter"},{id:-3644025,predicate:"inputMessagesFilterGif",params:[],type:"MessagesFilter"},{id:522914557,predicate:"updateNewMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1318109142,predicate:"updateMessageID",params:[{name:"id",type:"int"},{name:"random_id",type:"long"}],type:"Update"},{id:-1576161051,predicate:"updateDeleteMessages",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1548249383,predicate:"updateUserTyping",params:[{name:"user_id",type:"int"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-2033525908,predicate:"updateChatUserTyping",params:[{name:"chat_id",type:"int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:125178264,predicate:"updateChatParticipants",params:[{name:"participants",type:"ChatParticipants"}],type:"Update"},{id:469489699,predicate:"updateUserStatus",params:[{name:"user_id",type:"int"},{name:"status",type:"UserStatus"}],type:"Update"},{id:-1489818765,predicate:"updateUserName",params:[{name:"user_id",type:"int"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"username",type:"string"}],type:"Update"},{id:-1791935732,predicate:"updateUserPhoto",params:[{name:"user_id",type:"int"},{name:"date",type:"int"},{name:"photo",type:"UserProfilePhoto"},{name:"previous",type:"Bool"}],type:"Update"},{id:-1519637954,predicate:"updates.state",params:[{name:"pts",type:"int"},{name:"qts",type:"int"},{name:"date",type:"int"},{name:"seq",type:"int"},{name:"unread_count",type:"int"}],type:"updates.State"},{id:1567990072,predicate:"updates.differenceEmpty",params:[{name:"date",type:"int"},{name:"seq",type:"int"}],type:"updates.Difference"},{id:16030880,predicate:"updates.difference",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"updates.Difference"},{id:-1459938943,predicate:"updates.differenceSlice",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"intermediate_state",type:"updates.State"}],type:"updates.Difference"},{id:-484987010,predicate:"updatesTooLong",params:[],type:"Updates"},{id:-84936653,predicate:"updateShortMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"user_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:290961496,predicate:"updateShortChatMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"from_id",type:"int"},{name:"chat_id",type:"int"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?int"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:2027216577,predicate:"updateShort",params:[{name:"update",type:"Update"},{name:"date",type:"int"}],type:"Updates"},{id:1918567619,predicate:"updatesCombined",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq_start",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:1957577280,predicate:"updates",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:-1916114267,predicate:"photos.photos",params:[{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:352657236,predicate:"photos.photosSlice",params:[{name:"count",type:"int"},{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:539045032,predicate:"photos.photo",params:[{name:"photo",type:"Photo"},{name:"users",type:"Vector"}],type:"photos.Photo"},{id:157948117,predicate:"upload.file",params:[{name:"type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.File"},{id:414687501,predicate:"dcOption",params:[{name:"flags",type:"#"},{name:"ipv6",type:"flags.0?true"},{name:"media_only",type:"flags.1?true"},{name:"tcpo_only",type:"flags.2?true"},{name:"cdn",type:"flags.3?true"},{name:"static",type:"flags.4?true"},{name:"id",type:"int"},{name:"ip_address",type:"string"},{name:"port",type:"int"},{name:"secret",type:"flags.10?bytes"}],type:"DcOption"},{id:856375399,predicate:"config",params:[{name:"flags",type:"#"},{name:"phonecalls_enabled",type:"flags.1?true"},{name:"default_p2p_contacts",type:"flags.3?true"},{name:"preload_featured_stickers",type:"flags.4?true"},{name:"ignore_phone_entities",type:"flags.5?true"},{name:"revoke_pm_inbox",type:"flags.6?true"},{name:"blocked_mode",type:"flags.8?true"},{name:"pfs_enabled",type:"flags.13?true"},{name:"date",type:"int"},{name:"expires",type:"int"},{name:"test_mode",type:"Bool"},{name:"this_dc",type:"int"},{name:"dc_options",type:"Vector"},{name:"dc_txt_domain_name",type:"string"},{name:"chat_size_max",type:"int"},{name:"megagroup_size_max",type:"int"},{name:"forwarded_count_max",type:"int"},{name:"online_update_period_ms",type:"int"},{name:"offline_blur_timeout_ms",type:"int"},{name:"offline_idle_timeout_ms",type:"int"},{name:"online_cloud_timeout_ms",type:"int"},{name:"notify_cloud_delay_ms",type:"int"},{name:"notify_default_delay_ms",type:"int"},{name:"push_chat_period_ms",type:"int"},{name:"push_chat_limit",type:"int"},{name:"saved_gifs_limit",type:"int"},{name:"edit_time_limit",type:"int"},{name:"revoke_time_limit",type:"int"},{name:"revoke_pm_time_limit",type:"int"},{name:"rating_e_decay",type:"int"},{name:"stickers_recent_limit",type:"int"},{name:"stickers_faved_limit",type:"int"},{name:"channels_read_media_period",type:"int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"pinned_dialogs_count_max",type:"int"},{name:"pinned_infolder_count_max",type:"int"},{name:"call_receive_timeout_ms",type:"int"},{name:"call_ring_timeout_ms",type:"int"},{name:"call_connect_timeout_ms",type:"int"},{name:"call_packet_timeout_ms",type:"int"},{name:"me_url_prefix",type:"string"},{name:"autoupdate_url_prefix",type:"flags.7?string"},{name:"gif_search_username",type:"flags.9?string"},{name:"venue_search_username",type:"flags.10?string"},{name:"img_search_username",type:"flags.11?string"},{name:"static_maps_provider",type:"flags.12?string"},{name:"caption_length_max",type:"int"},{name:"message_length_max",type:"int"},{name:"webfile_dc_id",type:"int"},{name:"suggested_lang_code",type:"flags.2?string"},{name:"lang_pack_version",type:"flags.2?int"},{name:"base_lang_pack_version",type:"flags.2?int"}],type:"Config"},{id:-1910892683,predicate:"nearestDc",params:[{name:"country",type:"string"},{name:"this_dc",type:"int"},{name:"nearest_dc",type:"int"}],type:"NearestDc"},{id:-860107216,predicate:"help.appUpdate",params:[{name:"flags",type:"#"},{name:"can_not_skip",type:"flags.0?true"},{name:"id",type:"int"},{name:"version",type:"string"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"document",type:"flags.1?Document"},{name:"url",type:"flags.2?string"},{name:"sticker",type:"flags.3?Document"}],type:"help.AppUpdate"},{id:-1000708810,predicate:"help.noAppUpdate",params:[],type:"help.AppUpdate"},{id:415997816,predicate:"help.inviteText",params:[{name:"message",type:"string"}],type:"help.InviteText"},{id:314359194,predicate:"updateNewEncryptedMessage",params:[{name:"message",type:"EncryptedMessage"},{name:"qts",type:"int"}],type:"Update"},{id:386986326,predicate:"updateEncryptedChatTyping",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-1264392051,predicate:"updateEncryption",params:[{name:"chat",type:"EncryptedChat"},{name:"date",type:"int"}],type:"Update"},{id:956179895,predicate:"updateEncryptedMessagesRead",params:[{name:"chat_id",type:"int"},{name:"max_date",type:"int"},{name:"date",type:"int"}],type:"Update"},{id:-1417756512,predicate:"encryptedChatEmpty",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:1006044124,predicate:"encryptedChatWaiting",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"}],type:"EncryptedChat"},{id:1651608194,predicate:"encryptedChatRequested",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:-94974410,predicate:"encryptedChat",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:505183301,predicate:"encryptedChatDiscarded",params:[{name:"flags",type:"#"},{name:"history_deleted",type:"flags.0?true"},{name:"id",type:"int"}],type:"EncryptedChat"},{id:-247351839,predicate:"inputEncryptedChat",params:[{name:"chat_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputEncryptedChat"},{id:-1038136962,predicate:"encryptedFileEmpty",params:[],type:"EncryptedFile"},{id:1248893260,predicate:"encryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"key_fingerprint",type:"int"}],type:"EncryptedFile"},{id:406307684,predicate:"inputEncryptedFileEmpty",params:[],type:"InputEncryptedFile"},{id:1690108678,predicate:"inputEncryptedFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1511503333,predicate:"inputEncryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputEncryptedFile"},{id:-182231723,predicate:"inputEncryptedFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:-317144808,predicate:"encryptedMessage",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"},{name:"file",type:"EncryptedFile"}],type:"EncryptedMessage"},{id:594758406,predicate:"encryptedMessageService",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"}],type:"EncryptedMessage"},{id:-1058912715,predicate:"messages.dhConfigNotModified",params:[{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:740433629,predicate:"messages.dhConfig",params:[{name:"g",type:"int"},{name:"p",type:"bytes"},{name:"version",type:"int"},{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:1443858741,predicate:"messages.sentEncryptedMessage",params:[{name:"date",type:"int"}],type:"messages.SentEncryptedMessage"},{id:-1802240206,predicate:"messages.sentEncryptedFile",params:[{name:"date",type:"int"},{name:"file",type:"EncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:-95482955,predicate:"inputFileBig",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"}],type:"InputFile"},{id:767652808,predicate:"inputEncryptedFileBigUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:-364179876,predicate:"updateChatParticipantAdd",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:1851755554,predicate:"updateChatParticipantDelete",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:-1906403213,predicate:"updateDcOptions",params:[{name:"dc_options",type:"Vector"}],type:"Update"},{id:1530447553,predicate:"inputMediaUploadedDocument",params:[{name:"flags",type:"#"},{name:"nosound_video",type:"flags.3?true"},{name:"force_file",type:"flags.4?true"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.2?InputFile"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:860303448,predicate:"inputMediaDocument",params:[{name:"flags",type:"#"},{name:"id",type:"InputDocument"},{name:"ttl_seconds",type:"flags.0?int"},{name:"query",type:"flags.1?string"}],type:"InputMedia"},{id:-1666158377,predicate:"messageMediaDocument",params:[{name:"flags",type:"#"},{name:"document",type:"flags.0?Document"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1928391342,predicate:"inputDocumentEmpty",params:[],type:"InputDocument"},{id:448771445,predicate:"inputDocument",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputDocument"},{id:-1160743548,predicate:"inputDocumentFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:922273905,predicate:"documentEmpty",params:[{name:"id",type:"long"}],type:"Document"},{id:512177195,predicate:"document",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"mime_type",type:"string"},{name:"size",type:"int"},{name:"thumbs",type:"flags.0?Vector"},{name:"video_thumbs",type:"flags.1?Vector"},{name:"dc_id",type:"int"},{name:"attributes",type:"Vector"}],type:"Document"},{id:398898678,predicate:"help.support",params:[{name:"phone_number",type:"string"},{name:"user",type:"User"}],type:"help.Support"},{id:-1613493288,predicate:"notifyPeer",params:[{name:"peer",type:"Peer"}],type:"NotifyPeer"},{id:-1261946036,predicate:"notifyUsers",params:[],type:"NotifyPeer"},{id:-1073230141,predicate:"notifyChats",params:[],type:"NotifyPeer"},{id:-1094555409,predicate:"updateNotifySettings",params:[{name:"peer",type:"NotifyPeer"},{name:"notify_settings",type:"PeerNotifySettings"}],type:"Update"},{id:381645902,predicate:"sendMessageTypingAction",params:[],type:"SendMessageAction"},{id:-44119819,predicate:"sendMessageCancelAction",params:[],type:"SendMessageAction"},{id:-1584933265,predicate:"sendMessageRecordVideoAction",params:[],type:"SendMessageAction"},{id:-378127636,predicate:"sendMessageUploadVideoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-718310409,predicate:"sendMessageRecordAudioAction",params:[],type:"SendMessageAction"},{id:-212740181,predicate:"sendMessageUploadAudioAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-774682074,predicate:"sendMessageUploadPhotoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-1441998364,predicate:"sendMessageUploadDocumentAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:393186209,predicate:"sendMessageGeoLocationAction",params:[],type:"SendMessageAction"},{id:1653390447,predicate:"sendMessageChooseContactAction",params:[],type:"SendMessageAction"},{id:-1290580579,predicate:"contacts.found",params:[{name:"my_results",type:"Vector"},{name:"results",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Found"},{id:-337352679,predicate:"updateServiceNotification",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"inbox_date",type:"flags.1?int"},{name:"type",type:"string"},{name:"message",type:"string"},{name:"media",type:"MessageMedia"},{name:"entities",type:"Vector"}],type:"Update"},{id:-496024847,predicate:"userStatusRecently",params:[],type:"UserStatus"},{id:129960444,predicate:"userStatusLastWeek",params:[],type:"UserStatus"},{id:2011940674,predicate:"userStatusLastMonth",params:[],type:"UserStatus"},{id:-298113238,predicate:"updatePrivacy",params:[{name:"key",type:"PrivacyKey"},{name:"rules",type:"Vector"}],type:"Update"},{id:1335282456,predicate:"inputPrivacyKeyStatusTimestamp",params:[],type:"InputPrivacyKey"},{id:-1137792208,predicate:"privacyKeyStatusTimestamp",params:[],type:"PrivacyKey"},{id:218751099,predicate:"inputPrivacyValueAllowContacts",params:[],type:"InputPrivacyRule"},{id:407582158,predicate:"inputPrivacyValueAllowAll",params:[],type:"InputPrivacyRule"},{id:320652927,predicate:"inputPrivacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:195371015,predicate:"inputPrivacyValueDisallowContacts",params:[],type:"InputPrivacyRule"},{id:-697604407,predicate:"inputPrivacyValueDisallowAll",params:[],type:"InputPrivacyRule"},{id:-1877932953,predicate:"inputPrivacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:-123988,predicate:"privacyValueAllowContacts",params:[],type:"PrivacyRule"},{id:1698855810,predicate:"privacyValueAllowAll",params:[],type:"PrivacyRule"},{id:1297858060,predicate:"privacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:-125240806,predicate:"privacyValueDisallowContacts",params:[],type:"PrivacyRule"},{id:-1955338397,predicate:"privacyValueDisallowAll",params:[],type:"PrivacyRule"},{id:209668535,predicate:"privacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:1352683077,predicate:"account.privacyRules",params:[{name:"rules",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.PrivacyRules"},{id:-1194283041,predicate:"accountDaysTTL",params:[{name:"days",type:"int"}],type:"AccountDaysTTL"},{id:314130811,predicate:"updateUserPhone",params:[{name:"user_id",type:"int"},{name:"phone",type:"string"}],type:"Update"},{id:1815593308,predicate:"documentAttributeImageSize",params:[{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:297109817,predicate:"documentAttributeAnimated",params:[],type:"DocumentAttribute"},{id:1662637586,predicate:"documentAttributeSticker",params:[{name:"flags",type:"#"},{name:"mask",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"DocumentAttribute"},{id:250621158,predicate:"documentAttributeVideo",params:[{name:"flags",type:"#"},{name:"round_message",type:"flags.0?true"},{name:"supports_streaming",type:"flags.1?true"},{name:"duration",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:-1739392570,predicate:"documentAttributeAudio",params:[{name:"flags",type:"#"},{name:"voice",type:"flags.10?true"},{name:"duration",type:"int"},{name:"title",type:"flags.0?string"},{name:"performer",type:"flags.1?string"},{name:"waveform",type:"flags.2?bytes"}],type:"DocumentAttribute"},{id:358154344,predicate:"documentAttributeFilename",params:[{name:"file_name",type:"string"}],type:"DocumentAttribute"},{id:-244016606,predicate:"messages.stickersNotModified",params:[],type:"messages.Stickers"},{id:-463889475,predicate:"messages.stickers",params:[{name:"hash",type:"int"},{name:"stickers",type:"Vector"}],type:"messages.Stickers"},{id:313694676,predicate:"stickerPack",params:[{name:"emoticon",type:"string"},{name:"documents",type:"Vector"}],type:"StickerPack"},{id:-395967805,predicate:"messages.allStickersNotModified",params:[],type:"messages.AllStickers"},{id:-302170017,predicate:"messages.allStickers",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.AllStickers"},{id:-1667805217,predicate:"updateReadHistoryInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:791617983,predicate:"updateReadHistoryOutbox",params:[{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2066640507,predicate:"messages.affectedMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"messages.AffectedMessages"},{id:2139689491,predicate:"updateWebPage",params:[{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-350980120,predicate:"webPageEmpty",params:[{name:"id",type:"long"}],type:"WebPage"},{id:-981018084,predicate:"webPagePending",params:[{name:"id",type:"long"},{name:"date",type:"int"}],type:"WebPage"},{id:-392411726,predicate:"webPage",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"url",type:"string"},{name:"display_url",type:"string"},{name:"hash",type:"int"},{name:"type",type:"flags.0?string"},{name:"site_name",type:"flags.1?string"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"photo",type:"flags.4?Photo"},{name:"embed_url",type:"flags.5?string"},{name:"embed_type",type:"flags.5?string"},{name:"embed_width",type:"flags.6?int"},{name:"embed_height",type:"flags.6?int"},{name:"duration",type:"flags.7?int"},{name:"author",type:"flags.8?string"},{name:"document",type:"flags.9?Document"},{name:"cached_page",type:"flags.10?Page"},{name:"attributes",type:"flags.12?Vector"}],type:"WebPage"},{id:-1557277184,predicate:"messageMediaWebPage",params:[{name:"webpage",type:"WebPage"}],type:"MessageMedia"},{id:-1392388579,predicate:"authorization",params:[{name:"flags",type:"#"},{name:"current",type:"flags.0?true"},{name:"official_app",type:"flags.1?true"},{name:"password_pending",type:"flags.2?true"},{name:"hash",type:"long"},{name:"device_model",type:"string"},{name:"platform",type:"string"},{name:"system_version",type:"string"},{name:"api_id",type:"int"},{name:"app_name",type:"string"},{name:"app_version",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"country",type:"string"},{name:"region",type:"string"}],type:"Authorization"},{id:307276766,predicate:"account.authorizations",params:[{name:"authorizations",type:"Vector"}],type:"account.Authorizations"},{id:408623183,predicate:"account.password",params:[{name:"flags",type:"#"},{name:"has_recovery",type:"flags.0?true"},{name:"has_secure_values",type:"flags.1?true"},{name:"has_password",type:"flags.2?true"},{name:"current_algo",type:"flags.2?PasswordKdfAlgo"},{name:"srp_B",type:"flags.2?bytes"},{name:"srp_id",type:"flags.2?long"},{name:"hint",type:"flags.3?string"},{name:"email_unconfirmed_pattern",type:"flags.4?string"},{name:"new_algo",type:"PasswordKdfAlgo"},{name:"new_secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_random",type:"bytes"},{name:"pending_reset_date",type:"flags.5?int"}],type:"account.Password"},{id:-1705233435,predicate:"account.passwordSettings",params:[{name:"flags",type:"#"},{name:"email",type:"flags.0?string"},{name:"secure_settings",type:"flags.1?SecureSecretSettings"}],type:"account.PasswordSettings"},{id:-1036572727,predicate:"account.passwordInputSettings",params:[{name:"flags",type:"#"},{name:"new_algo",type:"flags.0?PasswordKdfAlgo"},{name:"new_password_hash",type:"flags.0?bytes"},{name:"hint",type:"flags.0?string"},{name:"email",type:"flags.1?string"},{name:"new_secure_settings",type:"flags.2?SecureSecretSettings"}],type:"account.PasswordInputSettings"},{id:326715557,predicate:"auth.passwordRecovery",params:[{name:"email_pattern",type:"string"}],type:"auth.PasswordRecovery"},{id:-1052959727,predicate:"inputMediaVenue",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"InputMedia"},{id:784356159,predicate:"messageMediaVenue",params:[{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"MessageMedia"},{id:-1551583367,predicate:"receivedNotifyMessage",params:[{name:"id",type:"int"},{name:"flags",type:"int"}],type:"ReceivedNotifyMessage"},{id:1847917725,predicate:"chatInviteExported",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.0?true"},{name:"permanent",type:"flags.5?true"},{name:"link",type:"string"},{name:"admin_id",type:"int"},{name:"date",type:"int"},{name:"start_date",type:"flags.4?int"},{name:"expire_date",type:"flags.1?int"},{name:"usage_limit",type:"flags.2?int"},{name:"usage",type:"flags.3?int"}],type:"ExportedChatInvite"},{id:1516793212,predicate:"chatInviteAlready",params:[{name:"chat",type:"Chat"}],type:"ChatInvite"},{id:-540871282,predicate:"chatInvite",params:[{name:"flags",type:"#"},{name:"channel",type:"flags.0?true"},{name:"broadcast",type:"flags.1?true"},{name:"public",type:"flags.2?true"},{name:"megagroup",type:"flags.3?true"},{name:"title",type:"string"},{name:"photo",type:"Photo"},{name:"participants_count",type:"int"},{name:"participants",type:"flags.4?Vector"}],type:"ChatInvite"},{id:-123931160,predicate:"messageActionChatJoinedByLink",params:[{name:"inviter_id",type:"int"}],type:"MessageAction"},{id:1757493555,predicate:"updateReadMessagesContents",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-4838507,predicate:"inputStickerSetEmpty",params:[],type:"InputStickerSet"},{id:-1645763991,predicate:"inputStickerSetID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputStickerSet"},{id:-2044933984,predicate:"inputStickerSetShortName",params:[{name:"short_name",type:"string"}],type:"InputStickerSet"},{id:-673242758,predicate:"stickerSet",params:[{name:"flags",type:"#"},{name:"archived",type:"flags.1?true"},{name:"official",type:"flags.2?true"},{name:"masks",type:"flags.3?true"},{name:"animated",type:"flags.5?true"},{name:"installed_date",type:"flags.0?int"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumbs",type:"flags.4?Vector"},{name:"thumb_dc_id",type:"flags.4?int"},{name:"thumb_version",type:"flags.4?int"},{name:"count",type:"int"},{name:"hash",type:"int"}],type:"StickerSet"},{id:-1240849242,predicate:"messages.stickerSet",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"documents",type:"Vector"}],type:"messages.StickerSet"},{id:-1820043071,predicate:"user",params:[{name:"flags",type:"#"},{name:"self",type:"flags.10?true"},{name:"contact",type:"flags.11?true"},{name:"mutual_contact",type:"flags.12?true"},{name:"deleted",type:"flags.13?true"},{name:"bot",type:"flags.14?true"},{name:"bot_chat_history",type:"flags.15?true"},{name:"bot_nochats",type:"flags.16?true"},{name:"verified",type:"flags.17?true"},{name:"restricted",type:"flags.18?true"},{name:"min",type:"flags.20?true"},{name:"bot_inline_geo",type:"flags.21?true"},{name:"support",type:"flags.23?true"},{name:"scam",type:"flags.24?true"},{name:"apply_min_photo",type:"flags.25?true"},{name:"fake",type:"flags.26?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.0?long"},{name:"first_name",type:"flags.1?string"},{name:"last_name",type:"flags.2?string"},{name:"username",type:"flags.3?string"},{name:"phone",type:"flags.4?string"},{name:"photo",type:"flags.5?UserProfilePhoto"},{name:"status",type:"flags.6?UserStatus"},{name:"bot_info_version",type:"flags.14?int"},{name:"restriction_reason",type:"flags.18?Vector"},{name:"bot_inline_placeholder",type:"flags.19?string"},{name:"lang_code",type:"flags.22?string"}],type:"User"},{id:-1032140601,predicate:"botCommand",params:[{name:"command",type:"string"},{name:"description",type:"string"}],type:"BotCommand"},{id:-1729618630,predicate:"botInfo",params:[{name:"user_id",type:"int"},{name:"description",type:"string"},{name:"commands",type:"Vector"}],type:"BotInfo"},{id:-1560655744,predicate:"keyboardButton",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:2002815875,predicate:"keyboardButtonRow",params:[{name:"buttons",type:"Vector"}],type:"KeyboardButtonRow"},{id:-1606526075,predicate:"replyKeyboardHide",params:[{name:"flags",type:"#"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:-2035021048,predicate:"replyKeyboardForceReply",params:[{name:"flags",type:"#"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-2049074735,predicate:"replyKeyboardMarkup",params:[{name:"flags",type:"#"},{name:"resize",type:"flags.0?true"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"rows",type:"Vector"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:2072935910,predicate:"inputPeerUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-668391402,predicate:"inputUser",params:[{name:"user_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputUser"},{id:-1148011883,predicate:"messageEntityUnknown",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-100378723,predicate:"messageEntityMention",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1868782349,predicate:"messageEntityHashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1827637959,predicate:"messageEntityBotCommand",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1859134776,predicate:"messageEntityUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1692693954,predicate:"messageEntityEmail",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1117713463,predicate:"messageEntityBold",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-2106619040,predicate:"messageEntityItalic",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:681706865,predicate:"messageEntityCode",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1938967520,predicate:"messageEntityPre",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"language",type:"string"}],type:"MessageEntity"},{id:1990644519,predicate:"messageEntityTextUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"url",type:"string"}],type:"MessageEntity"},{id:-1877614335,predicate:"updateShortSentMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"media",type:"flags.9?MessageMedia"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:-292807034,predicate:"inputChannelEmpty",params:[],type:"InputChannel"},{id:-1343524562,predicate:"inputChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputChannel"},{id:-1109531342,predicate:"peerChannel",params:[{name:"channel_id",type:"int"}],type:"Peer"},{id:548253432,predicate:"inputPeerChannel",params:[{name:"channel_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-753232354,predicate:"channel",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"broadcast",type:"flags.5?true"},{name:"verified",type:"flags.7?true"},{name:"megagroup",type:"flags.8?true"},{name:"restricted",type:"flags.9?true"},{name:"signatures",type:"flags.11?true"},{name:"min",type:"flags.12?true"},{name:"scam",type:"flags.19?true"},{name:"has_link",type:"flags.20?true"},{name:"has_geo",type:"flags.21?true"},{name:"slowmode_enabled",type:"flags.22?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"fake",type:"flags.25?true"},{name:"gigagroup",type:"flags.26?true"},{name:"id",type:"int"},{name:"access_hash",type:"flags.13?long"},{name:"title",type:"string"},{name:"username",type:"flags.6?string"},{name:"photo",type:"ChatPhoto"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"restriction_reason",type:"flags.9?Vector"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"banned_rights",type:"flags.15?ChatBannedRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"},{name:"participants_count",type:"flags.17?int"}],type:"Chat"},{id:681420594,predicate:"channelForbidden",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.5?true"},{name:"megagroup",type:"flags.8?true"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"until_date",type:"flags.16?int"}],type:"Chat"},{id:2131196633,predicate:"contacts.resolvedPeer",params:[{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ResolvedPeer"},{id:1418477459,predicate:"channelFull",params:[{name:"flags",type:"#"},{name:"can_view_participants",type:"flags.3?true"},{name:"can_set_username",type:"flags.6?true"},{name:"can_set_stickers",type:"flags.7?true"},{name:"hidden_prehistory",type:"flags.10?true"},{name:"can_set_location",type:"flags.16?true"},{name:"has_scheduled",type:"flags.19?true"},{name:"can_view_stats",type:"flags.20?true"},{name:"blocked",type:"flags.22?true"},{name:"id",type:"int"},{name:"about",type:"string"},{name:"participants_count",type:"flags.0?int"},{name:"admins_count",type:"flags.1?int"},{name:"kicked_count",type:"flags.2?int"},{name:"banned_count",type:"flags.2?int"},{name:"online_count",type:"flags.13?int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"chat_photo",type:"Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.23?ExportedChatInvite"},{name:"bot_info",type:"Vector"},{name:"migrated_from_chat_id",type:"flags.4?int"},{name:"migrated_from_max_id",type:"flags.4?int"},{name:"pinned_msg_id",type:"flags.5?int"},{name:"stickerset",type:"flags.8?StickerSet"},{name:"available_min_id",type:"flags.9?int"},{name:"folder_id",type:"flags.11?int"},{name:"linked_chat_id",type:"flags.14?int"},{name:"location",type:"flags.15?ChannelLocation"},{name:"slowmode_seconds",type:"flags.17?int"},{name:"slowmode_next_send_date",type:"flags.18?int"},{name:"stats_dc",type:"flags.12?int"},{name:"pts",type:"int"},{name:"call",type:"flags.21?InputGroupCall"},{name:"ttl_period",type:"flags.24?int"},{name:"pending_suggestions",type:"flags.25?Vector"},{name:"groupcall_default_join_as",type:"flags.26?Peer"}],type:"ChatFull"},{id:182649427,predicate:"messageRange",params:[{name:"min_id",type:"int"},{name:"max_id",type:"int"}],type:"MessageRange"},{id:1682413576,predicate:"messages.channelMessages",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"pts",type:"int"},{name:"count",type:"int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:-1781355374,predicate:"messageActionChannelCreate",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:-352032773,predicate:"updateChannelTooLong",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"pts",type:"flags.0?int"}],type:"Update"},{id:-1227598250,predicate:"updateChannel",params:[{name:"channel_id",type:"int"}],type:"Update"},{id:1656358105,predicate:"updateNewChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:856380452,predicate:"updateReadChannelInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"channel_id",type:"int"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"}],type:"Update"},{id:-1015733815,predicate:"updateDeleteChannelMessages",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1734268085,predicate:"updateChannelMessageViews",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"},{name:"views",type:"int"}],type:"Update"},{id:1041346555,predicate:"updates.channelDifferenceEmpty",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"}],type:"updates.ChannelDifference"},{id:-1531132162,predicate:"updates.channelDifferenceTooLong",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"timeout",type:"flags.1?int"},{name:"dialog",type:"Dialog"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:543450958,predicate:"updates.channelDifference",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"},{name:"new_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:-1798033689,predicate:"channelMessagesFilterEmpty",params:[],type:"ChannelMessagesFilter"},{id:-847783593,predicate:"channelMessagesFilter",params:[{name:"flags",type:"#"},{name:"exclude_new_messages",type:"flags.1?true"},{name:"ranges",type:"Vector"}],type:"ChannelMessagesFilter"},{id:367766557,predicate:"channelParticipant",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:-1557620115,predicate:"channelParticipantSelf",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:1149094475,predicate:"channelParticipantCreator",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.0?string"}],type:"ChannelParticipant"},{id:-566281095,predicate:"channelParticipantsRecent",params:[],type:"ChannelParticipantsFilter"},{id:-1268741783,predicate:"channelParticipantsAdmins",params:[],type:"ChannelParticipantsFilter"},{id:-1548400251,predicate:"channelParticipantsKicked",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-1699676497,predicate:"channels.channelParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipants"},{id:-541588713,predicate:"channels.channelParticipant",params:[{name:"participant",type:"ChannelParticipant"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipant"},{id:-636267638,predicate:"chatParticipantCreator",params:[{name:"user_id",type:"int"}],type:"ChatParticipant"},{id:-489233354,predicate:"chatParticipantAdmin",params:[{name:"user_id",type:"int"},{name:"inviter_id",type:"int"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-1232070311,predicate:"updateChatParticipantAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"int"},{name:"is_admin",type:"Bool"},{name:"version",type:"int"}],type:"Update"},{id:1371385889,predicate:"messageActionChatMigrateTo",params:[{name:"channel_id",type:"int"}],type:"MessageAction"},{id:-1336546578,predicate:"messageActionChannelMigrateFrom",params:[{name:"title",type:"string"},{name:"chat_id",type:"int"}],type:"MessageAction"},{id:-1328445861,predicate:"channelParticipantsBots",params:[],type:"ChannelParticipantsFilter"},{id:2013922064,predicate:"help.termsOfService",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"id",type:"DataJSON"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"min_age_confirm",type:"flags.1?int"}],type:"help.TermsOfService"},{id:1753886890,predicate:"updateNewStickerSet",params:[{name:"stickerset",type:"messages.StickerSet"}],type:"Update"},{id:196268545,predicate:"updateStickerSetsOrder",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Update"},{id:1135492588,predicate:"updateStickerSets",params:[],type:"Update"},{id:-402498398,predicate:"messages.savedGifsNotModified",params:[],type:"messages.SavedGifs"},{id:772213157,predicate:"messages.savedGifs",params:[{name:"hash",type:"int"},{name:"gifs",type:"Vector"}],type:"messages.SavedGifs"},{id:-1821035490,predicate:"updateSavedGifs",params:[],type:"Update"},{id:864077702,predicate:"inputBotInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1036876423,predicate:"inputBotInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-2000710887,predicate:"inputBotInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?InputWebDocument"},{name:"content",type:"flags.5?InputWebDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1984755728,predicate:"botInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1937807902,predicate:"botInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:295067450,predicate:"botInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?WebDocument"},{name:"content",type:"flags.5?WebDocument"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1803769784,predicate:"messages.botResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"query_id",type:"long"},{name:"next_offset",type:"flags.1?string"},{name:"switch_pm",type:"flags.2?InlineBotSwitchPM"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"users",type:"Vector"}],type:"messages.BotResults"},{id:1059076315,predicate:"updateBotInlineQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"peer_type",type:"flags.1?InlineQueryPeerType"},{name:"offset",type:"string"}],type:"Update"},{id:239663460,predicate:"updateBotInlineSend",params:[{name:"flags",type:"#"},{name:"user_id",type:"int"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"id",type:"string"},{name:"msg_id",type:"flags.1?InputBotInlineMessageID"}],type:"Update"},{id:1358283666,predicate:"inputMessagesFilterVoice",params:[],type:"MessagesFilter"},{id:928101534,predicate:"inputMessagesFilterMusic",params:[],type:"MessagesFilter"},{id:-1107622874,predicate:"inputPrivacyKeyChatInvite",params:[],type:"InputPrivacyKey"},{id:1343122938,predicate:"privacyKeyChatInvite",params:[],type:"PrivacyKey"},{id:1571494644,predicate:"exportedMessageLink",params:[{name:"link",type:"string"},{name:"html",type:"string"}],type:"ExportedMessageLink"},{id:1601666510,predicate:"messageFwdHeader",params:[{name:"flags",type:"#"},{name:"imported",type:"flags.7?true"},{name:"from_id",type:"flags.0?Peer"},{name:"from_name",type:"flags.5?string"},{name:"date",type:"int"},{name:"channel_post",type:"flags.2?int"},{name:"post_author",type:"flags.3?string"},{name:"saved_from_peer",type:"flags.4?Peer"},{name:"saved_from_msg_id",type:"flags.4?int"},{name:"psa_type",type:"flags.6?string"}],type:"MessageFwdHeader"},{id:457133559,predicate:"updateEditChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1799538451,predicate:"messageActionPinMessage",params:[],type:"MessageAction"},{id:1923290508,predicate:"auth.codeTypeSms",params:[],type:"auth.CodeType"},{id:1948046307,predicate:"auth.codeTypeCall",params:[],type:"auth.CodeType"},{id:577556219,predicate:"auth.codeTypeFlashCall",params:[],type:"auth.CodeType"},{id:1035688326,predicate:"auth.sentCodeTypeApp",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1073693790,predicate:"auth.sentCodeTypeSms",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1398007207,predicate:"auth.sentCodeTypeCall",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1425815847,predicate:"auth.sentCodeTypeFlashCall",params:[{name:"pattern",type:"string"}],type:"auth.SentCodeType"},{id:629866245,predicate:"keyboardButtonUrl",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:901503851,predicate:"keyboardButtonCallback",params:[{name:"flags",type:"#"},{name:"requires_password",type:"flags.0?true"},{name:"text",type:"string"},{name:"data",type:"bytes"}],type:"KeyboardButton"},{id:-1318425559,predicate:"keyboardButtonRequestPhone",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-59151553,predicate:"keyboardButtonRequestGeoLocation",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:90744648,predicate:"keyboardButtonSwitchInline",params:[{name:"flags",type:"#"},{name:"same_peer",type:"flags.0?true"},{name:"text",type:"string"},{name:"query",type:"string"}],type:"KeyboardButton"},{id:1218642516,predicate:"replyInlineMarkup",params:[{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:911761060,predicate:"messages.botCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"has_url",type:"flags.3?true"},{name:"native_ui",type:"flags.4?true"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"messages.BotCallbackAnswer"},{id:-415938591,predicate:"updateBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:649453030,predicate:"messages.messageEditData",params:[{name:"flags",type:"#"},{name:"caption",type:"flags.0?true"}],type:"messages.MessageEditData"},{id:-469536605,predicate:"updateEditMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1768777083,predicate:"inputBotInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1098628881,predicate:"inputBotInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-1494368259,predicate:"inputBotInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:85477117,predicate:"botInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1970903652,predicate:"botInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:416402882,predicate:"botInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1462213465,predicate:"inputBotInlineResultPhoto",params:[{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"InputPhoto"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:-459324,predicate:"inputBotInlineResultDocument",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"document",type:"InputDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:400266251,predicate:"botInlineMediaResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"flags.0?Photo"},{name:"document",type:"flags.1?Document"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1995686519,predicate:"inputBotInlineMessageID",params:[{name:"dc_id",type:"int"},{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:-103646630,predicate:"updateInlineBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"msg_id",type:"InputBotInlineMessageID"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:1008755359,predicate:"inlineBotSwitchPM",params:[{name:"text",type:"string"},{name:"start_param",type:"string"}],type:"InlineBotSwitchPM"},{id:863093588,predicate:"messages.peerDialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"messages.PeerDialogs"},{id:-305282981,predicate:"topPeer",params:[{name:"peer",type:"Peer"},{name:"rating",type:"double"}],type:"TopPeer"},{id:-1419371685,predicate:"topPeerCategoryBotsPM",params:[],type:"TopPeerCategory"},{id:344356834,predicate:"topPeerCategoryBotsInline",params:[],type:"TopPeerCategory"},{id:104314861,predicate:"topPeerCategoryCorrespondents",params:[],type:"TopPeerCategory"},{id:-1122524854,predicate:"topPeerCategoryGroups",params:[],type:"TopPeerCategory"},{id:371037736,predicate:"topPeerCategoryChannels",params:[],type:"TopPeerCategory"},{id:-75283823,predicate:"topPeerCategoryPeers",params:[{name:"category",type:"TopPeerCategory"},{name:"count",type:"int"},{name:"peers",type:"Vector"}],type:"TopPeerCategoryPeers"},{id:-567906571,predicate:"contacts.topPeersNotModified",params:[],type:"contacts.TopPeers"},{id:1891070632,predicate:"contacts.topPeers",params:[{name:"categories",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.TopPeers"},{id:892193368,predicate:"messageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"int"}],type:"MessageEntity"},{id:546203849,predicate:"inputMessageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"InputUser"}],type:"MessageEntity"},{id:975236280,predicate:"inputMessagesFilterChatPhotos",params:[],type:"MessagesFilter"},{id:634833351,predicate:"updateReadChannelOutbox",params:[{name:"channel_id",type:"int"},{name:"max_id",type:"int"}],type:"Update"},{id:-299124375,predicate:"updateDraftMessage",params:[{name:"peer",type:"Peer"},{name:"draft",type:"DraftMessage"}],type:"Update"},{id:453805082,predicate:"draftMessageEmpty",params:[{name:"flags",type:"#"},{name:"date",type:"flags.0?int"}],type:"DraftMessage"},{id:-40996577,predicate:"draftMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"},{name:"date",type:"int"}],type:"DraftMessage"},{id:-1615153660,predicate:"messageActionHistoryClear",params:[],type:"MessageAction"},{id:-958657434,predicate:"messages.featuredStickersNotModified",params:[{name:"count",type:"int"}],type:"messages.FeaturedStickers"},{id:-1230257343,predicate:"messages.featuredStickers",params:[{name:"hash",type:"int"},{name:"count",type:"int"},{name:"sets",type:"Vector"},{name:"unread",type:"Vector"}],type:"messages.FeaturedStickers"},{id:1461528386,predicate:"updateReadFeaturedStickers",params:[],type:"Update"},{id:186120336,predicate:"messages.recentStickersNotModified",params:[],type:"messages.RecentStickers"},{id:586395571,predicate:"messages.recentStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"},{name:"dates",type:"Vector"}],type:"messages.RecentStickers"},{id:-1706939360,predicate:"updateRecentStickers",params:[],type:"Update"},{id:1338747336,predicate:"messages.archivedStickers",params:[{name:"count",type:"int"},{name:"sets",type:"Vector"}],type:"messages.ArchivedStickers"},{id:946083368,predicate:"messages.stickerSetInstallResultSuccess",params:[],type:"messages.StickerSetInstallResult"},{id:904138920,predicate:"messages.stickerSetInstallResultArchive",params:[{name:"sets",type:"Vector"}],type:"messages.StickerSetInstallResult"},{id:1678812626,predicate:"stickerSetCovered",params:[{name:"set",type:"StickerSet"},{name:"cover",type:"Document"}],type:"StickerSetCovered"},{id:-1574314746,predicate:"updateConfig",params:[],type:"Update"},{id:861169551,predicate:"updatePtsChanged",params:[],type:"Update"},{id:-440664550,predicate:"inputMediaPhotoExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-78455655,predicate:"inputMediaDocumentExternal",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:872932635,predicate:"stickerSetMultiCovered",params:[{name:"set",type:"StickerSet"},{name:"covers",type:"Vector"}],type:"StickerSetCovered"},{id:-1361650766,predicate:"maskCoords",params:[{name:"n",type:"int"},{name:"x",type:"double"},{name:"y",type:"double"},{name:"zoom",type:"double"}],type:"MaskCoords"},{id:-1744710921,predicate:"documentAttributeHasStickers",params:[],type:"DocumentAttribute"},{id:1251549527,predicate:"inputStickeredMediaPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputStickeredMedia"},{id:70813275,predicate:"inputStickeredMediaDocument",params:[{name:"id",type:"InputDocument"}],type:"InputStickeredMedia"},{id:-1107729093,predicate:"game",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"short_name",type:"string"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"flags.0?Document"}],type:"Game"},{id:1336154098,predicate:"inputBotInlineResultGame",params:[{name:"id",type:"string"},{name:"short_name",type:"string"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1262639204,predicate:"inputBotInlineMessageGame",params:[{name:"flags",type:"#"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-38694904,predicate:"messageMediaGame",params:[{name:"game",type:"Game"}],type:"MessageMedia"},{id:-750828557,predicate:"inputMediaGame",params:[{name:"id",type:"InputGame"}],type:"InputMedia"},{id:53231223,predicate:"inputGameID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGame"},{id:-1020139510,predicate:"inputGameShortName",params:[{name:"bot_id",type:"InputUser"},{name:"short_name",type:"string"}],type:"InputGame"},{id:1358175439,predicate:"keyboardButtonGame",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1834538890,predicate:"messageActionGameScore",params:[{name:"game_id",type:"long"},{name:"score",type:"int"}],type:"MessageAction"},{id:1493171408,predicate:"highScore",params:[{name:"pos",type:"int"},{name:"user_id",type:"int"},{name:"score",type:"int"}],type:"HighScore"},{id:-1707344487,predicate:"messages.highScores",params:[{name:"scores",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.HighScores"},{id:1258196845,predicate:"updates.differenceTooLong",params:[{name:"pts",type:"int"}],type:"updates.Difference"},{id:1081547008,predicate:"updateChannelWebPage",params:[{name:"channel_id",type:"int"},{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1663561404,predicate:"messages.chatsSlice",params:[{name:"count",type:"int"},{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-599948721,predicate:"textEmpty",params:[],type:"RichText"},{id:1950782688,predicate:"textPlain",params:[{name:"text",type:"string"}],type:"RichText"},{id:1730456516,predicate:"textBold",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-653089380,predicate:"textItalic",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1054465340,predicate:"textUnderline",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1678197867,predicate:"textStrike",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1816074681,predicate:"textFixed",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1009288385,predicate:"textUrl",params:[{name:"text",type:"RichText"},{name:"url",type:"string"},{name:"webpage_id",type:"long"}],type:"RichText"},{id:-564523562,predicate:"textEmail",params:[{name:"text",type:"RichText"},{name:"email",type:"string"}],type:"RichText"},{id:2120376535,predicate:"textConcat",params:[{name:"texts",type:"Vector"}],type:"RichText"},{id:324435594,predicate:"pageBlockUnsupported",params:[],type:"PageBlock"},{id:1890305021,predicate:"pageBlockTitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1879401953,predicate:"pageBlockSubtitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1162877472,predicate:"pageBlockAuthorDate",params:[{name:"author",type:"RichText"},{name:"published_date",type:"int"}],type:"PageBlock"},{id:-1076861716,predicate:"pageBlockHeader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-248793375,predicate:"pageBlockSubheader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:1182402406,predicate:"pageBlockParagraph",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1066346178,predicate:"pageBlockPreformatted",params:[{name:"text",type:"RichText"},{name:"language",type:"string"}],type:"PageBlock"},{id:1216809369,predicate:"pageBlockFooter",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-618614392,predicate:"pageBlockDivider",params:[],type:"PageBlock"},{id:-837994576,predicate:"pageBlockAnchor",params:[{name:"name",type:"string"}],type:"PageBlock"},{id:-454524911,predicate:"pageBlockList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:641563686,predicate:"pageBlockBlockquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:1329878739,predicate:"pageBlockPullquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:391759200,predicate:"pageBlockPhoto",params:[{name:"flags",type:"#"},{name:"photo_id",type:"long"},{name:"caption",type:"PageCaption"},{name:"url",type:"flags.0?string"},{name:"webpage_id",type:"flags.0?long"}],type:"PageBlock"},{id:2089805750,predicate:"pageBlockVideo",params:[{name:"flags",type:"#"},{name:"autoplay",type:"flags.0?true"},{name:"loop",type:"flags.1?true"},{name:"video_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:972174080,predicate:"pageBlockCover",params:[{name:"cover",type:"PageBlock"}],type:"PageBlock"},{id:-1468953147,predicate:"pageBlockEmbed",params:[{name:"flags",type:"#"},{name:"full_width",type:"flags.0?true"},{name:"allow_scrolling",type:"flags.3?true"},{name:"url",type:"flags.1?string"},{name:"html",type:"flags.2?string"},{name:"poster_photo_id",type:"flags.4?long"},{name:"w",type:"flags.5?int"},{name:"h",type:"flags.5?int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-229005301,predicate:"pageBlockEmbedPost",params:[{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"author_photo_id",type:"long"},{name:"author",type:"string"},{name:"date",type:"int"},{name:"blocks",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1705048653,predicate:"pageBlockCollage",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:52401552,predicate:"pageBlockSlideshow",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1930545681,predicate:"webPageNotModified",params:[{name:"flags",type:"#"},{name:"cached_page_views",type:"flags.0?int"}],type:"WebPage"},{id:-88417185,predicate:"inputPrivacyKeyPhoneCall",params:[],type:"InputPrivacyKey"},{id:1030105979,predicate:"privacyKeyPhoneCall",params:[],type:"PrivacyKey"},{id:-580219064,predicate:"sendMessageGamePlayAction",params:[],type:"SendMessageAction"},{id:-2048646399,predicate:"phoneCallDiscardReasonMissed",params:[],type:"PhoneCallDiscardReason"},{id:-527056480,predicate:"phoneCallDiscardReasonDisconnect",params:[],type:"PhoneCallDiscardReason"},{id:1471006352,predicate:"phoneCallDiscardReasonHangup",params:[],type:"PhoneCallDiscardReason"},{id:-84416311,predicate:"phoneCallDiscardReasonBusy",params:[],type:"PhoneCallDiscardReason"},{id:1852826908,predicate:"updateDialogPinned",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-99664734,predicate:"updatePinnedDialogs",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.1?int"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:2104790276,predicate:"dataJSON",params:[{name:"data",type:"string"}],type:"DataJSON"},{id:-2095595325,predicate:"updateBotWebhookJSON",params:[{name:"data",type:"DataJSON"}],type:"Update"},{id:-1684914010,predicate:"updateBotWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"},{name:"timeout",type:"int"}],type:"Update"},{id:-886477832,predicate:"labeledPrice",params:[{name:"label",type:"string"},{name:"amount",type:"long"}],type:"LabeledPrice"},{id:215516896,predicate:"invoice",params:[{name:"flags",type:"#"},{name:"test",type:"flags.0?true"},{name:"name_requested",type:"flags.1?true"},{name:"phone_requested",type:"flags.2?true"},{name:"email_requested",type:"flags.3?true"},{name:"shipping_address_requested",type:"flags.4?true"},{name:"flexible",type:"flags.5?true"},{name:"phone_to_provider",type:"flags.6?true"},{name:"email_to_provider",type:"flags.7?true"},{name:"currency",type:"string"},{name:"prices",type:"Vector"},{name:"max_tip_amount",type:"flags.8?long"},{name:"suggested_tip_amounts",type:"flags.8?Vector"}],type:"Invoice"},{id:-646342540,predicate:"inputMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"start_param",type:"flags.1?string"}],type:"InputMedia"},{id:-368917890,predicate:"paymentCharge",params:[{name:"id",type:"string"},{name:"provider_charge_id",type:"string"}],type:"PaymentCharge"},{id:-1892568281,predicate:"messageActionPaymentSentMe",params:[{name:"flags",type:"#"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"charge",type:"PaymentCharge"}],type:"MessageAction"},{id:-2074799289,predicate:"messageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"receipt_msg_id",type:"flags.2?int"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"start_param",type:"string"}],type:"MessageMedia"},{id:512535275,predicate:"postAddress",params:[{name:"street_line1",type:"string"},{name:"street_line2",type:"string"},{name:"city",type:"string"},{name:"state",type:"string"},{name:"country_iso2",type:"string"},{name:"post_code",type:"string"}],type:"PostAddress"},{id:-1868808300,predicate:"paymentRequestedInfo",params:[{name:"flags",type:"#"},{name:"name",type:"flags.0?string"},{name:"phone",type:"flags.1?string"},{name:"email",type:"flags.2?string"},{name:"shipping_address",type:"flags.3?PostAddress"}],type:"PaymentRequestedInfo"},{id:-1344716869,predicate:"keyboardButtonBuy",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:1080663248,predicate:"messageActionPaymentSent",params:[{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"MessageAction"},{id:-842892769,predicate:"paymentSavedCredentialsCard",params:[{name:"id",type:"string"},{name:"title",type:"string"}],type:"PaymentSavedCredentials"},{id:475467473,predicate:"webDocument",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:-1678949555,predicate:"inputWebDocument",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"InputWebDocument"},{id:-1036396922,predicate:"inputWebFileLocation",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"}],type:"InputWebFileLocation"},{id:568808380,predicate:"upload.webFile",params:[{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"file_type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.WebFile"},{id:-1928649707,predicate:"payments.paymentForm",params:[{name:"flags",type:"#"},{name:"can_save_credentials",type:"flags.2?true"},{name:"password_missing",type:"flags.3?true"},{name:"form_id",type:"long"},{name:"bot_id",type:"int"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"int"},{name:"url",type:"string"},{name:"native_provider",type:"flags.4?string"},{name:"native_params",type:"flags.4?DataJSON"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"},{name:"saved_credentials",type:"flags.1?PaymentSavedCredentials"},{name:"users",type:"Vector"}],type:"payments.PaymentForm"},{id:-784000893,predicate:"payments.validatedRequestedInfo",params:[{name:"flags",type:"#"},{name:"id",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"payments.ValidatedRequestedInfo"},{id:1314881805,predicate:"payments.paymentResult",params:[{name:"updates",type:"Updates"}],type:"payments.PaymentResult"},{id:280319440,predicate:"payments.paymentReceipt",params:[{name:"flags",type:"#"},{name:"date",type:"int"},{name:"bot_id",type:"int"},{name:"provider_id",type:"int"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.2?WebDocument"},{name:"invoice",type:"Invoice"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping",type:"flags.1?ShippingOption"},{name:"tip_amount",type:"flags.3?long"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"credentials_title",type:"string"},{name:"users",type:"Vector"}],type:"payments.PaymentReceipt"},{id:-74456004,predicate:"payments.savedInfo",params:[{name:"flags",type:"#"},{name:"has_saved_credentials",type:"flags.1?true"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"}],type:"payments.SavedInfo"},{id:-1056001329,predicate:"inputPaymentCredentialsSaved",params:[{name:"id",type:"string"},{name:"tmp_password",type:"bytes"}],type:"InputPaymentCredentials"},{id:873977640,predicate:"inputPaymentCredentials",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-614138572,predicate:"account.tmpPassword",params:[{name:"tmp_password",type:"bytes"},{name:"valid_until",type:"int"}],type:"account.TmpPassword"},{id:-1239335713,predicate:"shippingOption",params:[{name:"id",type:"string"},{name:"title",type:"string"},{name:"prices",type:"Vector"}],type:"ShippingOption"},{id:-523384512,predicate:"updateBotShippingQuery",params:[{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"shipping_address",type:"PostAddress"}],type:"Update"},{id:1563376297,predicate:"updateBotPrecheckoutQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"int"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"Update"},{id:-6249322,predicate:"inputStickerSetItem",params:[{name:"flags",type:"#"},{name:"document",type:"InputDocument"},{name:"emoji",type:"string"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"InputStickerSetItem"},{id:-1425052898,predicate:"updatePhoneCall",params:[{name:"phone_call",type:"PhoneCall"}],type:"Update"},{id:506920429,predicate:"inputPhoneCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPhoneCall"},{id:1399245077,predicate:"phoneCallEmpty",params:[{name:"id",type:"long"}],type:"PhoneCall"},{id:462375633,predicate:"phoneCallWaiting",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"protocol",type:"PhoneCallProtocol"},{name:"receive_date",type:"flags.0?int"}],type:"PhoneCall"},{id:-2014659757,predicate:"phoneCallRequested",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-1719909046,predicate:"phoneCallAccepted",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-2025673089,predicate:"phoneCall",params:[{name:"flags",type:"#"},{name:"p2p_allowed",type:"flags.5?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"int"},{name:"participant_id",type:"int"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"connections",type:"Vector"},{name:"start_date",type:"int"}],type:"PhoneCall"},{id:1355435489,predicate:"phoneCallDiscarded",params:[{name:"flags",type:"#"},{name:"need_rating",type:"flags.2?true"},{name:"need_debug",type:"flags.3?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"PhoneCall"},{id:-1655957568,predicate:"phoneConnection",params:[{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"peer_tag",type:"bytes"}],type:"PhoneConnection"},{id:-58224696,predicate:"phoneCallProtocol",params:[{name:"flags",type:"#"},{name:"udp_p2p",type:"flags.0?true"},{name:"udp_reflector",type:"flags.1?true"},{name:"min_layer",type:"int"},{name:"max_layer",type:"int"},{name:"library_versions",type:"Vector"}],type:"PhoneCallProtocol"},{id:-326966976,predicate:"phone.phoneCall",params:[{name:"phone_call",type:"PhoneCall"},{name:"users",type:"Vector"}],type:"phone.PhoneCall"},{id:-2134272152,predicate:"inputMessagesFilterPhoneCalls",params:[{name:"flags",type:"#"},{name:"missed",type:"flags.0?true"}],type:"MessagesFilter"},{id:-2132731265,predicate:"messageActionPhoneCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.2?true"},{name:"call_id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"MessageAction"},{id:2054952868,predicate:"inputMessagesFilterRoundVoice",params:[],type:"MessagesFilter"},{id:-1253451181,predicate:"inputMessagesFilterRoundVideo",params:[],type:"MessagesFilter"},{id:-1997373508,predicate:"sendMessageRecordRoundAction",params:[],type:"SendMessageAction"},{id:608050278,predicate:"sendMessageUploadRoundAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-242427324,predicate:"upload.fileCdnRedirect",params:[{name:"dc_id",type:"int"},{name:"file_token",type:"bytes"},{name:"encryption_key",type:"bytes"},{name:"encryption_iv",type:"bytes"},{name:"file_hashes",type:"Vector"}],type:"upload.File"},{id:-290921362,predicate:"upload.cdnFileReuploadNeeded",params:[{name:"request_token",type:"bytes"}],type:"upload.CdnFile"},{id:-1449145777,predicate:"upload.cdnFile",params:[{name:"bytes",type:"bytes"}],type:"upload.CdnFile"},{id:-914167110,predicate:"cdnPublicKey",params:[{name:"dc_id",type:"int"},{name:"public_key",type:"string"}],type:"CdnPublicKey"},{id:1462101002,predicate:"cdnConfig",params:[{name:"public_keys",type:"Vector"}],type:"CdnConfig"},{id:-283684427,predicate:"pageBlockChannel",params:[{name:"channel",type:"Chat"}],type:"PageBlock"},{id:-892239370,predicate:"langPackString",params:[{name:"key",type:"string"},{name:"value",type:"string"}],type:"LangPackString"},{id:1816636575,predicate:"langPackStringPluralized",params:[{name:"flags",type:"#"},{name:"key",type:"string"},{name:"zero_value",type:"flags.0?string"},{name:"one_value",type:"flags.1?string"},{name:"two_value",type:"flags.2?string"},{name:"few_value",type:"flags.3?string"},{name:"many_value",type:"flags.4?string"},{name:"other_value",type:"string"}],type:"LangPackString"},{id:695856818,predicate:"langPackStringDeleted",params:[{name:"key",type:"string"}],type:"LangPackString"},{id:-209337866,predicate:"langPackDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"strings",type:"Vector"}],type:"LangPackDifference"},{id:-288727837,predicate:"langPackLanguage",params:[{name:"flags",type:"#"},{name:"official",type:"flags.0?true"},{name:"rtl",type:"flags.2?true"},{name:"beta",type:"flags.3?true"},{name:"name",type:"string"},{name:"native_name",type:"string"},{name:"lang_code",type:"string"},{name:"base_lang_code",type:"flags.1?string"},{name:"plural_code",type:"string"},{name:"strings_count",type:"int"},{name:"translated_count",type:"int"},{name:"translations_url",type:"string"}],type:"LangPackLanguage"},{id:1180041828,predicate:"updateLangPackTooLong",params:[{name:"lang_code",type:"string"}],type:"Update"},{id:1442983757,predicate:"updateLangPack",params:[{name:"difference",type:"LangPackDifference"}],type:"Update"},{id:-859915345,predicate:"channelParticipantAdmin",params:[{name:"flags",type:"#"},{name:"can_edit",type:"flags.0?true"},{name:"self",type:"flags.1?true"},{name:"user_id",type:"int"},{name:"inviter_id",type:"flags.1?int"},{name:"promoted_by",type:"int"},{name:"date",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.2?string"}],type:"ChannelParticipant"},{id:1352785878,predicate:"channelParticipantBanned",params:[{name:"flags",type:"#"},{name:"left",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"kicked_by",type:"int"},{name:"date",type:"int"},{name:"banned_rights",type:"ChatBannedRights"}],type:"ChannelParticipant"},{id:338142689,predicate:"channelParticipantsBanned",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:106343499,predicate:"channelParticipantsSearch",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-421545947,predicate:"channelAdminLogEventActionChangeTitle",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1427671598,predicate:"channelAdminLogEventActionChangeAbout",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1783299128,predicate:"channelAdminLogEventActionChangeUsername",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1129042607,predicate:"channelAdminLogEventActionChangePhoto",params:[{name:"prev_photo",type:"Photo"},{name:"new_photo",type:"Photo"}],type:"ChannelAdminLogEventAction"},{id:460916654,predicate:"channelAdminLogEventActionToggleInvites",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:648939889,predicate:"channelAdminLogEventActionToggleSignatures",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-370660328,predicate:"channelAdminLogEventActionUpdatePinned",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1889215493,predicate:"channelAdminLogEventActionEditMessage",params:[{name:"prev_message",type:"Message"},{name:"new_message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1121994683,predicate:"channelAdminLogEventActionDeleteMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:405815507,predicate:"channelAdminLogEventActionParticipantJoin",params:[],type:"ChannelAdminLogEventAction"},{id:-124291086,predicate:"channelAdminLogEventActionParticipantLeave",params:[],type:"ChannelAdminLogEventAction"},{id:-484690728,predicate:"channelAdminLogEventActionParticipantInvite",params:[{name:"participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-422036098,predicate:"channelAdminLogEventActionParticipantToggleBan",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-714643696,predicate:"channelAdminLogEventActionParticipantToggleAdmin",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:995769920,predicate:"channelAdminLogEvent",params:[{name:"id",type:"long"},{name:"date",type:"int"},{name:"user_id",type:"int"},{name:"action",type:"ChannelAdminLogEventAction"}],type:"ChannelAdminLogEvent"},{id:-309659827,predicate:"channels.adminLogResults",params:[{name:"events",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.AdminLogResults"},{id:-368018716,predicate:"channelAdminLogEventsFilter",params:[{name:"flags",type:"#"},{name:"join",type:"flags.0?true"},{name:"leave",type:"flags.1?true"},{name:"invite",type:"flags.2?true"},{name:"ban",type:"flags.3?true"},{name:"unban",type:"flags.4?true"},{name:"kick",type:"flags.5?true"},{name:"unkick",type:"flags.6?true"},{name:"promote",type:"flags.7?true"},{name:"demote",type:"flags.8?true"},{name:"info",type:"flags.9?true"},{name:"settings",type:"flags.10?true"},{name:"pinned",type:"flags.11?true"},{name:"edit",type:"flags.12?true"},{name:"delete",type:"flags.13?true"},{name:"group_call",type:"flags.14?true"},{name:"invites",type:"flags.15?true"}],type:"ChannelAdminLogEventsFilter"},{id:511092620,predicate:"topPeerCategoryPhoneCalls",params:[],type:"TopPeerCategory"},{id:-2143067670,predicate:"pageBlockAudio",params:[{name:"audio_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1558266229,predicate:"popularContact",params:[{name:"client_id",type:"long"},{name:"importers",type:"int"}],type:"PopularContact"},{id:1200788123,predicate:"messageActionScreenshotTaken",params:[],type:"MessageAction"},{id:-1634752813,predicate:"messages.favedStickersNotModified",params:[],type:"messages.FavedStickers"},{id:-209768682,predicate:"messages.favedStickers",params:[{name:"hash",type:"int"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"}],type:"messages.FavedStickers"},{id:-451831443,predicate:"updateFavedStickers",params:[],type:"Update"},{id:-1987495099,predicate:"updateChannelReadMessagesContents",params:[{name:"channel_id",type:"int"},{name:"messages",type:"Vector"}],type:"Update"},{id:-1040652646,predicate:"inputMessagesFilterMyMentions",params:[],type:"MessagesFilter"},{id:1887741886,predicate:"updateContactsReset",params:[],type:"Update"},{id:-1312568665,predicate:"channelAdminLogEventActionChangeStickerSet",params:[{name:"prev_stickerset",type:"InputStickerSet"},{name:"new_stickerset",type:"InputStickerSet"}],type:"ChannelAdminLogEventAction"},{id:-85549226,predicate:"messageActionCustomAction",params:[{name:"message",type:"string"}],type:"MessageAction"},{id:178373535,predicate:"inputPaymentCredentialsApplePay",params:[{name:"payment_data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-419271411,predicate:"inputMessagesFilterGeo",params:[],type:"MessagesFilter"},{id:-530392189,predicate:"inputMessagesFilterContacts",params:[],type:"MessagesFilter"},{id:1893427255,predicate:"updateChannelAvailableMessages",params:[{name:"channel_id",type:"int"},{name:"available_min_id",type:"int"}],type:"Update"},{id:1599903217,predicate:"channelAdminLogEventActionTogglePreHistoryHidden",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1759532989,predicate:"inputMediaGeoLive",params:[{name:"flags",type:"#"},{name:"stopped",type:"flags.0?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.2?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"}],type:"InputMedia"},{id:-1186937242,predicate:"messageMediaGeoLive",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"int"},{name:"proximity_notification_radius",type:"flags.1?int"}],type:"MessageMedia"},{id:1189204285,predicate:"recentMeUrlUnknown",params:[{name:"url",type:"string"}],type:"RecentMeUrl"},{id:-1917045962,predicate:"recentMeUrlUser",params:[{name:"url",type:"string"},{name:"user_id",type:"int"}],type:"RecentMeUrl"},{id:-1608834311,predicate:"recentMeUrlChat",params:[{name:"url",type:"string"},{name:"chat_id",type:"int"}],type:"RecentMeUrl"},{id:-347535331,predicate:"recentMeUrlChatInvite",params:[{name:"url",type:"string"},{name:"chat_invite",type:"ChatInvite"}],type:"RecentMeUrl"},{id:-1140172836,predicate:"recentMeUrlStickerSet",params:[{name:"url",type:"string"},{name:"set",type:"StickerSetCovered"}],type:"RecentMeUrl"},{id:235081943,predicate:"help.recentMeUrls",params:[{name:"urls",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.RecentMeUrls"},{id:-266911767,predicate:"channels.channelParticipantsNotModified",params:[],type:"channels.ChannelParticipants"},{id:1951620897,predicate:"messages.messagesNotModified",params:[{name:"count",type:"int"}],type:"messages.Messages"},{id:482797855,predicate:"inputSingleMedia",params:[{name:"flags",type:"#"},{name:"media",type:"InputMedia"},{name:"random_id",type:"long"},{name:"message",type:"string"},{name:"entities",type:"flags.0?Vector"}],type:"InputSingleMedia"},{id:-892779534,predicate:"webAuthorization",params:[{name:"hash",type:"long"},{name:"bot_id",type:"int"},{name:"domain",type:"string"},{name:"browser",type:"string"},{name:"platform",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"region",type:"string"}],type:"WebAuthorization"},{id:-313079300,predicate:"account.webAuthorizations",params:[{name:"authorizations",type:"Vector"},{name:"users",type:"Vector"}],type:"account.WebAuthorizations"},{id:-1502174430,predicate:"inputMessageID",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-1160215659,predicate:"inputMessageReplyTo",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-2037963464,predicate:"inputMessagePinned",params:[],type:"InputMessage"},{id:-1687559349,predicate:"messageEntityPhone",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1280209983,predicate:"messageEntityCashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1410748418,predicate:"messageActionBotAllowed",params:[{name:"domain",type:"string"}],type:"MessageAction"},{id:-55902537,predicate:"inputDialogPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputDialogPeer"},{id:-445792507,predicate:"dialogPeer",params:[{name:"peer",type:"Peer"}],type:"DialogPeer"},{id:223655517,predicate:"messages.foundStickerSetsNotModified",params:[],type:"messages.FoundStickerSets"},{id:1359533640,predicate:"messages.foundStickerSets",params:[{name:"hash",type:"int"},{name:"sets",type:"Vector"}],type:"messages.FoundStickerSets"},{id:1648543603,predicate:"fileHash",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"bytes"}],type:"FileHash"},{id:-104284986,predicate:"webDocumentNoProxy",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:1968737087,predicate:"inputClientProxy",params:[{name:"address",type:"string"},{name:"port",type:"int"}],type:"InputClientProxy"},{id:-483352705,predicate:"help.termsOfServiceUpdateEmpty",params:[{name:"expires",type:"int"}],type:"help.TermsOfServiceUpdate"},{id:686618977,predicate:"help.termsOfServiceUpdate",params:[{name:"expires",type:"int"},{name:"terms_of_service",type:"help.TermsOfService"}],type:"help.TermsOfServiceUpdate"},{id:859091184,predicate:"inputSecureFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"InputSecureFile"},{id:1399317950,predicate:"inputSecureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputSecureFile"},{id:-876089816,predicate:"inputSecureFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:1679398724,predicate:"secureFileEmpty",params:[],type:"SecureFile"},{id:-534283678,predicate:"secureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"dc_id",type:"int"},{name:"date",type:"int"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureFile"},{id:-1964327229,predicate:"secureData",params:[{name:"data",type:"bytes"},{name:"data_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureData"},{id:2103482845,predicate:"securePlainPhone",params:[{name:"phone",type:"string"}],type:"SecurePlainData"},{id:569137759,predicate:"securePlainEmail",params:[{name:"email",type:"string"}],type:"SecurePlainData"},{id:-1658158621,predicate:"secureValueTypePersonalDetails",params:[],type:"SecureValueType"},{id:1034709504,predicate:"secureValueTypePassport",params:[],type:"SecureValueType"},{id:115615172,predicate:"secureValueTypeDriverLicense",params:[],type:"SecureValueType"},{id:-1596951477,predicate:"secureValueTypeIdentityCard",params:[],type:"SecureValueType"},{id:-1717268701,predicate:"secureValueTypeInternalPassport",params:[],type:"SecureValueType"},{id:-874308058,predicate:"secureValueTypeAddress",params:[],type:"SecureValueType"},{id:-63531698,predicate:"secureValueTypeUtilityBill",params:[],type:"SecureValueType"},{id:-1995211763,predicate:"secureValueTypeBankStatement",params:[],type:"SecureValueType"},{id:-1954007928,predicate:"secureValueTypeRentalAgreement",params:[],type:"SecureValueType"},{id:-1713143702,predicate:"secureValueTypePassportRegistration",params:[],type:"SecureValueType"},{id:-368907213,predicate:"secureValueTypeTemporaryRegistration",params:[],type:"SecureValueType"},{id:-1289704741,predicate:"secureValueTypePhone",params:[],type:"SecureValueType"},{id:-1908627474,predicate:"secureValueTypeEmail",params:[],type:"SecureValueType"},{id:411017418,predicate:"secureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?SecureFile"},{name:"reverse_side",type:"flags.2?SecureFile"},{name:"selfie",type:"flags.3?SecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"},{name:"hash",type:"bytes"}],type:"SecureValue"},{id:-618540889,predicate:"inputSecureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?InputSecureFile"},{name:"reverse_side",type:"flags.2?InputSecureFile"},{name:"selfie",type:"flags.3?InputSecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"}],type:"InputSecureValue"},{id:-316748368,predicate:"secureValueHash",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"}],type:"SecureValueHash"},{id:-391902247,predicate:"secureValueErrorData",params:[{name:"type",type:"SecureValueType"},{name:"data_hash",type:"bytes"},{name:"field",type:"string"},{name:"text",type:"string"}],type:"SecureValueError"},{id:12467706,predicate:"secureValueErrorFrontSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2037765467,predicate:"secureValueErrorReverseSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-449327402,predicate:"secureValueErrorSelfie",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:2054162547,predicate:"secureValueErrorFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:1717706985,predicate:"secureValueErrorFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:871426631,predicate:"secureCredentialsEncrypted",params:[{name:"data",type:"bytes"},{name:"hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureCredentialsEncrypted"},{id:-1389486888,predicate:"account.authorizationForm",params:[{name:"flags",type:"#"},{name:"required_types",type:"Vector"},{name:"values",type:"Vector"},{name:"errors",type:"Vector"},{name:"users",type:"Vector"},{name:"privacy_policy_url",type:"flags.0?string"}],type:"account.AuthorizationForm"},{id:-2128640689,predicate:"account.sentEmailCode",params:[{name:"email_pattern",type:"string"},{name:"length",type:"int"}],type:"account.SentEmailCode"},{id:455635795,predicate:"messageActionSecureValuesSentMe",params:[{name:"values",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"MessageAction"},{id:-648257196,predicate:"messageActionSecureValuesSent",params:[{name:"types",type:"Vector"}],type:"MessageAction"},{id:1722786150,predicate:"help.deepLinkInfoEmpty",params:[],type:"help.DeepLinkInfo"},{id:1783556146,predicate:"help.deepLinkInfo",params:[{name:"flags",type:"#"},{name:"update_app",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"help.DeepLinkInfo"},{id:289586518,predicate:"savedPhoneContact",params:[{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"date",type:"int"}],type:"SavedContact"},{id:1304052993,predicate:"account.takeout",params:[{name:"id",type:"long"}],type:"account.Takeout"},{id:700340377,predicate:"inputTakeoutFileLocation",params:[],type:"InputFileLocation"},{id:-513517117,predicate:"updateDialogUnreadMark",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-253500010,predicate:"messages.dialogsNotModified",params:[{name:"count",type:"int"}],type:"messages.Dialogs"},{id:-1625153079,predicate:"inputWebFileGeoPointLocation",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"access_hash",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"zoom",type:"int"},{name:"scale",type:"int"}],type:"InputWebFileLocation"},{id:-1255369827,predicate:"contacts.topPeersDisabled",params:[],type:"contacts.TopPeers"},{id:-1685456582,predicate:"inputReportReasonCopyright",params:[],type:"ReportReason"},{id:-732254058,predicate:"passwordKdfAlgoUnknown",params:[],type:"PasswordKdfAlgo"},{id:4883767,predicate:"securePasswordKdfAlgoUnknown",params:[],type:"SecurePasswordKdfAlgo"},{id:-1141711456,predicate:"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:-2042159726,predicate:"securePasswordKdfAlgoSHA512",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:354925740,predicate:"secureSecretSettings",params:[{name:"secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_secret",type:"bytes"},{name:"secure_secret_id",type:"long"}],type:"SecureSecretSettings"},{id:982592842,predicate:"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow",params:[{name:"salt1",type:"bytes"},{name:"salt2",type:"bytes"},{name:"g",type:"int"},{name:"p",type:"bytes"}],type:"PasswordKdfAlgo"},{id:-1736378792,predicate:"inputCheckPasswordEmpty",params:[],type:"InputCheckPasswordSRP"},{id:-763367294,predicate:"inputCheckPasswordSRP",params:[{name:"srp_id",type:"long"},{name:"A",type:"bytes"},{name:"M1",type:"bytes"}],type:"InputCheckPasswordSRP"},{id:-2036501105,predicate:"secureValueError",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-1592506512,predicate:"secureValueErrorTranslationFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:878931416,predicate:"secureValueErrorTranslationFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2103600678,predicate:"secureRequiredType",params:[{name:"flags",type:"#"},{name:"native_names",type:"flags.0?true"},{name:"selfie_required",type:"flags.1?true"},{name:"translation_required",type:"flags.2?true"},{name:"type",type:"SecureValueType"}],type:"SecureRequiredType"},{id:41187252,predicate:"secureRequiredTypeOneOf",params:[{name:"types",type:"Vector"}],type:"SecureRequiredType"},{id:-1078332329,predicate:"help.passportConfigNotModified",params:[],type:"help.PassportConfig"},{id:-1600596305,predicate:"help.passportConfig",params:[{name:"hash",type:"int"},{name:"countries_langs",type:"DataJSON"}],type:"help.PassportConfig"},{id:488313413,predicate:"inputAppEvent",params:[{name:"time",type:"double"},{name:"type",type:"string"},{name:"peer",type:"long"},{name:"data",type:"JSONValue"}],type:"InputAppEvent"},{id:-1059185703,predicate:"jsonObjectValue",params:[{name:"key",type:"string"},{name:"value",type:"JSONValue"}],type:"JSONObjectValue"},{id:1064139624,predicate:"jsonNull",params:[],type:"JSONValue"},{id:-952869270,predicate:"jsonBool",params:[{name:"value",type:"Bool"}],type:"JSONValue"},{id:736157604,predicate:"jsonNumber",params:[{name:"value",type:"double"}],type:"JSONValue"},{id:-1222740358,predicate:"jsonString",params:[{name:"value",type:"string"}],type:"JSONValue"},{id:-146520221,predicate:"jsonArray",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1715350371,predicate:"jsonObject",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1311015810,predicate:"inputNotifyBroadcasts",params:[],type:"InputNotifyPeer"},{id:-703403793,predicate:"notifyBroadcasts",params:[],type:"NotifyPeer"},{id:-311786236,predicate:"textSubscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-939827711,predicate:"textSuperscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:55281185,predicate:"textMarked",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:483104362,predicate:"textPhone",params:[{name:"text",type:"RichText"},{name:"phone",type:"string"}],type:"RichText"},{id:136105807,predicate:"textImage",params:[{name:"document_id",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"RichText"},{id:504660880,predicate:"pageBlockKicker",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:878078826,predicate:"pageTableCell",params:[{name:"flags",type:"#"},{name:"header",type:"flags.0?true"},{name:"align_center",type:"flags.3?true"},{name:"align_right",type:"flags.4?true"},{name:"valign_middle",type:"flags.5?true"},{name:"valign_bottom",type:"flags.6?true"},{name:"text",type:"flags.7?RichText"},{name:"colspan",type:"flags.1?int"},{name:"rowspan",type:"flags.2?int"}],type:"PageTableCell"},{id:-524237339,predicate:"pageTableRow",params:[{name:"cells",type:"Vector"}],type:"PageTableRow"},{id:-1085412734,predicate:"pageBlockTable",params:[{name:"flags",type:"#"},{name:"bordered",type:"flags.0?true"},{name:"striped",type:"flags.1?true"},{name:"title",type:"RichText"},{name:"rows",type:"Vector"}],type:"PageBlock"},{id:1869903447,predicate:"pageCaption",params:[{name:"text",type:"RichText"},{name:"credit",type:"RichText"}],type:"PageCaption"},{id:-1188055347,predicate:"pageListItemText",params:[{name:"text",type:"RichText"}],type:"PageListItem"},{id:635466748,predicate:"pageListItemBlocks",params:[{name:"blocks",type:"Vector"}],type:"PageListItem"},{id:1577484359,predicate:"pageListOrderedItemText",params:[{name:"num",type:"string"},{name:"text",type:"RichText"}],type:"PageListOrderedItem"},{id:-1730311882,predicate:"pageListOrderedItemBlocks",params:[{name:"num",type:"string"},{name:"blocks",type:"Vector"}],type:"PageListOrderedItem"},{id:-1702174239,predicate:"pageBlockOrderedList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:1987480557,predicate:"pageBlockDetails",params:[{name:"flags",type:"#"},{name:"open",type:"flags.0?true"},{name:"blocks",type:"Vector"},{name:"title",type:"RichText"}],type:"PageBlock"},{id:-1282352120,predicate:"pageRelatedArticle",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"title",type:"flags.0?string"},{name:"description",type:"flags.1?string"},{name:"photo_id",type:"flags.2?long"},{name:"author",type:"flags.3?string"},{name:"published_date",type:"flags.4?int"}],type:"PageRelatedArticle"},{id:370236054,predicate:"pageBlockRelatedArticles",params:[{name:"title",type:"RichText"},{name:"articles",type:"Vector"}],type:"PageBlock"},{id:-1538310410,predicate:"pageBlockMap",params:[{name:"geo",type:"GeoPoint"},{name:"zoom",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-1738178803,predicate:"page",params:[{name:"flags",type:"#"},{name:"part",type:"flags.0?true"},{name:"rtl",type:"flags.1?true"},{name:"v2",type:"flags.2?true"},{name:"url",type:"string"},{name:"blocks",type:"Vector"},{name:"photos",type:"Vector"},{name:"documents",type:"Vector"},{name:"views",type:"flags.3?int"}],type:"Page"},{id:-610373422,predicate:"inputPrivacyKeyPhoneP2P",params:[],type:"InputPrivacyKey"},{id:961092808,predicate:"privacyKeyPhoneP2P",params:[],type:"PrivacyKey"},{id:894777186,predicate:"textAnchor",params:[{name:"text",type:"RichText"},{name:"name",type:"string"}],type:"RichText"},{id:-1945767479,predicate:"help.supportName",params:[{name:"name",type:"string"}],type:"help.SupportName"},{id:-206688531,predicate:"help.userInfoEmpty",params:[],type:"help.UserInfo"},{id:32192344,predicate:"help.userInfo",params:[{name:"message",type:"string"},{name:"entities",type:"Vector"},{name:"author",type:"string"},{name:"date",type:"int"}],type:"help.UserInfo"},{id:-202219658,predicate:"messageActionContactSignUp",params:[],type:"MessageAction"},{id:-1398708869,predicate:"updateMessagePoll",params:[{name:"flags",type:"#"},{name:"poll_id",type:"long"},{name:"poll",type:"flags.0?Poll"},{name:"results",type:"PollResults"}],type:"Update"},{id:1823064809,predicate:"pollAnswer",params:[{name:"text",type:"string"},{name:"option",type:"bytes"}],type:"PollAnswer"},{id:-2032041631,predicate:"poll",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"closed",type:"flags.0?true"},{name:"public_voters",type:"flags.1?true"},{name:"multiple_choice",type:"flags.2?true"},{name:"quiz",type:"flags.3?true"},{name:"question",type:"string"},{name:"answers",type:"Vector"},{name:"close_period",type:"flags.4?int"},{name:"close_date",type:"flags.5?int"}],type:"Poll"},{id:997055186,predicate:"pollAnswerVoters",params:[{name:"flags",type:"#"},{name:"chosen",type:"flags.0?true"},{name:"correct",type:"flags.1?true"},{name:"option",type:"bytes"},{name:"voters",type:"int"}],type:"PollAnswerVoters"},{id:-1159937629,predicate:"pollResults",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"results",type:"flags.1?Vector"},{name:"total_voters",type:"flags.2?int"},{name:"recent_voters",type:"flags.3?Vector"},{name:"solution",type:"flags.4?string"},{name:"solution_entities",type:"flags.4?Vector"}],type:"PollResults"},{id:261416433,predicate:"inputMediaPoll",params:[{name:"flags",type:"#"},{name:"poll",type:"Poll"},{name:"correct_answers",type:"flags.0?Vector"},{name:"solution",type:"flags.1?string"},{name:"solution_entities",type:"flags.1?Vector"}],type:"InputMedia"},{id:1272375192,predicate:"messageMediaPoll",params:[{name:"poll",type:"Poll"},{name:"results",type:"PollResults"}],type:"MessageMedia"},{id:-264117680,predicate:"chatOnlines",params:[{name:"onlines",type:"int"}],type:"ChatOnlines"},{id:1202287072,predicate:"statsURL",params:[{name:"url",type:"string"}],type:"StatsURL"},{id:-525288402,predicate:"photoStrippedSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:1605510357,predicate:"chatAdminRights",params:[{name:"flags",type:"#"},{name:"change_info",type:"flags.0?true"},{name:"post_messages",type:"flags.1?true"},{name:"edit_messages",type:"flags.2?true"},{name:"delete_messages",type:"flags.3?true"},{name:"ban_users",type:"flags.4?true"},{name:"invite_users",type:"flags.5?true"},{name:"pin_messages",type:"flags.7?true"},{name:"add_admins",type:"flags.9?true"},{name:"anonymous",type:"flags.10?true"},{name:"manage_call",type:"flags.11?true"},{name:"other",type:"flags.12?true"}],type:"ChatAdminRights"},{id:-1626209256,predicate:"chatBannedRights",params:[{name:"flags",type:"#"},{name:"view_messages",type:"flags.0?true"},{name:"send_messages",type:"flags.1?true"},{name:"send_media",type:"flags.2?true"},{name:"send_stickers",type:"flags.3?true"},{name:"send_gifs",type:"flags.4?true"},{name:"send_games",type:"flags.5?true"},{name:"send_inline",type:"flags.6?true"},{name:"embed_links",type:"flags.7?true"},{name:"send_polls",type:"flags.8?true"},{name:"change_info",type:"flags.10?true"},{name:"invite_users",type:"flags.15?true"},{name:"pin_messages",type:"flags.17?true"},{name:"until_date",type:"int"}],type:"ChatBannedRights"},{id:1421875280,predicate:"updateChatDefaultBannedRights",params:[{name:"peer",type:"Peer"},{name:"default_banned_rights",type:"ChatBannedRights"},{name:"version",type:"int"}],type:"Update"},{id:-433014407,predicate:"inputWallPaper",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputWallPaper"},{id:1913199744,predicate:"inputWallPaperSlug",params:[{name:"slug",type:"string"}],type:"InputWallPaper"},{id:-1150621555,predicate:"channelParticipantsContacts",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:771095562,predicate:"channelAdminLogEventActionDefaultBannedRights",params:[{name:"prev_banned_rights",type:"ChatBannedRights"},{name:"new_banned_rights",type:"ChatBannedRights"}],type:"ChannelAdminLogEventAction"},{id:-1895328189,predicate:"channelAdminLogEventActionStopPoll",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:471437699,predicate:"account.wallPapersNotModified",params:[],type:"account.WallPapers"},{id:1881892265,predicate:"account.wallPapers",params:[{name:"hash",type:"int"},{name:"wallpapers",type:"Vector"}],type:"account.WallPapers"},{id:-557924733,predicate:"codeSettings",params:[{name:"flags",type:"#"},{name:"allow_flashcall",type:"flags.0?true"},{name:"current_number",type:"flags.1?true"},{name:"allow_app_hash",type:"flags.4?true"}],type:"CodeSettings"},{id:499236004,predicate:"wallPaperSettings",params:[{name:"flags",type:"#"},{name:"blur",type:"flags.1?true"},{name:"motion",type:"flags.2?true"},{name:"background_color",type:"flags.0?int"},{name:"second_background_color",type:"flags.4?int"},{name:"third_background_color",type:"flags.5?int"},{name:"fourth_background_color",type:"flags.6?int"},{name:"intensity",type:"flags.3?int"},{name:"rotation",type:"flags.4?int"}],type:"WallPaperSettings"},{id:-532532493,predicate:"autoDownloadSettings",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"video_preload_large",type:"flags.1?true"},{name:"audio_preload_next",type:"flags.2?true"},{name:"phonecalls_less_data",type:"flags.3?true"},{name:"photo_size_max",type:"int"},{name:"video_size_max",type:"int"},{name:"file_size_max",type:"int"},{name:"video_upload_maxbitrate",type:"int"}],type:"AutoDownloadSettings"},{id:1674235686,predicate:"account.autoDownloadSettings",params:[{name:"low",type:"AutoDownloadSettings"},{name:"medium",type:"AutoDownloadSettings"},{name:"high",type:"AutoDownloadSettings"}],type:"account.AutoDownloadSettings"},{id:-709641735,predicate:"emojiKeyword",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:594408994,predicate:"emojiKeywordDeleted",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:1556570557,predicate:"emojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"keywords",type:"Vector"}],type:"EmojiKeywordsDifference"},{id:-1519029347,predicate:"emojiURL",params:[{name:"url",type:"string"}],type:"EmojiURL"},{id:-1275374751,predicate:"emojiLanguage",params:[{name:"lang_code",type:"string"}],type:"EmojiLanguage"},{id:-1529000952,predicate:"inputPrivacyKeyForwards",params:[],type:"InputPrivacyKey"},{id:1777096355,predicate:"privacyKeyForwards",params:[],type:"PrivacyKey"},{id:1461304012,predicate:"inputPrivacyKeyProfilePhoto",params:[],type:"InputPrivacyKey"},{id:-1777000467,predicate:"privacyKeyProfilePhoto",params:[],type:"PrivacyKey"},{id:1075322878,predicate:"inputPhotoFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:-667654413,predicate:"inputPhotoLegacyFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"}],type:"InputFileLocation"},{id:925204121,predicate:"inputPeerPhotoFileLocation",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"photo_id",type:"long"}],type:"InputFileLocation"},{id:-1652231205,predicate:"inputStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb_version",type:"int"}],type:"InputFileLocation"},{id:-11252123,predicate:"folder",params:[{name:"flags",type:"#"},{name:"autofill_new_broadcasts",type:"flags.0?true"},{name:"autofill_public_groups",type:"flags.1?true"},{name:"autofill_new_correspondents",type:"flags.2?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"flags.3?ChatPhoto"}],type:"Folder"},{id:1908216652,predicate:"dialogFolder",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"folder",type:"Folder"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"unread_muted_peers_count",type:"int"},{name:"unread_unmuted_peers_count",type:"int"},{name:"unread_muted_messages_count",type:"int"},{name:"unread_unmuted_messages_count",type:"int"}],type:"Dialog"},{id:1684014375,predicate:"inputDialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"InputDialogPeer"},{id:1363483106,predicate:"dialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"DialogPeer"},{id:-70073706,predicate:"inputFolderPeer",params:[{name:"peer",type:"InputPeer"},{name:"folder_id",type:"int"}],type:"InputFolderPeer"},{id:-373643672,predicate:"folderPeer",params:[{name:"peer",type:"Peer"},{name:"folder_id",type:"int"}],type:"FolderPeer"},{id:422972864,predicate:"updateFolderPeers",params:[{name:"folder_peers",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:756118935,predicate:"inputUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputUser"},{id:707290417,predicate:"inputChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputChannel"},{id:398123750,predicate:"inputPeerUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"int"}],type:"InputPeer"},{id:-1667893317,predicate:"inputPeerChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"int"}],type:"InputPeer"},{id:55761658,predicate:"inputPrivacyKeyPhoneNumber",params:[],type:"InputPrivacyKey"},{id:-778378131,predicate:"privacyKeyPhoneNumber",params:[],type:"PrivacyKey"},{id:-1472172887,predicate:"topPeerCategoryForwardUsers",params:[],type:"TopPeerCategory"},{id:-68239120,predicate:"topPeerCategoryForwardChats",params:[],type:"TopPeerCategory"},{id:-1569748965,predicate:"channelAdminLogEventActionChangeLinkedChat",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-398136321,predicate:"messages.searchCounter",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"filter",type:"MessagesFilter"},{name:"count",type:"int"}],type:"messages.SearchCounter"},{id:280464681,predicate:"keyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.0?string"},{name:"url",type:"string"},{name:"button_id",type:"int"}],type:"KeyboardButton"},{id:-802258988,predicate:"inputKeyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.1?string"},{name:"url",type:"string"},{name:"bot",type:"InputUser"}],type:"KeyboardButton"},{id:-1831650802,predicate:"urlAuthResultRequest",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"bot",type:"User"},{name:"domain",type:"string"}],type:"UrlAuthResult"},{id:-1886646706,predicate:"urlAuthResultAccepted",params:[{name:"url",type:"string"}],type:"UrlAuthResult"},{id:-1445536993,predicate:"urlAuthResultDefault",params:[],type:"UrlAuthResult"},{id:1283572154,predicate:"inputPrivacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:-668769361,predicate:"inputPrivacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:415136107,predicate:"privacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1397881200,predicate:"privacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1672577397,predicate:"messageEntityUnderline",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1090087980,predicate:"messageEntityStrike",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:34469328,predicate:"messageEntityBlockquote",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1786671974,predicate:"updatePeerSettings",params:[{name:"peer",type:"Peer"},{name:"settings",type:"PeerSettings"}],type:"Update"},{id:-1078612597,predicate:"channelLocationEmpty",params:[],type:"ChannelLocation"},{id:547062491,predicate:"channelLocation",params:[{name:"geo_point",type:"GeoPoint"},{name:"address",type:"string"}],type:"ChannelLocation"},{id:-901375139,predicate:"peerLocated",params:[{name:"peer",type:"Peer"},{name:"expires",type:"int"},{name:"distance",type:"int"}],type:"PeerLocated"},{id:-1263546448,predicate:"updatePeerLocated",params:[{name:"peers",type:"Vector"}],type:"Update"},{id:241923758,predicate:"channelAdminLogEventActionChangeLocation",params:[{name:"prev_value",type:"ChannelLocation"},{name:"new_value",type:"ChannelLocation"}],type:"ChannelAdminLogEventAction"},{id:-606798099,predicate:"inputReportReasonGeoIrrelevant",params:[],type:"ReportReason"},{id:1401984889,predicate:"channelAdminLogEventActionToggleSlowMode",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:1148485274,predicate:"auth.authorizationSignUpRequired",params:[{name:"flags",type:"#"},{name:"terms_of_service",type:"flags.0?help.TermsOfService"}],type:"auth.Authorization"},{id:-666824391,predicate:"payments.paymentVerificationNeeded",params:[{name:"url",type:"string"}],type:"payments.PaymentResult"},{id:42402760,predicate:"inputStickerSetAnimatedEmoji",params:[],type:"InputStickerSet"},{id:967122427,predicate:"updateNewScheduledMessage",params:[{name:"message",type:"Message"}],type:"Update"},{id:-1870238482,predicate:"updateDeleteScheduledMessages",params:[{name:"peer",type:"Peer"},{name:"messages",type:"Vector"}],type:"Update"},{id:-797791052,predicate:"restrictionReason",params:[{name:"platform",type:"string"},{name:"reason",type:"string"},{name:"text",type:"string"}],type:"RestrictionReason"},{id:1012306921,predicate:"inputTheme",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputTheme"},{id:-175567375,predicate:"inputThemeSlug",params:[{name:"slug",type:"string"}],type:"InputTheme"},{id:42930452,predicate:"theme",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?Document"},{name:"settings",type:"flags.3?ThemeSettings"},{name:"installs_count",type:"int"}],type:"Theme"},{id:-199313886,predicate:"account.themesNotModified",params:[],type:"account.Themes"},{id:2137482273,predicate:"account.themes",params:[{name:"hash",type:"int"},{name:"themes",type:"Vector"}],type:"account.Themes"},{id:-2112423005,predicate:"updateTheme",params:[{name:"theme",type:"Theme"}],type:"Update"},{id:-786326563,predicate:"inputPrivacyKeyAddedByPhone",params:[],type:"InputPrivacyKey"},{id:1124062251,predicate:"privacyKeyAddedByPhone",params:[],type:"PrivacyKey"},{id:-2027964103,predicate:"updateGeoLiveViewed",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"}],type:"Update"},{id:1448076945,predicate:"updateLoginToken",params:[],type:"Update"},{id:1654593920,predicate:"auth.loginToken",params:[{name:"expires",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:110008598,predicate:"auth.loginTokenMigrateTo",params:[{name:"dc_id",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:957176926,predicate:"auth.loginTokenSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.LoginToken"},{id:1474462241,predicate:"account.contentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"},{name:"sensitive_can_change",type:"flags.1?true"}],type:"account.ContentSettings"},{id:-1456996667,predicate:"messages.inactiveChats",params:[{name:"dates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.InactiveChats"},{id:-1012849566,predicate:"baseThemeClassic",params:[],type:"BaseTheme"},{id:-69724536,predicate:"baseThemeDay",params:[],type:"BaseTheme"},{id:-1212997976,predicate:"baseThemeNight",params:[],type:"BaseTheme"},{id:1834973166,predicate:"baseThemeTinted",params:[],type:"BaseTheme"},{id:1527845466,predicate:"baseThemeArctic",params:[],type:"BaseTheme"},{id:-1770371538,predicate:"inputWallPaperNoFile",params:[{name:"id",type:"long"}],type:"InputWallPaper"},{id:-528465642,predicate:"wallPaperNoFile",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"default",type:"flags.1?true"},{name:"dark",type:"flags.4?true"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:-1118798639,predicate:"inputThemeSettings",params:[{name:"flags",type:"#"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"message_top_color",type:"flags.0?int"},{name:"message_bottom_color",type:"flags.0?int"},{name:"wallpaper",type:"flags.1?InputWallPaper"},{name:"wallpaper_settings",type:"flags.1?WallPaperSettings"}],type:"InputThemeSettings"},{id:-1676371894,predicate:"themeSettings",params:[{name:"flags",type:"#"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"message_top_color",type:"flags.0?int"},{name:"message_bottom_color",type:"flags.0?int"},{name:"wallpaper",type:"flags.1?WallPaper"}],type:"ThemeSettings"},{id:1421174295,predicate:"webPageAttributeTheme",params:[{name:"flags",type:"#"},{name:"documents",type:"flags.0?Vector"},{name:"settings",type:"flags.1?ThemeSettings"}],type:"WebPageAttribute"},{id:938909451,predicate:"updateMessagePollVote",params:[{name:"poll_id",type:"long"},{name:"user_id",type:"int"},{name:"options",type:"Vector"},{name:"qts",type:"int"}],type:"Update"},{id:-1567730343,predicate:"messageUserVote",params:[{name:"user_id",type:"int"},{name:"option",type:"bytes"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:909603888,predicate:"messageUserVoteInputOption",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:244310238,predicate:"messageUserVoteMultiple",params:[{name:"user_id",type:"int"},{name:"options",type:"Vector"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:136574537,predicate:"messages.votesList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"votes",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.VotesList"},{id:-1144565411,predicate:"keyboardButtonRequestPoll",params:[{name:"flags",type:"#"},{name:"quiz",type:"flags.0?Bool"},{name:"text",type:"string"}],type:"KeyboardButton"},{id:1981704948,predicate:"messageEntityBankCard",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-177732982,predicate:"bankCardOpenUrl",params:[{name:"url",type:"string"},{name:"name",type:"string"}],type:"BankCardOpenUrl"},{id:1042605427,predicate:"payments.bankCardData",params:[{name:"title",type:"string"},{name:"open_urls",type:"Vector"}],type:"payments.BankCardData"},{id:-118740917,predicate:"peerSelfLocated",params:[{name:"expires",type:"int"}],type:"PeerLocated"},{id:1949890536,predicate:"dialogFilter",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"non_contacts",type:"flags.1?true"},{name:"groups",type:"flags.2?true"},{name:"broadcasts",type:"flags.3?true"},{name:"bots",type:"flags.4?true"},{name:"exclude_muted",type:"flags.11?true"},{name:"exclude_read",type:"flags.12?true"},{name:"exclude_archived",type:"flags.13?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"emoticon",type:"flags.25?string"},{name:"pinned_peers",type:"Vector"},{name:"include_peers",type:"Vector"},{name:"exclude_peers",type:"Vector"}],type:"DialogFilter"},{id:2004110666,predicate:"dialogFilterSuggested",params:[{name:"filter",type:"DialogFilter"},{name:"description",type:"string"}],type:"DialogFilterSuggested"},{id:654302845,predicate:"updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Update"},{id:-1512627963,predicate:"updateDialogFilterOrder",params:[{name:"order",type:"Vector"}],type:"Update"},{id:889491791,predicate:"updateDialogFilters",params:[],type:"Update"},{id:-1237848657,predicate:"statsDateRangeDays",params:[{name:"min_date",type:"int"},{name:"max_date",type:"int"}],type:"StatsDateRangeDays"},{id:-884757282,predicate:"statsAbsValueAndPrev",params:[{name:"current",type:"double"},{name:"previous",type:"double"}],type:"StatsAbsValueAndPrev"},{id:-875679776,predicate:"statsPercentValue",params:[{name:"part",type:"double"},{name:"total",type:"double"}],type:"StatsPercentValue"},{id:1244130093,predicate:"statsGraphAsync",params:[{name:"token",type:"string"}],type:"StatsGraph"},{id:-1092839390,predicate:"statsGraphError",params:[{name:"error",type:"string"}],type:"StatsGraph"},{id:-1901828938,predicate:"statsGraph",params:[{name:"flags",type:"#"},{name:"json",type:"DataJSON"},{name:"zoom_token",type:"flags.0?string"}],type:"StatsGraph"},{id:-1387279939,predicate:"messageInteractionCounters",params:[{name:"msg_id",type:"int"},{name:"views",type:"int"},{name:"forwards",type:"int"}],type:"MessageInteractionCounters"},{id:-1107852396,predicate:"stats.broadcastStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"followers",type:"StatsAbsValueAndPrev"},{name:"views_per_post",type:"StatsAbsValueAndPrev"},{name:"shares_per_post",type:"StatsAbsValueAndPrev"},{name:"enabled_notifications",type:"StatsPercentValue"},{name:"growth_graph",type:"StatsGraph"},{name:"followers_graph",type:"StatsGraph"},{name:"mute_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"interactions_graph",type:"StatsGraph"},{name:"iv_interactions_graph",type:"StatsGraph"},{name:"views_by_source_graph",type:"StatsGraph"},{name:"new_followers_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"recent_message_interactions",type:"Vector"}],type:"stats.BroadcastStats"},{id:-428884101,predicate:"inputMediaDice",params:[{name:"emoticon",type:"string"}],type:"InputMedia"},{id:1065280907,predicate:"messageMediaDice",params:[{name:"value",type:"int"},{name:"emoticon",type:"string"}],type:"MessageMedia"},{id:-427863538,predicate:"inputStickerSetDice",params:[{name:"emoticon",type:"string"}],type:"InputStickerSet"},{id:-1728664459,predicate:"help.promoDataEmpty",params:[{name:"expires",type:"int"}],type:"help.PromoData"},{id:-1942390465,predicate:"help.promoData",params:[{name:"flags",type:"#"},{name:"proxy",type:"flags.0?true"},{name:"expires",type:"int"},{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"psa_type",type:"flags.1?string"},{name:"psa_message",type:"flags.2?string"}],type:"help.PromoData"},{id:-567037804,predicate:"videoSize",params:[{name:"flags",type:"#"},{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"},{name:"video_start_ts",type:"flags.0?double"}],type:"VideoSize"},{id:643940105,predicate:"updatePhoneCallSignalingData",params:[{name:"phone_call_id",type:"long"},{name:"data",type:"bytes"}],type:"Update"},{id:1634294960,predicate:"chatInvitePeek",params:[{name:"chat",type:"Chat"},{name:"expires",type:"int"}],type:"ChatInvite"},{id:418631927,predicate:"statsGroupTopPoster",params:[{name:"user_id",type:"int"},{name:"messages",type:"int"},{name:"avg_chars",type:"int"}],type:"StatsGroupTopPoster"},{id:1611985938,predicate:"statsGroupTopAdmin",params:[{name:"user_id",type:"int"},{name:"deleted",type:"int"},{name:"kicked",type:"int"},{name:"banned",type:"int"}],type:"StatsGroupTopAdmin"},{id:831924812,predicate:"statsGroupTopInviter",params:[{name:"user_id",type:"int"},{name:"invitations",type:"int"}],type:"StatsGroupTopInviter"},{id:-276825834,predicate:"stats.megagroupStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"members",type:"StatsAbsValueAndPrev"},{name:"messages",type:"StatsAbsValueAndPrev"},{name:"viewers",type:"StatsAbsValueAndPrev"},{name:"posters",type:"StatsAbsValueAndPrev"},{name:"growth_graph",type:"StatsGraph"},{name:"members_graph",type:"StatsGraph"},{name:"new_members_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"messages_graph",type:"StatsGraph"},{name:"actions_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"weekdays_graph",type:"StatsGraph"},{name:"top_posters",type:"Vector"},{name:"top_admins",type:"Vector"},{name:"top_inviters",type:"Vector"},{name:"users",type:"Vector"}],type:"stats.MegagroupStats"},{id:-1096616924,predicate:"globalPrivacySettings",params:[{name:"flags",type:"#"},{name:"archive_and_mute_new_noncontact_peers",type:"flags.0?Bool"}],type:"GlobalPrivacySettings"},{id:1667228533,predicate:"phoneConnectionWebrtc",params:[{name:"flags",type:"#"},{name:"turn",type:"flags.0?true"},{name:"stun",type:"flags.1?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"username",type:"string"},{name:"password",type:"string"}],type:"PhoneConnection"},{id:1107543535,predicate:"help.countryCode",params:[{name:"flags",type:"#"},{name:"country_code",type:"string"},{name:"prefixes",type:"flags.0?Vector"},{name:"patterns",type:"flags.1?Vector"}],type:"help.CountryCode"},{id:-1014526429,predicate:"help.country",params:[{name:"flags",type:"#"},{name:"hidden",type:"flags.0?true"},{name:"iso2",type:"string"},{name:"default_name",type:"string"},{name:"name",type:"flags.1?string"},{name:"country_codes",type:"Vector"}],type:"help.Country"},{id:-1815339214,predicate:"help.countriesListNotModified",params:[],type:"help.CountriesList"},{id:-2016381538,predicate:"help.countriesList",params:[{name:"countries",type:"Vector"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:1163625789,predicate:"messageViews",params:[{name:"flags",type:"#"},{name:"views",type:"flags.0?int"},{name:"forwards",type:"flags.1?int"},{name:"replies",type:"flags.2?MessageReplies"}],type:"MessageViews"},{id:1854571743,predicate:"updateChannelMessageForwards",params:[{name:"channel_id",type:"int"},{name:"id",type:"int"},{name:"forwards",type:"int"}],type:"Update"},{id:-96535659,predicate:"photoSizeProgressive",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"sizes",type:"Vector"}],type:"PhotoSize"},{id:-1228606141,predicate:"messages.messageViews",params:[{name:"views",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.MessageViews"},{id:482860628,predicate:"updateReadChannelDiscussionInbox",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"},{name:"broadcast_id",type:"flags.0?int"},{name:"broadcast_post",type:"flags.0?int"}],type:"Update"},{id:1178116716,predicate:"updateReadChannelDiscussionOutbox",params:[{name:"channel_id",type:"int"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Update"},{id:-170029155,predicate:"messages.discussionMessage",params:[{name:"flags",type:"#"},{name:"messages",type:"Vector"},{name:"max_id",type:"flags.0?int"},{name:"read_inbox_max_id",type:"flags.1?int"},{name:"read_outbox_max_id",type:"flags.2?int"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.DiscussionMessage"},{id:-1495959709,predicate:"messageReplyHeader",params:[{name:"flags",type:"#"},{name:"reply_to_msg_id",type:"int"},{name:"reply_to_peer_id",type:"flags.0?Peer"},{name:"reply_to_top_id",type:"flags.1?int"}],type:"MessageReplyHeader"},{id:1093204652,predicate:"messageReplies",params:[{name:"flags",type:"#"},{name:"comments",type:"flags.0?true"},{name:"replies",type:"int"},{name:"replies_pts",type:"int"},{name:"recent_repliers",type:"flags.1?Vector"},{name:"channel_id",type:"flags.0?int"},{name:"max_id",type:"flags.2?int"},{name:"read_max_id",type:"flags.3?int"}],type:"MessageReplies"},{id:610945826,predicate:"updatePeerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"blocked",type:"Bool"}],type:"Update"},{id:-386039788,predicate:"peerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"date",type:"int"}],type:"PeerBlocked"},{id:1796675352,predicate:"updateChannelUserTyping",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"top_msg_id",type:"flags.0?int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-1392895362,predicate:"inputMessageCallbackQuery",params:[{name:"id",type:"int"},{name:"query_id",type:"long"}],type:"InputMessage"},{id:453242886,predicate:"channelParticipantLeft",params:[{name:"peer",type:"Peer"}],type:"ChannelParticipant"},{id:-531931925,predicate:"channelParticipantsMentions",params:[{name:"flags",type:"#"},{name:"q",type:"flags.0?string"},{name:"top_msg_id",type:"flags.1?int"}],type:"ChannelParticipantsFilter"},{id:-309990731,predicate:"updatePinnedMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2054649973,predicate:"updatePinnedChannelMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"int"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:464520273,predicate:"inputMessagesFilterPinned",params:[],type:"MessagesFilter"},{id:-1986399595,predicate:"stats.messageStats",params:[{name:"views_graph",type:"StatsGraph"}],type:"stats.MessageStats"},{id:-1730095465,predicate:"messageActionGeoProximityReached",params:[{name:"from_id",type:"Peer"},{name:"to_id",type:"Peer"},{name:"distance",type:"int"}],type:"MessageAction"},{id:-668906175,predicate:"photoPathSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:-651419003,predicate:"speakingInGroupCallAction",params:[],type:"SendMessageAction"},{id:2004925620,predicate:"groupCallDiscarded",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"duration",type:"int"}],type:"GroupCall"},{id:-711498484,predicate:"groupCall",params:[{name:"flags",type:"#"},{name:"join_muted",type:"flags.1?true"},{name:"can_change_join_muted",type:"flags.2?true"},{name:"join_date_asc",type:"flags.6?true"},{name:"schedule_start_subscribed",type:"flags.8?true"},{name:"can_start_video",type:"flags.9?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"participants_count",type:"int"},{name:"title",type:"flags.3?string"},{name:"stream_dc_id",type:"flags.4?int"},{name:"record_start_date",type:"flags.5?int"},{name:"schedule_date",type:"flags.7?int"},{name:"unmuted_video_count",type:"flags.10?int"},{name:"unmuted_video_limit",type:"int"},{name:"version",type:"int"}],type:"GroupCall"},{id:-659913713,predicate:"inputGroupCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGroupCall"},{id:2047704898,predicate:"messageActionGroupCall",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"duration",type:"flags.0?int"}],type:"MessageAction"},{id:1991897370,predicate:"messageActionInviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-341428482,predicate:"groupCallParticipant",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"left",type:"flags.1?true"},{name:"can_self_unmute",type:"flags.2?true"},{name:"just_joined",type:"flags.4?true"},{name:"versioned",type:"flags.5?true"},{name:"min",type:"flags.8?true"},{name:"muted_by_you",type:"flags.9?true"},{name:"volume_by_admin",type:"flags.10?true"},{name:"self",type:"flags.12?true"},{name:"video_joined",type:"flags.15?true"},{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"active_date",type:"flags.3?int"},{name:"source",type:"int"},{name:"volume",type:"flags.7?int"},{name:"about",type:"flags.11?string"},{name:"raise_hand_rating",type:"flags.13?long"},{name:"video",type:"flags.6?GroupCallParticipantVideo"},{name:"presentation",type:"flags.14?GroupCallParticipantVideo"}],type:"GroupCallParticipant"},{id:321954198,predicate:"updateChat",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-219423922,predicate:"updateGroupCallParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"Update"},{id:-1537295973,predicate:"updateGroupCall",params:[{name:"chat_id",type:"int"},{name:"call",type:"GroupCall"}],type:"Update"},{id:-1636664659,predicate:"phone.groupCall",params:[{name:"call",type:"GroupCall"},{name:"participants",type:"Vector"},{name:"participants_next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.GroupCall"},{id:-193506890,predicate:"phone.groupParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"version",type:"int"}],type:"phone.GroupParticipants"},{id:813821341,predicate:"inlineQueryPeerTypeSameBotPM",params:[],type:"InlineQueryPeerType"},{id:-2093215828,predicate:"inlineQueryPeerTypePM",params:[],type:"InlineQueryPeerType"},{id:-681130742,predicate:"inlineQueryPeerTypeChat",params:[],type:"InlineQueryPeerType"},{id:1589952067,predicate:"inlineQueryPeerTypeMegagroup",params:[],type:"InlineQueryPeerType"},{id:1664413338,predicate:"inlineQueryPeerTypeBroadcast",params:[],type:"InlineQueryPeerType"},{id:589338437,predicate:"channelAdminLogEventActionStartGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-610299584,predicate:"channelAdminLogEventActionDiscardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-115071790,predicate:"channelAdminLogEventActionParticipantMute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:-431740480,predicate:"channelAdminLogEventActionParticipantUnmute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1456906823,predicate:"channelAdminLogEventActionToggleGroupCallSetting",params:[{name:"join_muted",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1966921727,predicate:"inputPaymentCredentialsGooglePay",params:[{name:"payment_token",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:375566091,predicate:"messages.historyImport",params:[{name:"id",type:"long"}],type:"messages.HistoryImport"},{id:-606432698,predicate:"sendMessageHistoryImportAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:1578088377,predicate:"messages.historyImportParsed",params:[{name:"flags",type:"#"},{name:"pm",type:"flags.0?true"},{name:"group",type:"flags.1?true"},{name:"title",type:"flags.2?string"}],type:"messages.HistoryImportParsed"},{id:-170010905,predicate:"inputReportReasonFake",params:[],type:"ReportReason"},{id:-275956116,predicate:"messages.affectedFoundMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"},{name:"messages",type:"Vector"}],type:"messages.AffectedFoundMessages"},{id:-1441072131,predicate:"messageActionSetMessagesTTL",params:[{name:"period",type:"int"}],type:"MessageAction"},{id:-1147422299,predicate:"updatePeerHistoryTTL",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"ttl_period",type:"flags.0?int"}],type:"Update"},{id:-206342113,predicate:"updateChatParticipant",params:[{name:"flags",type:"#"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"actor_id",type:"int"},{name:"user_id",type:"int"},{name:"prev_participant",type:"flags.0?ChatParticipant"},{name:"new_participant",type:"flags.1?ChatParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:2146218476,predicate:"updateChannelParticipant",params:[{name:"flags",type:"#"},{name:"channel_id",type:"int"},{name:"date",type:"int"},{name:"actor_id",type:"int"},{name:"user_id",type:"int"},{name:"prev_participant",type:"flags.0?ChannelParticipant"},{name:"new_participant",type:"flags.1?ChannelParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:133777546,predicate:"updateBotStopped",params:[{name:"user_id",type:"int"},{name:"date",type:"int"},{name:"stopped",type:"Bool"},{name:"qts",type:"int"}],type:"Update"},{id:507405952,predicate:"chatInviteImporter",params:[{name:"user_id",type:"int"},{name:"date",type:"int"}],type:"ChatInviteImporter"},{id:-1111085620,predicate:"messages.exportedChatInvites",params:[{name:"count",type:"int"},{name:"invites",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvites"},{id:410107472,predicate:"messages.exportedChatInvite",params:[{name:"invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:572915951,predicate:"messages.exportedChatInviteReplaced",params:[{name:"invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:-2118733814,predicate:"messages.chatInviteImporters",params:[{name:"count",type:"int"},{name:"importers",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatInviteImporters"},{id:-539872497,predicate:"chatAdminWithInvites",params:[{name:"admin_id",type:"int"},{name:"invites_count",type:"int"},{name:"revoked_invites_count",type:"int"}],type:"ChatAdminWithInvites"},{id:-1231326505,predicate:"messages.chatAdminsWithInvites",params:[{name:"admins",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatAdminsWithInvites"},{id:1557846647,predicate:"channelAdminLogEventActionParticipantJoinByInvite",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1515256996,predicate:"channelAdminLogEventActionExportedInviteDelete",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1091179342,predicate:"channelAdminLogEventActionExportedInviteRevoke",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:-384910503,predicate:"channelAdminLogEventActionExportedInviteEdit",params:[{name:"prev_invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1048537159,predicate:"channelAdminLogEventActionParticipantVolume",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1855199800,predicate:"channelAdminLogEventActionChangeHistoryTTL",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-1571952873,predicate:"messages.checkedHistoryImportPeer",params:[{name:"confirm_text",type:"string"}],type:"messages.CheckedHistoryImportPeer"},{id:-1146808775,predicate:"inputGroupCallStream",params:[{name:"call",type:"InputGroupCall"},{name:"time_ms",type:"long"},{name:"scale",type:"int"}],type:"InputFileLocation"},{id:-1343921601,predicate:"phone.joinAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.JoinAsPeers"},{id:541839704,predicate:"phone.exportedGroupCallInvite",params:[{name:"link",type:"string"}],type:"phone.ExportedGroupCallInvite"},{id:-672693723,predicate:"inputBotInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:894081801,predicate:"botInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1281329567,predicate:"messageActionGroupCallScheduled",params:[{name:"call",type:"InputGroupCall"},{name:"schedule_date",type:"int"}],type:"MessageAction"},{id:-592373577,predicate:"groupCallParticipantVideoSourceGroup",params:[{name:"semantics",type:"string"},{name:"sources",type:"Vector"}],type:"GroupCallParticipantVideoSourceGroup"},{id:1735736008,predicate:"groupCallParticipantVideo",params:[{name:"flags",type:"#"},{name:"paused",type:"flags.0?true"},{name:"endpoint",type:"string"},{name:"source_groups",type:"Vector"},{name:"audio_source",type:"flags.1?int"}],type:"GroupCallParticipantVideo"},{id:192428418,predicate:"updateGroupCallConnection",params:[{name:"flags",type:"#"},{name:"presentation",type:"flags.0?true"},{name:"params",type:"DataJSON"}],type:"Update"},{id:-2046910401,predicate:"stickers.suggestedShortName",params:[{name:"short_name",type:"string"}],type:"stickers.SuggestedShortName"},{id:795652779,predicate:"botCommandScopeDefault",params:[],type:"BotCommandScope"},{id:1011811544,predicate:"botCommandScopeUsers",params:[],type:"BotCommandScope"},{id:1877059713,predicate:"botCommandScopeChats",params:[],type:"BotCommandScope"},{id:-1180016534,predicate:"botCommandScopeChatAdmins",params:[],type:"BotCommandScope"},{id:-610432643,predicate:"botCommandScopePeer",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:1071145937,predicate:"botCommandScopePeerAdmins",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:169026035,predicate:"botCommandScopePeerUser",params:[{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"BotCommandScope"},{id:-478701471,predicate:"account.resetPasswordFailedWait",params:[{name:"retry_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-370148227,predicate:"account.resetPasswordRequestedWait",params:[{name:"until_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-383330754,predicate:"account.resetPasswordOk",params:[],type:"account.ResetPasswordResult"},{id:-813823885,predicate:"updateBotCommands",params:[{name:"peer",type:"Peer"},{name:"bot_id",type:"int"},{name:"commands",type:"Vector"}],type:"Update"}],methods:[{id:-878758099,method:"invokeAfterMsg",params:[{name:"msg_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:1036301552,method:"invokeAfterMsgs",params:[{name:"msg_ids",type:"Vector"},{name:"query",type:"!X"}],type:"X"},{id:-1502141361,method:"auth.sendCode",params:[{name:"phone_number",type:"string"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:-2131827673,method:"auth.signUp",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"auth.Authorization"},{id:-1126886015,method:"auth.signIn",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"auth.Authorization"},{id:1461180992,method:"auth.logOut",params:[],type:"Bool"},{id:-1616179942,method:"auth.resetAuthorizations",params:[],type:"Bool"},{id:-440401971,method:"auth.exportAuthorization",params:[{name:"dc_id",type:"int"}],type:"auth.ExportedAuthorization"},{id:-470837741,method:"auth.importAuthorization",params:[{name:"id",type:"int"},{name:"bytes",type:"bytes"}],type:"auth.Authorization"},{id:-841733627,method:"auth.bindTempAuthKey",params:[{name:"perm_auth_key_id",type:"long"},{name:"nonce",type:"long"},{name:"expires_at",type:"int"},{name:"encrypted_message",type:"bytes"}],type:"Bool"},{id:1754754159,method:"account.registerDevice",params:[{name:"flags",type:"#"},{name:"no_muted",type:"flags.0?true"},{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"app_sandbox",type:"Bool"},{name:"secret",type:"bytes"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:813089983,method:"account.unregisterDevice",params:[{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:-2067899501,method:"account.updateNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"},{name:"settings",type:"InputPeerNotifySettings"}],type:"Bool"},{id:313765169,method:"account.getNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"}],type:"PeerNotifySettings"},{id:-612493497,method:"account.resetNotifySettings",params:[],type:"Bool"},{id:2018596725,method:"account.updateProfile",params:[{name:"flags",type:"#"},{name:"first_name",type:"flags.0?string"},{name:"last_name",type:"flags.1?string"},{name:"about",type:"flags.2?string"}],type:"User"},{id:1713919532,method:"account.updateStatus",params:[{name:"offline",type:"Bool"}],type:"Bool"},{id:-1430579357,method:"account.getWallPapers",params:[{name:"hash",type:"int"}],type:"account.WallPapers"},{id:-977650298,method:"account.reportPeer",params:[{name:"peer",type:"InputPeer"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:227648840,method:"users.getUsers",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-902781519,method:"users.getFullUser",params:[{name:"id",type:"InputUser"}],type:"UserFull"},{id:749357634,method:"contacts.getContactIDs",params:[{name:"hash",type:"int"}],type:"Vector"},{id:-995929106,method:"contacts.getStatuses",params:[],type:"Vector"},{id:-1071414113,method:"contacts.getContacts",params:[{name:"hash",type:"int"}],type:"contacts.Contacts"},{id:746589157,method:"contacts.importContacts",params:[{name:"contacts",type:"Vector"}],type:"contacts.ImportedContacts"},{id:157945344,method:"contacts.deleteContacts",params:[{name:"id",type:"Vector"}],type:"Updates"},{id:269745566,method:"contacts.deleteByPhones",params:[{name:"phones",type:"Vector"}],type:"Bool"},{id:1758204945,method:"contacts.block",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-1096393392,method:"contacts.unblock",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-176409329,method:"contacts.getBlocked",params:[{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"contacts.Blocked"},{id:1673946374,method:"messages.getMessages",params:[{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1594999949,method:"messages.getDialogs",params:[{name:"flags",type:"#"},{name:"exclude_pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Dialogs"},{id:-591691168,method:"messages.getHistory",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:204812012,method:"messages.search",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"q",type:"string"},{name:"from_id",type:"flags.0?InputPeer"},{name:"top_msg_id",type:"flags.1?int"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:238054714,method:"messages.readHistory",params:[{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedMessages"},{id:469850889,method:"messages.deleteHistory",params:[{name:"flags",type:"#"},{name:"just_clear",type:"flags.0?true"},{name:"revoke",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedHistory"},{id:-443640366,method:"messages.deleteMessages",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:94983360,method:"messages.receivedMessages",params:[{name:"max_id",type:"int"}],type:"Vector"},{id:1486110434,method:"messages.setTyping",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"action",type:"SendMessageAction"}],type:"Bool"},{id:1376532592,method:"messages.sendMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:881978281,method:"messages.sendMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"media",type:"InputMedia"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-637606386,method:"messages.forwardMessages",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"with_my_score",type:"flags.8?true"},{name:"from_peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"random_id",type:"Vector"},{name:"to_peer",type:"InputPeer"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-820669733,method:"messages.reportSpam",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:913498268,method:"messages.getPeerSettings",params:[{name:"peer",type:"InputPeer"}],type:"PeerSettings"},{id:-1991005362,method:"messages.report",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:1013621127,method:"messages.getChats",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:998448230,method:"messages.getFullChat",params:[{name:"chat_id",type:"int"}],type:"messages.ChatFull"},{id:-599447467,method:"messages.editChatTitle",params:[{name:"chat_id",type:"int"},{name:"title",type:"string"}],type:"Updates"},{id:-900957736,method:"messages.editChatPhoto",params:[{name:"chat_id",type:"int"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:-106911223,method:"messages.addChatUser",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"fwd_limit",type:"int"}],type:"Updates"},{id:-986430054,method:"messages.deleteChatUser",params:[{name:"flags",type:"#"},{name:"revoke_history",type:"flags.0?true"},{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:164303470,method:"messages.createChat",params:[{name:"users",type:"Vector"},{name:"title",type:"string"}],type:"Updates"},{id:-304838614,method:"updates.getState",params:[],type:"updates.State"},{id:630429265,method:"updates.getDifference",params:[{name:"flags",type:"#"},{name:"pts",type:"int"},{name:"pts_total_limit",type:"flags.0?int"},{name:"date",type:"int"},{name:"qts",type:"int"}],type:"updates.Difference"},{id:1926525996,method:"photos.updateProfilePhoto",params:[{name:"id",type:"InputPhoto"}],type:"photos.Photo"},{id:-1980559511,method:"photos.uploadProfilePhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"}],type:"photos.Photo"},{id:-2016444625,method:"photos.deletePhotos",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1291540959,method:"upload.saveFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1319462148,method:"upload.getFile",params:[{name:"flags",type:"#"},{name:"precise",type:"flags.0?true"},{name:"cdn_supported",type:"flags.1?true"},{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.File"},{id:-990308245,method:"help.getConfig",params:[],type:"Config"},{id:531836966,method:"help.getNearestDc",params:[],type:"NearestDc"},{id:1378703997,method:"help.getAppUpdate",params:[{name:"source",type:"string"}],type:"help.AppUpdate"},{id:1295590211,method:"help.getInviteText",params:[],type:"help.InviteText"},{id:-1848823128,method:"photos.getUserPhotos",params:[{name:"user_id",type:"InputUser"},{name:"offset",type:"int"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"photos.Photos"},{id:651135312,method:"messages.getDhConfig",params:[{name:"version",type:"int"},{name:"random_length",type:"int"}],type:"messages.DhConfig"},{id:-162681021,method:"messages.requestEncryption",params:[{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1035731989,method:"messages.acceptEncryption",params:[{name:"peer",type:"InputEncryptedChat"},{name:"g_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:-208425312,method:"messages.discardEncryption",params:[{name:"flags",type:"#"},{name:"delete_history",type:"flags.0?true"},{name:"chat_id",type:"int"}],type:"Bool"},{id:2031374829,method:"messages.setEncryptedTyping",params:[{name:"peer",type:"InputEncryptedChat"},{name:"typing",type:"Bool"}],type:"Bool"},{id:2135648522,method:"messages.readEncryptedHistory",params:[{name:"peer",type:"InputEncryptedChat"},{name:"max_date",type:"int"}],type:"Bool"},{id:1157265941,method:"messages.sendEncrypted",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1431914525,method:"messages.sendEncryptedFile",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"},{name:"file",type:"InputEncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:852769188,method:"messages.sendEncryptedService",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1436924774,method:"messages.receivedQueue",params:[{name:"max_qts",type:"int"}],type:"Vector"},{id:1259113487,method:"messages.reportEncryptedSpam",params:[{name:"peer",type:"InputEncryptedChat"}],type:"Bool"},{id:-562337987,method:"upload.saveBigFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"file_total_parts",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1043505495,method:"initConnection",params:[{name:"flags",type:"#"},{name:"api_id",type:"int"},{name:"device_model",type:"string"},{name:"system_version",type:"string"},{name:"app_version",type:"string"},{name:"system_lang_code",type:"string"},{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"proxy",type:"flags.0?InputClientProxy"},{name:"params",type:"flags.1?JSONValue"},{name:"query",type:"!X"}],type:"X"},{id:-1663104819,method:"help.getSupport",params:[],type:"help.Support"},{id:916930423,method:"messages.readMessageContents",params:[{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:655677548,method:"account.checkUsername",params:[{name:"username",type:"string"}],type:"Bool"},{id:1040964988,method:"account.updateUsername",params:[{name:"username",type:"string"}],type:"User"},{id:301470424,method:"contacts.search",params:[{name:"q",type:"string"},{name:"limit",type:"int"}],type:"contacts.Found"},{id:-623130288,method:"account.getPrivacy",params:[{name:"key",type:"InputPrivacyKey"}],type:"account.PrivacyRules"},{id:-906486552,method:"account.setPrivacy",params:[{name:"key",type:"InputPrivacyKey"},{name:"rules",type:"Vector"}],type:"account.PrivacyRules"},{id:1099779595,method:"account.deleteAccount",params:[{name:"reason",type:"string"}],type:"Bool"},{id:150761757,method:"account.getAccountTTL",params:[],type:"AccountDaysTTL"},{id:608323678,method:"account.setAccountTTL",params:[{name:"ttl",type:"AccountDaysTTL"}],type:"Bool"},{id:-627372787,method:"invokeWithLayer",params:[{name:"layer",type:"int"},{name:"query",type:"!X"}],type:"X"},{id:-113456221,method:"contacts.resolveUsername",params:[{name:"username",type:"string"}],type:"contacts.ResolvedPeer"},{id:-2108208411,method:"account.sendChangePhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1891839707,method:"account.changePhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"User"},{id:71126828,method:"messages.getStickers",params:[{name:"emoticon",type:"string"},{name:"hash",type:"int"}],type:"messages.Stickers"},{id:479598769,method:"messages.getAllStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:954152242,method:"account.updateDeviceLocked",params:[{name:"period",type:"int"}],type:"Bool"},{id:1738800940,method:"auth.importBotAuthorization",params:[{name:"flags",type:"int"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"bot_auth_token",type:"string"}],type:"auth.Authorization"},{id:-1956073268,method:"messages.getWebPagePreview",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"MessageMedia"},{id:-484392616,method:"account.getAuthorizations",params:[],type:"account.Authorizations"},{id:-545786948,method:"account.resetAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1418342645,method:"account.getPassword",params:[],type:"account.Password"},{id:-1663767815,method:"account.getPasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"account.PasswordSettings"},{id:-1516564433,method:"account.updatePasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"new_settings",type:"account.PasswordInputSettings"}],type:"Bool"},{id:-779399914,method:"auth.checkPassword",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"auth.Authorization"},{id:-661144474,method:"auth.requestPasswordRecovery",params:[],type:"auth.PasswordRecovery"},{id:923364464,method:"auth.recoverPassword",params:[{name:"flags",type:"#"},{name:"code",type:"string"},{name:"new_settings",type:"flags.0?account.PasswordInputSettings"}],type:"auth.Authorization"},{id:-1080796745,method:"invokeWithoutUpdates",params:[{name:"query",type:"!X"}],type:"X"},{id:347716823,method:"messages.exportChatInvite",params:[{name:"flags",type:"#"},{name:"legacy_revoke_permanent",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"}],type:"ExportedChatInvite"},{id:1051570619,method:"messages.checkChatInvite",params:[{name:"hash",type:"string"}],type:"ChatInvite"},{id:1817183516,method:"messages.importChatInvite",params:[{name:"hash",type:"string"}],type:"Updates"},{id:639215886,method:"messages.getStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"messages.StickerSet"},{id:-946871200,method:"messages.installStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"archived",type:"Bool"}],type:"messages.StickerSetInstallResult"},{id:-110209570,method:"messages.uninstallStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:-421563528,method:"messages.startBot",params:[{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"long"},{name:"start_param",type:"string"}],type:"Updates"},{id:-1877938321,method:"help.getAppChangelog",params:[{name:"prev_app_version",type:"string"}],type:"Updates"},{id:1468322785,method:"messages.getMessagesViews",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"increment",type:"Bool"}],type:"messages.MessageViews"},{id:-871347913,method:"channels.readHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:-2067661490,method:"channels.deleteMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:-787622117,method:"channels.deleteUserHistory",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"}],type:"messages.AffectedHistory"},{id:-32999408,method:"channels.reportSpam",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"id",type:"Vector"}],type:"Bool"},{id:-1383294429,method:"channels.getMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:306054633,method:"channels.getParticipants",params:[{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelParticipantsFilter"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"channels.ChannelParticipants"},{id:-1599378234,method:"channels.getParticipant",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"channels.ChannelParticipant"},{id:176122811,method:"channels.getChannels",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:141781513,method:"channels.getFullChannel",params:[{name:"channel",type:"InputChannel"}],type:"messages.ChatFull"},{id:1029681423,method:"channels.createChannel",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.0?true"},{name:"megagroup",type:"flags.1?true"},{name:"for_import",type:"flags.3?true"},{name:"title",type:"string"},{name:"about",type:"string"},{name:"geo_point",type:"flags.2?InputGeoPoint"},{name:"address",type:"flags.2?string"}],type:"Updates"},{id:-751007486,method:"channels.editAdmin",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"string"}],type:"Updates"},{id:1450044624,method:"channels.editTitle",params:[{name:"channel",type:"InputChannel"},{name:"title",type:"string"}],type:"Updates"},{id:-248621111,method:"channels.editPhoto",params:[{name:"channel",type:"InputChannel"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:283557164,method:"channels.checkUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:890549214,method:"channels.updateUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:615851205,method:"channels.joinChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:-130635115,method:"channels.leaveChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:429865580,method:"channels.inviteToChannel",params:[{name:"channel",type:"InputChannel"},{name:"users",type:"Vector"}],type:"Updates"},{id:-1072619549,method:"channels.deleteChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:51854712,method:"updates.getChannelDifference",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelMessagesFilter"},{name:"pts",type:"int"},{name:"limit",type:"int"}],type:"updates.ChannelDifference"},{id:-1444503762,method:"messages.editChatAdmin",params:[{name:"chat_id",type:"int"},{name:"user_id",type:"InputUser"},{name:"is_admin",type:"Bool"}],type:"Bool"},{id:363051235,method:"messages.migrateChat",params:[{name:"chat_id",type:"int"}],type:"Updates"},{id:1271290010,method:"messages.searchGlobal",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:2016638777,method:"messages.reorderStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"order",type:"Vector"}],type:"Bool"},{id:864953444,method:"messages.getDocumentByHash",params:[{name:"sha256",type:"bytes"},{name:"size",type:"int"},{name:"mime_type",type:"string"}],type:"Document"},{id:-2084618926,method:"messages.getSavedGifs",params:[{name:"hash",type:"int"}],type:"messages.SavedGifs"},{id:846868683,method:"messages.saveGif",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:1364105629,method:"messages.getInlineBotResults",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"geo_point",type:"flags.0?InputGeoPoint"},{name:"query",type:"string"},{name:"offset",type:"string"}],type:"messages.BotResults"},{id:-346119674,method:"messages.setInlineBotResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"private",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"next_offset",type:"flags.2?string"},{name:"switch_pm",type:"flags.3?InlineBotSwitchPM"}],type:"Bool"},{id:570955184,method:"messages.sendInlineBotResult",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"hide_via",type:"flags.11?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"random_id",type:"long"},{name:"query_id",type:"long"},{name:"id",type:"string"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:-432034325,method:"channels.exportMessageLink",params:[{name:"flags",type:"#"},{name:"grouped",type:"flags.0?true"},{name:"thread",type:"flags.1?true"},{name:"channel",type:"InputChannel"},{name:"id",type:"int"}],type:"ExportedMessageLink"},{id:527021574,method:"channels.toggleSignatures",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1056025023,method:"auth.resendCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"auth.SentCode"},{id:520357240,method:"auth.cancelCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"Bool"},{id:-39416522,method:"messages.getMessageEditData",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"messages.MessageEditData"},{id:1224152952,method:"messages.editMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.15?int"}],type:"Updates"},{id:-2091549254,method:"messages.editInlineBotMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:-1824339449,method:"messages.getBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"game",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"data",type:"flags.0?bytes"},{name:"password",type:"flags.2?InputCheckPasswordSRP"}],type:"messages.BotCallbackAnswer"},{id:-712043766,method:"messages.setBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"Bool"},{id:-728224331,method:"contacts.getTopPeers",params:[{name:"flags",type:"#"},{name:"correspondents",type:"flags.0?true"},{name:"bots_pm",type:"flags.1?true"},{name:"bots_inline",type:"flags.2?true"},{name:"phone_calls",type:"flags.3?true"},{name:"forward_users",type:"flags.4?true"},{name:"forward_chats",type:"flags.5?true"},{name:"groups",type:"flags.10?true"},{name:"channels",type:"flags.15?true"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"contacts.TopPeers"},{id:451113900,method:"contacts.resetTopPeerRating",params:[{name:"category",type:"TopPeerCategory"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-462373635,method:"messages.getPeerDialogs",params:[{name:"peers",type:"Vector"}],type:"messages.PeerDialogs"},{id:-1137057461,method:"messages.saveDraft",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"peer",type:"InputPeer"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:1782549861,method:"messages.getAllDrafts",params:[],type:"Updates"},{id:766298703,method:"messages.getFeaturedStickers",params:[{name:"hash",type:"int"}],type:"messages.FeaturedStickers"},{id:1527873830,method:"messages.readFeaturedStickers",params:[{name:"id",type:"Vector"}],type:"Bool"},{id:1587647177,method:"messages.getRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"hash",type:"int"}],type:"messages.RecentStickers"},{id:958863608,method:"messages.saveRecentSticker",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-1986437075,method:"messages.clearRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"}],type:"Bool"},{id:1475442322,method:"messages.getArchivedStickers",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"offset_id",type:"long"},{name:"limit",type:"int"}],type:"messages.ArchivedStickers"},{id:457157256,method:"account.sendConfirmPhoneCode",params:[{name:"hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1596029123,method:"account.confirmPhone",params:[{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-122669393,method:"channels.getAdminedPublicChannels",params:[{name:"flags",type:"#"},{name:"by_location",type:"flags.0?true"},{name:"check_limit",type:"flags.1?true"}],type:"messages.Chats"},{id:1706608543,method:"messages.getMaskStickers",params:[{name:"hash",type:"int"}],type:"messages.AllStickers"},{id:-866424884,method:"messages.getAttachedStickers",params:[{name:"media",type:"InputStickeredMedia"}],type:"Vector"},{id:-1907842680,method:"auth.dropTempAuthKeys",params:[{name:"except_auth_keys",type:"Vector"}],type:"Bool"},{id:-1896289088,method:"messages.setGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Updates"},{id:363700068,method:"messages.setInlineGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Bool"},{id:-400399203,method:"messages.getGameHighScores",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:258170395,method:"messages.getInlineGameHighScores",params:[{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:218777796,method:"messages.getCommonChats",params:[{name:"user_id",type:"InputUser"},{name:"max_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Chats"},{id:-341307408,method:"messages.getAllChats",params:[{name:"except_ids",type:"Vector"}],type:"messages.Chats"},{id:-333262899,method:"help.setBotUpdatesStatus",params:[{name:"pending_updates_count",type:"int"},{name:"message",type:"string"}],type:"Bool"},{id:852135825,method:"messages.getWebPage",params:[{name:"url",type:"string"},{name:"hash",type:"int"}],type:"WebPage"},{id:-1489903017,method:"messages.toggleDialogPin",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:991616823,method:"messages.reorderPinnedDialogs",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"folder_id",type:"int"},{name:"order",type:"Vector"}],type:"Bool"},{id:-692498958,method:"messages.getPinnedDialogs",params:[{name:"folder_id",type:"int"}],type:"messages.PeerDialogs"},{id:-1440257555,method:"bots.sendCustomRequest",params:[{name:"custom_method",type:"string"},{name:"params",type:"DataJSON"}],type:"DataJSON"},{id:-434028723,method:"bots.answerWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"}],type:"Bool"},{id:619086221,method:"upload.getWebFile",params:[{name:"location",type:"InputWebFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.WebFile"},{id:-1976353651,method:"payments.getPaymentForm",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"theme_params",type:"flags.0?DataJSON"}],type:"payments.PaymentForm"},{id:611897804,method:"payments.getPaymentReceipt",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"payments.PaymentReceipt"},{id:-619695760,method:"payments.validateRequestedInfo",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"info",type:"PaymentRequestedInfo"}],type:"payments.ValidatedRequestedInfo"},{id:818134173,method:"payments.sendPaymentForm",params:[{name:"flags",type:"#"},{name:"form_id",type:"long"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"requested_info_id",type:"flags.0?string"},{name:"shipping_option_id",type:"flags.1?string"},{name:"credentials",type:"InputPaymentCredentials"},{name:"tip_amount",type:"flags.2?long"}],type:"payments.PaymentResult"},{id:1151208273,method:"account.getTmpPassword",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"period",type:"int"}],type:"account.TmpPassword"},{id:578650699,method:"payments.getSavedInfo",params:[],type:"payments.SavedInfo"},{id:-667062079,method:"payments.clearSavedInfo",params:[{name:"flags",type:"#"},{name:"credentials",type:"flags.0?true"},{name:"info",type:"flags.1?true"}],type:"Bool"},{id:-436833542,method:"messages.setBotShippingResults",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"Bool"},{id:163765653,method:"messages.setBotPrecheckoutResults",params:[{name:"flags",type:"#"},{name:"success",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"}],type:"Bool"},{id:-1876841625,method:"stickers.createStickerSet",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"animated",type:"flags.1?true"},{name:"user_id",type:"InputUser"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumb",type:"flags.2?InputDocument"},{name:"stickers",type:"Vector"},{name:"software",type:"flags.3?string"}],type:"messages.StickerSet"},{id:-143257775,method:"stickers.removeStickerFromSet",params:[{name:"sticker",type:"InputDocument"}],type:"messages.StickerSet"},{id:-4795190,method:"stickers.changeStickerPosition",params:[{name:"sticker",type:"InputDocument"},{name:"position",type:"int"}],type:"messages.StickerSet"},{id:-2041315650,method:"stickers.addStickerToSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker",type:"InputStickerSetItem"}],type:"messages.StickerSet"},{id:1369162417,method:"messages.uploadMedia",params:[{name:"peer",type:"InputPeer"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:1430593449,method:"phone.getCallConfig",params:[],type:"DataJSON"},{id:1124046573,method:"phone.requestCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:1003664544,method:"phone.acceptCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:788404002,method:"phone.confirmCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_a",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:399855457,method:"phone.receivedCall",params:[{name:"peer",type:"InputPhoneCall"}],type:"Bool"},{id:-1295269440,method:"phone.discardCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"duration",type:"int"},{name:"reason",type:"PhoneCallDiscardReason"},{name:"connection_id",type:"long"}],type:"Updates"},{id:1508562471,method:"phone.setCallRating",params:[{name:"flags",type:"#"},{name:"user_initiative",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"rating",type:"int"},{name:"comment",type:"string"}],type:"Updates"},{id:662363518,method:"phone.saveCallDebug",params:[{name:"peer",type:"InputPhoneCall"},{name:"debug",type:"DataJSON"}],type:"Bool"},{id:536919235,method:"upload.getCdnFile",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.CdnFile"},{id:-1691921240,method:"upload.reuploadCdnFile",params:[{name:"file_token",type:"bytes"},{name:"request_token",type:"bytes"}],type:"Vector"},{id:1375900482,method:"help.getCdnConfig",params:[],type:"CdnConfig"},{id:-219008246,method:"langpack.getLangPack",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackDifference"},{id:-269862909,method:"langpack.getStrings",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"keys",type:"Vector"}],type:"Vector"},{id:-845657435,method:"langpack.getDifference",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"LangPackDifference"},{id:1120311183,method:"langpack.getLanguages",params:[{name:"lang_pack",type:"string"}],type:"Vector"},{id:-1763259007,method:"channels.editBanned",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:870184064,method:"channels.getAdminLog",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"string"},{name:"events_filter",type:"flags.0?ChannelAdminLogEventsFilter"},{name:"admins",type:"flags.1?Vector"},{name:"max_id",type:"long"},{name:"min_id",type:"long"},{name:"limit",type:"int"}],type:"channels.AdminLogResults"},{id:1302676017,method:"upload.getCdnFileHashes",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"int"}],type:"Vector"},{id:-914493408,method:"messages.sendScreenshotNotification",params:[{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"int"},{name:"random_id",type:"long"}],type:"Updates"},{id:-359881479,method:"channels.setStickers",params:[{name:"channel",type:"InputChannel"},{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:567151374,method:"messages.getFavedStickers",params:[{name:"hash",type:"int"}],type:"messages.FavedStickers"},{id:-1174420133,method:"messages.faveSticker",params:[{name:"id",type:"InputDocument"},{name:"unfave",type:"Bool"}],type:"Bool"},{id:-357180360,method:"channels.readMessageContents",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"Bool"},{id:-2020263951,method:"contacts.resetSaved",params:[],type:"Bool"},{id:1180140658,method:"messages.getUnreadMentions",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:-1355375294,method:"channels.deleteHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:1036054804,method:"help.getRecentMeUrls",params:[{name:"referer",type:"string"}],type:"help.RecentMeUrls"},{id:-356796084,method:"channels.togglePreHistoryHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:251759059,method:"messages.readMentions",params:[{name:"peer",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:-1144759543,method:"messages.getRecentLocations",params:[{name:"peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:-872345397,method:"messages.sendMultiMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"multi_media",type:"Vector"},{name:"schedule_date",type:"flags.10?int"}],type:"Updates"},{id:1347929239,method:"messages.uploadEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"file",type:"InputEncryptedFile"}],type:"EncryptedFile"},{id:405695855,method:"account.getWebAuthorizations",params:[],type:"account.WebAuthorizations"},{id:755087855,method:"account.resetWebAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1747789204,method:"account.resetWebAuthorizations",params:[],type:"Bool"},{id:-1028140917,method:"messages.searchStickerSets",params:[{name:"flags",type:"#"},{name:"exclude_featured",type:"flags.0?true"},{name:"q",type:"string"},{name:"hash",type:"int"}],type:"messages.FoundStickerSets"},{id:-956147407,method:"upload.getFileHashes",params:[{name:"location",type:"InputFileLocation"},{name:"offset",type:"int"}],type:"Vector"},{id:749019089,method:"help.getTermsOfServiceUpdate",params:[],type:"help.TermsOfServiceUpdate"},{id:-294455398,method:"help.acceptTermsOfService",params:[{name:"id",type:"DataJSON"}],type:"Bool"},{id:-1299661699,method:"account.getAllSecureValues",params:[],type:"Vector"},{id:1936088002,method:"account.getSecureValue",params:[{name:"types",type:"Vector"}],type:"Vector"},{id:-1986010339,method:"account.saveSecureValue",params:[{name:"value",type:"InputSecureValue"},{name:"secure_secret_id",type:"long"}],type:"SecureValue"},{id:-1199522741,method:"account.deleteSecureValue",params:[{name:"types",type:"Vector"}],type:"Bool"},{id:-1865902923,method:"users.setSecureValueErrors",params:[{name:"id",type:"InputUser"},{name:"errors",type:"Vector"}],type:"Bool"},{id:-1200903967,method:"account.getAuthorizationForm",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"}],type:"account.AuthorizationForm"},{id:-419267436,method:"account.acceptAuthorization",params:[{name:"bot_id",type:"int"},{name:"scope",type:"string"},{name:"public_key",type:"string"},{name:"value_hashes",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"Bool"},{id:-1516022023,method:"account.sendVerifyPhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1305716726,method:"account.verifyPhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:1880182943,method:"account.sendVerifyEmailCode",params:[{name:"email",type:"string"}],type:"account.SentEmailCode"},{id:-323339813,method:"account.verifyEmail",params:[{name:"email",type:"string"},{name:"code",type:"string"}],type:"Bool"},{id:1072547679,method:"help.getDeepLinkInfo",params:[{name:"path",type:"string"}],type:"help.DeepLinkInfo"},{id:-2098076769,method:"contacts.getSaved",params:[],type:"Vector"},{id:-2092831552,method:"channels.getLeftChannels",params:[{name:"offset",type:"int"}],type:"messages.Chats"},{id:-262453244,method:"account.initTakeoutSession",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"message_users",type:"flags.1?true"},{name:"message_chats",type:"flags.2?true"},{name:"message_megagroups",type:"flags.3?true"},{name:"message_channels",type:"flags.4?true"},{name:"files",type:"flags.5?true"},{name:"file_max_size",type:"flags.5?int"}],type:"account.Takeout"},{id:489050862,method:"account.finishTakeoutSession",params:[{name:"flags",type:"#"},{name:"success",type:"flags.0?true"}],type:"Bool"},{id:486505992,method:"messages.getSplitRanges",params:[],type:"Vector"},{id:911373810,method:"invokeWithMessagesRange",params:[{name:"range",type:"MessageRange"},{name:"query",type:"!X"}],type:"X"},{id:-1398145746,method:"invokeWithTakeout",params:[{name:"takeout_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:-1031349873,method:"messages.markDialogUnread",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:585256482,method:"messages.getDialogUnreadMarks",params:[],type:"Vector"},{id:-2062238246,method:"contacts.toggleTopPeers",params:[{name:"enabled",type:"Bool"}],type:"Bool"},{id:2119757468,method:"messages.clearAllDrafts",params:[],type:"Bool"},{id:-1735311088,method:"help.getAppConfig",params:[],type:"JSONValue"},{id:1862465352,method:"help.saveAppLog",params:[{name:"events",type:"Vector"}],type:"Bool"},{id:-966677240,method:"help.getPassportConfig",params:[{name:"hash",type:"int"}],type:"help.PassportConfig"},{id:1784243458,method:"langpack.getLanguage",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackLanguage"},{id:-760547348,method:"messages.updatePinnedMessage",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"unpin",type:"flags.1?true"},{name:"pm_oneside",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"Updates"},{id:-1881204448,method:"account.confirmPasswordEmail",params:[{name:"code",type:"string"}],type:"Bool"},{id:2055154197,method:"account.resendPasswordEmail",params:[],type:"Bool"},{id:-1043606090,method:"account.cancelPasswordEmail",params:[],type:"Bool"},{id:-748624084,method:"help.getSupportName",params:[],type:"help.SupportName"},{id:59377875,method:"help.getUserInfo",params:[{name:"user_id",type:"InputUser"}],type:"help.UserInfo"},{id:1723407216,method:"help.editUserInfo",params:[{name:"user_id",type:"InputUser"},{name:"message",type:"string"},{name:"entities",type:"Vector"}],type:"help.UserInfo"},{id:-1626880216,method:"account.getContactSignUpNotification",params:[],type:"Bool"},{id:-806076575,method:"account.setContactSignUpNotification",params:[{name:"silent",type:"Bool"}],type:"Bool"},{id:1398240377,method:"account.getNotifyExceptions",params:[{name:"flags",type:"#"},{name:"compare_sound",type:"flags.1?true"},{name:"peer",type:"flags.0?InputNotifyPeer"}],type:"Updates"},{id:283795844,method:"messages.sendVote",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"options",type:"Vector"}],type:"Updates"},{id:1941660731,method:"messages.getPollResults",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1848369232,method:"messages.getOnlines",params:[{name:"peer",type:"InputPeer"}],type:"ChatOnlines"},{id:-2127811866,method:"messages.getStatsURL",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"params",type:"string"}],type:"StatsURL"},{id:-554301545,method:"messages.editChatAbout",params:[{name:"peer",type:"InputPeer"},{name:"about",type:"string"}],type:"Bool"},{id:-1517917375,method:"messages.editChatDefaultBannedRights",params:[{name:"peer",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:-57811990,method:"account.getWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"}],type:"WallPaper"},{id:-578472351,method:"account.uploadWallPaper",params:[{name:"file",type:"InputFile"},{name:"mime_type",type:"string"},{name:"settings",type:"WallPaperSettings"}],type:"WallPaper"},{id:1817860919,method:"account.saveWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"unsave",type:"Bool"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-18000023,method:"account.installWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-1153722364,method:"account.resetWallPapers",params:[],type:"Bool"},{id:1457130303,method:"account.getAutoDownloadSettings",params:[],type:"account.AutoDownloadSettings"},{id:1995661875,method:"account.saveAutoDownloadSettings",params:[{name:"flags",type:"#"},{name:"low",type:"flags.0?true"},{name:"high",type:"flags.1?true"},{name:"settings",type:"AutoDownloadSettings"}],type:"Bool"},{id:899735650,method:"messages.getEmojiKeywords",params:[{name:"lang_code",type:"string"}],type:"EmojiKeywordsDifference"},{id:352892591,method:"messages.getEmojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"EmojiKeywordsDifference"},{id:1318675378,method:"messages.getEmojiKeywordsLanguages",params:[{name:"lang_codes",type:"Vector"}],type:"Vector"},{id:-709817306,method:"messages.getEmojiURL",params:[{name:"lang_code",type:"string"}],type:"EmojiURL"},{id:1749536939,method:"folders.editPeerFolders",params:[{name:"folder_peers",type:"Vector"}],type:"Updates"},{id:472471681,method:"folders.deleteFolder",params:[{name:"folder_id",type:"int"}],type:"Updates"},{id:1932455680,method:"messages.getSearchCounters",params:[{name:"peer",type:"InputPeer"},{name:"filters",type:"Vector"}],type:"Vector"},{id:-170208392,method:"channels.getGroupsForDiscussion",params:[],type:"messages.Chats"},{id:1079520178,method:"channels.setDiscussionGroup",params:[{name:"broadcast",type:"InputChannel"},{name:"group",type:"InputChannel"}],type:"Bool"},{id:428848198,method:"messages.requestUrlAuth",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:-1322487515,method:"messages.acceptUrlAuth",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:1336717624,method:"messages.hidePeerSettingsBar",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-386636848,method:"contacts.addContact",params:[{name:"flags",type:"#"},{name:"add_phone_privacy_exception",type:"flags.0?true"},{name:"id",type:"InputUser"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"phone",type:"string"}],type:"Updates"},{id:-130964977,method:"contacts.acceptContact",params:[{name:"id",type:"InputUser"}],type:"Updates"},{id:-1892102881,method:"channels.editCreator",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"password",type:"InputCheckPasswordSRP"}],type:"Updates"},{id:-750207932,method:"contacts.getLocated",params:[{name:"flags",type:"#"},{name:"background",type:"flags.1?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"self_expires",type:"flags.0?int"}],type:"Updates"},{id:1491484525,method:"channels.editLocation",params:[{name:"channel",type:"InputChannel"},{name:"geo_point",type:"InputGeoPoint"},{name:"address",type:"string"}],type:"Bool"},{id:-304832784,method:"channels.toggleSlowMode",params:[{name:"channel",type:"InputChannel"},{name:"seconds",type:"int"}],type:"Updates"},{id:-490575781,method:"messages.getScheduledHistory",params:[{name:"peer",type:"InputPeer"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:-1111817116,method:"messages.getScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1120369398,method:"messages.sendScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1504586518,method:"messages.deleteScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:473805619,method:"account.uploadTheme",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.0?InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:-2077048289,method:"account.createTheme",params:[{name:"flags",type:"#"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?InputThemeSettings"}],type:"Theme"},{id:1555261397,method:"account.updateTheme",params:[{name:"flags",type:"#"},{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"slug",type:"flags.0?string"},{name:"title",type:"flags.1?string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?InputThemeSettings"}],type:"Theme"},{id:-229175188,method:"account.saveTheme",params:[{name:"theme",type:"InputTheme"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:2061776695,method:"account.installTheme",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"format",type:"flags.1?string"},{name:"theme",type:"flags.1?InputTheme"}],type:"Bool"},{id:-1919060949,method:"account.getTheme",params:[{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"document_id",type:"long"}],type:"Theme"},{id:676939512,method:"account.getThemes",params:[{name:"format",type:"string"},{name:"hash",type:"int"}],type:"account.Themes"},{id:-1313598185,method:"auth.exportLoginToken",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"except_ids",type:"Vector"}],type:"auth.LoginToken"},{id:-1783866140,method:"auth.importLoginToken",params:[{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:-392909491,method:"auth.acceptLoginToken",params:[{name:"token",type:"bytes"}],type:"Authorization"},{id:-1250643605,method:"account.setContentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"}],type:"Bool"},{id:-1952756306,method:"account.getContentSettings",params:[],type:"account.ContentSettings"},{id:300429806,method:"channels.getInactiveChannels",params:[],type:"messages.InactiveChats"},{id:1705865692,method:"account.getMultiWallPapers",params:[{name:"wallpapers",type:"Vector"}],type:"Vector"},{id:-1200736242,method:"messages.getPollVotes",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"option",type:"flags.0?bytes"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.VotesList"},{id:-1257951254,method:"messages.toggleStickerSets",params:[{name:"flags",type:"#"},{name:"uninstall",type:"flags.0?true"},{name:"archive",type:"flags.1?true"},{name:"unarchive",type:"flags.2?true"},{name:"stickersets",type:"Vector"}],type:"Bool"},{id:779736953,method:"payments.getBankCardData",params:[{name:"number",type:"string"}],type:"payments.BankCardData"},{id:-241247891,method:"messages.getDialogFilters",params:[],type:"Vector"},{id:-1566780372,method:"messages.getSuggestedDialogFilters",params:[],type:"Vector"},{id:450142282,method:"messages.updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Bool"},{id:-983318044,method:"messages.updateDialogFiltersOrder",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:-1421720550,method:"stats.getBroadcastStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.BroadcastStats"},{id:1646092192,method:"stats.loadAsyncGraph",params:[{name:"flags",type:"#"},{name:"token",type:"string"},{name:"x",type:"flags.0?long"}],type:"StatsGraph"},{id:-1707717072,method:"stickers.setStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb",type:"InputDocument"}],type:"messages.StickerSet"},{id:85399130,method:"bots.setBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"},{name:"commands",type:"Vector"}],type:"Bool"},{id:1608974939,method:"messages.getOldFeaturedStickers",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"int"}],type:"messages.FeaturedStickers"},{id:-1063816159,method:"help.getPromoData",params:[],type:"help.PromoData"},{id:505748629,method:"help.hidePromoData",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-8744061,method:"phone.sendSignalingData",params:[{name:"peer",type:"InputPhoneCall"},{name:"data",type:"bytes"}],type:"Bool"},{id:-589330937,method:"stats.getMegagroupStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.MegagroupStats"},{id:-349483786,method:"account.getGlobalPrivacySettings",params:[],type:"GlobalPrivacySettings"},{id:517647042,method:"account.setGlobalPrivacySettings",params:[{name:"settings",type:"GlobalPrivacySettings"}],type:"GlobalPrivacySettings"},{id:-183649631,method:"help.dismissSuggestion",params:[{name:"peer",type:"InputPeer"},{name:"suggestion",type:"string"}],type:"Bool"},{id:1935116200,method:"help.getCountriesList",params:[{name:"lang_code",type:"string"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:615875002,method:"messages.getReplies",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"int"}],type:"messages.Messages"},{id:1147761405,method:"messages.getDiscussionMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.DiscussionMessage"},{id:-147740172,method:"messages.readDiscussion",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Bool"},{id:698914348,method:"contacts.blockFromReplies",params:[{name:"flags",type:"#"},{name:"delete_message",type:"flags.0?true"},{name:"delete_history",type:"flags.1?true"},{name:"report_spam",type:"flags.2?true"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1445996571,method:"stats.getMessagePublicForwards",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:-1226791947,method:"stats.getMessageStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"stats.MessageStats"},{id:-265962357,method:"messages.unpinAllMessages",params:[{name:"peer",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:1221445336,method:"phone.createGroupCall",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"schedule_date",type:"flags.1?int"}],type:"Updates"},{id:-1322057861,method:"phone.joinGroupCall",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"video_stopped",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"join_as",type:"InputPeer"},{name:"invite_hash",type:"flags.1?string"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:1342404601,method:"phone.leaveGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"source",type:"int"}],type:"Updates"},{id:2067345760,method:"phone.inviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"Updates"},{id:2054648117,method:"phone.discardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1958458429,method:"phone.toggleGroupCallSettings",params:[{name:"flags",type:"#"},{name:"reset_invite_hash",type:"flags.1?true"},{name:"call",type:"InputGroupCall"},{name:"join_muted",type:"flags.0?Bool"}],type:"Updates"},{id:68699611,method:"phone.getGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"limit",type:"int"}],type:"phone.GroupCall"},{id:-984033109,method:"phone.getGroupParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"ids",type:"Vector"},{name:"sources",type:"Vector"},{name:"offset",type:"string"},{name:"limit",type:"int"}],type:"phone.GroupParticipants"},{id:-1248003721,method:"phone.checkGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"sources",type:"Vector"}],type:"Vector"},{id:-2094760687,method:"messages.deleteChat",params:[{name:"chat_id",type:"int"}],type:"Bool"},{id:-104078327,method:"messages.deletePhoneCallHistory",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"}],type:"messages.AffectedFoundMessages"},{id:1140726259,method:"messages.checkHistoryImport",params:[{name:"import_head",type:"string"}],type:"messages.HistoryImportParsed"},{id:873008187,method:"messages.initHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"file",type:"InputFile"},{name:"media_count",type:"int"}],type:"messages.HistoryImport"},{id:713433234,method:"messages.uploadImportedMedia",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"},{name:"file_name",type:"string"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:-1271008444,method:"messages.startHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"}],type:"Bool"},{id:-1565154314,method:"messages.getExportedChatInvites",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"},{name:"offset_date",type:"flags.2?int"},{name:"offset_link",type:"flags.2?string"},{name:"limit",type:"int"}],type:"messages.ExportedChatInvites"},{id:1937010524,method:"messages.getExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"messages.ExportedChatInvite"},{id:48562110,method:"messages.editExportedChatInvite",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"}],type:"messages.ExportedChatInvite"},{id:1452833749,method:"messages.deleteRevokedExportedChatInvites",params:[{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"}],type:"Bool"},{id:-731601877,method:"messages.deleteExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"Bool"},{id:958457583,method:"messages.getAdminsWithInvites",params:[{name:"peer",type:"InputPeer"}],type:"messages.ChatAdminsWithInvites"},{id:654013065,method:"messages.getChatInviteImporters",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"offset_date",type:"int"},{name:"offset_user",type:"InputUser"},{name:"limit",type:"int"}],type:"messages.ChatInviteImporters"},{id:-1207017500,method:"messages.setHistoryTTL",params:[{name:"peer",type:"InputPeer"},{name:"period",type:"int"}],type:"Updates"},{id:-91437323,method:"account.reportProfilePhoto",params:[{name:"peer",type:"InputPeer"},{name:"photo_id",type:"InputPhoto"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:187239529,method:"channels.convertToGigagroup",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:1573261059,method:"messages.checkHistoryImportPeer",params:[{name:"peer",type:"InputPeer"}],type:"messages.CheckedHistoryImportPeer"},{id:-1070962985,method:"phone.toggleGroupCallRecord",params:[{name:"flags",type:"#"},{name:"start",type:"flags.0?true"},{name:"call",type:"InputGroupCall"},{name:"title",type:"flags.1?string"}],type:"Updates"},{id:-1524155713,method:"phone.editGroupCallParticipant",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"participant",type:"InputPeer"},{name:"muted",type:"flags.0?Bool"},{name:"volume",type:"flags.1?int"},{name:"raise_hand",type:"flags.2?Bool"},{name:"video_stopped",type:"flags.3?Bool"},{name:"video_paused",type:"flags.4?Bool"},{name:"presentation_paused",type:"flags.5?Bool"}],type:"Updates"},{id:480685066,method:"phone.editGroupCallTitle",params:[{name:"call",type:"InputGroupCall"},{name:"title",type:"string"}],type:"Updates"},{id:-277077702,method:"phone.getGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"}],type:"phone.JoinAsPeers"},{id:-425040769,method:"phone.exportGroupCallInvite",params:[{name:"flags",type:"#"},{name:"can_self_unmute",type:"flags.0?true"},{name:"call",type:"InputGroupCall"}],type:"phone.ExportedGroupCallInvite"},{id:563885286,method:"phone.toggleGroupCallStartSubscription",params:[{name:"call",type:"InputGroupCall"},{name:"subscribed",type:"Bool"}],type:"Updates"},{id:1451287362,method:"phone.startScheduledGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1465786252,method:"phone.saveDefaultGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"},{name:"join_as",type:"InputPeer"}],type:"Bool"},{id:-873829436,method:"phone.joinGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:475058500,method:"phone.leaveGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:676017721,method:"stickers.checkShortName",params:[{name:"short_name",type:"string"}],type:"Bool"},{id:1303364867,method:"stickers.suggestShortName",params:[{name:"title",type:"string"}],type:"stickers.SuggestedShortName"},{id:1032708345,method:"bots.resetBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Bool"},{id:-481554986,method:"bots.getBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Vector"},{id:-1828139493,method:"account.resetPassword",params:[],type:"account.ResetPasswordResult"},{id:1284770294,method:"account.declinePasswordReset",params:[],type:"Bool"},{id:221691769,method:"auth.checkRecoveryPassword",params:[{name:"code",type:"string"}],type:"Bool"}]},layer:131},Oe=new Uint8Array(256),qe=new Uint8Array(256),Ge=new Uint32Array(256),Ke=new Uint32Array(256),ze=new Uint32Array(256),He=new Uint32Array(256),je=new Uint32Array(256),We=new Uint32Array(256),Je=new Uint32Array(256),Ze=new Uint32Array(256);function Qe(e){if(e instanceof Uint32Array)return e;if("string"==typeof e){if(e.length%4!=0)for(var t=e.length%4;t<=4;t++)e+="\0x00";var a=new Uint32Array(e.length/4);for(t=0;t>7),r[i[m]^m]=m;for(;!Oe[p];p^=e||1)a=(a=o^o<<1^o<<2^o<<3^o<<4)>>8^255&a^99,Oe[p]=a,qe[a]=p,s=16843009*i[t=i[e=i[p]]]^65537*t^257*e^16843008*p,n=257*i[a]^16843008*a,Ge[p]=n=n<<24^n>>>8,Ke[p]=n=n<<24^n>>>8,ze[p]=n=n<<24^n>>>8,He[p]=n=n<<24^n>>>8,je[a]=s=s<<24^s>>>8,We[a]=s=s<<24^s>>>8,Je[a]=s=s<<24^s>>>8,Ze[a]=s=s<<24^s>>>8,o=r[o]||1}();var Ye=function(){function e(e){var t=Qe(e);if(4!==t.length&&6!==t.length&&8!==t.length)throw new Error("Invalid key size");this.encKey=new Uint32Array(4*t.length+28),this.decKey=new Uint32Array(4*t.length+28),this.encKey.set(t);for(var a,n=1,s=t.length;s<4*t.length+28;s++)a=this.encKey[s-1],(s%t.length==0||8===t.length&&s%t.length==4)&&(a=Oe[a>>>24]<<24^Oe[a>>16&255]<<16^Oe[a>>8&255]<<8^Oe[255&a],s%t.length==0&&(a=a<<8^a>>>24^n<<24,n=n<<1^283*(n>>7))),this.encKey[s]=this.encKey[s-t.length]^a;for(var i=0;s;i++,s--)a=this.encKey[3&i?s:s-4],this.decKey[i]=s<=4||i<4?a:je[Oe[a>>>24]]^We[Oe[a>>16&255]]^Je[Oe[a>>8&255]]^Ze[Oe[255&a]]}return e.prototype.encrypt=function(e){for(var t,a,n,s=Qe(e),i=new Uint32Array(4),r=s[0]^this.encKey[0],p=s[1]^this.encKey[1],o=s[2]^this.encKey[2],m=s[3]^this.encKey[3],d=this.encKey.length/4-2,y=4,c=0;c>>24]^Ke[p>>16&255]^ze[o>>8&255]^He[255&m]^this.encKey[y],a=Ge[p>>>24]^Ke[o>>16&255]^ze[m>>8&255]^He[255&r]^this.encKey[y+1],n=Ge[o>>>24]^Ke[m>>16&255]^ze[r>>8&255]^He[255&p]^this.encKey[y+2],m=Ge[m>>>24]^Ke[r>>16&255]^ze[p>>8&255]^He[255&o]^this.encKey[y+3],r=t,p=a,o=n,y+=4;for(c=0;c<4;c++)i[c]=Oe[r>>>24]<<24^Oe[p>>16&255]<<16^Oe[o>>8&255]<<8^Oe[255&m]^this.encKey[y++],t=r,r=p,p=o,o=m,m=t;return i},e.prototype.decrypt=function(e){for(var t,a,n,s=Qe(e),i=new Uint32Array(4),r=s[0]^this.decKey[0],p=s[3]^this.decKey[1],o=s[2]^this.decKey[2],m=s[1]^this.decKey[3],d=this.decKey.length/4-2,y=4,c=0;c>>24]^We[p>>16&255]^Je[o>>8&255]^Ze[255&m]^this.decKey[y],a=je[p>>>24]^We[o>>16&255]^Je[m>>8&255]^Ze[255&r]^this.decKey[y+1],n=je[o>>>24]^We[m>>16&255]^Je[r>>8&255]^Ze[255&p]^this.decKey[y+2],m=je[m>>>24]^We[r>>16&255]^Je[p>>8&255]^Ze[255&o]^this.decKey[y+3],r=t,p=a,o=n,y+=4;for(c=0;c<4;c++)i[3&-c]=qe[r>>>24]<<24^qe[p>>16&255]<<16^qe[o>>8&255]<<8^qe[255&m]^this.decKey[y++],t=r,r=p,p=o,o=m,m=t;return i},e}(),$e=function(){function e(e,t,a){void 0===a&&(a=16),this.key=Qe(e),this.iv=Qe(t),this.cipher=new Ye(e),this.blockSize=a/4}return e.prototype.encrypt=function(e,t){for(var a=Qe(e),n=t||new Uint32Array(a.length),s=this.iv.subarray(this.blockSize,this.iv.length),i=this.iv.subarray(0,this.blockSize),r=new Uint32Array(this.blockSize),p=0;p=this.blockSize&&this.incrementCounter(),s&&(i-=s,s=0)}return this.offset=(this.offset+a.length%4)%4,n},e.prototype.decrypt=function(e,t){return this.encrypt(e,t)},e.prototype.incrementCounter=function(){for(var e=this.counter.length-1;e>=0&&!(++this.counter[e]<4294967295);e--);}}(),Ye),tt=a(0),at=a.n(tt);const nt={8:new Uint8Array(1),16:new Uint16Array(1),32:new Uint32Array(1)};function st(e){const t=nt[e];return crypto.getRandomValues(t),t[0]}var it=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const rt="undefined"!=typeof window&&"crypto"in window?window.crypto.subtle:self.crypto.subtle;function pt(e){return rt.digest("SHA-1",p(e)).then(e=>new Uint8Array(e))}function ot(e){return rt.digest("SHA-256",p(e)).then(e=>new Uint8Array(e))}function mt(e,t,a){e=Le(e);return m(new $e(d(t),d(a)).encrypt(d(e)))}function dt(e,t,a){return m(new $e(d(t),d(a)).decrypt(d(e)))}function yt(e,t){const a=oe(t.modulus,16),i=oe(t.exponent,16);return s(ce(Y(oe(n(e),16),i,a),16))}function ct(e,t,a){return it(this,void 0,void 0,(function*(){const n=yield rt.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]);return rt.deriveBits({name:"PBKDF2",salt:t,iterations:a,hash:{name:"SHA-512"}},n,512).then(e=>new Uint8Array(e))}))}function lt(e){let t;try{t=function(e){var t,a,n,s,i,r,p=Math.ceil(64/M)+1,o=0,m=new Array(p),d=new Array(p),y=new Array(p),c=new Array(p),l=new Array(p),g=new Array(p),h=new Array(p);for(t=0;t<3;++t){for(a=17+(15&st(8)),ue(g,Q(pe(st(32),32,0),e)),ue(h,g),s=1<"boolFalse"===e.predicate).id,ft=+Ne.API.constructors.find(e=>"boolTrue"===e.predicate).id,_t=+Ne.API.constructors.find(e=>"vector"===e.predicate).id,vt=+Ne.MTProto.constructors.find(e=>"gzip_packed"===e.predicate).id;class bt{constructor(e={}){this.maxLength=2048,this.offset=0,this.mtproto=!1,this.debug=!1,this.maxLength=e.startMaxLength||2048,this.mtproto=e.mtproto||!1,this.createBuffer()}createBuffer(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)}getArray(){const e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t}getBuffer(){return this.getArray().buffer}getBytes(e=!0){if(e){const e=new ArrayBuffer(this.offset),t=new Uint8Array(e);return t.set(this.byteView.subarray(0,this.offset)),t}const t=new Array(this.offset);for(let e=0;e>>",e.toString(16),e,t);const a=this.offset/4;return this.checkLength(4),this.intView[a]=e,this.offset+=4,a}storeInt(e,t){return this.writeInt(e,(t||"")+":int")}storeBool(e,t){e?this.writeInt(ft,(t||"")+":bool"):this.writeInt(ut,(t||"")+":bool")}storeLongP(e,t,a){this.writeInt(t,(a||"")+":long[low]"),this.writeInt(e,(a||"")+":long[high]")}storeLong(e,t){if(Array.isArray(e))return 2===e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);"string"!=typeof e&&(e=e?e.toString():"0");const a=4294967296,n=oe(e,10,64),s=he(n),i=he(n);ie(n,oe(a.toString(16),16,64),s,i);const r=+ce(s,10);let p=+ce(i,10);r>>",e,(t||"")+":string"),void 0===e&&(e="");const a=unescape(encodeURIComponent(e));this.checkLength(a.length+8);const n=a.length;n<=253?this.byteView[this.offset++]=n:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&n,this.byteView[this.offset++]=(65280&n)>>8,this.byteView[this.offset++]=(16711680&n)>>16);for(let e=0;e>>",n(e),(t||"")+":bytes");const a=e.length;for(this.checkLength(a+8),a<=253?this.byteView[this.offset++]=a:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&a,this.byteView[this.offset++]=(65280&a)>>8,this.byteView[this.offset++]=(16711680&a)>>16),this.byteView.set(e,this.offset),this.offset+=a;this.offset%4;)this.byteView[this.offset++]=0}storeIntBytes(e,t,a){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const s=e.length;if(t%32||8*s!==t){const n=new Error("Invalid bits: "+t+", "+s);throw console.error(n,e,a),n}this.debug&&console.log(">>>",n(e),(a||"")+":int"+t),this.checkLength(s),this.byteView.set(e,this.offset),this.offset+=s}storeRawBytes(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const a=e.length;this.debug&&console.log(">>>",n(e),t||""),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a}storeMethod(e,t){const a=(this.mtproto?Ne.MTProto:Ne.API).methods.find(t=>t.method===e);if(!a)throw new Error("No method "+e+" found");this.storeInt(a.id,e+"[id]");const n=t.pFlags||t,s={};for(const i of a.params){let a=i.type;if(-1!==a.indexOf("?")){const e=a.split("?"),s=e[0].split(".");if(!(t[s[0]]&1<<+s[1])){if(!("true"===e[1]?n[i.name]:void 0!==t[i.name]))continue;t[s[0]]|=1<<+s[1]}a=e[1]}const r=this.storeObject(t[i.name],a,e+"["+i.name+"]");"#"===a&&(t[i.name]=t[i.name]||0,s[i.name]=r)}for(let e in s)this.intView[s[e]]=t[e];return a.type}storeObject(e,t,a){switch(t){case"#":e=e||0;case"int":return this.storeInt(e,a);case"long":return this.storeLong(e,a);case"int128":return this.storeIntBytes(e,128,a);case"int256":return this.storeIntBytes(e,256,a);case"int512":return this.storeIntBytes(e,512,a);case"string":return this.storeString(e,a);case"bytes":return this.storeBytes(e,a);case"double":return this.storeDouble(e,a);case"Bool":return this.storeBool(e,a);case"true":return}if(Array.isArray(e)){if("Vector"===t.substr(0,6))this.writeInt(_t,a+"[id]");else if("vector"!==t.substr(0,6))throw new Error("Invalid vector type "+t);const n=t.substr(7,t.length-8);this.writeInt(e.length,a+"[count]");for(let t=0;te.predicate===s);if((i="%"===t.charAt(0))&&(t=t.substr(1)),!r)throw new Error("No predicate "+s+" found");s===t&&(i=!0),i||this.writeInt(r.id,a+"["+s+"][id]");const p=e.pFlags,o={};for(const t of r.params){let n=t.type;if(-1!==n.indexOf("?")){const a=n.split("?"),s=a[0].split(".");if(!(e[s[0]]&1<<+s[1])){if(!("true"===a[1]?p&&p[t.name]:void 0!==e[t.name]))continue;e[s[0]]|=1<<+s[1]}n=a[1]}const i=this.storeObject(e[t.name],n,a+"["+s+"]["+t.name+"]");"#"===n&&(e[t.name]=e[t.name]||0,o[t.name]=i)}for(let t in o)this.intView[o[t]]=e[t];return r.type}}class Pt{constructor(e,t={}){this.offset=0,this.mtproto=!1,e instanceof ArrayBuffer?(this.buffer=e,this.intView=new Int32Array(e),this.byteView=new Uint8Array(this.buffer)):(this.buffer=e.buffer,this.intView=new Int32Array(e.buffer),this.byteView=e),this.override="override"in t?t.override:{},this.mtproto="mtproto"in t&&t.mtproto,this.debug=void 0!==t.debug&&t.debug}readInt(e){if(this.byteView.length-this.offset<4)throw console.error(this.byteView,this.offset),new Error("Nothing to fetch: "+e);const t=this.intView[this.offset/4];return this.debug&&console.log("<<<",t.toString(16),t,e,this.byteView.slice(this.offset-16,this.offset+16),this.byteView.slice(this.offset-16,this.offset+16).hex),this.offset+=4,t}fetchInt(e){return this.readInt((e||"")+":int")}fetchDouble(e){const t=new ArrayBuffer(8),a=new Int32Array(t),n=new Float64Array(t);return a[0]=this.readInt((e||"")+":double[low]"),a[1]=this.readInt((e||"")+":double[high]"),n[0]}fetchLong(e){const t=this.readInt((e||"")+":long[low]");return Fe(this.readInt((e||"")+":long[high]"),t)}fetchBool(e){const t=this.readInt((e||"")+":bool");return t===ft||t!==ut&&(this.offset-=4,this.fetchObject("Object",e))}fetchString(e){let t=this.byteView[this.offset++];254===t&&(t=this.byteView[this.offset++]|this.byteView[this.offset++]<<8|this.byteView[this.offset++]<<16);let a,n="";for(let e=0;ethis.byteView.byteLength)throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){const t=new Uint8Array(e);return t.set(this.byteView.subarray(this.offset,this.offset+e)),this.offset+=e,t}const s=new Array(e);for(let t=0;t0){const s=e.substr(7,e.length-8);for(let e=0;ee.type===t),!n)throw new Error("Constructor not found for type: "+e)}else{const i=this.readInt(t+"[id]");if(i===vt){const a=ht(this.fetchBytes(t+"[packed_string]"));return new Pt(a).fetchObject(e,t)}if(i===_t)return this.fetchVector(e,t);let r=a.constructorsIndex;if(!r){a.constructorsIndex=r={};for(let e=0,t=a.constructors.length;ee|t,0)},n}var At=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};Ct("SRP",wt.Error);function Mt(e,t,a){return At(this,void 0,void 0,(function*(){const i=a?t.new_algo:t.current_algo,m=oe(n(i.p),16),d=oe(n(t.srp_B),16),y=pe(i.g,32,256),c=oe(n(yield function(e,t,a){return At(this,void 0,void 0,(function*(){let n=yield Rt.invokeCrypto("sha256-hash",o(t,(new TextEncoder).encode(e),t));n=o(a,n,a),n=yield Rt.invokeCrypto("sha256-hash",n);let s=yield Rt.invokeCrypto("pbkdf2",new Uint8Array(n),t,1e5);return s=o(a,s,a),n=yield Rt.invokeCrypto("sha256-hash",s),n}))}(e,i.salt1,i.salt2)),16),l=function(e,t){return e instanceof Uint8Array||(e=p(e)),Le(e,t,!0,!0,!0)},g=l(s(ce(m,16)),256),h=l(s(ce(y,16)),256),u=l(s(ce(d,16)),256),f=Y(y,c,m),_=e=>{const t=new Uint8Array(e.length);for(let a=0;a{const a=$(t,e);return!(ae(a)||J(a)<1984||J(e)<1984||Math.floor((J(e)+7)/8)>256)},{a:P,a_for_hash:w,u:S}=yield(()=>At(this,void 0,void 0,(function*(){for(;;){const e=oe(n(_(t.secure_random)),16),a=Y(y,e,m);if(b(a,m)){const t=s(ce(a,16)),n=oe((yield Rt.invokeCrypto("sha256-hash",o(t,u))).hex,16);if(!ye(n)&&!ae(n))return{a:e,a_for_hash:t,u:n}}}})))();let k;k=se(d,v)?d:ee(d,m),k=Q($(k,v),m);const I=Y(k,ee(P,X(S,c)),m),C=yield Rt.invokeCrypto("sha256-hash",l(s(ce(I,16)),256));let A=yield Rt.invokeCrypto("sha256-hash",g);A=r(A,yield Rt.invokeCrypto("sha256-hash",h));const M=o(A,yield Rt.invokeCrypto("sha256-hash",i.salt1),yield Rt.invokeCrypto("sha256-hash",i.salt2),w,u,C),R=yield Rt.invokeCrypto("sha256-hash",M);return{_:"inputCheckPasswordSRP",srp_id:t.srp_id,A:new Uint8Array(w),M1:R}}))}var Rt=new class extends class{invokeCrypto(e,...t){return this.performTaskWorker(e,...t)}}{constructor(){super(),this.webWorker=!1,this.taskId=0,this.awaiting={},this.pending=[],this.debug=!1,console.log("CW constructor"),this.utils={"sha1-hash":pt,"sha256-hash":ot,pbkdf2:ct,"aes-encrypt":mt,"aes-decrypt":dt,"rsa-encrypt":yt,factorize:lt,"mod-pow":gt,gzipUncompress:ht,computeSRP:Mt}}performTaskWorker(e,...t){return this.debug&&console.log("CW start",e,t),Promise.resolve(this.utils[e](...t))}};const Et=new class{constructor(){this.lastMessageId=[0,0],this.timeOffset=0,A.get("server_time_offset").then(e=>{e&&(this.timeOffset=e)})}generateId(){const e=Date.now();let t=[Math.floor(e/1e3)+this.timeOffset,e%1e3<<21|st(16)<<3|4];(this.lastMessageId[0]>t[0]||this.lastMessageId[0]===t[0]&&this.lastMessageId[1]>=t[1])&&(t=[this.lastMessageId[0],this.lastMessageId[1]+4]),this.lastMessageId=t;return Fe(t[0],t[1])}applyServerTime(e,t){const a=e-(t=(t||Date.now())/1e3|0),n=Math.abs(this.timeOffset-a)>10;A.set({server_time_offset:a}),this.lastMessageId=[0,0],this.timeOffset=a;return P({type:"applyServerTimeOffset",payload:a}),n}};l.timeManager=Et;var Vt=Et;const Dt={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"0.8.6",versionFull:"0.8.6 (6)",langPackVersion:"0.3.3",langPack:"macos",langPackCode:"en",domains:["web.telegram.org"],baseDcId:2,isMainDomain:"web.telegram.org"===location.hostname,suffix:"K"};Dt.isMainDomain&&(Dt.id=2496,Dt.hash="8da85b0d5bfe62527e5b244c209159c3");var Ut=Dt;var Bt;!function(e){e[e.Connected=0]="Connected",e[e.Connecting=1]="Connecting",e[e.Closed=2]="Closed",e[e.TimedOut=3]="TimedOut"}(Bt||(Bt={}));var Tt=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};let xt;class Ft{constructor(e,t,a,n,s,i={}){this.dcId=e,this.authKey=t,this.authKeyId=a,this.transport=s,this.lastServerMessages=[],this.sentMessages={},this.pendingMessages={},this.pendingAcks=[],this.pendingResends=[],this.connectionInited=!1,this.nextReq=0,this.seqNo=0,this.lastResendReq=null,this.isOnline=!1,this.status=Bt.Closed,this.lastResponseTime=0,this.debug=g||y.debug,this.activeRequests=0,this.authKeyUint8=p(this.authKey),this.serverSalt=p(n),this.isFileUpload=!!i.fileUpload,this.isFileDownload=!!i.fileDownload,this.isFileNetworker=this.isFileUpload||this.isFileDownload;const r=this.isFileUpload?"-U":this.isFileDownload?"-D":"";this.name="NET-"+e+r,this.log=Ct(this.name,wt.Log|wt.Error|wt.Warn),this.log("constructor"),this.updateSession(),this.transport.networker=this,this.transport.connected&&this.setConnectionStatus(Bt.Connected)}updateSession(){this.seqNo=0,this.prevSessionId=this.sessionId,this.sessionId=new Uint8Array(8).randomize()}updateSentMessage(e){const t=this.sentMessages[e];return!!t&&(t.container&&function(e,t){for(let a=e.length-1;a>=0;--a)t(e[a],a,e)}(t.inner,(e,a)=>{const n=this.updateSentMessage(e);n?t.inner[a]=n.msg_id:t.inner.splice(a,1)}),t.msg_id=Vt.generateId(),t.seq_no=this.generateSeqNo(t.notContentRelated||t.container),this.sentMessages[t.msg_id]=t,delete this.sentMessages[e],t)}generateSeqNo(e){let t=2*this.seqNo;return e||(t++,this.seqNo++),t}wrapMtpCall(e,t,a){const n=new bt({mtproto:!0});n.storeMethod(e,t);const s=Vt.generateId(),i=this.generateSeqNo(),r={msg_id:s,seq_no:i,body:n.getBytes(!0)};return y.debug&&this.log("MT call",e,t,s,i),this.pushMessage(r,a)}wrapMtpMessage(e,t){const a=new bt({mtproto:!0});a.storeObject(e,"Object");const n=Vt.generateId(),s=this.generateSeqNo(t.notContentRelated),i={msg_id:n,seq_no:s,body:a.getBytes(!0)};return y.debug&&this.log("MT message",e,n,s),this.pushMessage(i,t)}wrapApiCall(e,t={},a={}){const n=new bt(a);if(!this.connectionInited){const e=Ne.API.methods.find(e=>"invokeWithLayer"===e.method);if(!e)throw new Error("no invokeWithLayer!");n.storeInt(+e.id,"invokeWithLayer"),n.storeInt(Ne.layer,"layer");const t=Ne.API.methods.find(e=>"initConnection"===e.method);if(!t)throw new Error("no initConnection!");n.storeInt(+t.id,"initConnection"),n.storeInt(0,"flags"),n.storeInt(Ut.id,"api_id"),n.storeString(Nt.userAgent||"Unknown UserAgent","device_model"),n.storeString(navigator.platform||"Unknown Platform","system_version"),n.storeString(Ut.version+(Ut.isMainDomain?" "+Ut.suffix:""),"app_version"),n.storeString(navigator.language||"en","system_lang_code"),n.storeString(Ut.langPack,"lang_pack"),n.storeString(Nt.language,"lang_code")}if(a.afterMessageId){if(void 0===xt){const e=Ne.API.methods.find(e=>"invokeAfterMsg"===e.method);xt=e?+e.id:0}xt?(n.storeInt(xt,"invokeAfterMsg"),n.storeLong(a.afterMessageId,"msg_id")):this.log.error("no invokeAfterMsg!")}a.resultType=n.storeMethod(e,t);const s={msg_id:Vt.generateId(),seq_no:this.generateSeqNo(),body:n.getBytes(!0),isAPI:!0};return y.debug?this.log("Api call",e,s,t,a):this.debug&&this.log("Api call",e,t,a),this.pushMessage(s,a)}destroy(){this.transport.destroy()}forceReconnectTimeout(){this.transport.reconnect&&this.transport.reconnect()}forceReconnect(){this.transport.forceReconnect&&this.transport.forceReconnect()}pushMessage(e,t){const a=new Promise((a,n)=>{this.sentMessages[e.msg_id]=Object.assign(e,t,t.notContentRelated?void 0:{deferred:{resolve:a,reject:n}}),this.pendingMessages[e.msg_id]=0,t.noSchedule||this.scheduleRequest(),Te(t)&&(t.messageId=e.msg_id)});if(!t.notContentRelated&&!t.noResponse){const t=setTimeout(()=>{this.lastResponseTime&&Date.now()-this.lastResponseTime<5e3||(this.log.error("timeout",e),this.isOnline&&this.setConnectionStatus(Bt.TimedOut))},5e3);a.finally(()=>{clearTimeout(t),this.setConnectionStatus(Bt.Connected),--this.activeRequests,this.setDrainTimeout()}),++this.activeRequests,void 0!==this.onDrainTimeout&&(clearTimeout(this.onDrainTimeout),this.onDrainTimeout=void 0)}return a}setDrainTimeout(){!this.activeRequests&&this.onDrain&&void 0===this.onDrainTimeout&&(this.onDrainTimeout=self.setTimeout(()=>{this.onDrainTimeout=void 0,this.log("drain"),this.onDrain()},1e4))}setConnectionStatus(e,t){const a=e===Bt.Connected,n=this.status!==e;this.isOnline=a,this.status=e,n&&(Nt.onConnectionStatusChange&&Nt.onConnectionStatusChange({_:"networkerStatus",status:e,dcId:this.dcId,name:this.name,isFileNetworker:this.isFileNetworker,isFileDownload:this.isFileDownload,isFileUpload:this.isFileUpload,retryAt:t}),this.isOnline&&this.scheduleRequest())}pushResend(e,t=100){const a=t?Date.now()+t:0,n=this.sentMessages[e];if(n.container)for(const e of n.inner)this.pendingMessages[e]=a;else this.pendingMessages[e]=a;n.acked&&this.log.error("pushResend: acked message?",n),this.debug&&this.log.debug("pushResend:",e,n,this.pendingMessages,t),this.scheduleRequest(t)}getMsgKey(e,t){return Tt(this,void 0,void 0,(function*(){const a=t?0:8,n=o(this.authKeyUint8.subarray(88+a,88+a+32),e),s=yield Rt.invokeCrypto("sha256-hash",n);return new Uint8Array(s).subarray(8,24)}))}getAesKeyIv(e,t){const a=t?0:8,n=new Uint8Array(52),s=new Uint8Array(52),i=[];return n.set(e,0),n.set(this.authKeyUint8.subarray(a,a+36),16),i.push(Rt.invokeCrypto("sha256-hash",n)),s.set(this.authKeyUint8.subarray(40+a,40+a+36),0),s.set(e,36),i.push(Rt.invokeCrypto("sha256-hash",s)),Promise.all(i).then(e=>{const t=new Uint8Array(32),a=new Uint8Array(32),n=new Uint8Array(e[0]),s=new Uint8Array(e[1]);return t.set(n.subarray(0,8)),t.set(s.subarray(8,24),8),t.set(n.subarray(24,32),24),a.set(s.subarray(0,8)),a.set(n.subarray(8,24),8),a.set(s.subarray(24,32),24),[t,a]})}isStopped(){return Nt.akStopped&&!this.isFileNetworker}performScheduledRequest(){if(this.isStopped())return!1;if(this.pendingAcks.length){const e=this.pendingAcks.slice();this.wrapMtpMessage({_:"msgs_ack",msg_ids:e},{notContentRelated:!0,noSchedule:!0})}if(this.pendingResends.length){const e=this.pendingResends.slice(),t={noSchedule:!0,notContentRelated:!0,messageId:""};this.wrapMtpMessage({_:"msg_resend_req",msg_ids:e},t),this.lastResendReq={req_msg_id:t.messageId,resend_msg_ids:e}}let e;const t=[];let a=0,n=!1;const s=Object.keys(this.pendingMessages).map(e=>oe(e,10)).sort((e,t)=>ge(e,t)).map(e=>ce(e,10));for(const i of s){const s=this.sentMessages[i];if(s&&s.body){const i=s.body.length+32;if(a+i>655360&&(this.log.warn("lengthOverflow",s,t),n=!0,e))break;t.push(s),a+=i,e=s}delete this.pendingMessages[i]}if(!t.length)return;if(t.length>1){const n=this.generateContainerMessage(a,t);e=n.messageWithBody,this.sentMessages[e.msg_id]=n.message}else this.sentMessages[e.msg_id]=e;this.pendingAcks=[];this.sendEncryptedRequest(e);this.cleanupSent(),n&&this.scheduleRequest()}generateContainerMessage(e,t){const a=new bt({mtproto:!0,startMaxLength:e+64});a.storeInt(1945237724,"CONTAINER[id]"),a.storeInt(t.length,"CONTAINER[count]");const n=[];t.forEach((e,t)=>{n.push(e.msg_id),a.storeLong(e.msg_id,"CONTAINER["+t+"][msg_id]"),a.storeInt(e.seq_no,"CONTAINER["+t+"][seq_no]"),a.storeInt(e.body.length,"CONTAINER["+t+"][bytes]"),a.storeRawBytes(e.body,"CONTAINER["+t+"][body]")});const s={msg_id:Vt.generateId(),seq_no:this.generateSeqNo(!0),container:!0,inner:n};return y.debug&&this.log.warn("Container",n,s.msg_id,s.seq_no),{message:s,messageWithBody:Object.assign({body:a.getBytes(!0)},s)}}getEncryptedMessage(e){return Tt(this,void 0,void 0,(function*(){const t=yield this.getMsgKey(e,!0),a=yield this.getAesKeyIv(t,!0);return{bytes:yield Rt.invokeCrypto("aes-encrypt",e,a[0],a[1]),msgKey:t}}))}getDecryptedMessage(e,t){return this.getAesKeyIv(e,!1).then(e=>Rt.invokeCrypto("aes-decrypt",t,e[0],e[1]))}getEncryptedOutput(e){const t=new bt({startMaxLength:e.body.length+2048});t.storeIntBytes(this.serverSalt,64,"salt"),t.storeIntBytes(this.sessionId,64,"session_id"),t.storeLong(e.msg_id,"message_id"),t.storeInt(e.seq_no,"seq_no"),t.storeInt(e.body.length,"message_data_length"),t.storeRawBytes(e.body,"message_data");const a=t.getBuffer(),n=16-t.getOffset()%16+16*(1+st(8)%5),s=o(a,new Uint8Array(n).randomize());return this.getEncryptedMessage(s).then(e=>{const t=new bt({startMaxLength:e.bytes.length+256});t.storeIntBytes(this.authKeyId,64,"auth_key_id"),t.storeIntBytes(e.msgKey,128,"msg_key"),t.storeRawBytes(e.bytes,"encrypted_data");return t.getBytes(!0)})}sendEncryptedRequest(e){return this.getEncryptedOutput(e).then(t=>{this.debug&&this.log.debug("sendEncryptedRequest: launching message into space:",e,[e.msg_id].concat(e.inner||[]));return this.transport.send(t)})}parseResponse(e){this.lastResponseTime=Date.now();const t=new Pt(e),a=t.fetchIntBytes(64,!0,"auth_key_id");if(!i(a,this.authKeyId))throw new Error("[MT] Invalid server auth_key_id: "+a.hex);const s=t.fetchIntBytes(128,!0,"msg_key"),r=t.fetchRawBytes(e.byteLength-t.getOffset(),!0,"encrypted_data");return this.getDecryptedMessage(s,r).then(e=>this.getMsgKey(e,!1).then(t=>{if(!i(s,t))throw this.log.warn("[MT] msg_keys",s,t),this.updateSession(),new Error("[MT] server msgKey mismatch, updating session");let a=new Pt(e,{mtproto:!0});a.fetchIntBytes(64,!0,"salt");const r=a.fetchIntBytes(64,!0,"session_id"),p=a.fetchLong("message_id");if(!(i(r,this.sessionId)||this.prevSessionId&&i(r,this.prevSessionId)))throw this.log.warn("Sessions",r,this.sessionId,this.prevSessionId,e),new Error("[MT] Invalid server session_id: "+n(r));const o=a.fetchInt("seq_no"),m=e.byteLength,d=a.fetchInt("message_data[length]");let y=a.getOffset();if(d%4||d>m-y)throw new Error("[MT] Invalid body length: "+d);const c=a.fetchRawBytes(d,!0,"message_data");y=a.getOffset();const l=m-y;if(l<12||l>1024)throw new Error("[MT] Invalid padding length: "+l);a=new Pt(c,{mtproto:!0,override:{mt_message:(e,t)=>{e.msg_id=a.fetchLong(t+"[msg_id]"),e.seqno=a.fetchInt(t+"[seqno]"),e.bytes=a.fetchInt(t+"[bytes]");const n=a.getOffset();try{e.body=a.fetchObject("Object",t+"[body]")}catch(t){this.log.error("parse error",t.message,t.stack),e.body={_:"parse_error",error:t}}a.getOffset()!==n+e.bytes&&a.setOffset(n+e.bytes)},mt_rpc_result:(e,t)=>{e.req_msg_id=a.fetchLong(t+"[req_msg_id]");const n=this.sentMessages[e.req_msg_id],s=n&&n.resultType||"Object";e.req_msg_id&&!n||(e.result=a.fetchObject(s,t+"[result]"))}}});return{response:a.fetchObject("","INPUT"),messageId:p,sessionId:r,seqNo:o}}))}applyServerSalt(e){const t=Le(new Uint8Array(le(oe(e,10),!1)),8,!0,!1,!1);A.set({["dc"+this.dcId+"_server_salt"]:n(t)}),this.serverSalt=new Uint8Array(t)}scheduleRequest(e){const t=Date.now()+(e||0);if(this.nextReq&&(void 0===e||this.nextReq<=t))return;this.nextReqTimeout&&clearTimeout(this.nextReqTimeout);const a=()=>{this.nextReqTimeout=0,this.nextReq=0,this.performScheduledRequest()};this.nextReq=t,e?this.nextReqTimeout=self.setTimeout(a,e):a()}ackMessage(e){this.pendingAcks.push(e),this.scheduleRequest()}reqResendMessage(e){this.debug&&this.log.debug("Req resend",e),this.pendingResends.push(e),this.scheduleRequest(100)}cleanupSent(){let e=!1;return Object.keys(this.sentMessages).forEach(t=>{const a=this.sentMessages[t];if(a.notContentRelated&&void 0===this.pendingMessages[t])delete this.sentMessages[t];else if(a.container){for(const t of a.inner)if(void 0!==this.sentMessages[t])return void(e=!0);delete this.sentMessages[t]}else e=!0}),!e}processMessageAck(e){const t=this.sentMessages[e];t&&!t.acked&&(t.acked=!0)}processError(e){const t=(e.error_message||"").match(/^([A-Z_0-9]+\b)(: (.+))?/)||[];return e.error_code=e.error_code,{code:!e.error_code||e.error_code<=0?500:e.error_code,type:t[1]||"UNKNOWN",description:t[3]||"CODE#"+e.error_code+" "+e.error_message,originalError:e}}resend(){for(const e in this.sentMessages){const t=this.sentMessages[e];(t.body||t.container)&&this.pushResend(e)}}processMessage(e,t,a){if("messageEmpty"===e._)return void this.log.warn("processMessage: messageEmpty",e,t);if(parseInt(t.substr(0,-10),10)%2)this.log.warn("Server even message id: ",t,e);else switch(e._){case"msg_container":for(const t of e.messages)this.processMessage(t,t.msg_id,a);break;case"bad_server_salt":this.log("Bad server salt",e),this.applyServerSalt(e.new_server_salt),this.sentMessages[e.bad_msg_id]&&this.pushResend(e.bad_msg_id),this.ackMessage(t);break;case"bad_msg_notification":switch(this.log.error("Bad msg notification",e),e.error_code){case 16:case 17:case 32:case 33:case 64:{const a=oe(t,10);ve(a,32);const n=Vt.applyServerTime(+ce(a,10));(17===e.error_code||n)&&(this.log("Update session"),this.updateSession());const s=this.updateSentMessage(e.bad_msg_id);s&&this.pushResend(s.msg_id)}}break;case"message":if(-1!==this.lastServerMessages.indexOf(t))return void this.ackMessage(t);this.lastServerMessages.push(t),this.lastServerMessages.length>100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(t),this.debug&&this.log.debug("new_session_created",e),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt),A.get("dc").then(t=>{t===this.dcId&&!this.isFileNetworker&&Nt.updatesProcessor&&Nt.updatesProcessor(e)});break;case"msgs_ack":for(const t of e.msg_ids)this.processMessageAck(t);break;case"msg_detailed_info":if(!this.sentMessages[e.msg_id]){this.ackMessage(e.answer_msg_id);break}case"msg_new_detailed_info":if(this.pendingAcks.indexOf(e.answer_msg_id))break;this.reqResendMessage(e.answer_msg_id);break;case"msgs_state_info":if(this.ackMessage(e.answer_msg_id),this.lastResendReq&&this.lastResendReq.req_msg_id===e.req_msg_id&&this.pendingResends.length)for(const e of this.lastResendReq.resend_msg_ids){const t=this.pendingResends.indexOf(e);-1!==t&&this.pendingResends.splice(t,1)}break;case"rpc_result":{this.ackMessage(t);const a=e.req_msg_id,n=this.sentMessages[a];if(this.processMessageAck(a),n){const t=n.deferred;if("rpc_error"===e.result._){const a=this.processError(e.result);this.log("Rpc error",a),t&&t.reject(a)}else t&&t.resolve(e.result),n.isAPI&&!this.connectionInited&&(this.connectionInited=!0);delete this.sentMessages[a]}else this.debug&&this.log("Rpc result for unknown message:",a,e);break}case"pong":if(this.transport.networker){const t=e.msg_id,a=this.sentMessages[t];a&&(a.deferred.resolve(e),delete this.sentMessages[t])}break;default:this.ackMessage(t),null!==Nt.updatesProcessor&&Nt.updatesProcessor(e)}}}const Lt=new class{constructor(){this.networkers=[],this.language=navigator.language||Ut.langPackCode,this.updatesProcessor=null,this.onConnectionStatusChange=null,this.akStopped=!1,this.userAgent=navigator.userAgent}removeNetworker(e){const t=this.networkers.indexOf(e);-1!==t&&this.networkers.splice(t,1)}setUpdatesProcessor(e){this.updatesProcessor=e}getNetworker(e,t,a,n,s,i){const r=new Ft(e,t,a,n,s,i);return this.networkers.push(r),r}startAll(){if(this.akStopped){const e=this.networkers.filter(e=>e.isStopped());this.akStopped=!1,this.updatesProcessor&&this.updatesProcessor({_:"new_session_created"});for(const t of e)t.scheduleRequest()}}stopAll(){this.akStopped=!0}setLanguage(e){this.language=e;for(const e of this.networkers)e.isFileNetworker||(e.connectionInited=!1)}forceReconnectTimeout(){for(const e of this.networkers)e.forceReconnectTimeout()}forceReconnect(){for(const e of this.networkers)if(!e.isFileNetworker){e.forceReconnect();break}}};l&&(l.networkerFactory=Lt);var Nt=Lt;class Ot{constructor(e){this._constructor(e)}_constructor(e=!1){this.reuseResults=e,this.listeners={},this.listenerResults={}}addEventListener(e,t,a){var n,s;(null!==(n=this.listeners[e])&&void 0!==n?n:this.listeners[e]=[]).push({callback:t,options:a}),this.listenerResults.hasOwnProperty(e)&&(t(...this.listenerResults[e]),null===(s=a)||void 0===s?void 0:s.once)&&this.listeners[e].pop()}addMultipleEventsListeners(e){for(const t in e)this.addEventListener(t,e[t])}removeEventListener(e,t,a){this.listeners[e]&&this.listeners[e].findAndSplice(e=>e.callback===t)}dispatchEvent(e,...t){this.reuseResults&&(this.listenerResults[e]=t);const a=[],n=this.listeners[e];if(n){n.slice().forEach(s=>{var i;-1!==n.findIndex(e=>e.callback===s.callback)&&(a.push(s.callback(...t)),(null===(i=s.options)||void 0===i?void 0:i.once)&&this.removeEventListener(e,s.callback))})}return a}cleanup(){this.listeners={},this.listenerResults={}}}class qt extends Ot{constructor(e,t,a){super(),this.dcId=e,this.url=t,this.debug=y.debug&&!1,this.handleOpen=()=>{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=e=>{this.log.error("handleError",e),this.close()},this.handleClose=()=>{this.log("closed"),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=e=>{this.debug&&this.log.debug("<-","handleMessage",e.data.byteLength),this.dispatchEvent("message",e.data)},this.send=e=>{this.debug&&this.log.debug("-> body length to send:",e.length),this.ws.send(e)};let n=wt.Error|wt.Log;return this.debug&&(n|=wt.Debug),this.log=Ct("WS-"+e+a,n),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(e){}this.handleClose()}}}class Gt{constructor(e){this._counter=e}increment(){for(let e=15;e>=0;e--){if(255!==this._counter[e]){this._counter[e]++;break}this._counter[e]=0}}}class Kt{constructor(e,t){this._remainingCounter=null,this._remainingCounterIndex=16,this._counter=new Gt(t),this._aes=new et(e)}update(e){const t=e.slice();for(let e=0;e{this.connected=!0;const e=this.obfuscation.init(this.codec);if(this.connection.send(e),this.networker)this.pending.length=0,this.networker.setConnectionStatus(Bt.Connected),this.networker.cleanupSent(),this.networker.resend();else for(const e of this.pending)e.encoded&&e.body&&(e.encoded=this.encodeBody(e.body));setTimeout(()=>{this.releasePending()},0)},this.onMessage=e=>{let t=this.obfuscation.decode(new Uint8Array(e));if(t=this.codec.readPacket(t),this.networker)return this.debug&&this.log.debug("redirecting to networker",t.length),void this.networker.parseResponse(t).then(e=>{this.debug&&this.log.debug("redirecting to networker response:",e);try{this.networker.processMessage(e.response,e.messageId,e.sessionId)}catch(e){this.log.error("handleMessage networker processMessage error",e)}}).catch(e=>{this.log.error("handleMessage networker parseResponse error",e)});const a=this.pending.shift();a?a.resolve(t):this.debug&&this.log.debug("no pending for res:",t.hex)},this.onClose=()=>{let e,t;if(this.clear(),this.autoReconnect){const a=Date.now(),n=a-this.lastCloseTime;e=!isNaN(n)&&n{if(void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0),!this.connection){if(this.log("trying to reconnect..."),this.lastCloseTime=Date.now(),this.networker)this.networker.setConnectionStatus(Bt.Connecting);else for(const e of this.pending)e.bodySent&&(e.bodySent=!1);this.connect()}};let i=wt.Error|wt.Log;this.debug&&(i|=wt.Debug),this.log=Ct("TCP-"+t+n,i),this.log("constructor"),this.connect()}clear(){this.connected=!1,this.connection&&(this.connection.removeEventListener("open",this.onOpen),this.connection.removeEventListener("close",this.onClose),this.connection.removeEventListener("message",this.onMessage),this.connection=void 0)}forceReconnect(){this.close(),this.reconnect()}destroy(){this.setAutoReconnect(!1),this.close()}close(){const e=this.connection;if(e){const t=this.connected;this.clear(),t&&(e.addEventListener("message",this.onMessage),e.addEventListener("close",()=>{e.removeEventListener("message",this.onMessage)},{once:!0}),e.close())}}setAutoReconnect(e){this.autoReconnect=e,e?this.connection||void 0!==this.reconnectTimeout||this.reconnect():void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}connect(){this.connection&&this.close(),this.connection=new this.Connection(this.dcId,this.url,this.logSuffix),this.connection.addEventListener("open",this.onOpen),this.connection.addEventListener("close",this.onClose),this.connection.addEventListener("message",this.onMessage)}encodeBody(e){const t=this.codec.encodePacket(e);return this.obfuscation.encode(t)}send(e){this.debug&&this.log.debug("-> body length to pending:",e.length);const t=this.connected?this.encodeBody(e):void 0;if(!this.networker){const a=new Promise((a,n)=>{this.pending.push({resolve:a,reject:n,body:e,encoded:t})});return this.releasePending(),a}this.pending.push({body:e,encoded:t}),this.releasePending()}releasePending(){if(!this.connected)return;let e=this.pending.length;for(let t=0;t body length to send:",n.length),i||(i=a.encoded=this.encodeBody(n)),this.connection.send(i),a.resolve?a.bodySent=!0:(this.pending.splice(t--,1),e--))}}}var Wt="undefined"!=typeof window?window:self;const Jt=navigator?navigator.userAgent:null,Zt=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&Wt.MSStream,!!("safari"in Wt)||!(!Jt||!(/\b(iPad|iPhone|iPod)\b/.test(Jt)||Jt.match("Safari")&&!Jt.match("Chrome"))));navigator.userAgent.toLowerCase().indexOf("firefox"),navigator.maxTouchPoints>0&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i);let Qt=0;class Xt extends Ot{constructor(e,t,a){super(),this.dcId=e,this.url=t,this.id=++Qt,Yt.set(this.id,this);const n={type:"socketProxy",payload:{type:"setup",payload:{dcId:e,url:t,logSuffix:a},id:this.id}};w(n)}send(e){const t={type:"socketProxy",payload:{type:"send",payload:e,id:this.id}};w(t)}close(){const e={type:"socketProxy",payload:{type:"close",id:this.id}};w(e)}}const Yt=new Map,$t=y.test?"_test":"";class ea{constructor(){this.sslSubdomains=["pluto","venus","aurora","vesta","flora"],this.dcOptions=y.test?[{id:1,host:"149.154.175.10",port:80},{id:2,host:"149.154.167.40",port:80},{id:3,host:"149.154.175.117",port:80}]:[{id:1,host:"149.154.175.50",port:80},{id:2,host:"149.154.167.50",port:80},{id:3,host:"149.154.175.100",port:80},{id:4,host:"149.154.167.91",port:80},{id:5,host:"149.154.171.5",port:80}],this.chosenServers={},this.transportSocket=(e,t,a)=>{const n="apiws"+$t,s=`wss://${Ut.suffix.toLowerCase()}ws${e}${a}.web.telegram.org/${n}`;return new jt(Zt&&h&&void 0!==Xt?Xt:qt,e,s,"upload"===t?"-U":"download"===t?"-D":"",1e4)}}chooseServer(e,t="client",a="websocket",n=!0){this.chosenServers.hasOwnProperty(a)||(this.chosenServers[a]={client:{},download:{},upload:{}});const s=this.chosenServers[a][t];e in s||(s[e]=[]);const i=s[e];if(!i.length||!n){let a;const s="client"===t?"":"-1";return a=this.transportSocket(e,t,s),a?(n&&i.push(a),a):(console.error("No chosenServer!",e),null)}return i[0]}static removeTransport(e,t){for(const a in e)for(const n in e[a])for(const s in e[a][n]){const i=e[a][n][s],r=i.indexOf(t);-1!==r&&i.splice(r,1)}}}var ta=new ea,aa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};var na=new class{constructor(){this.testPublicKeysHex=[{modulus:"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",exponent:"010001"}],this.publisKeysHex=[{modulus:"e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3",exponent:"010001"}],this.publicKeysParsed={},this.prepared=!1,this.preparePromise=null,y.test&&(this.publisKeysHex=this.testPublicKeysHex)}prepare(){return this.preparePromise?this.preparePromise:this.prepared?Promise.resolve():this.preparePromise=Promise.all(this.publisKeysHex.map(e=>{const t=new bt;t.storeBytes(s(e.modulus),"n"),t.storeBytes(s(e.exponent),"e");const a=t.getBuffer();return Rt.invokeCrypto("sha1-hash",a).then(t=>{const a=t.slice(-8);a.reverse(),this.publicKeysParsed[n(a).toLowerCase()]={modulus:e.modulus,exponent:e.exponent}})})).then(()=>{this.prepared=!0,this.preparePromise=null})}select(e){return aa(this,void 0,void 0,(function*(){yield this.prepare();for(let t=0;t{if(g&&this.log("mtpSendPlainRequest: in good sector",e),!e||!e.byteLength)throw p;try{const t=new Pt(e,{mtproto:!0});if(4===e.length){const e=t.fetchInt();throw this.log.error("mtpSendPlainRequest: wrong response, error code:",e),e}const a=t.fetchLong("auth_key_id");"0"!==a&&this.log.error("auth_key_id !== 0",a);const n=t.fetchLong("msg_id");"0"===n&&this.log.error("msg_id === 0",n);const s=t.fetchInt("msg_len");return s||this.log.error("no msg_len",s),t}catch(e){this.log.error("mtpSendPlainRequest: deserialization went bad",e);throw Object.assign(p,{originalError:e})}},e=>{throw e.message||e.type||(e=Object.assign(p,{originalError:e})),e})}sendReqPQ(e){return sa(this,void 0,void 0,(function*(){const t=new bt({mtproto:!0});let a;t.storeMethod("req_pq_multi",{nonce:e.nonce}),g&&this.log("Send req_pq",e.nonce.hex);try{const n=this.sendPlainRequest(e.dcId,t.getBytes(!0));na.prepare(),a=yield n}catch(e){throw this.log.error("req_pq error",e.message),e}const s=a.fetchObject("ResPQ");if("resPQ"!==s._)throw new Error("[MT] resPQ response invalid: "+s._);if(!i(e.nonce,s.nonce))throw this.log.error(e.nonce,s.nonce),new Error("[MT] resPQ nonce mismatch");e.serverNonce=s.server_nonce,e.pq=s.pq,e.fingerprints=s.server_public_key_fingerprints,g&&this.log("Got ResPQ",n(e.serverNonce),n(e.pq),e.fingerprints);const r=yield na.select(e.fingerprints);if(!r)throw new Error("[MT] No public key found");e.publicKey=r,g&&this.log("PQ factorization start",e.pq);try{var p=yield Rt.invokeCrypto("factorize",e.pq)}catch(e){throw this.log.error("worker error factorize",e),e}return e.p=p[0],e.q=p[1],g&&this.log("PQ factorization done",p),this.sendReqDhParams(e)}))}sendReqDhParams(e){return sa(this,void 0,void 0,(function*(){e.newNonce=new Uint8Array(32).randomize();const t={_:"p_q_inner_data_dc",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce,dc:0},a=new bt({mtproto:!0});a.storeObject(t,"P_Q_inner_data","DECRYPTED_DATA");const s=a.getBytes(!0);if(s.length>144)throw"DH_params: data is more than 144 bytes!";const p=Le(s,192,!1,!0,!1),o=p.slice().reverse(),m=yield(()=>sa(this,void 0,void 0,(function*(){for(;;){const t=new Uint8Array(32).randomize(),a=o.concat(yield Rt.invokeCrypto("sha256-hash",t.concat(p)));if(224!==a.length)throw"DH_params: dataWithHash !== 224 bytes!";const s=yield Rt.invokeCrypto("aes-encrypt",a,t,new Uint8Array([0])),i=r(t,yield Rt.invokeCrypto("sha256-hash",s)).concat(s);if(-1===ge(oe(n(i),16),oe(e.publicKey.modulus,16)))return i}})))(),d=Le(yield Rt.invokeCrypto("rsa-encrypt",m,e.publicKey),256,!0,!0,!0),y={nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:d},c=new bt({mtproto:!0});c.storeMethod("req_DH_params",y);const l=c.getBytes(!0);let h;g&&this.log("Send req_DH_params",y);try{h=yield this.sendPlainRequest(e.dcId,l)}catch(e){throw this.log.error("Send req_DH_params FAIL!",e),e}const u=h.fetchObject("Server_DH_Params","RESPONSE");if(g&&this.log("Sent req_DH_params, response:",u),"server_DH_params_fail"!==u._&&"server_DH_params_ok"!==u._)throw new Error("[MT] Server_DH_Params response invalid: "+u._);if(!i(e.nonce,u.nonce))throw new Error("[MT] Server_DH_Params nonce mismatch");if(!i(e.serverNonce,u.server_nonce))throw new Error("[MT] Server_DH_Params server_nonce mismatch");if("server_DH_params_fail"===u._){if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce)).slice(-16),u.new_nonce_hash))throw new Error("[MT] server_DH_params_fail new_nonce_hash mismatch");throw new Error("[MT] server_DH_params_fail")}try{yield this.decryptServerDhDataAnswer(e,u.encrypted_answer)}catch(e){throw this.log.error("mtpDecryptServerDhDataAnswer FAILED!",e),e}return this.sendSetClientDhParams(e)}))}decryptServerDhDataAnswer(e,t){return sa(this,void 0,void 0,(function*(){e.localTime=Date.now(),e.tmpAesKey=(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat(e.serverNonce))).concat((yield Rt.invokeCrypto("sha1-hash",e.serverNonce.concat(e.newNonce))).slice(0,12)),e.tmpAesIv=(yield Rt.invokeCrypto("sha1-hash",e.serverNonce.concat(e.newNonce))).slice(12).concat(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat(e.newNonce)),e.newNonce.slice(0,4));const a=new Uint8Array(yield Rt.invokeCrypto("aes-decrypt",t,e.tmpAesKey,e.tmpAesIv)),n=a.slice(0,20),s=a.slice(20),r=new Pt(s,{mtproto:!0}),p=r.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!==p._)throw new Error("[MT] server_DH_inner_data response invalid: "+p);if(!i(e.nonce,p.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!i(e.serverNonce,p.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");g&&this.log("Done decrypting answer"),e.g=p.g,e.dhPrime=p.dh_prime,e.gA=p.g_a,e.serverTime=p.server_time,e.retry=0,this.verifyDhParams(e.g,e.dhPrime,e.gA);const o=r.getOffset();if(!i(n,yield Rt.invokeCrypto("sha1-hash",s.slice(0,o))))throw new Error("[MT] server_DH_inner_data SHA1-hash mismatch");Vt.applyServerTime(e.serverTime,e.localTime)}))}verifyDhParams(e,t,a){g&&this.log("Verifying DH params",e,t,a);const s=n(t);if(3!==e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==s)throw new Error("[MT] DH params are not verified: unknown dhPrime");g&&this.log("dhPrime cmp OK");const i=oe(n(a),16),r=oe(s,16);if(ge(i,U)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(ge(i,$(r,U))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");g&&this.log("1 < gA < dhPrime-1 OK");const p=function(e,t){let a=he(e);t-=1;for(let n=0;n=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return g&&this.log("2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}sendSetClientDhParams(e){return sa(this,void 0,void 0,(function*(){const t=s(e.g.toString(16));e.b=new Uint8Array(256).randomize();try{var a=yield Rt.invokeCrypto("mod-pow",t,e.b,e.dhPrime)}catch(e){throw e}const n=new bt({mtproto:!0});n.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:a},"Client_DH_Inner_Data");const p=(yield Rt.invokeCrypto("sha1-hash",n.getBuffer())).concat(n.getBytes(!0)),o=yield Rt.invokeCrypto("aes-encrypt",p,e.tmpAesKey,e.tmpAesIv),m=new bt({mtproto:!0});let d;m.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:o}),g&&this.log("Send set_client_DH_params");try{d=yield this.sendPlainRequest(e.dcId,m.getBytes(!0))}catch(e){throw e}const y=d.fetchObject("Set_client_DH_params_answer");if("dh_gen_ok"!==y._&&"dh_gen_retry"!==y._&&"dh_gen_fail"!==y._)throw new Error("[MT] Set_client_DH_params_answer response invalid: "+y._);if(!i(e.nonce,y.nonce))throw new Error("[MT] Set_client_DH_params_answer nonce mismatch");if(!i(e.serverNonce,y.server_nonce))throw new Error("[MT] Set_client_DH_params_answer server_nonce mismatch");try{var c=yield Rt.invokeCrypto("mod-pow",e.gA,e.b,e.dhPrime)}catch(e){throw c}const l=yield Rt.invokeCrypto("sha1-hash",c),h=l.slice(0,8),u=l.slice(-8);switch(g&&this.log("Got Set_client_DH_params_answer",y._,c),y._){case"dh_gen_ok":{const t=(yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([1],h))).slice(-16);if(!i(t,y.new_nonce_hash1))throw this.log.error("Set_client_DH_params_answer new_nonce_hash1 mismatch",t,y),new Error("new_nonce_hash1 mismatch");const a=r(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));return g&&this.log("Auth successfull!",u,c,a),e.authKeyId=u,e.authKey=c,e.serverSalt=a,e}case"dh_gen_retry":if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([2],h))).slice(-16),y.new_nonce_hash2))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch");return this.sendSetClientDhParams(e);case"dh_gen_fail":if(!i((yield Rt.invokeCrypto("sha1-hash",e.newNonce.concat([3],h))).slice(-16),y.new_nonce_hash3))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch");throw new Error("[MT] Set_client_DH_params_answer fail")}}))}auth(e){return sa(this,void 0,void 0,(function*(){if(e in this.cached)return this.cached[e];const t=new Uint8Array(16).randomize();if(!ta.chooseServer(e))throw new Error("[MT] No server found for dc "+e);const a={dcId:e,nonce:t,localTry:1};try{const t=this.sendReqPQ(a);return this.cached[e]=t,yield t}catch(t){if(a.localTry<=3)return this.sendReqPQ({dcId:a.dcId,nonce:new Uint8Array(16).randomize(),localTry:a.localTry+1});throw delete this.cached[e],t}}))}};function ra(){}function pa(){let e={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...t)=>{e.lastNotify=t,e.listeners.forEach(e=>e(...t))},listeners:[],addNotifyListener:t=>{e.lastNotify&&t(...e.lastNotify),e.listeners.push(t)}},t=new Promise((a,n)=>{e.resolve=e=>{t.isFulfilled||t.isRejected||(t.isFulfilled=!0,a(e))},e.reject=(...e)=>{t.isRejected||t.isFulfilled||(t.isRejected=!0,n(...e))}});return t.catch(ra).finally(()=>{t.notify=t.notifyAll=t.lastNotify=null,t.listeners.length=0,t.cancel&&(t.cancel=()=>{})}),Object.assign(t,e),t}function oa(e,t){return new Promise(a=>{const n=new FileReader;n.addEventListener("loadend",e=>a(e.target.result)),n[t](e)})}function ma(e){return oa(e,"readAsArrayBuffer")}function da(e,t=""){let a;const n=function(e){if(-1===["image/jpeg","image/png","image/gif","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","application/json","application/pdf"].indexOf(e))return"application/octet-stream";return e}(t);try{a=new Blob(e,{type:n})}catch(t){let s=new BlobBuilder;e.forEach(e=>{s.append(e)}),a=s.getBlob(n)}return a}class ya{constructor(e,t){this.storageIsAvailable=!0,function(e,t){if(t)for(let a in t)void 0!==t[a]&&(e[a]=t[a])}(this,e),y.test&&(this.name+="_test"),this.storeName=t,this.log=Ct("IDB-"+this.storeName),this.openDatabase(!0),ya.STORAGES.push(this)}static closeDatabases(e){this.STORAGES.forEach(t=>{if(e&&e===t)return;const a=t.db;a&&(a.onclose=()=>{},a.close())})}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;try{var t=indexedDB.open(this.name,this.version);if(!t)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let a=!1;return setTimeout(()=>{a||t.onerror({type:"IDB_CREATE_TIMEOUT"})},3e3),this.openDbPromise=new Promise((e,n)=>{t.onsuccess=s=>{a=!0;const i=t.result;let r=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},i.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},t.onerror=e=>{a=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},t.onupgradeneeded=e=>{a=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);var t=e.target.result;this.stores.forEach(e=>{t.objectStoreNames.contains(e.name)||((e,t)=>{var a;const n=e.createObjectStore(t.name);if(null===(a=t.indexes)||void 0===a?void 0:a.length)for(const e of t.indexes)n.createIndex(e.indexName,e.keyPath,e.objectParameters)})(t,e)})}})}delete(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readwrite",t=>e.map(e=>t.delete(e)),"")}clear(e){return this.getObjectStore("readwrite",e=>e.clear(),"",e)}save(e,t){return Array.isArray(e)||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",a=>e.map((e,n)=>a.put(t[n],e)),"")}saveFile(e,t){return t instanceof Blob||(t=da([t])),this.save(e,t)}get(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readonly",t=>e.map(e=>t.get(e)),"")}getObjectStore(e,t,a,n=this.storeName){let s;return a&&(s=performance.now(),this.log(a+": start")),this.openDatabase().then(i=>new Promise((r,p)=>{const o=i.transaction([n],e);o.onerror=e=>{clearTimeout(m),p(o.error)},o.oncomplete=e=>{clearTimeout(m),a&&this.log(a+": end",performance.now()-s);const t=c.map(e=>e.result);r(y?t:t[0])};const m=setTimeout(()=>{this.log.error("transaction not finished",o)},1e4),d=t(o.objectStore(n)),y=Array.isArray(d),c=y?d:[].concat(d)}))}getAll(){return this.getObjectStore("readonly",e=>e.getAll(),"")}}ya.STORAGES=[];var ca=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const la=new class{constructor(){this.cachedNetworkers={},this.cachedExportPromise={},this.gettingNetworkers={},this.baseDcId=0,this.log=Ct("API"),this.afterMessageTempIds={}}getBaseDcId(){return ca(this,void 0,void 0,(function*(){if(this.baseDcId)return this.baseDcId;const e=yield A.get("dc");return this.baseDcId||(e?this.baseDcId=e:this.setBaseDcId(Ut.baseDcId)),this.baseDcId}))}setUserAuth(e){return ca(this,void 0,void 0,(function*(){if(!e.dcID){const t=yield this.getBaseDcId();e.dcID=t}A.set({user_auth:e})}))}setBaseDcId(e){const t=this.baseDcId;t&&this.getNetworker(t).then(e=>{this.setOnDrainIfNeeded(e)}),this.baseDcId=e,A.set({dc:this.baseDcId})}logOut(){return ca(this,void 0,void 0,(function*(){const e=[];for(let t=1;t<=5;t++)e.push("dc"+t+"_auth_key");const t=yield Promise.all(e.map(e=>A.get(e))),a=[];for(let e=0;e{this.baseDcId=void 0,ya.closeDatabases(),self.postMessage({type:"clear"})};return setTimeout(n,1e3),Promise.all(a).catch(e=>{e.handled=!0}).finally(n)}))}getNetworker(e,t={}){const a=t.fileDownload?"download":t.fileUpload?"upload":"client",i="websocket";this.cachedNetworkers.hasOwnProperty(i)||(this.cachedNetworkers[i]={client:{},download:{},upload:{}});const r=this.cachedNetworkers[i][a];e in r||(r[e]=[]);const p=r[e],o="client"===a||"https"===i?1:3;if(p.length>=o){let e=p.length-1,t=!1;for(;e>=0;--e)if(p[e].isOnline){t=!0;break}const a=t?p.splice(e,1)[0]:p.pop();return p.unshift(a),Promise.resolve(a)}const m=[e,i,a].join("-");if(this.gettingNetworkers[m])return this.gettingNetworkers[m];const d=`dc${e}_auth_key`,y=`dc${e}_server_salt`;return this.gettingNetworkers[m]=Promise.all([d,y].map(e=>A.get(e))).then(([r,o])=>ca(this,void 0,void 0,(function*(){const c=ta.chooseServer(e,a,i,"client"===a);let l;if(r&&512===r.length){o&&16===o.length||(o="AAAAAAAAAAAAAAAA");const a=s(r),n=(yield Rt.invokeCrypto("sha1-hash",a)).slice(-8),i=s(o);l=Nt.getNetworker(e,a,n,i,c,t)}else try{const a=yield ia.auth(e),s={[d]:n(a.authKey),[y]:n(a.serverSalt)};A.set(s),l=Nt.getNetworker(e,a.authKey,a.authKeyId,a.serverSalt,c,t)}catch(e){throw this.log("Get networker error",e,e.stack),delete this.gettingNetworkers[m],e}return delete this.gettingNetworkers[m],p.unshift(l),this.setOnDrainIfNeeded(l),l})))}setOnDrainIfNeeded(e){if(e.onDrain)return;(e.isFileNetworker?Promise.resolve(!0):this.getBaseDcId().then(t=>e.dcId!==t)).then(t=>{e.onDrain||t&&(e.onDrain=()=>{this.log("networker drain",e.dcId),e.onDrain=void 0,e.destroy(),Nt.removeNetworker(e),ea.removeTransport(this.cachedNetworkers,e),ea.removeTransport(ta.chosenServers,e.transport)},e.setDrainTimeout())})}invokeApi(e,t={},a={}){const n=pa();let{afterMessageId:s,prepareTempMessageId:i}=a;if(i&&n.then(()=>{delete this.afterMessageTempIds[i]}),l){const s=Date.now(),i=Wt.setInterval(()=>{o&&o.isStopped()||this.log.error("Request is still processing:",e,t,a,"time:",(Date.now()-s)/1e3)},5e3);n.finally(()=>{clearInterval(i)})}const r=t=>{t?Te(t)||(t={message:t}):t={type:"ERROR_EMPTY"},n.reject(t),(401===t.code&&"SESSION_REVOKED"===t.type||406===t.code&&"AUTH_KEY_DUPLICATED"===t.type)&&this.logOut(),a.ignoreErrors||(406===t.code&&(t.handled=!0),a.noErrorBox||(t.input=e,t.stack=m||t.originalError&&t.originalError.stack||t.stack||(new Error).stack,setTimeout(()=>{t.handled||(401===t.code&&this.logOut(),t.handled=!0)},100)))};let p,o,m=(new Error).stack||"empty stack";const d=m=>{if(s){const e=this.afterMessageTempIds[s];e&&(a.afterMessageId=e.messageId)}const y=(o=m).wrapApiCall(e,t,a);return i&&(this.afterMessageTempIds[i]={messageId:a.messageId,promise:n}),y.then(n.resolve,i=>{if("FILE_REFERENCE_EXPIRED"!==i.type&&this.log.error("Error",i.code,i.type,this.baseDcId,p,e,t),401===i.code&&this.baseDcId===p)"SESSION_PASSWORD_NEEDED"!==i.type&&(A.delete("dc"),A.delete("user_auth")),r(i);else if(401===i.code&&this.baseDcId&&p!==this.baseDcId){if(void 0===this.cachedExportPromise[p]){const e=new Promise((e,t)=>{this.invokeApi("auth.exportAuthorization",{dc_id:p},{noErrorBox:!0}).then(a=>{this.invokeApi("auth.importAuthorization",{id:a.id,bytes:a.bytes},{dcId:p,noErrorBox:!0}).then(e,t)},t)});this.cachedExportPromise[p]=e}this.cachedExportPromise[p].then(()=>{this.invokeApi(e,t,a).then(n.resolve,r)},r)}else if(303===i.code){const s=+i.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];s!==p&&(a.dcId?a.dcId=s:this.setBaseDcId(s),this.getNetworker(s,a).then(s=>{s.wrapApiCall(e,t,a).then(n.resolve,r)},r))}else if(400===i.code&&0===i.type.indexOf("FILE_MIGRATE")){const s=+i.type.match(/^(FILE_MIGRATE_)(\d+)/)[2];s!==p?this.getNetworker(s,a).then(s=>{s.wrapApiCall(e,t,a).then(n.resolve,r)},r):r(i)}else if(a.rawError||420!==i.code)if(!a.rawError&&["MSG_WAIT_FAILED","MSG_WAIT_TIMEOUT"].includes(i.type)){const e=this.afterMessageTempIds[s];s=void 0,delete a.afterMessageId,e?e.promise.then(()=>d(o)):d(o)}else if(a.rawError||500!==i.code)"UNKNOWN"===i.type?setTimeout(()=>{d(o)},1e3):r(i);else{const e=Date.now();if(a.stopTime&&e>=a.stopTime)return r(i);a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,setTimeout(()=>{d(o)},1e3*a.waitTime)}else{const e=+i.type.match(/^FLOOD_WAIT_(\d+)/)[1]||1;if(e>(void 0!==a.floodMaxTimeout?a.floodMaxTimeout:60)&&!a.prepareTempMessageId)return r(i);setTimeout(()=>{d(o)},1e3*e)}})};return(p=a.dcId||this.baseDcId)?this.getNetworker(p,a).then(d,r):this.getBaseDcId().then(e=>{this.getNetworker(p=e,a).then(d,r)}),n}};l.apiManager=la;var ga=la;var ha=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};var ua=new class{constructor(){this.blobSupported=!0;try{da([],"")}catch(e){this.blobSupported=!1}}isAvailable(){return this.blobSupported}write(e,t){return t instanceof Blob?(a=t,ma(a).then(e=>new Uint8Array(e))).then(t=>e.write(t)):e.write(t);var a}getFakeFileWriter(e,t){const a=[];return{write:e=>ha(this,void 0,void 0,(function*(){if(!this.blobSupported)throw!1;a.push(e)})),truncate:()=>{a.length=0},finalize:(n=!0)=>{const s=da(a,e);return n&&t&&t(s),s}}}},fa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};class _a{constructor(e){this.dbName=e,this.useStorage=!0,y.test&&(this.dbName+="_test"),_a.STORAGES.length&&(this.useStorage=_a.STORAGES[0].useStorage),this.openDatabase(),_a.STORAGES.push(this)}openDatabase(){var e;return null!==(e=this.openDbPromise)&&void 0!==e?e:this.openDbPromise=caches.open(this.dbName)}delete(e){return this.timeoutOperation(t=>t.delete("/"+e))}deleteAll(){return caches.delete(this.dbName)}get(e){return this.timeoutOperation(t=>t.match("/"+e))}save(e,t){return this.timeoutOperation(a=>a.put("/"+e,t))}getFile(e,t="blob"){return this.get(e).then(e=>{if(!e)throw"NO_ENTRY_FOUND";return e[t]()})}saveFile(e,t){t instanceof Blob||(t=da(t));const a=new Response(t,{headers:{"Content-Length":""+t.size}});return this.save(e,a).then(()=>t)}timeoutOperation(e){return this.useStorage?new Promise((t,a)=>fa(this,void 0,void 0,(function*(){let n=!1;const s=setTimeout(()=>{a(),n=!0},15e3);try{const a=yield this.openDatabase();if(!a)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const s=yield e(a);if(n)return;t(s)}catch(e){a(e)}clearTimeout(s)}))):Promise.reject("STORAGE_OFFLINE")}getFileWriter(e,t){const a=ua.getFakeFileWriter(t,t=>this.saveFile(e,t).catch(()=>t));return Promise.resolve(a)}static toggleStorage(e){return Promise.all(this.STORAGES.map(t=>{if(t.useStorage=e,!e)return t.deleteAll()}))}}_a.STORAGES=[];var va=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};const ba=new class{constructor(){this.cacheStorage=new _a("cachedFiles"),this.cachedDownloadPromises={},this.uploadPromises={},this.downloadPulls={},this.downloadActives={},this.webpConvertPromises={},this.refreshReferencePromises={},this.log=Ct("AFM",wt.Error|wt.Log),this.tempId=0,this.queueId=0,this.debug=y.debug,this.uncompressTGS=(e,t)=>Rt.invokeCrypto("gzipUncompress",e.slice().buffer,!0),this.convertWebp=(e,t)=>{const a=pa();return P({type:"convertWebp",payload:{fileName:t,bytes:e}}),this.webpConvertPromises[t]=a},setInterval(()=>{for(const e in this.refreshReferencePromises){const{deferred:t}=this.refreshReferencePromises[e];(t.isFulfilled||t.isRejected)&&delete this.refreshReferencePromises[e]}},18e5)}downloadRequest(e,t,a,n,s=0){void 0===this.downloadPulls[e]&&(this.downloadPulls[e]=[],this.downloadActives[e]=0);const i=this.downloadPulls[e],r=new Promise((e,r)=>{i.push({id:t,queueId:s,cb:a,deferred:{resolve:e,reject:r},activeDelta:n})});return setTimeout(()=>{this.downloadCheck(e)},0),r}downloadCheck(e){const t=this.downloadPulls[e],a="upload"===e?24:36;if(this.downloadActives[e]>=a||!t||!t.length)return!1;const n=t.findAndSplice(e=>0===e.queueId)||t.findAndSplice(e=>e.queueId===this.queueId)||t.shift(),s=n.activeDelta||1;this.downloadActives[e]+=s,n.cb().then(t=>{this.downloadActives[e]-=s,this.downloadCheck(e),n.deferred.resolve(t)},t=>{t&&t.type&&("DOWNLOAD_CANCELED"===t.type||"UPLOAD_CANCELED"===t.type)||this.log.error("downloadCheck error:",t),this.downloadActives[e]-=s,this.downloadCheck(e),n.deferred.reject(t)})}setQueueId(e){this.queueId=e}getFileStorage(){return this.cacheStorage}cancelDownload(e){const t=(this.cachedDownloadPromises[e]?[this.cachedDownloadPromises[e]]:void 0)||(this.uploadPromises[e]?Array.from(this.uploadPromises[e]):[]);let a=!1;for(let e=0,n=t.length;eva(this,void 0,void 0,(function*(){return r&&r(),ga.invokeApi("upload.getWebFile",{location:t,offset:a,limit:n},{dcId:e,fileDownload:!0})})),this.getDelta(n),i)}requestFilePart(e,t,a,s,i=0,r=0,p){return this.downloadRequest(e,i,()=>va(this,void 0,void 0,(function*(){p&&p();const i=()=>va(this,void 0,void 0,(function*(){p&&p();return ga.invokeApi("upload.getFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0}).catch(e=>{if("FILE_REFERENCE_EXPIRED"===e.type)return this.refreshReference(t).then(i);throw e})})),r=t.file_reference;if(r&&!t.checkedReference){t.checkedReference=!0;const e=n(r);if(this.refreshReferencePromises[e])return this.refreshReference(t).then(i)}return i()})),this.getDelta(s),r)}getDelta(e){return e/1024/128}getLimitPart(e){let t;return t=512,524288}refreshReference(e){const t=e.file_reference,a=n(t);let s=this.refreshReferencePromises[a];if(!s){const n=pa();s=this.refreshReferencePromises[a]={deferred:n,timeout:Wt.setTimeout(()=>{this.log.error("Didn't refresh the reference:",e),n.reject("REFERENCE_IS_NOT_REFRESHED")},6e4)},n.finally(()=>{clearTimeout(s.timeout)});P({type:"refreshReference",payload:t})}return s.deferred.then(t=>{if(a===n(t))throw"REFERENCE_IS_NOT_REFRESHED";e.file_reference=t})}downloadFile(e){var t;if(!ua.isAvailable())return Promise.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});const a=null!==(t=e.size)&&void 0!==t?t:0,{dcId:n,location:s}=e;let i;"image/webp"!==e.mimeType||ka()?"application/x-tgsticker"===e.mimeType&&(i=this.uncompressTGS,e.mimeType="application/json"):(i=this.convertWebp,e.mimeType="image/png");const r=function(e,t){const a=""["".length-1]||"";let n;switch(e._){case"inputPhotoFileLocation":n=["photo",""[0],e.id,e.thumb_size].filter(Boolean).join("_");break;case"inputDocumentFileLocation":n=["document",""[0],e.id,e.thumb_size].filter(Boolean).join("_");break;case"inputPeerPhotoFileLocation":n=["peerPhoto",e.photo_id,e.pFlags.big?"big":"small"].join("_");break;case"inputStickerSetThumb":n=["stickerSetThumb",e.stickerset.id||e.stickerset.short_name||e.stickerset.emoticon||e.stickerset._,e.thumb_version].join("_");break;case"inputFileLocation":n=e.volume_id+"_"+e.local_id;break;case"inputWebFileLocation":n=["webFile",e.url].join("_");break;default:console.error("Unrecognized location:",e),n=""}return n+(a?"."+a:a)}(s,e.fileName),p=this.cachedDownloadPromises[r],o=this.getFileStorage();if(this.debug&&this.log("downloadFile",r,a,s,e.mimeType),p)return a?p.then(t=>t.sizethis.downloadFile(e)).catch(()=>this.downloadFile(e))):t):p;const m=pa(),d=e.mimeType||"image/jpeg";let y,c=!1,l=!1,g=e=>{delete this.cachedDownloadPromises[r],m.reject(e),g=()=>{},!y||e&&"DOWNLOAD_CANCELED"===e.type||y.truncate()};const h=this.tempId++;o.getFile(r).then(e=>va(this,void 0,void 0,(function*(){if(e.size{o.getFileWriter(r,d).then(t=>{y=t;const p=e.limitPart||this.getLimitPart(a);let o,d,c=Promise.resolve();const f=(e,t)=>va(this,void 0,void 0,(function*(){if(i){return yield i(e,r)}return e})),_="inputWebFileLocation"===s._?this.requestWebFilePart.bind(this):this.requestFilePart.bind(this),v=[];o=0;do{d=pa(),v.push({offset:o,writeFilePromise:c,writeFileDeferred:d}),c=d,o+=p}while(ova(this,void 0,void 0,(function*(){const{offset:i,writeFilePromise:o,writeFileDeferred:d}=v.shift();try{const y=yield _(n,s,i,p,h,e.queueId,u),c=y.bytes;v.length&&P(),this.debug&&this.log("downloadFile requestFilePart result:",r,y);const g=i+p>=a||!c.byteLength;if(c.byteLength){b+=c.byteLength,m.notify({done:b,offset:i,total:a});const e=yield f(c);u(),yield o,u(),yield ua.write(t,e)}d.resolve(),g&&(l=!0,m.resolve(t.finalize(a<2e7)))}catch(e){g(e)}}));for(let e=0,t=Math.min(1/0,v.length);e{["STORAGE_OFFLINE"].includes(e)||this.log.error("saveFile error:",e)})});const u=()=>{if(c){const e=new Error("Canceled");throw e.type="DOWNLOAD_CANCELED",e}};return m.cancel=()=>{c||l||(c=!0,delete this.cachedDownloadPromises[r],g({type:"DOWNLOAD_CANCELED"}))},m.notify=e=>{w({progress:Object.assign({fileName:r},e)})},this.cachedDownloadPromises[r]=m,m.finally(()=>{delete this.cachedDownloadPromises[r]}),m}deleteFile(e){return delete this.cachedDownloadPromises[e],this.getFileStorage().delete(e)}uploadFile({file:e,fileName:t}){var a;const n=e.size,s=n>=10485760;let i=!1,r=!1,p=0,o=262144;n>67108864?o=524288:n<102400&&(o=32768);const m=this.getDelta(o),d=Math.ceil(n/o),y=""+st(32)+st(32)%16777215;let c=0;const l={_:s?"inputFileBig":"inputFile",id:y,parts:d,name:t,md5_checksum:""},g={notify:e=>{}},h=new Promise((e,t)=>{if(d>4e3)return t({type:"FILE_TOO_BIG"});g.resolve=e,g.reject=t});if(Object.assign(h,g),d>4e3)return h;let u=e=>{"UPLOAD_CANCELED"!==(null==e?void 0:e.type)&&this.log.error("Up Error",e),h.reject(e),i=!0,u=()=>{}};const f=s?"upload.saveBigFilePart":"upload.saveFilePart",_=this.tempId++,v=this;const b=function*(){for(let t=0;tma(e.slice(t,t+o)).then(e=>{if(i)throw{type:"UPLOAD_CANCELED"};return v.debug&&v.log("Upload file part, isBig:",s,a,e.byteLength,new Uint8Array(e).length,new Uint8Array(e).slice().length),ga.invokeApi(f,{file_id:y,file_part:a,file_total_parts:d,bytes:e},{fileUpload:!0}).then(e=>{p++,h.notify({done:p*o,total:n}),p>=d&&(h.resolve(l),r=!0)},u)}),m).catch(u)}}(),P=()=>{if(i)return;const e=b.next();e.done||i||e.value.then(P)};for(let e=0,t=Math.min(1/0,d);e{i||r||(i=!0,u({type:"UPLOAD_CANCELED"}))},h.notify=e=>{w({progress:Object.assign({fileName:t},e)})},h.finally(()=>{S.delete(h),S.size||delete this.uploadPromises[t]});const S=null!==(a=this.uploadPromises[t])&&void 0!==a?a:this.uploadPromises[t]=new Set;return S.add(h),h}};l.apiFileManager=ba;var Pa=ba,wa=function(e,t,a,n){return new(a||(a=Promise))((function(s,i){function r(e){try{o(n.next(e))}catch(e){i(e)}}function p(e){try{o(n.throw(e))}catch(e){i(e)}}function o(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,p)}o((n=n.apply(e,t||[])).next())}))};let Sa=!1;const ka=()=>Sa;Nt.setUpdatesProcessor(e=>{w({update:e})}),Nt.onConnectionStatusChange=e=>{w({type:"connectionStatusChange",payload:e})};const Ia={convertWebp:e=>{const{fileName:t,bytes:a}=e.payload,n=Pa.webpConvertPromises[t];n&&(n.resolve(a),delete Pa.webpConvertPromises[t])},webpSupport:e=>{Sa=e.payload},socketProxy:e=>{const t=e.payload,a=t.id,n=Yt.get(a);"message"===t.type?n.dispatchEvent("message",t.payload):"open"===t.type?n.dispatchEvent("open"):"close"===t.type&&(n.dispatchEvent("close"),Yt.delete(a))},localStorageProxy:e=>{A.finishTask(e.id,e.payload)},userAgent:e=>{Nt.userAgent=e.payload},online:()=>{Nt.forceReconnectTimeout()},forceReconnect:()=>{Nt.forceReconnect()},toggleStorage:e=>{const t=e.payload;_a.toggleStorage(t)},refreshReference:e=>{const t=n(e.originalPayload),a=Pa.refreshReferencePromises[t],s=null==a?void 0:a.deferred;s&&(e.error?s.reject(e.error):s.resolve(e.payload))}};Wt.addEventListener("message",e=>wa(void 0,void 0,void 0,(function*(){try{const t=e.data,a=t.taskId,n=Ia[t.type];if(n)return void n(t);if(!t.task)return;switch(t.task){case"computeSRP":case"gzipUncompress":return Rt.invokeCrypto(t.task,...t.args).then(e=>{w({taskId:a,result:e})});case"requestFilePart":case"setQueueId":case"cancelDownload":case"uploadFile":case"downloadFile":try{let e=Pa[t.task].apply(Pa,t.args);e instanceof Promise&&(e=yield e),w({taskId:a,result:e})}catch(e){w({taskId:a,error:e})}break;case"getNetworker":ga[t.task].apply(ga,t.args).finally(()=>{w({taskId:a,result:null})});break;case"setLanguage":case"startAll":case"stopAll":Nt[t.task].apply(Nt,t.args);break;default:try{let e=ga[t.task].apply(ga,t.args);e instanceof Promise&&(e=yield e),w({taskId:a,result:e})}catch(e){w({taskId:a,error:e})}}}catch(e){console.error("worker task error:",e)}}))),w("ready")}]); +//# sourceMappingURL=mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map \ No newline at end of file diff --git a/public/mtproto.worker.08024df6e720e6031331.bundle.worker.js.map b/public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map similarity index 99% rename from public/mtproto.worker.08024df6e720e6031331.bundle.worker.js.map rename to public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map index 4a0e7cb6..dda46aa3 100644 --- a/public/mtproto.worker.08024df6e720e6031331.bundle.worker.js.map +++ b/public/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/pako/dist/pako_inflate.min.js","webpack:///./src/helpers/bytes.ts","webpack:///./src/lib/polyfill.ts","webpack:///./src/config/modes.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/localStorage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/vendor/leemon.ts","webpack:///./src/lib/mtproto/bin_utils.ts","webpack:///./src/lib/mtproto/schema.ts","webpack:///./node_modules/@cryptography/aes/dist/es/aes.js","webpack:///./src/helpers/random.ts","webpack:///./src/lib/crypto/crypto_utils.ts","webpack:///./src/lib/mtproto/tl_utils.ts","webpack:///./src/lib/logger.ts","webpack:///./src/lib/crypto/srp.ts","webpack:///./src/lib/crypto/cryptoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/lib/mtproto/timeManager.ts","webpack:///./src/config/app.ts","webpack:///./src/lib/mtproto/connectionStatus.ts","webpack:///./src/lib/mtproto/networker.ts","webpack:///./src/helpers/array.ts","webpack:///./src/lib/mtproto/networkerFactory.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/transports/obfuscation.ts","webpack:///./src/lib/mtproto/transports/intermediate.ts","webpack:///./src/lib/mtproto/transports/tcpObfuscated.ts","webpack:///./src/environment/ctx.ts","webpack:///./src/environment/userAgent.ts","webpack:///./src/lib/mtproto/transports/socketProxied.ts","webpack:///./src/lib/mtproto/dcConfigurator.ts","webpack:///./src/lib/mtproto/rsaKeysManager.ts","webpack:///./src/lib/mtproto/authorizer.ts","webpack:///./src/helpers/noop.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/mtproto/apiManager.ts","webpack:///./src/lib/filemanager.ts","webpack:///./src/lib/cacheStorage.ts","webpack:///./src/lib/mtproto/apiFileManager.ts","webpack:///./src/helpers/fileName.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","a","Uint32Array","f","h","u","w","b","k","_","g","v","y","x","E","R","A","state","next_in","input","avail_in","next_out","output","avail_out","dmax","wsize","whave","wnext","window","hold","bits","lencode","distcode","lenbits","distbits","msg","sane","Uint16Array","Uint8Array","Z","S","O","U","T","D","I","B","N","C","z","F","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","this","last","wrap","havedict","flags","check","total","head","wbits","length","offset","extra","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","total_in","total_out","adler","Int32Array","set","subarray","L","M","H","j","K","P","Y","G","X","W","done","text","time","xflags","os","extra_len","String","fromCharCode","comment","hcrc","data_type","apply","Array","2","1","0","toString","q","J","Q","V","$","ee","te","ie","ne","options","slice","arguments","shift","TypeError","chunkSize","windowBits","to","raw","err","ended","chunks","strm","Error","header","dictionary","charCodeAt","ae","push","result","onEnd","onData","join","re","se","oe","le","de","fe","Inflate","inflate","inflateRaw","ungzip","constants","default","bytesToHex","bytes","arr","bytesFromHex","hexString","len","Math","ceil","start","parseInt","charAt","substr","bytesCmp","bytes1","bytes2","bytesXor","convertToUint8Array","TextEncoder","encode","bufferConcats","args","reduce","acc","byteLength","tmp","lastLength","forEach","ArrayBuffer","bytesFromWordss","bytesToWordss","words","str","configurable","randomize","crypto","getRandomValues","concat","toJSON","findAndSplice","verify","index","findIndex","splice","undefined","toHHMMSS","leadZero","sec_num","hours","floor","minutes","seconds","Promise","finally","fn","onFinally","callback","resolve","then","reason","reject","test","location","search","indexOf","debug","http","ssl","multipleConnections","asServiceWorker","DEBUG","MOUNT_CLASS_TO","self","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","isWorker","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","listeners","listener","postMessage","notifyWorker","noop","notifySomeone","notifyAll","prefix","cache","useStorage","useCache","localStorage","getItem","JSON","parse","obj","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","keys","delete","enabled","clear","taskId","tasks","STORAGES","storage","id","payload","proxy","sessionStorage","appStorage","radix","bpe","mask","digitsStr","one","int2bigInt","s0","s3","s4","s5","s6","s7","sa","eg_u","eg_A","eg_B","eg_C","eg_D","bitSize","expand","ans","copy_","mod","dup","mod_","trim","mult","copyInt_","linCombShift_","mult_","powMod","powMod_","sub","sub_","add","add_","eGCD_","max","halve_","greater","equalsInt","negative","multInt_","leftShift_","greaterShift","kx","ky","divide_","y1","y2","subShift_","addShift_","rightShift_","modInt","minSize","buff","str2bigInt","base","kk","substring","addInt_","equals","isZero","bigInt2str","divInt_","bigInt2bytes","littleEndian","out","reverse","cmp","ys","multMod_","squareMod_","k1","k2","kn","np","inverseModInt","mont_","ui","ks","isObject","intToUint","val","longFromInts","high","low","bigInt","addPadding","blockSize","zeroes","blockSizeAsTotalLength","prepend","needPadding","padding","buffer","Si","T1","T2","T3","T4","T5","T6","T7","T8","getWords","buf","pos","xor","left","right","x2","x4","tEnc","tDec","xInv","computeTables","AES","_key","encKey","decKey","rcon","encrypt","_message","a2","b2","c2","message","rounds","decrypt","AES_IGE","iv","cipher","cipherText","prevX","prevY","yXOR","counter","incrementCounter","carry","arrays","8","16","32","nextRandomUint","array","subtle","sha1HashSync","digest","sha256HashSync","aesEncryptSync","keyBytes","ivBytes","aesDecryptSync","rsaEncrypt","publicKey","modulus","exponent","hash_pbkdf2","salt","iterations","importKey","deriveBits","hash","pqPrimeFactorization","pqBytes","what","lim","minLen","it","pqPrimeLeemon","console","error","bytesModPow","xBigInt","yBigInt","mBigInt","gzipUncompress","boolFalse","API","constructors","find","predicate","boolTrue","vector","gzipPacked","MTProto","maxLength","mtproto","startMaxLength","createBuffer","intView","byteView","resultBuffer","resultInt32","getArray","typed","resultArray","needBytes","previousBuffer","previousArray","field","log","checkLength","writeInt","iHigh","iLow","sLong","isArray","storeLongP","storeIntBytes","Float64Array","sUTF8","unescape","encodeURIComponent","methodName","params","methodData","methods","method","storeInt","pFlags","flagsOffsets","param","condType","split","fieldBit","storeObject","paramName","storeLong","storeString","storeBytes","storeDouble","storeBool","itemType","toLowerCase","schema","isBare","constructorData","override","hex","readInt","doubleView","fetchObject","decodeURIComponent","escape","fetchInt","fetchLong","fetchIntBytes","fetchString","fetchBytes","fetchDouble","fetchBool","fetchVector","fallback","checkType","constructorCmp","uncompressed","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","TLDeserialization","TLSerialization","LogTypes","LOG_LEVELS","None","Warn","Log","Debug","_logTimer","Date","now","dT","toFixed","logger","ignoreDebugReset","warn","info","trace","setPrefix","_prefix","setLevel","level","computeSRP","password","isNew","algo","new_algo","current_algo","srp_B","client_salt","server_salt","invokeCrypto","makePasswordHash","salt1","salt2","padArray","pForHash","gForHash","b_for_hash","flipper","k_v","is_good_mod_exp_first","modexp","prime","diff","a_for_hash","secure_random","generate_and_check_random","g_b","h1","M1","srp_id","performTaskWorker","super","webWorker","awaiting","pending","utils","task","timeManager","lastMessageId","timeOffset","timeTicks","messageId","serverTime","localTime","newTimeOffset","changed","abs","server_time_offset","App","version","versionFull","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","hostname","suffix","ConnectionStatus","invokeAfterMsgConstructor","dcId","authKey","authKeyId","serverSalt","transport","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResends","connectionInited","nextReq","seqNo","lastResendReq","isOnline","status","Closed","lastResponseTime","activeRequests","authKeyUint8","isFileUpload","fileUpload","isFileDownload","fileDownload","isFileNetworker","updateSession","networker","connected","setConnectionStatus","Connected","prevSessionId","sessionId","sentMessageId","sentMessage","container","forEachReverse","inner","innerSentMessageId","idx","innerSentMessage","updateSentMessage","msg_id","generateId","seq_no","generateSeqNo","notContentRelated","serializer","storeMethod","body","getBytes","pushMessage","invokeWithLayer","layer","initConnection","userAgent","navigator","platform","language","afterMessageId","resultType","isAPI","destroy","reconnect","forceReconnect","promise","assign","deferred","noSchedule","scheduleRequest","noResponse","timeout","setTimeout","TimedOut","clearTimeout","setDrainTimeout","onDrainTimeout","onDrain","retryAt","willChange","onConnectionStatusChange","delay","innerMsgId","acked","dataWithPadding","isOut","msgKeyLargePlain","msgKeyLarge","msgKey","sha2aText","sha2bText","promises","results","aesKey","aesIv","sha2a","sha2b","akStopped","isStopped","ackMsgIds","wrapMtpMessage","msg_ids","resendMsgIds","resendOpts","req_msg_id","resend_msg_ids","outMessage","messages","messagesByteLen","lengthOverflow","map","long","sort","messageByteLength","generateContainerMessage","messageWithBody","sendEncryptedRequest","cleanupSent","innerMessages","storeRawBytes","getMsgKey","keyIv","getAesKeyIv","encryptedData","data","dataBuffer","getBuffer","paddingLength","getOffset","getEncryptedMessage","encryptedResult","request","getEncryptedOutput","requestData","send","responseBuffer","deserializer","fetchRawBytes","getDecryptedMessage","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","stack","setOffset","mt_rpc_result","response","newServerSalt","nextReqTimeout","cb","performScheduledRequest","msgId","notEmpty","rawError","matches","error_message","match","error_code","code","description","originalError","pushResend","innerMessage","processMessage","applyServerSalt","new_server_salt","bad_msg_id","ackMessage","changedOffset","applyServerTime","badMessage","processMessageAck","first_msg_id","updatesProcessor","answer_msg_id","reqResendMessage","badMsgId","processError","networkerFactory","networkers","stoppedNetworkers","filter","langCode","forceReconnectTimeout","EventListenerBase","reuseResults","_constructor","listenerResults","once","pop","addEventListener","removeEventListener","url","logSuffix","handleOpen","dispatchEvent","handleError","close","handleClose","removeListeners","handleMessage","event","ws","logTypes","connect","WebSocket","binaryType","Counter","initialValue","_counter","_remainingCounter","_remainingCounterIndex","_aes","encrypted","increment","Obfuscation","codec","initPayload","val2","reversedPayload","encIv","decIv","encNew","decNew","obfuscateTag","update","tag","Connection","retryTimeout","intermediate","obfuscation","autoReconnect","onOpen","init","connection","resend","encoded","encodeBody","releasePending","onMessage","decode","readPacket","parseResponse","catch","onClose","needTimeout","lastCloseTime","isNaN","reconnectTimeout","Connecting","bodySent","setAutoReconnect","enable","toEncode","encodePacket","USER_AGENT","IS_SAFARI","vendor","maxTouchPoints","MSStream","socketId","socketsProxied","Map","TEST_SUFFIX","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","connectionType","path","chosenServer","transportType","reuse","client","download","upload","servers","transports","testPublicKeysHex","publisKeysHex","publicKeysParsed","prepared","preparePromise","keyParsed","RSAPublicKey","fingerprintBytes","fingerprints","prepare","fingerprintHex","fill","foundKey","fingerprint","cached","requestArray","requestLength","headerArray","dcConfigurator","chooseServer","baseError","errorCode","auth_key_id","msg_len","auth","nonce","sendPlainRequest","rsaKeysManager","serverNonce","server_nonce","pq","server_public_key_fingerprints","select","pAndQ","sendReqDhParams","newNonce","p_q_inner_data_dc","new_nonce","dc","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","getKeyAesEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","new_nonce_hash","decryptServerDhDataAnswer","encrypted_answer","sendSetClientDhParams","encryptedAnswer","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","dhPrime","dh_prime","gA","g_a","server_time","retry","verifyDhParams","dhPrimeHex","_gABigInt","_dhPrimeBigInt","_twoPow","pow","gBytes","gB","retry_id","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","new_nonce_hash2","new_nonce_hash3","localTry","sendReqPQ","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","lastNotify","addNotifyListener","cancel","readBlobAs","blob","reader","FileReader","target","readBlobAsArrayBuffer","blobConstruct","blobParts","mimeType","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","fromObject","safeAssign","openDatabase","preserve","onclose","createNew","openDbPromise","indexedDB","open","finished","onerror","onsuccess","calledNew","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","stores","store","objectStoreNames","contains","createObjectStore","indexes","createIndex","indexName","keyPath","objectParameters","entryName","getObjectStore","objectStore","put","fileName","save","perf","performance","oncomplete","requests","getAll","apiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","afterMessageTempIds","setBaseDcId","userAuth","dcID","getBaseDcId","user_auth","wasDcId","getNetworker","setOnDrainIfNeeded","storageKeys","storageResult","logoutPromises","invokeApi","ignoreErrors","closeDatabases","handled","maxNetworkers","found","unshift","getKey","ak","ss","authKeyHex","serverSaltHex","authorizer","storeObj","canRelease","removeNetworker","removeTransport","prepareTempMessageId","startTime","interval","setInterval","cachedNetworker","clearInterval","rejectPromise","logOut","noErrorBox","performRequest","after","wrapApiCall","exportResolve","exportReject","dc_id","exportedAuth","newDcId","includes","stopTime","waitTime","min","floodMaxTimeout","blobSupported","fileWriter","write","saveFileCallback","part","truncate","finalize","saveToStorage","dbName","caches","timeoutOperation","Response","headers","size","rejected","res","fakeWriter","getFakeFileWriter","saveFile","deleteAll","apiFileManager","cacheStorage","cachedDownloadPromises","uploadPromises","downloadPulls","downloadActives","webpConvertPromises","refreshReferencePromises","tempId","queueId","uncompressTGS","convertWebp","convertPromise","activeDelta","downloadPull","downloadCheck","downloadLimit","from","canceled","limit","checkCancel","downloadRequest","getDelta","invoke","refreshReference","reference","file_reference","checkedReference","inputFileLocation","isAvailable","process","isWebpSupported","ext","thumb_size","Boolean","photo_id","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","getFileNameByLocation","cachedPromise","fileStorage","getFileStorage","deleteFile","downloadFile","cacheFileWriter","resolved","errorHandler","getFile","getFileWriter","limitPart","getLimitPart","writeFileDeferred","writeFilePromise","processDownloaded","requestWebFilePart","requestFilePart","delayed","superpuper","isFinal","processedResult","Infinity","progress","file","fileSize","isBigFile","doneParts","partSize","totalParts","fileId","_part","resultInputFile","parts","md5_checksum","details","file_id","file_part","file_total_parts","generator","Set","webpSupported","setUpdatesProcessor","taskListeners","webpSupport","socketProxy","socketTask","socketProxied","localStorageProxy","finishTask","online","toggleStorage","originalPayload"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,G;;CCjF6J,SAAUC,GAAG,aAAa,IAAId,EAAE,CAACc,EAAEd,EAAElB,EAAEyB,KAAK,IAAIQ,EAAE,MAAMD,EAAE,EAAElB,EAAEkB,IAAI,GAAG,MAAM,EAAED,EAAE,EAAE,KAAK,IAAI/B,GAAG,CAAC+B,EAAE/B,EAAE,IAAI,IAAIA,EAAEA,GAAG+B,EAAE,GAAGE,EAAEA,EAAEf,EAAEO,KAAK,EAAEX,EAAEA,EAAEmB,EAAE,UAAUF,GAAGE,GAAG,MAAMnB,GAAG,MAAM,OAAOmB,EAAEnB,GAAG,GAAG,GAAG,MAAMd,EAAE,IAAIkC,YAAY,MAAM,IAAIF,EAAEd,EAAE,GAAG,IAAI,IAAIlB,EAAE,EAAEA,EAAE,IAAIA,IAAI,CAACgC,EAAEhC,EAAE,IAAI,IAAIyB,EAAE,EAAEA,EAAE,EAAEA,IAAIO,EAAE,EAAEA,EAAE,WAAWA,IAAI,EAAEA,IAAI,EAAEd,EAAElB,GAAGgC,EAAE,OAAOd,GAA3G,IAAkH,IAAIO,EAAE,CAACO,EAAEd,EAAEO,EAAEQ,KAAK,MAAMnB,EAAEd,EAAE+B,EAAEE,EAAER,EAAEO,IAAI,EAAE,IAAI,IAAIhC,EAAEiC,EAAEjC,EAAE+B,EAAE/B,IAAIgC,EAAEA,IAAI,EAAElB,EAAE,KAAKkB,EAAEd,EAAElB,KAAK,OAAO,EAAEgC,GAAOC,EAAE,SAASD,EAAEd,GAAG,IAAIlB,EAAEyB,EAAEQ,EAAEnB,EAAEiB,EAAEtB,EAAER,EAAEK,EAAE6B,EAAEC,EAAE/B,EAAEgC,EAAEC,EAAEC,EAAEC,EAAEpC,EAAEqC,EAAEC,EAAEC,EAAEb,EAAEc,EAAEC,EAAEC,EAAEC,EAAE,MAAMC,EAAEhB,EAAEiB,MAAMjD,EAAEgC,EAAEkB,QAAQJ,EAAEd,EAAEmB,MAAM1B,EAAEzB,GAAGgC,EAAEoB,SAAS,GAAGnB,EAAED,EAAEqB,SAASN,EAAEf,EAAEsB,OAAOxC,EAAEmB,GAAGf,EAAEc,EAAEuB,WAAWxB,EAAEE,GAAGD,EAAEuB,UAAU,KAAK9C,EAAEuC,EAAEQ,KAAKvD,EAAE+C,EAAES,MAAMnD,EAAE0C,EAAEU,MAAMvB,EAAEa,EAAEW,MAAMvB,EAAEY,EAAEY,OAAOvD,EAAE2C,EAAEa,KAAKxB,EAAEW,EAAEc,KAAKxB,EAAEU,EAAEe,QAAQxB,EAAES,EAAEgB,SAASxB,GAAG,GAAGQ,EAAEiB,SAAS,EAAE7D,GAAG,GAAG4C,EAAEkB,UAAU,EAAElC,EAAE,EAAE,CAACK,EAAE,KAAKhC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,EAAEhC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,GAAGI,EAAEH,EAAEjC,EAAEmC,GAAGtB,EAAE,OAAO,CAAC,GAAGwB,EAAED,IAAI,GAAGpC,KAAKqC,EAAEL,GAAGK,EAAEA,EAAED,IAAI,GAAG,IAAI,IAAIC,EAAEK,EAAEd,KAAK,MAAMQ,MAAM,CAAC,KAAK,GAAGC,GAAG,CAAC,GAAG,IAAI,GAAGA,GAAG,CAACD,EAAEH,GAAG,MAAMG,IAAIpC,GAAG,GAAGqC,GAAG,IAAI,SAASxB,EAAE,GAAG,GAAGwB,EAAE,CAACM,EAAE7B,KAAK,GAAG,MAAMa,EAAEA,EAAEmC,IAAI,8BAA8BnB,EAAE7B,KAAK,GAAG,MAAMa,EAAEW,EAAE,MAAMF,EAAEC,GAAG,GAAGA,IAAIL,EAAEK,IAAIrC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,GAAGM,GAAGtC,GAAG,GAAGqC,GAAG,EAAErC,KAAKqC,EAAEL,GAAGK,GAAGL,EAAE,KAAKhC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,EAAEhC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,GAAGI,EAAEF,EAAElC,EAAED,GAAGJ,EAAE,OAAO,CAAC,GAAG0C,EAAED,IAAI,GAAGpC,KAAKqC,EAAEL,GAAGK,EAAEA,EAAED,IAAI,GAAG,MAAM,GAAGC,GAAG,CAAC,GAAG,IAAI,GAAGA,GAAG,CAACD,EAAEF,GAAG,MAAME,IAAIpC,GAAG,GAAGqC,GAAG,IAAI,SAAS1C,EAAEgC,EAAEmC,IAAI,wBAAwBnB,EAAE7B,KAAK,GAAG,MAAMa,EAAE,GAAGF,EAAE,MAAMW,EAAEC,GAAG,GAAGL,EAAEK,IAAIrC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,EAAEA,EAAEK,IAAIrC,GAAGyC,EAAE9C,MAAMqC,EAAEA,GAAG,IAAIP,GAAGzB,GAAG,GAAGqC,GAAG,EAAEZ,EAAErB,EAAE,CAACuB,EAAEmC,IAAI,gCAAgCnB,EAAE7B,KAAK,GAAG,MAAMa,EAAE,GAAG3B,KAAKqC,EAAEL,GAAGK,EAAEA,EAAET,EAAEnB,EAAEgB,EAAEY,EAAE,CAAC,GAAGA,EAAEZ,EAAEY,EAAEA,EAAEpC,GAAG0C,EAAEoB,KAAK,CAACpC,EAAEmC,IAAI,gCAAgCnB,EAAE7B,KAAK,GAAG,MAAMa,EAAE,GAAGY,EAAE,EAAEC,EAAET,EAAE,IAAID,GAAG,GAAGS,GAAG3C,EAAEyC,EAAEA,EAAEC,EAAE,CAACA,GAAGD,EAAE,GAAGK,EAAEd,KAAKG,EAAEQ,aAAaF,GAAGE,EAAEX,EAAEH,EAAEe,EAAEE,QAAQ,GAAGZ,EAAEO,GAAG,GAAGE,GAAG3C,EAAEkC,EAAEO,EAAEA,GAAGP,EAAEO,EAAEC,EAAE,CAACA,GAAGD,EAAE,GAAGK,EAAEd,KAAKG,EAAEQ,aAAaF,GAAG,GAAGE,EAAE,EAAET,EAAEQ,EAAE,CAACD,EAAEP,EAAEQ,GAAGD,EAAE,GAAGK,EAAEd,KAAKG,EAAEQ,aAAaF,GAAGE,EAAEX,EAAEH,EAAEe,EAAEE,SAAS,GAAGH,GAAGT,EAAEO,EAAEA,EAAEC,EAAE,CAACA,GAAGD,EAAE,GAAGK,EAAEd,KAAKG,EAAEQ,aAAaF,GAAGE,EAAEX,EAAEH,EAAEe,EAAEE,EAAE,KAAKJ,EAAE,GAAGI,EAAEd,KAAKY,EAAED,KAAKG,EAAEd,KAAKY,EAAED,KAAKG,EAAEd,KAAKY,EAAED,KAAKD,GAAG,EAAEA,IAAII,EAAEd,KAAKY,EAAED,KAAKD,EAAE,IAAII,EAAEd,KAAKY,EAAED,WAAW,CAACA,EAAEX,EAAEH,EAAE,GAAGiB,EAAEd,KAAKc,EAAEH,KAAKG,EAAEd,KAAKc,EAAEH,KAAKG,EAAEd,KAAKc,EAAEH,KAAKD,GAAG,QAAQA,EAAE,GAAGA,IAAII,EAAEd,KAAKc,EAAEH,KAAKD,EAAE,IAAII,EAAEd,KAAKc,EAAEH,OAAO,OAAO,aAAa5C,EAAEyB,GAAGQ,EAAEF,GAAGY,EAAEN,GAAG,EAAErC,GAAG2C,EAAEN,GAAGM,GAAG,EAAEtC,IAAI,GAAGgC,GAAG,EAAEL,EAAEkB,QAAQlD,EAAEgC,EAAEqB,SAASpB,EAAED,EAAEoB,SAASpD,EAAEyB,EAAEA,EAAEzB,EAAE,EAAE,GAAGA,EAAEyB,GAAGO,EAAEuB,UAAUtB,EAAEF,EAAEA,EAAEE,EAAE,IAAI,KAAKA,EAAEF,GAAGiB,EAAEa,KAAKxD,EAAE2C,EAAEc,KAAKzB,GAAG,MAAWN,EAAE,IAAIsC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI5D,EAAE,IAAI6D,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAKrE,EAAE,IAAIoE,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,MAAM,EAAE,IAAI/D,EAAE,IAAIgE,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,IAAInC,EAAE,CAACH,EAAEd,EAAElB,EAAEyB,EAAEQ,EAAEE,EAAEC,EAAE/B,KAAK,MAAMgC,EAAEhC,EAAEyD,KAAK,IAAIxB,EAAEC,EAAEC,EAAEpC,EAAEqC,EAAEC,EAAEC,EAAE,EAAEb,EAAE,EAAEc,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEuB,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,KAAKC,EAAE,EAAE,MAAMC,EAAE,IAAIP,YAAY,IAAIQ,EAAE,IAAIR,YAAY,IAAI,IAAIS,EAAEC,EAAEC,EAAEC,EAAE,KAAKC,EAAE,EAAE,IAAIvC,EAAE,EAAEA,GAA3pB,GAAgqBA,IAAIiC,EAAEjC,GAAG,EAAE,IAAIb,EAAE,EAAEA,EAAEL,EAAEK,IAAI8C,EAAE1D,EAAElB,EAAE8B,MAAM,IAAIgB,EAAET,EAAEQ,EAA/sB,GAAmtBA,GAAG,GAAG,IAAI+B,EAAE/B,GAAGA,KAAK,GAAGC,EAAED,IAAIC,EAAED,GAAG,IAAIA,EAAE,OAAOZ,EAAEE,KAAK,SAASF,EAAEE,KAAK,SAAS9B,EAAEyD,KAAK,EAAE,EAAE,IAAIlB,EAAE,EAAEA,EAAEC,GAAG,IAAI+B,EAAEhC,GAAGA,KAAK,IAAIE,EAAEF,IAAIE,EAAEF,GAAG2B,EAAE,EAAE5B,EAAE,EAAEA,GAA/1B,GAAo2BA,IAAI,GAAG4B,IAAI,EAAEA,GAAGK,EAAEjC,GAAG4B,EAAE,EAAE,OAAO,EAAE,GAAGA,EAAE,IAAI,IAAIvC,GAAG,IAAIa,GAAG,OAAO,EAAE,IAAIgC,EAAE,GAAG,EAAElC,EAAE,EAAEA,EAAr7B,GAAy7BA,IAAIkC,EAAElC,EAAE,GAAGkC,EAAElC,GAAGiC,EAAEjC,GAAG,IAAIb,EAAE,EAAEA,EAAEL,EAAEK,IAAI,IAAIZ,EAAElB,EAAE8B,KAAKM,EAAEyC,EAAE3D,EAAElB,EAAE8B,OAAOA,GAAG,GAAG,IAAIE,GAAG0C,EAAEO,EAAE7C,EAAEM,EAAE,IAAI,IAAIV,GAAG0C,EAAE3C,EAAE4C,GAAG,IAAIM,EAAExE,EAAEyE,GAAG,IAAIxC,EAAE,MAAMgC,EAAEzE,EAAEgF,EAAE3E,EAAEoC,GAAG,GAAG+B,EAAE,EAAE3C,EAAE,EAAEa,EAAEC,EAAEH,EAAEN,EAAEY,EAAED,EAAEE,EAAE,EAAER,GAAG,EAAEgC,EAAE,GAAG1B,EAAE1C,EAAEoE,EAAE,EAAE,IAAIxC,GAAGwC,EAAE,KAAK,IAAIxC,GAAGwC,EAAE,IAAI,OAAO,EAAE,OAAO,CAACM,EAAEnC,EAAEK,EAAEZ,EAAEN,GAAGY,GAAGqC,EAAE,EAAEC,EAAE5C,EAAEN,IAAIM,EAAEN,GAAGY,GAAGqC,EAAEE,EAAEC,EAAE9C,EAAEN,IAAIkD,EAAEN,EAAEC,EAAEvC,EAAEN,MAAMiD,EAAE,GAAGC,EAAE,GAAG1C,EAAE,GAAGK,EAAEK,EAAET,EAAE,GAAGQ,EAAEH,EAAEL,EAAE,GAAGA,GAAGD,EAAEL,EAAEQ,GAAGgC,GAAGzB,GAAGT,GAAGuC,GAAG,GAAGC,GAAG,GAAGC,EAAE,QAAQ,IAAIzC,GAAG,IAAID,EAAE,GAAGK,EAAE,EAAE8B,EAAEnC,GAAGA,IAAI,EAAE,GAAG,IAAIA,GAAGmC,GAAGnC,EAAE,EAAEmC,GAAGnC,GAAGmC,EAAE,EAAE3C,IAAI,KAAK8C,EAAEjC,GAAG,CAAC,GAAGA,IAAIE,EAAE,MAAMF,EAAEzB,EAAElB,EAAEoC,EAAEN,IAAI,GAAGa,EAAEG,IAAI2B,EAAErE,KAAKoC,EAAE,CAAC,IAAI,IAAIQ,IAAIA,EAAEF,GAAGL,GAAGG,EAAEG,EAAEJ,EAAEK,EAAEuB,EAAE,GAAGxB,EAAEA,EAAEC,EAAEH,IAAI0B,GAAGK,EAAE7B,EAAEC,KAAKuB,GAAG,KAAKxB,IAAIwB,IAAI,EAAE,GAAGC,GAAG,GAAGzB,EAAE,IAAIf,GAAGwC,EAAE,KAAK,IAAIxC,GAAGwC,EAAE,IAAI,OAAO,EAAEhC,EAAEiC,EAAErE,EAAE6B,EAAEO,GAAGM,GAAG,GAAGC,GAAG,GAAGN,EAAEN,EAAE,GAAG,OAAO,IAAIsC,IAAIxC,EAAEQ,EAAEgC,GAAG9B,EAAEK,GAAG,GAAG,IAAI,GAAG,GAAG3C,EAAEyD,KAAKhB,EAAE,GAAGV,EAAE,CAAC+C,WAAW,EAAEC,gBAAgB,EAAEC,aAAa,EAAEC,aAAa,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,aAAa,EAAEC,YAAY,EAAEC,SAAS,EAAEC,gBAAgB,EAAEC,cAAc,EAAEC,aAAa,EAAEC,aAAa,EAAEC,iBAAiB,EAAEC,aAAa,EAAEC,mBAAmB,EAAEC,uBAAuB,EAAEC,WAAW,EAAEC,eAAe,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,mBAAmB,EAAEC,SAAS,EAAEC,OAAO,EAAEC,UAAU,EAAEC,WAAW,GAAG,MAAMvB,SAASlF,EAAEmF,QAAQnD,EAAEoD,QAAQnD,EAAEoD,KAAKnD,EAAEoD,aAAanD,EAAEoD,YAAYxF,EAAE0F,eAAerD,EAAEsD,aAAarD,EAAEsD,YAAYrD,EAAEsD,YAAYnE,EAAEgF,WAAWlE,GAAGR,EAAES,EAAE,GAAGC,EAAE,GAAGC,EAAEf,IAAIA,IAAI,GAAG,MAAMA,IAAI,EAAE,SAAS,MAAMA,IAAI,KAAK,IAAIA,IAAI,IAAI,SAASgB,IAAI+D,KAAK5F,KAAK,EAAE4F,KAAKC,MAAK,EAAGD,KAAKE,KAAK,EAAEF,KAAKG,UAAS,EAAGH,KAAKI,MAAM,EAAEJ,KAAKvD,KAAK,EAAEuD,KAAKK,MAAM,EAAEL,KAAKM,MAAM,EAAEN,KAAKO,KAAK,KAAKP,KAAKQ,MAAM,EAAER,KAAKtD,MAAM,EAAEsD,KAAKrD,MAAM,EAAEqD,KAAKpD,MAAM,EAAEoD,KAAKnD,OAAO,KAAKmD,KAAKlD,KAAK,EAAEkD,KAAKjD,KAAK,EAAEiD,KAAKS,OAAO,EAAET,KAAKU,OAAO,EAAEV,KAAKW,MAAM,EAAEX,KAAKhD,QAAQ,KAAKgD,KAAK/C,SAAS,KAAK+C,KAAK9C,QAAQ,EAAE8C,KAAK7C,SAAS,EAAE6C,KAAKY,MAAM,EAAEZ,KAAKa,KAAK,EAAEb,KAAKc,MAAM,EAAEd,KAAKe,KAAK,EAAEf,KAAKgB,KAAK,KAAKhB,KAAKiB,KAAK,IAAI3D,YAAY,KAAK0C,KAAKkB,KAAK,IAAI5D,YAAY,KAAK0C,KAAKmB,OAAO,KAAKnB,KAAKoB,QAAQ,KAAKpB,KAAK3C,KAAK,EAAE2C,KAAKqB,KAAK,EAAErB,KAAKsB,IAAI,EAAE,MAAM9D,EAAEvC,IAAI,IAAIA,IAAIA,EAAEiB,MAAM,OAAOR,EAAE,MAAMvB,EAAEc,EAAEiB,MAAM,OAAOjB,EAAEsG,SAAStG,EAAEuG,UAAUrH,EAAEmG,MAAM,EAAErF,EAAEmC,IAAI,GAAGjD,EAAE+F,OAAOjF,EAAEwG,MAAM,EAAEtH,EAAE+F,MAAM/F,EAAEC,KAAK,EAAED,EAAE8F,KAAK,EAAE9F,EAAEgG,SAAS,EAAEhG,EAAEsC,KAAK,MAAMtC,EAAEoG,KAAK,KAAKpG,EAAE2C,KAAK,EAAE3C,EAAE4C,KAAK,EAAE5C,EAAE6C,QAAQ7C,EAAEgH,OAAO,IAAIO,WAAW,KAAKvH,EAAE8C,SAAS9C,EAAEiH,QAAQ,IAAIM,WAAW,KAAKvH,EAAEkD,KAAK,EAAElD,EAAEkH,MAAM,EAAE7F,GAAGiC,EAAExC,IAAI,IAAIA,IAAIA,EAAEiB,MAAM,OAAOR,EAAE,MAAMvB,EAAEc,EAAEiB,MAAM,OAAO/B,EAAEuC,MAAM,EAAEvC,EAAEwC,MAAM,EAAExC,EAAEyC,MAAM,EAAEY,EAAEvC,IAAIyC,EAAE,CAACzC,EAAEd,KAAK,IAAIlB,EAAE,IAAIgC,IAAIA,EAAEiB,MAAM,OAAOR,EAAE,MAAMhB,EAAEO,EAAEiB,MAAM,OAAO/B,EAAE,GAAGlB,EAAE,EAAEkB,GAAGA,IAAIlB,EAAE,GAAGkB,GAAG,GAAGA,EAAE,KAAKA,GAAG,KAAKA,IAAIA,EAAE,GAAGA,EAAE,IAAIuB,GAAG,OAAOhB,EAAEmC,QAAQnC,EAAE8F,QAAQrG,IAAIO,EAAEmC,OAAO,MAAMnC,EAAEwF,KAAKjH,EAAEyB,EAAE8F,MAAMrG,EAAEsD,EAAExC,KAAK0C,EAAE,CAAC1C,EAAEd,KAAK,IAAIc,EAAE,OAAOS,EAAE,MAAMzC,EAAE,IAAIgD,EAAEhB,EAAEiB,MAAMjD,EAAEA,EAAE4D,OAAO,KAAK,MAAMnC,EAAEgD,EAAEzC,EAAEd,GAAG,OAAOO,IAAIc,IAAIP,EAAEiB,MAAM,MAAMxB,GAAG,IAAIkD,EAAEC,EAAEC,GAAE,EAAG,MAAMC,EAAE9C,IAAI,GAAG6C,EAAE,CAACF,EAAE,IAAI8D,WAAW,KAAK7D,EAAE,IAAI6D,WAAW,IAAI,IAAIvH,EAAE,EAAE,KAAKA,EAAE,KAAKc,EAAEgG,KAAK9G,KAAK,EAAE,KAAKA,EAAE,KAAKc,EAAEgG,KAAK9G,KAAK,EAAE,KAAKA,EAAE,KAAKc,EAAEgG,KAAK9G,KAAK,EAAE,KAAKA,EAAE,KAAKc,EAAEgG,KAAK9G,KAAK,EAAE,IAAIiB,EAAE,EAAEH,EAAEgG,KAAK,EAAE,IAAIrD,EAAE,EAAE3C,EAAEiG,KAAK,CAACnE,KAAK,IAAI5C,EAAE,EAAEA,EAAE,IAAIc,EAAEgG,KAAK9G,KAAK,EAAEiB,EAAE,EAAEH,EAAEgG,KAAK,EAAE,GAAGpD,EAAE,EAAE5C,EAAEiG,KAAK,CAACnE,KAAK,IAAIe,GAAE,EAAG7C,EAAE+B,QAAQY,EAAE3C,EAAEiC,QAAQ,EAAEjC,EAAEgC,SAASY,EAAE5C,EAAEkC,SAAS,GAAGa,EAAE,CAAC/C,EAAEd,EAAElB,EAAEyB,KAAK,IAAIQ,EAAE,MAAMnB,EAAEkB,EAAEiB,MAAM,OAAO,OAAOnC,EAAE8C,SAAS9C,EAAE2C,MAAM,GAAG3C,EAAEyG,MAAMzG,EAAE6C,MAAM,EAAE7C,EAAE4C,MAAM,EAAE5C,EAAE8C,OAAO,IAAIU,WAAWxD,EAAE2C,QAAQhC,GAAGX,EAAE2C,OAAO3C,EAAE8C,OAAO8E,IAAIxH,EAAEyH,SAAS3I,EAAEc,EAAE2C,MAAMzD,GAAG,GAAGc,EAAE6C,MAAM,EAAE7C,EAAE4C,MAAM5C,EAAE2C,QAAQxB,EAAEnB,EAAE2C,MAAM3C,EAAE6C,MAAM1B,EAAER,IAAIQ,EAAER,GAAGX,EAAE8C,OAAO8E,IAAIxH,EAAEyH,SAAS3I,EAAEyB,EAAEzB,EAAEyB,EAAEQ,GAAGnB,EAAE6C,QAAQlC,GAAGQ,IAAInB,EAAE8C,OAAO8E,IAAIxH,EAAEyH,SAAS3I,EAAEyB,EAAEzB,GAAG,GAAGc,EAAE6C,MAAMlC,EAAEX,EAAE4C,MAAM5C,EAAE2C,QAAQ3C,EAAE6C,OAAO1B,EAAEnB,EAAE6C,QAAQ7C,EAAE2C,QAAQ3C,EAAE6C,MAAM,GAAG7C,EAAE4C,MAAM5C,EAAE2C,QAAQ3C,EAAE4C,OAAOzB,KAAK,GAAG,IAAI+C,EAAgBR,EAAhBQ,EAAyFN,EAAzFM,EAAmG,CAAChD,EAAEhC,KAAK,IAAIc,EAAEiB,EAAEtB,EAAER,EAAEK,EAAE8B,EAAEY,EAAEuB,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAEG,EAAEC,EAAEC,EAAE0D,EAAEC,EAAEC,EAAEC,EAAEC,EAAEC,EAAE,EAAE,MAAMC,EAAE,IAAI5E,WAAW,GAAG,IAAI6E,EAAEC,EAAE,MAAMC,EAAE,IAAI/E,WAAW,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,IAAItC,IAAIA,EAAEiB,QAAQjB,EAAEsB,SAAStB,EAAEmB,OAAO,IAAInB,EAAEoB,SAAS,OAAOX,EAAE3B,EAAEkB,EAAEiB,MAAMnC,EAAEK,OAAO0B,IAAI/B,EAAEK,KAAK,IAAIb,EAAE0B,EAAEqB,SAAS5C,EAAEuB,EAAEsB,OAAON,EAAEhB,EAAEuB,UAAUtD,EAAE+B,EAAEkB,QAAQnB,EAAEC,EAAEmB,MAAMf,EAAEJ,EAAEoB,SAASmB,EAAEzD,EAAE+C,KAAKW,EAAE1D,EAAEgD,KAAKW,EAAErC,EAAEsC,EAAE1B,EAAEgG,EAAEzG,EAAEP,EAAE,OAAO,OAAOlB,EAAEK,MAAM,KAAK,EAAE,GAAG,IAAIL,EAAEmG,KAAK,CAACnG,EAAEK,KAAK,GAAG,MAAM,KAAKqD,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAG,EAAE1D,EAAEmG,MAAM,QAAQ1C,EAAE,CAACzD,EAAEsG,MAAM,EAAE8B,EAAE,GAAG,IAAI3E,EAAE2E,EAAE,GAAG3E,IAAI,EAAE,IAAIzD,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAM8B,EAAE,EAAE,GAAG3E,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,EAAE,MAAM,GAAGL,EAAEqG,MAAM,EAAErG,EAAEwG,OAAOxG,EAAEwG,KAAKgC,MAAK,KAAM,EAAExI,EAAEmG,UAAU,IAAI1C,IAAI,IAAIA,GAAG,IAAI,GAAG,CAACvC,EAAEmC,IAAI,yBAAyBrD,EAAEK,KAAK2B,EAAE,MAAM,IAAI,GAAGyB,KAAK3B,EAAE,CAACZ,EAAEmC,IAAI,6BAA6BrD,EAAEK,KAAK2B,EAAE,MAAM,GAAGyB,KAAK,EAAEC,GAAG,EAAEuE,EAAE,GAAG,GAAGxE,GAAG,IAAIzD,EAAEyG,MAAMzG,EAAEyG,MAAMwB,OAAO,GAAGA,EAAEjI,EAAEyG,MAAM,CAACvF,EAAEmC,IAAI,sBAAsBrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAE0C,KAAK,GAAG1C,EAAEyG,MAAMvF,EAAEwG,MAAM1H,EAAEsG,MAAM,EAAEtG,EAAEK,KAAK,IAAIoD,EAAE,GAAG1B,EAAE0B,EAAE,EAAEC,EAAE,EAAE,MAAM,KAAK,EAAE,KAAKA,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAG1D,EAAEqG,MAAM5C,GAAG,IAAIzD,EAAEqG,SAASvE,EAAE,CAACZ,EAAEmC,IAAI,6BAA6BrD,EAAEK,KAAK2B,EAAE,MAAM,GAAG,MAAMhC,EAAEqG,MAAM,CAACnF,EAAEmC,IAAI,2BAA2BrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAEwG,OAAOxG,EAAEwG,KAAKiC,KAAKhF,GAAG,EAAE,GAAG,IAAIzD,EAAEqG,QAAQ+B,EAAE,GAAG,IAAI3E,EAAE2E,EAAE,GAAG3E,IAAI,EAAE,IAAIzD,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAM8B,EAAE,EAAE,IAAI3E,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,EAAE,KAAK,EAAE,KAAKqD,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAEwG,OAAOxG,EAAEwG,KAAKkC,KAAKjF,GAAG,IAAIzD,EAAEqG,QAAQ+B,EAAE,GAAG,IAAI3E,EAAE2E,EAAE,GAAG3E,IAAI,EAAE,IAAI2E,EAAE,GAAG3E,IAAI,GAAG,IAAI2E,EAAE,GAAG3E,IAAI,GAAG,IAAIzD,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAM8B,EAAE,EAAE,IAAI3E,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,EAAE,KAAK,EAAE,KAAKqD,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAEwG,OAAOxG,EAAEwG,KAAKmC,OAAO,IAAIlF,EAAEzD,EAAEwG,KAAKoC,GAAGnF,GAAG,GAAG,IAAIzD,EAAEqG,QAAQ+B,EAAE,GAAG,IAAI3E,EAAE2E,EAAE,GAAG3E,IAAI,EAAE,IAAIzD,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAM8B,EAAE,EAAE,IAAI3E,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,EAAE,KAAK,EAAE,GAAG,KAAKL,EAAEqG,MAAM,CAAC,KAAK3C,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAE0G,OAAOjD,EAAEzD,EAAEwG,OAAOxG,EAAEwG,KAAKqC,UAAUpF,GAAG,IAAIzD,EAAEqG,QAAQ+B,EAAE,GAAG,IAAI3E,EAAE2E,EAAE,GAAG3E,IAAI,EAAE,IAAIzD,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAM8B,EAAE,EAAE,IAAI3E,EAAE,EAAEC,EAAE,OAAO1D,EAAEwG,OAAOxG,EAAEwG,KAAKI,MAAM,MAAM5G,EAAEK,KAAK,EAAE,KAAK,EAAE,GAAG,KAAKL,EAAEqG,QAAQxC,EAAE7D,EAAE0G,OAAO7C,EAAEvC,IAAIuC,EAAEvC,GAAGuC,IAAI7D,EAAEwG,OAAOyB,EAAEjI,EAAEwG,KAAKqC,UAAU7I,EAAE0G,OAAO1G,EAAEwG,KAAKI,QAAQ5G,EAAEwG,KAAKI,MAAM,IAAIpD,WAAWxD,EAAEwG,KAAKqC,YAAY7I,EAAEwG,KAAKI,MAAMgB,IAAI3G,EAAE4G,SAAS1I,EAAEA,EAAE0E,GAAGoE,IAAI,IAAIjI,EAAEqG,QAAQrG,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAMrF,EAAE4C,EAAE1E,IAAImC,GAAGuC,EAAE1E,GAAG0E,EAAE7D,EAAE0G,QAAQ7C,GAAG7D,EAAE0G,QAAQ,MAAMxF,EAAElB,EAAE0G,OAAO,EAAE1G,EAAEK,KAAK,EAAE,KAAK,EAAE,GAAG,KAAKL,EAAEqG,MAAM,CAAC,GAAG,IAAI/E,EAAE,MAAMJ,EAAE2C,EAAE,EAAE,GAAGoE,EAAEhH,EAAE9B,EAAE0E,KAAK7D,EAAEwG,MAAMyB,GAAGjI,EAAE0G,OAAO,QAAQ1G,EAAEwG,KAAK/G,MAAMqJ,OAAOC,aAAad,UAAUA,GAAGpE,EAAEvC,GAAG,GAAG,IAAItB,EAAEqG,QAAQrG,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAMrF,EAAE4C,EAAE1E,IAAImC,GAAGuC,EAAE1E,GAAG0E,EAAEoE,EAAE,MAAM/G,OAAOlB,EAAEwG,OAAOxG,EAAEwG,KAAK/G,KAAK,MAAMO,EAAE0G,OAAO,EAAE1G,EAAEK,KAAK,EAAE,KAAK,EAAE,GAAG,KAAKL,EAAEqG,MAAM,CAAC,GAAG,IAAI/E,EAAE,MAAMJ,EAAE2C,EAAE,EAAE,GAAGoE,EAAEhH,EAAE9B,EAAE0E,KAAK7D,EAAEwG,MAAMyB,GAAGjI,EAAE0G,OAAO,QAAQ1G,EAAEwG,KAAKwC,SAASF,OAAOC,aAAad,UAAUA,GAAGpE,EAAEvC,GAAG,GAAG,IAAItB,EAAEqG,QAAQrG,EAAEsG,MAAM3F,EAAEX,EAAEsG,MAAMrF,EAAE4C,EAAE1E,IAAImC,GAAGuC,EAAE1E,GAAG0E,EAAEoE,EAAE,MAAM/G,OAAOlB,EAAEwG,OAAOxG,EAAEwG,KAAKwC,QAAQ,MAAMhJ,EAAEK,KAAK,EAAE,KAAK,EAAE,GAAG,IAAIL,EAAEqG,MAAM,CAAC,KAAK3C,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGD,KAAK,MAAMzD,EAAEsG,OAAO,CAACpF,EAAEmC,IAAI,sBAAsBrD,EAAEK,KAAK2B,EAAE,MAAMyB,EAAE,EAAEC,EAAE,EAAE1D,EAAEwG,OAAOxG,EAAEwG,KAAKyC,KAAKjJ,EAAEqG,OAAO,EAAE,EAAErG,EAAEwG,KAAKgC,MAAK,GAAItH,EAAEwG,MAAM1H,EAAEsG,MAAM,EAAEtG,EAAEK,KAAK0B,EAAE,MAAM,KAAK,GAAG,KAAK2B,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAExC,EAAEwG,MAAM1H,EAAEsG,MAAMrE,EAAEwB,GAAGA,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAG,IAAIL,EAAEoG,SAAS,OAAOlF,EAAEqB,SAAS/C,EAAE0B,EAAEuB,UAAUP,EAAEhB,EAAEkB,QAAQjD,EAAE+B,EAAEoB,SAAShB,EAAEtB,EAAE+C,KAAKU,EAAEzD,EAAEgD,KAAKU,EAAEpE,EAAE4B,EAAEwG,MAAM1H,EAAEsG,MAAM,EAAEtG,EAAEK,KAAK0B,EAAE,KAAKA,EAAE,GAAG7C,IAAIqC,GAAGrC,IAAIsC,EAAE,MAAMN,EAAE,KAAK,GAAG,GAAGlB,EAAEkG,KAAK,CAACzC,KAAK,EAAEC,EAAEA,GAAG,EAAEA,EAAE1D,EAAEK,KAAK,GAAG,MAAM,KAAKqD,EAAE,GAAG,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,OAAO1D,EAAEkG,KAAK,EAAEzC,EAAEA,KAAK,EAAEC,GAAG,EAAE,EAAED,GAAG,KAAK,EAAEzD,EAAEK,KAAK,GAAG,MAAM,KAAK,EAAE,GAAG2D,EAAEhE,GAAGA,EAAEK,KAAK,GAAGnB,IAAIsC,EAAE,CAACiC,KAAK,EAAEC,GAAG,EAAE,MAAMxC,EAAE,MAAM,KAAK,EAAElB,EAAEK,KAAK,GAAG,MAAM,KAAK,EAAEa,EAAEmC,IAAI,qBAAqBrD,EAAEK,KAAK2B,EAAEyB,KAAK,EAAEC,GAAG,EAAE,MAAM,KAAK,GAAG,IAAID,KAAK,EAAEC,EAAEA,GAAG,EAAEA,EAAEA,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,IAAI,MAAMD,KAAKA,IAAI,GAAG,OAAO,CAACvC,EAAEmC,IAAI,+BAA+BrD,EAAEK,KAAK2B,EAAE,MAAM,GAAGhC,EAAE0G,OAAO,MAAMjD,EAAEA,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,GAAGnB,IAAIsC,EAAE,MAAMN,EAAE,KAAK,GAAGlB,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAGwD,EAAE7D,EAAE0G,OAAO7C,EAAE,CAAC,GAAGA,EAAEvC,IAAIuC,EAAEvC,GAAGuC,EAAE3B,IAAI2B,EAAE3B,GAAG,IAAI2B,EAAE,MAAM3C,EAAEvB,EAAEiI,IAAI3G,EAAE4G,SAAS1I,EAAEA,EAAE0E,GAAGrE,GAAG8B,GAAGuC,EAAE1E,GAAG0E,EAAE3B,GAAG2B,EAAErE,GAAGqE,EAAE7D,EAAE0G,QAAQ7C,EAAE,MAAM7D,EAAEK,KAAK0B,EAAE,MAAM,KAAK,GAAG,KAAK2B,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAG1D,EAAE8G,KAAK,KAAK,GAAGrD,GAAGA,KAAK,EAAEC,GAAG,EAAE1D,EAAE+G,MAAM,GAAG,GAAGtD,GAAGA,KAAK,EAAEC,GAAG,EAAE1D,EAAE6G,MAAM,GAAG,GAAGpD,GAAGA,KAAK,EAAEC,GAAG,EAAE1D,EAAE8G,KAAK,KAAK9G,EAAE+G,MAAM,GAAG,CAAC7F,EAAEmC,IAAI,sCAAsCrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAEgH,KAAK,EAAEhH,EAAEK,KAAK,GAAG,KAAK,GAAG,KAAKL,EAAEgH,KAAKhH,EAAE6G,OAAO,CAAC,KAAKnD,EAAE,GAAG,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAEkH,KAAKqB,EAAEvI,EAAEgH,SAAS,EAAEvD,EAAEA,KAAK,EAAEC,GAAG,EAAE,KAAK1D,EAAEgH,KAAK,IAAIhH,EAAEkH,KAAKqB,EAAEvI,EAAEgH,SAAS,EAAE,GAAGhH,EAAEiD,QAAQjD,EAAEoH,OAAOpH,EAAEmD,QAAQ,EAAEkF,EAAE,CAACrF,KAAKhD,EAAEmD,SAAS+E,EAAE7G,EAAE,EAAErB,EAAEkH,KAAK,EAAE,GAAGlH,EAAEiD,QAAQ,EAAEjD,EAAEmH,KAAKkB,GAAGrI,EAAEmD,QAAQkF,EAAErF,KAAKkF,EAAE,CAAChH,EAAEmC,IAAI,2BAA2BrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAEgH,KAAK,EAAEhH,EAAEK,KAAK,GAAG,KAAK,GAAG,KAAKL,EAAEgH,KAAKhH,EAAE8G,KAAK9G,EAAE+G,OAAO,CAAC,KAAKoB,EAAEnI,EAAEiD,QAAQQ,GAAG,GAAGzD,EAAEmD,SAAS,GAAGe,EAAEiE,IAAI,GAAGhE,EAAEgE,IAAI,GAAG,IAAI/D,EAAE,MAAM+D,IAAIjE,GAAGR,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGU,EAAE,GAAGX,KAAKS,EAAER,GAAGQ,EAAElE,EAAEkH,KAAKlH,EAAEgH,QAAQ5C,MAAM,CAAC,GAAG,KAAKA,EAAE,CAAC,IAAIkE,EAAEpE,EAAE,EAAER,EAAE4E,GAAG,CAAC,GAAG,IAAIhH,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGD,KAAKS,EAAER,GAAGQ,EAAE,IAAIlE,EAAEgH,KAAK,CAAC9F,EAAEmC,IAAI,4BAA4BrD,EAAEK,KAAK2B,EAAE,MAAMiG,EAAEjI,EAAEkH,KAAKlH,EAAEgH,KAAK,GAAGnD,EAAE,GAAG,EAAEJ,GAAGA,KAAK,EAAEC,GAAG,OAAO,GAAG,KAAKU,EAAE,CAAC,IAAIkE,EAAEpE,EAAE,EAAER,EAAE4E,GAAG,CAAC,GAAG,IAAIhH,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAED,KAAKS,EAAER,GAAGQ,EAAE+D,EAAE,EAAEpE,EAAE,GAAG,EAAEJ,GAAGA,KAAK,EAAEC,GAAG,MAAM,CAAC,IAAI4E,EAAEpE,EAAE,EAAER,EAAE4E,GAAG,CAAC,GAAG,IAAIhH,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAED,KAAKS,EAAER,GAAGQ,EAAE+D,EAAE,EAAEpE,EAAE,IAAI,IAAIJ,GAAGA,KAAK,EAAEC,GAAG,EAAE,GAAG1D,EAAEgH,KAAKnD,EAAE7D,EAAE8G,KAAK9G,EAAE+G,MAAM,CAAC7F,EAAEmC,IAAI,4BAA4BrD,EAAEK,KAAK2B,EAAE,MAAM,KAAK6B,KAAK7D,EAAEkH,KAAKlH,EAAEgH,QAAQiB,GAAG,GAAGjI,EAAEK,OAAO2B,EAAE,MAAM,GAAG,IAAIhC,EAAEkH,KAAK,KAAK,CAAChG,EAAEmC,IAAI,uCAAuCrD,EAAEK,KAAK2B,EAAE,MAAM,GAAGhC,EAAEmD,QAAQ,EAAEkF,EAAE,CAACrF,KAAKhD,EAAEmD,SAAS+E,EAAE7G,EAAE,EAAErB,EAAEkH,KAAK,EAAElH,EAAE8G,KAAK9G,EAAEiD,QAAQ,EAAEjD,EAAEmH,KAAKkB,GAAGrI,EAAEmD,QAAQkF,EAAErF,KAAKkF,EAAE,CAAChH,EAAEmC,IAAI,8BAA8BrD,EAAEK,KAAK2B,EAAE,MAAM,GAAGhC,EAAEoD,SAAS,EAAEpD,EAAEkD,SAASlD,EAAEqH,QAAQgB,EAAE,CAACrF,KAAKhD,EAAEoD,UAAU8E,EAAE7G,EAAE,EAAErB,EAAEkH,KAAKlH,EAAE8G,KAAK9G,EAAE+G,MAAM/G,EAAEkD,SAAS,EAAElD,EAAEmH,KAAKkB,GAAGrI,EAAEoD,SAASiF,EAAErF,KAAKkF,EAAE,CAAChH,EAAEmC,IAAI,wBAAwBrD,EAAEK,KAAK2B,EAAE,MAAM,GAAGhC,EAAEK,KAAK,GAAGnB,IAAIsC,EAAE,MAAMN,EAAE,KAAK,GAAGlB,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAGiB,GAAG,GAAGY,GAAG,IAAI,CAAChB,EAAEqB,SAAS/C,EAAE0B,EAAEuB,UAAUP,EAAEhB,EAAEkB,QAAQjD,EAAE+B,EAAEoB,SAAShB,EAAEtB,EAAE+C,KAAKU,EAAEzD,EAAEgD,KAAKU,EAAEvC,EAAED,EAAE0C,GAAGpE,EAAE0B,EAAEqB,SAAS5C,EAAEuB,EAAEsB,OAAON,EAAEhB,EAAEuB,UAAUtD,EAAE+B,EAAEkB,QAAQnB,EAAEC,EAAEmB,MAAMf,EAAEJ,EAAEoB,SAASmB,EAAEzD,EAAE+C,KAAKW,EAAE1D,EAAEgD,KAAKhD,EAAEK,OAAO0B,IAAI/B,EAAEsH,MAAM,GAAG,MAAM,IAAItH,EAAEsH,KAAK,EAAEa,EAAEnI,EAAEiD,QAAQQ,GAAG,GAAGzD,EAAEmD,SAAS,GAAGe,EAAEiE,IAAI,GAAGhE,EAAEgE,IAAI,GAAG,IAAI/D,EAAE,MAAM+D,IAAIjE,GAAGR,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGS,GAAG,IAAI,IAAIA,GAAG,CAAC,IAAI2D,EAAE5D,EAAE6D,EAAE5D,EAAE6D,EAAE5D,EAAE+D,EAAEnI,EAAEiD,QAAQ+E,IAAIvE,GAAG,GAAGqE,EAAEC,GAAG,IAAID,IAAI5D,EAAEiE,IAAI,GAAGhE,EAAEgE,IAAI,GAAG,IAAI/D,EAAE,MAAM+D,IAAIL,EAAE5D,GAAGR,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAED,KAAKqE,EAAEpE,GAAGoE,EAAE9H,EAAEsH,MAAMQ,EAAE,GAAGrE,KAAKS,EAAER,GAAGQ,EAAElE,EAAEsH,MAAMpD,EAAElE,EAAE0G,OAAOtC,EAAE,IAAID,EAAE,CAACnE,EAAEK,KAAK,GAAG,MAAM,GAAG,GAAG8D,EAAE,CAACnE,EAAEsH,MAAM,EAAEtH,EAAEK,KAAK0B,EAAE,MAAM,GAAG,GAAGoC,EAAE,CAACjD,EAAEmC,IAAI,8BAA8BrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAE4G,MAAM,GAAGzC,EAAEnE,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAGL,EAAE4G,MAAM,CAAC,IAAI0B,EAAEtI,EAAE4G,MAAMlD,EAAE4E,GAAG,CAAC,GAAG,IAAIhH,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAE0G,QAAQjD,GAAG,GAAGzD,EAAE4G,OAAO,EAAEnD,KAAKzD,EAAE4G,MAAMlD,GAAG1D,EAAE4G,MAAM5G,EAAEsH,MAAMtH,EAAE4G,MAAM5G,EAAEuH,IAAIvH,EAAE0G,OAAO1G,EAAEK,KAAK,GAAG,KAAK,GAAG,KAAK8H,EAAEnI,EAAEkD,SAASO,GAAG,GAAGzD,EAAEoD,UAAU,GAAGc,EAAEiE,IAAI,GAAGhE,EAAEgE,IAAI,GAAG,IAAI/D,EAAE,MAAM+D,IAAIjE,GAAGR,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAG,IAAI,IAAIS,GAAG,CAAC,IAAI2D,EAAE5D,EAAE6D,EAAE5D,EAAE6D,EAAE5D,EAAE+D,EAAEnI,EAAEkD,SAAS8E,IAAIvE,GAAG,GAAGqE,EAAEC,GAAG,IAAID,IAAI5D,EAAEiE,IAAI,GAAGhE,EAAEgE,IAAI,GAAG,IAAI/D,EAAE,MAAM+D,IAAIL,EAAE5D,GAAGR,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAED,KAAKqE,EAAEpE,GAAGoE,EAAE9H,EAAEsH,MAAMQ,EAAE,GAAGrE,KAAKS,EAAER,GAAGQ,EAAElE,EAAEsH,MAAMpD,EAAE,GAAGC,EAAE,CAACjD,EAAEmC,IAAI,wBAAwBrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAE2G,OAAOvC,EAAEpE,EAAE4G,MAAM,GAAGzC,EAAEnE,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAGL,EAAE4G,MAAM,CAAC,IAAI0B,EAAEtI,EAAE4G,MAAMlD,EAAE4E,GAAG,CAAC,GAAG,IAAIhH,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE1D,EAAE2G,QAAQlD,GAAG,GAAGzD,EAAE4G,OAAO,EAAEnD,KAAKzD,EAAE4G,MAAMlD,GAAG1D,EAAE4G,MAAM5G,EAAEsH,MAAMtH,EAAE4G,MAAM,GAAG5G,EAAE2G,OAAO3G,EAAE0C,KAAK,CAACxB,EAAEmC,IAAI,gCAAgCrD,EAAEK,KAAK2B,EAAE,MAAMhC,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAG,IAAI6B,EAAE,MAAMhB,EAAE,GAAG2C,EAAED,EAAE1B,EAAElC,EAAE2G,OAAO9C,EAAE,CAAC,GAAGA,EAAE7D,EAAE2G,OAAO9C,EAAEA,EAAE7D,EAAE4C,OAAO5C,EAAEsD,KAAK,CAACpC,EAAEmC,IAAI,gCAAgCrD,EAAEK,KAAK2B,EAAE,MAAM6B,EAAE7D,EAAE6C,OAAOgB,GAAG7D,EAAE6C,MAAMiB,EAAE9D,EAAE2C,MAAMkB,GAAGC,EAAE9D,EAAE6C,MAAMgB,EAAEA,EAAE7D,EAAE0G,SAAS7C,EAAE7D,EAAE0G,QAAQ3C,EAAE/D,EAAE8C,YAAYiB,EAAEpE,EAAEmE,EAAEtE,EAAEQ,EAAE2G,OAAO9C,EAAE7D,EAAE0G,OAAO7C,EAAE3B,IAAI2B,EAAE3B,GAAGA,GAAG2B,EAAE7D,EAAE0G,QAAQ7C,EAAE,GAAGlE,EAAEH,KAAKuE,EAAED,aAAaD,GAAG,IAAI7D,EAAE0G,SAAS1G,EAAEK,KAAK,IAAI,MAAM,KAAK,GAAG,GAAG,IAAI6B,EAAE,MAAMhB,EAAEvB,EAAEH,KAAKQ,EAAE0G,OAAOxE,IAAIlC,EAAEK,KAAK,GAAG,MAAM,KAAK,GAAG,GAAGL,EAAEmG,KAAK,CAAC,KAAKzC,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGE,GAAG1B,EAAEhB,EAAEuG,WAAW7D,EAAE5D,EAAEuG,OAAO3C,EAAEA,IAAI1C,EAAEwG,MAAM1H,EAAEsG,MAAMtG,EAAEqG,MAAM1F,EAAEX,EAAEsG,MAAM3G,EAAEiE,EAAEpE,EAAEoE,GAAGxD,EAAEJ,EAAEsG,MAAM3G,EAAEiE,EAAEpE,EAAEoE,IAAIA,EAAE1B,GAAGlC,EAAEqG,MAAM5C,EAAExB,EAAEwB,MAAMzD,EAAEsG,MAAM,CAACpF,EAAEmC,IAAI,uBAAuBrD,EAAEK,KAAK2B,EAAE,MAAMyB,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,GAAG,KAAK,GAAG,GAAGL,EAAEmG,MAAMnG,EAAEqG,MAAM,CAAC,KAAK3C,EAAE,IAAI,CAAC,GAAG,IAAIpC,EAAE,MAAMJ,EAAEI,IAAImC,GAAGxC,EAAE9B,MAAMuE,EAAEA,GAAG,EAAE,GAAGD,KAAK,WAAWzD,EAAEuG,OAAO,CAACrF,EAAEmC,IAAI,yBAAyBrD,EAAEK,KAAK2B,EAAE,MAAMyB,EAAE,EAAEC,EAAE,EAAE1D,EAAEK,KAAK,GAAG,KAAK,GAAG6H,EAAExG,EAAE,MAAMR,EAAE,KAAKc,EAAEkG,EAAEtG,EAAE,MAAMV,EAAE,KAAK,GAAG,OAAOW,EAAE,KAAK,GAAG,QAAQ,OAAOF,EAAE,OAAOT,EAAEqB,SAAS/C,EAAE0B,EAAEuB,UAAUP,EAAEhB,EAAEkB,QAAQjD,EAAE+B,EAAEoB,SAAShB,EAAEtB,EAAE+C,KAAKU,EAAEzD,EAAEgD,KAAKU,GAAG1D,EAAE2C,OAAOiB,IAAI1C,EAAEuB,WAAWzC,EAAEK,KAAK2B,IAAIhC,EAAEK,KAAK,IAAInB,IAAIK,KAAK0E,EAAE/C,EAAEA,EAAEsB,OAAOtB,EAAEqB,SAASqB,EAAE1C,EAAEuB,WAAWkB,GAAGzC,EAAEoB,SAASsB,GAAG1C,EAAEuB,UAAUvB,EAAEsG,UAAU7D,EAAEzC,EAAEuG,WAAW7D,EAAE5D,EAAEuG,OAAO3C,EAAE5D,EAAEmG,MAAMvC,IAAI1C,EAAEwG,MAAM1H,EAAEsG,MAAMtG,EAAEqG,MAAM1F,EAAEX,EAAEsG,MAAM3G,EAAEiE,EAAE1C,EAAEqB,SAASqB,GAAGxD,EAAEJ,EAAEsG,MAAM3G,EAAEiE,EAAE1C,EAAEqB,SAASqB,IAAI1C,EAAEgI,UAAUlJ,EAAEgD,MAAMhD,EAAEkG,KAAK,GAAG,IAAIlG,EAAEK,OAAO0B,EAAE,IAAI,IAAI,KAAK/B,EAAEK,MAAM,KAAKL,EAAEK,KAAK,IAAI,IAAI,IAAIsD,GAAG,IAAIC,GAAG1E,IAAIK,IAAI2I,IAAIzG,IAAIyG,EAAElH,GAAGkH,GAA/3QhE,EAA64QhD,IAAI,IAAIA,IAAIA,EAAEiB,MAAM,OAAOR,EAAE,IAAIvB,EAAEc,EAAEiB,MAAM,OAAO/B,EAAE0C,SAAS1C,EAAE0C,OAAO,MAAM5B,EAAEiB,MAAM,KAAKV,GAAt+QyC,EAA0/Q,CAAChD,EAAEd,KAAK,IAAIc,IAAIA,EAAEiB,MAAM,OAAOR,EAAE,MAAMzC,EAAEgC,EAAEiB,MAAM,OAAO,IAAI,EAAEjD,EAAEiH,MAAMxE,GAAGzC,EAAEsH,KAAKpG,EAAEA,EAAEoI,MAAK,EAAG/G,IAAtlRyC,EAA+mR,CAAChD,EAAEhC,KAAK,MAAMyB,EAAEzB,EAAEwH,OAAO,IAAIvF,EAAEnB,EAAEiB,EAAE,OAAOC,GAAGA,EAAEiB,OAAOhB,EAAED,EAAEiB,MAAM,IAAIhB,EAAEgF,MAAM,KAAKhF,EAAEd,KAAKsB,EAAE,KAAKR,EAAEd,OAAOL,EAAE,EAAEA,EAAEI,EAAEJ,EAAEd,EAAEyB,EAAE,GAAGX,IAAImB,EAAEmF,OAAO1E,GAAGX,EAAEgD,EAAE/C,EAAEhC,EAAEyB,EAAEA,GAAGM,GAAGE,EAAEd,KAAK,GAAGwB,IAAIV,EAAEiF,SAAS,EAAE3E,KAAKE,GAAqD,MAAMwC,EAAE,CAACjD,EAAEd,IAAIR,OAAOkB,UAAUC,eAAe1B,KAAK6B,EAAEd,GAAqY,IAAI2H,GAAE,EAAG,IAAIe,OAAOC,aAAaI,MAAM,KAAK,IAAI3F,WAAW,IAAI,MAAMtC,GAAG6G,GAAE,EAAG,MAAMC,EAAE,IAAIxE,WAAW,KAAK,IAAI,IAAItC,EAAE,EAAEA,EAAE,IAAIA,IAAI8G,EAAE9G,GAAGA,GAAG,IAAI,EAAEA,GAAG,IAAI,EAAEA,GAAG,IAAI,EAAEA,GAAG,IAAI,EAAEA,GAAG,IAAI,EAAE,EAAE8G,EAAE,KAAKA,EAAE,KAAK,EAAE,IAAikBE,EAAE,CAAChH,EAAEd,KAAK,IAAIlB,EAAEyB,EAAE,MAAMQ,EAAEf,GAAGc,EAAEwF,OAAO1G,EAAE,IAAIoJ,MAAM,EAAEjI,GAAG,IAAIR,EAAE,EAAEzB,EAAE,EAAEA,EAAEiC,GAAG,CAAC,IAAIf,EAAEc,EAAEhC,KAAK,GAAGkB,EAAE,IAAI,CAACJ,EAAEW,KAAKP,EAAE,SAAS,IAAIa,EAAE+G,EAAE5H,GAAG,GAAGa,EAAE,EAAEjB,EAAEW,KAAK,MAAMzB,GAAG+B,EAAE,MAAM,CAAC,IAAIb,GAAG,IAAIa,EAAE,GAAG,IAAIA,EAAE,GAAG,EAAEA,EAAE,GAAG/B,EAAEiC,GAAGf,EAAEA,GAAG,EAAE,GAAGc,EAAEhC,KAAK+B,IAAIA,EAAE,EAAEjB,EAAEW,KAAK,MAAMP,EAAE,MAAMJ,EAAEW,KAAKP,GAAGA,GAAG,MAAMJ,EAAEW,KAAK,MAAMP,GAAG,GAAG,KAAKJ,EAAEW,KAAK,MAAM,KAAKP,IAAI,MAAM,EAAEc,EAAEd,KAAK,GAAGA,EAAE,OAAOc,EAAE2G,UAAUE,EAAE,OAAOe,OAAOC,aAAaI,MAAM,KAAKjI,EAAEwF,SAAStG,EAAEc,EAAEA,EAAE2G,SAAS,EAAEzH,IAAI,IAAIlB,EAAE,GAAG,IAAI,IAAIyB,EAAE,EAAEA,EAAEP,EAAEO,IAAIzB,GAAG4J,OAAOC,aAAa7H,EAAEP,IAAI,OAAOzB,GAA1K,CAA8Kc,EAAEW,IAAIwH,EAAE,CAACjH,EAAEd,MAAMA,EAAEA,GAAGc,EAAEwF,QAAQxF,EAAEwF,SAAStG,EAAEc,EAAEwF,QAAQ,IAAIxH,EAAEkB,EAAE,EAAE,KAAKlB,GAAG,GAAG,MAAM,IAAIgC,EAAEhC,KAAKA,IAAI,OAAOA,EAAE,GAAG,IAAIA,EAAEkB,EAAElB,EAAE8I,EAAE9G,EAAEhC,IAAIkB,EAAElB,EAAEkB,GAAGgI,EAAE,CAACiB,EAAE,kBAAkBC,EAAE,aAAaC,EAAE,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,aAAa,KAAK,sBAAsB,KAAK,eAAe,KAAK,wBAA4BlB,EAAE,WAAWpC,KAAK5D,MAAM,KAAK4D,KAAK7D,QAAQ,EAAE6D,KAAK3D,SAAS,EAAE2D,KAAKuB,SAAS,EAAEvB,KAAKzD,OAAO,KAAKyD,KAAK1D,SAAS,EAAE0D,KAAKxD,UAAU,EAAEwD,KAAKwB,UAAU,EAAExB,KAAK5C,IAAI,GAAG4C,KAAK9D,MAAM,KAAK8D,KAAKiD,UAAU,EAAEjD,KAAKyB,MAAM,GAAOY,EAAE,WAAWrC,KAAKwC,KAAK,EAAExC,KAAKyC,KAAK,EAAEzC,KAAK0C,OAAO,EAAE1C,KAAK2C,GAAG,EAAE3C,KAAKW,MAAM,KAAKX,KAAK4C,UAAU,EAAE5C,KAAKxG,KAAK,GAAGwG,KAAK+C,QAAQ,GAAG/C,KAAKgD,KAAK,EAAEhD,KAAKuC,MAAK,GAAI,MAAMD,EAAE3I,OAAOkB,UAAU0I,UAAUnF,WAAWoF,EAAEhF,SAASiF,EAAE9E,KAAK+E,EAAE9E,aAAa+E,EAAE9E,YAAY+E,GAAE7E,eAAe8E,GAAG7E,aAAa8E,GAAG7E,YAAY8E,IAAI1I,EAAE,SAAS2I,GAAG/I,GAAG+E,KAAKiE,QAAx6E,SAAShJ,GAAG,MAAMd,EAAEgJ,MAAMtI,UAAUqJ,MAAM9K,KAAK+K,UAAU,GAAG,KAAKhK,EAAEsG,QAAQ,CAAC,MAAMxH,EAAEkB,EAAEiK,QAAQ,GAAGnL,EAAE,CAAC,GAAG,iBAAiBA,EAAE,MAAM,IAAIoL,UAAUpL,EAAE,sBAAsB,IAAI,MAAMkB,KAAKlB,EAAEiF,EAAEjF,EAAEkB,KAAKc,EAAEd,GAAGlB,EAAEkB,KAAK,OAAOc,EAA6tEkD,CAAE,CAACmG,UAAU,MAAMC,WAAW,GAAGC,GAAG,IAAIvJ,GAAG,IAAI,MAAMd,EAAE6F,KAAKiE,QAAQ9J,EAAEsK,KAAKtK,EAAEoK,YAAY,GAAGpK,EAAEoK,WAAW,KAAKpK,EAAEoK,YAAYpK,EAAEoK,WAAW,IAAIpK,EAAEoK,aAAapK,EAAEoK,YAAY,OAAOpK,EAAEoK,YAAY,GAAGpK,EAAEoK,WAAW,KAAKtJ,GAAGA,EAAEsJ,aAAapK,EAAEoK,YAAY,IAAIpK,EAAEoK,WAAW,IAAIpK,EAAEoK,WAAW,IAAI,IAAI,GAAGpK,EAAEoK,cAAcpK,EAAEoK,YAAY,IAAIvE,KAAK0E,IAAI,EAAE1E,KAAK5C,IAAI,GAAG4C,KAAK2E,OAAM,EAAG3E,KAAK4E,OAAO,GAAG5E,KAAK6E,KAAK,IAAIzC,EAAEpC,KAAK6E,KAAKrI,UAAU,EAAE,IAAIvD,EAAEgF,EAAe+B,KAAK6E,KAAK1K,EAAEoK,YAAY,GAAGtL,IAAIyK,EAAE,MAAM,IAAIoB,MAAM3C,EAAElJ,IAAI,GAAG+G,KAAK+E,OAAO,IAAI1C,EAAEpE,EAAmB+B,KAAK6E,KAAK7E,KAAK+E,QAAQ5K,EAAE6K,aAAa,iBAAiB7K,EAAE6K,WAAW7K,EAAE6K,WAAl8E/J,KAAI,IAAId,EAAElB,EAAEyB,EAAEQ,EAAEnB,EAAEiB,EAAEC,EAAEwF,OAAO/G,EAAE,EAAE,IAAIwB,EAAE,EAAEA,EAAEF,EAAEE,IAAIjC,EAAEgC,EAAEgK,WAAW/J,GAAG,QAAQ,MAAMjC,IAAIiC,EAAE,EAAEF,IAAIN,EAAEO,EAAEgK,WAAW/J,EAAE,GAAG,QAAQ,MAAMR,KAAKzB,EAAE,OAAOA,EAAE,OAAO,KAAKyB,EAAE,OAAOQ,MAAMxB,GAAGT,EAAE,IAAI,EAAEA,EAAE,KAAK,EAAEA,EAAE,MAAM,EAAE,EAAE,IAAIkB,EAAE,IAAIoD,WAAW7D,GAAGK,EAAE,EAAEmB,EAAE,EAAEnB,EAAEL,EAAEwB,IAAIjC,EAAEgC,EAAEgK,WAAW/J,GAAG,QAAQ,MAAMjC,IAAIiC,EAAE,EAAEF,IAAIN,EAAEO,EAAEgK,WAAW/J,EAAE,GAAG,QAAQ,MAAMR,KAAKzB,EAAE,OAAOA,EAAE,OAAO,KAAKyB,EAAE,OAAOQ,MAAMjC,EAAE,IAAIkB,EAAEJ,KAAKd,EAAEA,EAAE,MAAMkB,EAAEJ,KAAK,IAAId,IAAI,EAAEkB,EAAEJ,KAAK,IAAI,GAAGd,GAAGA,EAAE,OAAOkB,EAAEJ,KAAK,IAAId,IAAI,GAAGkB,EAAEJ,KAAK,IAAId,IAAI,EAAE,GAAGkB,EAAEJ,KAAK,IAAI,GAAGd,IAAIkB,EAAEJ,KAAK,IAAId,IAAI,GAAGkB,EAAEJ,KAAK,IAAId,IAAI,GAAG,GAAGkB,EAAEJ,KAAK,IAAId,IAAI,EAAE,GAAGkB,EAAEJ,KAAK,IAAI,GAAGd,GAAG,OAAOkB,GAAq5D6H,CAAE7H,EAAE6K,YAAY,yBAAyB1C,EAAElJ,KAAKe,EAAE6K,cAAc7K,EAAE6K,WAAW,IAAIzH,WAAWpD,EAAE6K,aAAa7K,EAAEsK,MAAMxL,EAAEgF,EAAuB+B,KAAK6E,KAAK1K,EAAE6K,YAAY/L,IAAIyK,IAAI,MAAM,IAAIoB,MAAM3C,EAAElJ,IAAI,SAASiM,GAAGjK,EAAEd,GAAG,MAAMlB,EAAE,IAAI+K,GAAG7J,GAAG,GAAGlB,EAAEkM,KAAKlK,GAAGhC,EAAEyL,IAAI,MAAMzL,EAAEmE,KAAK+E,EAAElJ,EAAEyL,KAAK,OAAOzL,EAAEmM,OAAOpB,GAAGnJ,UAAUsK,KAAK,SAASlK,EAAEd,GAAG,MAAMlB,EAAE+G,KAAK6E,KAAKnK,EAAEsF,KAAKiE,QAAQK,UAAUpJ,EAAE8E,KAAKiE,QAAQe,WAAW,IAAIjL,EAAEiB,EAAEtB,EAAE,GAAGsG,KAAK2E,MAAM,OAAM,EAAG,IAAI3J,EAAEb,MAAMA,EAAEA,GAAE,IAAKA,EAAEsJ,EAAED,EAAE,yBAAyBlB,EAAElJ,KAAK6B,GAAGhC,EAAEmD,MAAM,IAAImB,WAAWtC,GAAGhC,EAAEmD,MAAMnB,EAAEhC,EAAEkD,QAAQ,EAAElD,EAAEoD,SAASpD,EAAEmD,MAAMqE,SAAS,CAAC,IAAI,IAAIxH,EAAEuD,YAAYvD,EAAEsD,OAAO,IAAIgB,WAAW7C,GAAGzB,EAAEqD,SAAS,EAAErD,EAAEuD,UAAU9B,GAAGX,EAAEkE,EAAUhF,EAAE+B,GAAGjB,IAAI6J,IAAG1I,IAAInB,EAAEkE,EAAuBhF,EAAEiC,GAAGnB,IAAI2J,EAAE3J,EAAEkE,EAAUhF,EAAE+B,GAAGjB,IAAI+J,KAAK/J,EAAE6J,KAAI3K,EAAEoD,SAAS,GAAGtC,IAAI4J,GAAG1K,EAAEiD,MAAMgE,KAAK,GAAG,IAAIjF,EAAEhC,EAAEkD,UAAU8B,EAAehF,GAAGc,EAAEkE,EAAUhF,EAAE+B,GAAG,OAAOjB,GAAG,KAAK8J,GAAG,KAAKC,GAAG,KAAKF,GAAE,KAAKG,GAAG,OAAO/D,KAAKqF,MAAMtL,GAAGiG,KAAK2E,OAAM,GAAG,EAAG,GAAGjL,EAAET,EAAEuD,UAAUvD,EAAEqD,WAAW,IAAIrD,EAAEuD,WAAWzC,IAAI4J,GAAG,GAAG,WAAW3D,KAAKiE,QAAQO,GAAG,CAAC,IAAIvJ,EAAEiH,EAAEjJ,EAAEsD,OAAOtD,EAAEqD,UAAUnC,EAAElB,EAAEqD,SAASrB,EAAEC,EAAE+G,EAAEhJ,EAAEsD,OAAOtB,GAAGhC,EAAEqD,SAASnC,EAAElB,EAAEuD,UAAU9B,EAAEP,EAAEA,GAAGlB,EAAEsD,OAAOoF,IAAI1I,EAAEsD,OAAOqF,SAAS3G,EAAEA,EAAEd,GAAG,GAAG6F,KAAKsF,OAAOpK,QAAQ8E,KAAKsF,OAAOrM,EAAEsD,OAAOkE,SAASxH,EAAEqD,SAASrD,EAAEsD,OAAOtD,EAAEsD,OAAOqF,SAAS,EAAE3I,EAAEqD,WAAW,GAAGvC,IAAI2J,GAAG,IAAIhK,EAAE,CAAC,GAAGK,IAAI4J,EAAE,OAAO5J,EAAEkE,EAAa+B,KAAK6E,MAAM7E,KAAKqF,MAAMtL,GAAGiG,KAAK2E,OAAM,GAAG,EAAG,GAAG,IAAI1L,EAAEoD,SAAS,OAAO,OAAM,GAAI2H,GAAGnJ,UAAUyK,OAAO,SAASrK,GAAG+E,KAAK4E,OAAOO,KAAKlK,IAAI+I,GAAGnJ,UAAUwK,MAAM,SAASpK,GAAGA,IAAIyI,IAAI,WAAW1D,KAAKiE,QAAQO,GAAGxE,KAAKoF,OAAOpF,KAAK4E,OAAOW,KAAK,IAAIvF,KAAKoF,OAA1xInK,KAAI,IAAId,EAAE,EAAE,IAAI,IAAIlB,EAAE,EAAEyB,EAAEO,EAAEwF,OAAOxH,EAAEyB,EAAEzB,IAAIkB,GAAGc,EAAEhC,GAAGwH,OAAO,MAAMxH,EAAE,IAAIsE,WAAWpD,GAAG,IAAI,IAAIA,EAAE,EAAEO,EAAE,EAAEQ,EAAED,EAAEwF,OAAOtG,EAAEe,EAAEf,IAAI,CAAC,IAAIe,EAAED,EAAEd,GAAGlB,EAAE0I,IAAIzG,EAAER,GAAGA,GAAGQ,EAAEuF,OAAO,OAAOxH,GAAgoI4I,CAAE7B,KAAK4E,SAAS5E,KAAK4E,OAAO,GAAG5E,KAAK0E,IAAIzJ,EAAE+E,KAAK5C,IAAI4C,KAAK6E,KAAKzH,KAAK,IAAIoI,GAAGxB,GAAGyB,GAAGP,GAAGQ,GAAG,SAASzK,EAAEd,GAAG,OAAOA,EAAEA,GAAG,IAAIsK,KAAI,EAAGS,GAAGjK,EAAEd,IAAIwL,GAAGT,GAAGU,GAAGvK,EAAEwK,GAAG,CAACC,QAAQN,GAAGO,QAAQN,GAAGO,WAAWN,GAAGO,OAAON,GAAGO,UAAUN,IAAI3K,EAAE6K,QAAQN,GAAGvK,EAAEiL,UAAUN,GAAG3K,EAAEkL,QAAQN,GAAG5K,EAAE8K,QAAQN,GAAGxK,EAAE+K,WAAWN,GAAGzK,EAAEgL,OAAON,GAAGhM,OAAOC,eAAeqB,EAAE,aAAa,CAACf,OAAM,IAA9roBC,CAAEpB,I,6BCU/D,SAASqN,EAAWC,GACzB,MAAMC,EAAgB,IAAInD,MAAMkD,EAAM5F,QACtC,IAAI,IAAIxH,EAAI,EAAGA,EAAIoN,EAAM5F,SAAUxH,EACjCqN,EAAIrN,IAAMoN,EAAMpN,GAAK,GAAK,IAAM,KAAOoN,EAAMpN,IAAM,GAAGsK,SAAS,IAEjE,OAAO+C,EAAIf,KAAK,IAGX,SAASgB,EAAaC,GAC3B,MAAMC,EAAMD,EAAU/F,OAChB4F,EAAQ,IAAI9I,WAAWmJ,KAAKC,KAAKF,EAAM,IAC7C,IAAIG,EAAQ,EAETH,EAAM,IACPJ,EAAMO,KAAWC,SAASL,EAAUM,OAAO,GAAI,KAGjD,IAAI,IAAI7N,EAAI2N,EAAO3N,EAAIwN,EAAKxN,GAAK,EAC/BoN,EAAMO,KAAWC,SAASL,EAAUO,OAAO9N,EAAG,GAAI,IAGpD,OAAOoN,EAsCF,SAASW,EAASC,EAA+BC,GACtD,MAAMT,EAAMQ,EAAOxG,OACnB,GAAGgG,IAAQS,EAAOzG,OAChB,OAAO,EAGT,IAAI,IAAIxH,EAAI,EAAGA,EAAIwN,IAAOxN,EACxB,GAAGgO,EAAOhO,KAAOiO,EAAOjO,GACtB,OAAO,EAIX,OAAO,EAGF,SAASkO,EAASF,EAAoBC,GAC3C,MAAMT,EAAMQ,EAAOxG,OACb4F,EAAQ,IAAI9I,WAAWkJ,GAE7B,IAAI,IAAIxN,EAAI,EAAGA,EAAIwN,IAAOxN,EACxBoN,EAAMpN,GAAKgO,EAAOhO,GAAKiO,EAAOjO,GAGhC,OAAOoN,EAmBF,SAASe,EAAoBf,GAClC,OAAGA,aAAiB9I,WACX8I,EACmB,iBAAZ,GACP,IAAIgB,aAAcC,OAAOjB,GAG3B,IAAI9I,WAAW8I,GAyBjB,SAASkB,KAAiBC,GAC/B,MAAM/G,EAAS+G,EAAKC,OAAO,CAACC,EAAK9L,IAAM8L,GAAQ9L,EAAkB+L,YAAe/L,EAAiB6E,QAAS,GAEpGmH,EAAM,IAAIrK,WAAWkD,GAE3B,IAAIoH,EAAa,EAMjB,OALAL,EAAKM,QAAQtM,IACXoM,EAAIjG,IAAInG,aAAauM,YAAc,IAAIxK,WAAW/B,GAAKA,EAAGqM,GAC1DA,GAAerM,EAAkBmM,YAAenM,EAAiBiF,SAG5DmH,EAGF,SAASI,EAAgB5L,GAC9B,MAAM1C,EAAI,IAAI6D,WAAWnB,EAAMuL,YAC/B,IAAI,IAAI1O,EAAI,EAAGwH,EAAwB,EAAfrE,EAAMqE,OAAYxH,EAAIwH,IAAUxH,EACtDS,EAAET,GAAOmD,EAAMnD,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IAGpD,OAAOS,EAGF,SAASuO,EAAc7L,GAC5B,MAAMiK,EAAQe,EAAoBhL,GAE5B8L,EAAkB,GACxB,IAAI,IAAIjP,EAAI,EAAGwN,EAAMJ,EAAM5F,OAAQxH,EAAIwN,IAAOxN,EAC5CiP,EAAMjP,IAAM,IAAMoN,EAAMpN,IAAO,GAAMA,EAAI,EAAK,EAGhD,OAAO,IAAIkC,YAAY+M,G,wDCvKzBvO,OAAOC,eAAe2D,WAAW1C,UAAW,MAAO,CACjDf,IAAK,WACH,OAAOsM,EAAWpG,OAGpB2B,IAAK,SAASwG,GACZnI,KAAK2B,IAAI4E,EAAa4B,KAExBtO,YAAY,EACZuO,cAAc,IAGhB7K,WAAW1C,UAAUwN,UAAY,WAC/B,IAAGC,UAAU,oBAAqBA,QAGhC,MAAM,IAAIxD,MAAM,oBAGlB,OALEwD,OAAOC,gBAAgBvI,MAKlBA,MAGTzC,WAAW1C,UAAU2N,OAAS,YAAYhB,GACxC,OAAOD,EAAcvH,QAASwH,IAOhCjK,WAAW1C,UAAU4N,OAAS,WAC5B,MAAO,IAAIzI,OAIbmD,MAAMtI,UAAU6N,cAAgB,SAAYC,GAC1C,IAAIC,EAAQ5I,KAAK6I,UAAUF,GAC3B,OAAkB,IAAXC,EAAe5I,KAAK8I,OAAOF,EAAO,GAAG,QAAKG,GAGnDlG,OAAOhI,UAAUmO,SAAW,SAASC,GAAW,GAC9C,MAAMC,EAAUrC,SAAS7G,KAAO,GAAI,IAC9BmJ,EAAQzC,KAAK0C,MAAMF,EAAU,MACnC,IAAIG,EAAe3C,KAAK0C,OAAOF,EAAmB,KAARC,GAAiB,IACvDG,EAAeJ,EAAmB,KAARC,EAA2B,GAAVE,EAK/C,OAHGF,IAAOF,GAAW,GAClBI,EAAU,KAAIA,EAAUJ,EAAW,IAAMI,EAAUA,GACnDC,EAAU,KAAIA,EAAU,IAAMA,IACzBH,EAAqCA,EAAQ,IAAM,IAAME,EAAU,IAAMC,GAYnFC,QAAQ1O,UAAU2O,QAAUD,QAAQ1O,UAAU2O,SAAW,SAA8BC,GACrF,MAAMC,EAAaC,GAAwBJ,QAAQK,QAAQH,KAAMI,KAAKF,GACtE,OAAO3J,KAAK6J,KACVzE,GAAUsE,EAAU,IAAMtE,GAC1B0E,GAAUJ,EAAU,IAAMH,QAAQQ,OAAOD,MCjD9B,MAbD,CACZE,KAAMC,SAASC,OAAOC,QAAQ,UAAY,EAC1CC,MAAOH,SAASC,OAAOC,QAAQ,WAAa,EAC5CE,MAAM,EACNC,KAAK,EACLC,qBAAqB,EACrBC,iBAAiB,GCTZ,MAAMC,EAAiD,EAAML,MAEvDM,EADuB,oBAAb,OAA2B7N,OAAS8N,KAE5C,QCLR,MAAMC,EAA2C,oBAAtBC,mBAAqCF,gBAAgBE,kBAC1EC,EAAsD,oBAA7BC,0BAA4CJ,gBAAgBI,yBACrFC,EAAWJ,GAAeE,EAUjCG,EAAsB,CAACC,KAAiB1D,KAC3CmD,KACAQ,QACAC,SAAS,CAAEC,qBAAqB,EAAOC,KAAM,WAC7CzB,KAAM0B,IACDA,EAAU9K,QAKd8K,EAAUrH,MAAMgH,EAAM,GAAK,GAAGpD,QAAQ0D,IAEpCA,EAASC,eAAejE,QAKxBkE,EAAe,IAAIlE,KAEtBmD,KAA2Cc,eAAejE,IAGvDmE,EAAO,OAEAC,EAAgBd,EAAkBG,EAAoBxQ,KAAK,MAAM,GAAUmQ,EAAcc,EAAeC,EACxGE,EAAYf,EAAkBG,EAAoBxQ,KAAK,MAAM,GAASmQ,EAAcc,EAAeC,EC3BhH,MAAM,EAKJ,cAJQ,KAAAG,OAAS,GACT,KAAAC,MAA0B,GAC1B,KAAAC,YAAa,EAGhB,EAAMhC,OACPhK,KAAK8L,OAAS,MAIX,IAA6BtR,EAAQyR,GAAW,GACrD,GAAGjM,KAAK+L,MAAMjR,eAAeN,IAAQyR,EACnC,OAAOjM,KAAK+L,MAAMvR,GACb,GAAGwF,KAAKgM,WAAY,CACzB,IAAI9R,EACJ,IACEA,EAAQgS,aAAaC,QAAQnM,KAAK8L,OAAStR,GAC3C,MAAMkK,GACN1E,KAAKgM,YAAa,EAGpB,GAAa,OAAV9R,EACD,IACEA,EAAQkS,KAAKC,MAAMnS,GACnB,MAAMwK,SAIRxK,OAAQ6O,EAGV,OAAO7O,GAMJ,IAAIoS,EAAuBC,GAAY,GAC5C,IAAI,MAAM/R,KAAO8R,EACf,GAAGA,EAAIxR,eAAeN,GAAM,CAC1B,MAAMN,EAAQoS,EAAI9R,GAGlB,GAFAwF,KAAK+L,MAAMvR,GAAON,EAEf8F,KAAKgM,aAAeO,EACrB,IACE,MAAMC,EAAcJ,KAAKK,UAAUvS,GACnCgS,aAAaQ,QAAQ1M,KAAK8L,OAAStR,EAAKgS,GACxC,MAAM9H,GACN1E,KAAKgM,YAAa,IAOrB,OAAOxR,EAAoBmS,GAAY,GAE5CnS,EAAM,GAAKA,EAEPmS,UACK3M,KAAK+L,MAAMvR,GAIlB,IACE0R,aAAaU,WAAW5M,KAAK8L,OAAStR,GACtC,MAAMkK,KA8BL,QACL,MAAMmI,EAAiB,CAAC,KAAM,qBAAsB,cAAe,YAAa,YAChF,IAAI,IAAI5T,EAAI,EAAGA,GAAK,IAAKA,EACvB4T,EAAK1H,KAAK,KAAKlM,iBACf4T,EAAK1H,KAAK,KAAKlM,cAGjB,IAAI,IAAIuB,KAAOqS,EACb7M,KAAK8M,OAAOtS,GAAK,GAId,cAAcuS,GAGnB,GAFA/M,KAAKgM,WAAae,EAEdA,EAGF,OAAO/M,KAAK2B,IAAI3B,KAAK+L,OAFrB/L,KAAKgN,SAoBI,MAAM,EASnB,cAPQ,KAAAC,OAAS,EACT,KAAAC,MAAmD,GAOzD,EAAuBC,SAAShI,KAAKnF,MAEjCgL,IACFhL,KAAKoN,QAAU,IAAI,GAIhB,WAAWH,EAAgB7H,GAG5BpF,KAAKkN,MAAMpS,eAAemS,KAK9BjN,KAAKkN,MAAMD,GAAQ7H,UACZpF,KAAKkN,MAAMD,IAGZ,MAAS3B,KAAmD9D,GAClE,OAAO,IAAI+B,QAAW,CAACK,EAASG,KAC9B,GAAGiB,EAAU,CACX,MAAMiC,EAASjN,KAAKiN,SAEpBjN,KAAKkN,MAAMD,GAAUrD,EAUrBgC,EAToC,CAClCN,KAAM,oBACN+B,GAAIJ,EACJK,QAAS,CACPhC,OACA9D,cAKC,CACLA,EAAOrE,MAAMtI,UAAUqJ,MAAM9K,KAAKoO,GAIlCoC,EADoB5J,KAAKoN,QAAQ9B,GAAMpI,MAAMlD,KAAKoN,QAAS5F,OAM1D,IAA6BhN,EAAQyR,GAC1C,OAAOjM,KAAKuN,MAAkB,MAAO/S,EAAKyR,GAGrC,IAAIK,EAAuBC,GAChC,OAAOvM,KAAKuN,MAAY,MAAOjB,EAAKC,GAG/B,OAAO/R,EAAoBmS,GAChC,OAAO3M,KAAKuN,MAAY,SAAU/S,EAAKmS,GAGlC,QACL,OAAO3M,KAAKuN,MAAY,SAGnB,cAAcR,GACnB,OAAO/M,KAAKuN,MAAY,gBAAiBR,IAvE5B,EAAAI,SAA0C,GC1I3D,MAAMK,EAAiB,IAAI,EAsB3B9C,EAAe+C,WAAaD,EACb,IC4GXE,ED5GW,IC0GJC,EAAM,EACbC,EAAO,EAIPC,EACF,oGAKF,IAAKF,EAAM,EAAG,GAAMA,EAAM,EAAK,GAAKA,EAAKA,KAGzCD,GADAE,GAAQ,IADRD,IAAQ,IACY,GACL,EACR,IAgDH,EAAG,EAhDIG,EAAMC,GAAW,EAAG,EAAG,GAK9B5T,GAJc4T,GAAW,EAAG,EAAG,GAIR,IAAI5K,MAAM,IACjC,EAAKhJ,EACL6T,EAAK7T,EAGL8T,EAAK9T,EACL+T,EAAK/T,EACLgU,EAAKhU,EACLiU,EAAKjU,EACLkU,EAAKlU,EAELmU,EAAKnU,EAKLoU,EAAOpU,EACPqU,EAAOrU,EACPsU,EAAOtU,EACPuU,EAAOvU,EACPwU,EAAOxU,EA0IJ,SAASyU,EAAQ9S,GACtB,IAAIkG,EAAG9D,EAAG3C,EACV,IAAKyG,EAAIlG,EAAE2E,OAAS,EAAW,GAAR3E,EAAEkG,IAAWA,EAAI,EAAGA,KAC3C,IAAK9D,EAAI,EAAG3C,EAAIO,EAAEkG,GAAIzG,EAAGA,IAAM,EAAG2C,KAElC,OADAA,GAAKyP,EAAM3L,EAWN,SAAS6M,EAAO/S,EAAapB,GAClC,IAAIoU,EAAMf,GAAW,GAAIjS,EAAE2E,OAAS/F,EAAIoB,EAAE2E,OAAS/F,GAAKiT,EAAK,GAE7D,OADAoB,GAAMD,EAAKhT,GACJgT,EAiGF,SAASE,EAAIlT,EAAapB,GAC/B,IAAIoU,EAAMG,GAAInT,GAEd,OADAoT,GAAKJ,EAAKpU,GACHyU,GAAKL,EAAK,GAyBZ,SAASM,EAAKtT,EAAaD,GAChC,IAAIiT,EAAMD,EAAO/S,EAAGA,EAAE2E,OAAS5E,EAAE4E,QAEjC,OAg6CK,SAAe3E,EAAaD,GACjC,IAAI5C,EACA,EAAGwH,QAAU,EAAI3E,EAAE2E,SAAQ,EAAK,IAAI0C,MAAM,EAAIrH,EAAE2E,SAEpD,IADA4O,GAAS,EAAI,GACRpW,EAAI,EAAGA,EAAI4C,EAAE4E,OAAQxH,IAAS4C,EAAE5C,IAAIqW,GAAc,EAAIxT,EAAGD,EAAE5C,GAAIA,GACpE8V,GAAMjT,EAAG,GAt6CTyT,CAAMT,EAAKjT,GACJsT,GAAKL,EAAK,GAgBZ,SAASU,EAAO1T,EAAaD,EAAanB,GAC/C,IAAIoU,EAAMD,EAAO/S,EAAGpB,EAAE+F,QAOtB,OANAgP,GAEEX,EACAK,GAAKtT,EAAG,GACRsT,GAAKzU,EAAG,IAEHyU,GAAKL,EAAK,GA2BZ,SAASY,EAAI5T,EAAaD,GAC/B,IAAIiT,EAAMD,EAAO/S,EAAGA,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS,EAAI5E,EAAE4E,OAAS,GAEpE,OADAkP,GAAKb,EAAKjT,GACHsT,GAAKL,EAAK,GAWZ,SAASc,GAAI9T,EAAaD,GAC/B,IAAIiT,EAAMD,EAAO/S,EAAGA,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS,EAAI5E,EAAE4E,OAAS,GAEpE,OADAoP,GAAKf,EAAKjT,GACHsT,GAAKL,EAAK,GAqcZ,SAASgB,GACdhU,EACAD,EACAD,EACAV,EACAM,GAEA,IAAIG,EAAI,EACJF,EAAIiL,KAAKqJ,IAAIjU,EAAE2E,OAAQ5E,EAAE4E,QAQ7B,IAPI8N,EAAK9N,QAAUhF,IACjB8S,EAAO,IAAIpL,MAAM1H,GACjB+S,EAAO,IAAIrL,MAAM1H,GACjBgT,EAAO,IAAItL,MAAM1H,GACjBiT,EAAO,IAAIvL,MAAM1H,GACjBkT,EAAO,IAAIxL,MAAM1H,MAEH,EAAPK,EAAE,IAAoB,EAAPD,EAAE,KAExBmU,GAAOlU,GACPkU,GAAOnU,GACPF,IAQF,IANAoT,GAAMR,EAAMzS,GACZiT,GAAMnT,EAAGC,GACTwT,GAASb,EAAM,GACfa,GAASZ,EAAM,GACfY,GAASX,EAAM,GACfW,GAASV,EAAM,KACN,CACP,OAAmB,EAAVJ,EAAK,KAEZyB,GAAOzB,GACS,EAAVC,EAAK,IAAuB,EAAVC,EAAK,IAK3BoB,GAAKrB,EAAM3S,GACXmU,GAAOxB,GACPmB,GAAKlB,EAAM3S,GACXkU,GAAOvB,KANPuB,GAAOxB,GACPwB,GAAOvB,IASX,OAAgB,EAAP7S,EAAE,KAEToU,GAAOpU,GACS,EAAV8S,EAAK,IAAuB,EAAVC,EAAK,IAK3BkB,GAAKnB,EAAM7S,GACXmU,GAAOtB,GACPiB,GAAKhB,EAAM7S,GACXkU,GAAOrB,KANPqB,GAAOtB,GACPsB,GAAOrB,IAoBX,GAXKsB,GAAQrU,EAAG2S,IAOdoB,GAAK/T,EAAG2S,GACRoB,GAAKjB,EAAMF,GACXmB,GAAKhB,EAAMF,KAPXkB,GAAKpB,EAAM3S,GACX+T,GAAKnB,EAAME,GACXiB,GAAKlB,EAAME,IAOTuB,GAAU3B,EAAM,GAAI,CACtB,KAAO4B,GAASzB,IAEdmB,GAAKnB,EAAM7S,GACX8T,GAAKhB,EAAM7S,GAMb,OAJAsU,GAASzB,GAAO,GAChBI,GAAM7T,EAAGwT,GACTK,GAAMvT,EAAGmT,QACT0B,GAAWzU,EAAGD,KAYb,SAASwU,GAASrU,GAEvB,OAAQA,EAAEA,EAAE2E,OAAS,IAAOkN,EAAM,EAAM,EAcnC,SAAS2C,GAAaxU,EAAaD,EAAauI,GACrD,IAAInL,EACAsX,EAAKzU,EAAE2E,OACP+P,EAAK3U,EAAE4E,OAEX,IADA,EAAI8P,EAAKnM,EAAQoM,EAAKD,EAAKnM,EAAQoM,EAC9BvX,EAAIuX,EAAK,EAAIpM,EAAOnL,EAAIsX,GAAMtX,GAAK,EAAGA,IAAK,GAAI6C,EAAE7C,GAAK,EAAG,OAAO,EACrE,IAAKA,EAAIsX,EAAK,EAAInM,EAAOnL,EAAIuX,EAAIvX,IAAK,GAAI4C,EAAE5C,GAAK,EAAG,OAAO,EAC3D,IAAKA,EAAI,EAAI,EAAGA,GAAKmL,EAAOnL,IAC1B,IAAI6C,EAAE7C,EAAImL,GAASvI,EAAE5C,GAAI,OAAO,EAC3B,GAAI6C,EAAE7C,EAAImL,GAASvI,EAAE5C,GAAI,OAAO,EACvC,OAAO,EAaF,SAASgX,GAAQnU,EAAaD,GACnC,IAAI5C,EACAwC,EAAIK,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS5E,EAAE4E,OAE3C,IAAKxH,EAAI6C,EAAE2E,OAAQxH,EAAI4C,EAAE4E,OAAQxH,IAAK,GAAI4C,EAAE5C,GAAI,OAAO,EAEvD,IAAKA,EAAI4C,EAAE4E,OAAQxH,EAAI6C,EAAE2E,OAAQxH,IAAK,GAAI6C,EAAE7C,GAAI,OAAO,EAEvD,IAAKA,EAAIwC,EAAI,EAAGxC,GAAK,EAAGA,IACtB,IAAI6C,EAAE7C,GAAK4C,EAAE5C,GAAI,OAAO,EACnB,GAAI6C,EAAE7C,GAAK4C,EAAE5C,GAAI,OAAO,EAC/B,OAAO,EAuBF,SAASwX,GACd3U,EACAD,EACA2H,EACAzJ,GAEA,IAAIwW,EAAIC,EACJvX,EAAMyX,EAAIC,EAAIrX,EAAG4B,EAAGM,EAExB,IADAuT,GAAMhV,EAAG+B,GACJ0U,EAAK3U,EAAE4E,OAAsB,IAAd5E,EAAE2U,EAAK,GAAUA,KAIrC,IADAhV,EAAIK,EAAE2U,EAAK,GACNtV,EAAI,EAAGM,EAAGN,IAAKM,IAAM,EAM1B,IAJA6U,GAAWxU,EADXX,EAAIyS,EAAMzS,GAEVmV,GAAWtW,EAAGmB,GAGTqV,EAAKxW,EAAE0G,OAAsB,IAAd1G,EAAEwW,EAAK,IAAYA,EAAKC,EAAID,KAGhD,IADAlB,GAAS7L,EAAG,IACJ8M,GAAazU,EAAG9B,EAAGwW,EAAKC,IAE9BI,GAAU7W,EAAG8B,EAAG0U,EAAKC,GACrBhN,EAAE+M,EAAKC,KAGT,IAAKvX,EAAIsX,EAAK,EAAGtX,GAAKuX,EAAIvX,IAAK,CAS7B,IARIc,EAAEd,IAAM4C,EAAE2U,EAAK,GAAIhN,EAAEvK,EAAIuX,GAAM5C,EAC9BpK,EAAEvK,EAAIuX,GAAM9J,KAAK0C,OAAOrP,EAAEd,GAAKyU,EAAQ3T,EAAEd,EAAI,IAAM4C,EAAE2U,EAAK,IAS7DlX,GADAqX,GAAMH,EAAK,EAAI3U,EAAE2U,EAAK,GAAK,GAAKhN,EAAEvK,EAAIuX,KAC5B7C,EACVgD,GAAU/C,EAEVtU,GADAoX,EAAKpX,EAAIkK,EAAEvK,EAAIuX,GAAM3U,EAAE2U,EAAK,KAClB7C,EACV+C,GAAU9C,EAGRtU,GAAKS,EAAEd,GACHyX,GAAM3W,EAAEd,EAAI,GAAK0X,GAAM1X,EAAI,EAAIc,EAAEd,EAAI,GAAK,GAAKyX,EAAK3W,EAAEd,EAAI,GAC1DK,EAAIS,EAAEd,IAEVuK,EAAEvK,EAAIuX,KAIVlB,GAAcvV,EAAG8B,GAAI2H,EAAEvK,EAAIuX,GAAKvX,EAAIuX,GAChCL,GAASpW,KACX8W,GAAU9W,EAAG8B,EAAG5C,EAAIuX,GACpBhN,EAAEvK,EAAIuX,MAIVM,GAAYjV,EAAGX,GACf4V,GAAY/W,EAAGmB,GAgCV,SAAS6V,GAAOjV,EAAapB,GAClC,IAAIzB,EACAK,EAAI,EACR,IAAKL,EAAI6C,EAAE2E,OAAS,EAAGxH,GAAK,EAAGA,IAAKK,GAAKA,EAAIoU,EAAQ5R,EAAE7C,IAAMyB,EAC7D,OAAOpB,EAgBF,SAASyU,GAAW5T,EAAW4C,EAAciU,GAClD,IAAOvV,EAEPA,EAAIuV,GADJvV,EAAIiL,KAAKC,KAAK5J,EAAO4Q,GAAO,GACVqD,EAAUvV,EAC5B,IAAIwV,EAAO,IAAI9N,MAAM1H,GAErB,OADA4T,GAAS4B,EAAM9W,GACR8W,EAgBF,SAASC,GACdlW,EACAmW,EACAH,GAEA,IAAIzX,EAAGN,EAAG6C,EAAGD,EAAGuV,EACZ3V,EAAIT,EAAEyF,OACV,IAAc,IAAV0Q,EAAa,CAGf,IADArV,EAAI,IAAIqH,MAAM,KACL,CAEP,IADAtH,EAAI,IAAIsH,MAAMrH,EAAE2E,OAAS,GACpBxH,EAAI,EAAGA,EAAI6C,EAAE2E,OAAQxH,IAAK4C,EAAE5C,EAAI,GAAK6C,EAAE7C,GAI5C,GAHA4C,EAAE,GAAKgL,SAAS7L,EAAG,IACnBc,EAAID,GACJtC,EAAIyB,EAAEmP,QAAQ,IAAK,IACX,EAAG,MAGX,GAAgB,IADhBnP,EAAIA,EAAEqW,UAAU9X,EAAI,IACdkH,OAAa,MAGrB,OAAI3E,EAAE2E,OAASuQ,GAGbjC,GADAlT,EAAI,IAAIsH,MAAM6N,GACLlV,GACFD,GAEFC,EAIT,IADAA,EAAIiS,GAAW,EAAGoD,EAAO1V,EAAG,GACvBxC,EAAI,EAAGA,EAAIwC,IACdlC,EAAIsU,EAAU1D,QAAQnP,EAAEqW,UAAUpY,EAAGA,EAAI,GAAI,GACzCkY,GAAQ,IAAM5X,GAAK,KAErBA,GAAK,MACHA,GAAK4X,GAAQ5X,EAAI,IALJN,IASjBmX,GAAStU,EAAGqV,GACZG,GAAQxV,EAAGvC,GAGb,IAAKkC,EAAIK,EAAE2E,OAAQhF,EAAI,IAAMK,EAAEL,EAAI,GAAIA,KAQvC,IANAA,EAAIuV,EAAUvV,EAAI,EAAIuV,EAAUvV,EAAI,EAEpCI,EAAI,IAAIsH,MAAM1H,GAEd2V,EAAK3V,EAAIK,EAAE2E,OAAShF,EAAIK,EAAE2E,OAErBxH,EAAI,EAAGA,EAAImY,EAAInY,IAAK4C,EAAE5C,GAAK6C,EAAE7C,GAElC,KAAOA,EAAIwC,EAAGxC,IAAK4C,EAAE5C,GAAK,EAC1B,OAAO4C,EA0EF,SAASqU,GAAUpU,EAAaD,GACrC,IAAI5C,EACJ,GAAI6C,EAAE,IAAMD,EAAG,OAAO,EACtB,IAAK5C,EAAI,EAAGA,EAAI6C,EAAE2E,OAAQxH,IAAK,GAAI6C,EAAE7C,GAAI,OAAO,EAChD,OAAO,EAYF,SAASsY,GAAOzV,EAAaD,GAClC,IAAI5C,EACAwC,EAAIK,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS5E,EAAE4E,OAC3C,IAAKxH,EAAI,EAAGA,EAAIwC,EAAGxC,IAAK,GAAI6C,EAAE7C,KAAO4C,EAAE5C,GAAI,OAAO,EAClD,GAAI6C,EAAE2E,OAAS5E,EAAE4E,QACf,KAAOxH,EAAI6C,EAAE2E,OAAQxH,IAAK,GAAI6C,EAAE7C,GAAI,OAAO,OAE3C,KAAOA,EAAI4C,EAAE4E,OAAQxH,IAAK,GAAI4C,EAAE5C,GAAI,OAAO,EAE7C,OAAO,EAUF,SAASuY,GAAO1V,GACrB,IAAI7C,EACJ,IAAKA,EAAI,EAAGA,EAAI6C,EAAE2E,OAAQxH,IAAK,GAAI6C,EAAE7C,GAAI,OAAO,EAChD,OAAO,EAaF,SAASwY,GAAW3V,EAAaqV,GACtC,IAAIlY,EACAkB,EACAa,EAAI,GAKR,GAHIoT,EAAG3N,SAAW3E,EAAE2E,OAAQ2N,EAAKa,GAAInT,GAChCiT,GAAMX,EAAItS,IAED,IAAVqV,EAAa,CAEf,IAAKlY,EAAI6C,EAAE2E,OAAS,EAAGxH,EAAI,EAAGA,IAAK+B,GAAKc,EAAE7C,GAAK,IAC/C+B,GAAKc,EAAE,QAGP,MAAQ0V,GAAOpD,IACbjU,EAAIuX,GAAQtD,EAAI+C,GAChBnW,EAAI6S,EAAUwD,UAAUlX,EAAGA,EAAI,GAAKa,EAIxC,OADiB,IAAbA,EAAEyF,SAAczF,EAAI,KACjBA,EAQF,SAAS2W,GAAa7V,EAAa8V,GAAe,GACpDxD,EAAG3N,SAAW3E,EAAE2E,OAAQ2N,EAAKa,GAAInT,GAC/BiT,GAAMX,EAAItS,GAEf,MAAM+V,EAAgB,GAGtB,MAAOL,GAAOpD,IACZjU,EAAIuX,GAAQtD,EAAI,KAChByD,EAAI1M,KAAKhL,GAUX,OANGyX,GACDC,EAAIC,UAKCD,EAQF,SAASE,GAAIjW,EAAaD,GAC/B,OAAOoU,GAAQnU,EAAGD,GAAK,EAAK0V,GAAOzV,EAAGD,GAAK,GAAK,EAsB3C,SAASoT,GAAInT,GAIlB,OADAiT,GADA,EAAO5L,MAAMrH,EAAE2E,QACH3E,GACL,EAaF,SAASiT,GAAMjT,EAAaD,GACjC,IAAI5C,EACAwC,EAAIK,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS5E,EAAE4E,OAC3C,IAAKxH,EAAI,EAAGA,EAAIwC,EAAGxC,IAAK6C,EAAE7C,GAAK4C,EAAE5C,GACjC,IAAKA,EAAIwC,EAAGxC,EAAI6C,EAAE2E,OAAQxH,IAAK6C,EAAE7C,GAAK,EAWjC,SAASoW,GAASvT,EAAapB,GACpC,IAAIzB,EAAGK,EACHmN,EAAM3K,EAAE2E,OACZ,IAAKnH,EAAIoB,EAAGzB,EAAI,EAAGA,EAAIwN,EAAKxN,IAC1B6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAcH,SAAS2D,GAAQxV,EAAapB,GACnC,IAAIzB,EAAGwC,EAAGnC,EAAGkC,EAIb,IAHAM,EAAE,IAAMpB,EACRe,EAAIK,EAAE2E,OACNnH,EAAI,EACCL,EAAI,EAAGA,EAAIwC,EAAGxC,IASjB,GAPAuC,EAAI,GADJlC,GAAKwC,EAAE7C,IAEC,IAENK,IADAkC,IAAMlC,GAAKqU,IACFD,GAEX5R,EAAE7C,GAAKK,EAAIsU,IACXtU,GAAKA,GAAKqU,GAAOnS,GACT,OAaL,SAASsV,GAAYhV,EAAapB,GACvC,IAAIzB,EACAwC,EAAIiL,KAAK0C,MAAM1O,EAAIiT,GACvB,GAAIlS,EAAG,CACL,IACExC,EAAI,EACJA,EAAI6C,EAAE2E,OAAShF,EACfxC,IAEA6C,EAAE7C,GAAK6C,EAAE7C,EAAIwC,GACf,KAAOxC,EAAI6C,EAAE2E,OAAQxH,IAAK6C,EAAE7C,GAAK,EAEjCyB,GAAKiT,EAEP,IAAK1U,EAAI,EAAGA,EAAI6C,EAAE2E,OAAS,EAAGxH,IAC5B6C,EAAE7C,GAAK2U,GAAS9R,EAAE7C,EAAI,IAAO0U,EAAMjT,EAAOoB,EAAE7C,IAAMyB,GAEpDoB,EAAE7C,KAAOyB,EASJ,SAASsV,GAAOlU,GACrB,IAAI7C,EACJ,IAAKA,EAAI,EAAGA,EAAI6C,EAAE2E,OAAS,EAAGxH,IAC5B6C,EAAE7C,GAAK2U,GAAS9R,EAAE7C,EAAI,IAAO0U,EAAM,EAAO7R,EAAE7C,IAAM,GAEpD6C,EAAE7C,GAAM6C,EAAE7C,IAAM,EAAM6C,EAAE7C,GAAMyU,GAAS,EAWlC,SAAS2C,GAAWvU,EAAapB,GACtC,IAAIzB,EACAwC,EAAIiL,KAAK0C,MAAM1O,EAAIiT,GACvB,GAAIlS,EAAG,CACL,IACExC,EAAI6C,EAAE2E,OACNxH,GAAKwC,EACLxC,IAEA6C,EAAE7C,GAAK6C,EAAE7C,EAAIwC,GACf,KAAOxC,GAAK,EAAGA,IAAK6C,EAAE7C,GAAK,EAE3ByB,GAAKiT,EAEP,GAAKjT,EAAL,CACA,IAAKzB,EAAI6C,EAAE2E,OAAS,EAAGxH,EAAI,EAAGA,IAC5B6C,EAAE7C,GAAK2U,GAAS9R,EAAE7C,IAAMyB,EAAMoB,EAAE7C,EAAI,IAAO0U,EAAMjT,GAEnDoB,EAAE7C,GAAK2U,EAAQ9R,EAAE7C,IAAMyB,GAYlB,SAAS0V,GAAStU,EAAapB,GACpC,IAAIzB,EAAGwC,EAAGnC,EAAGkC,EACb,GAAKd,EAGL,IAFAe,EAAIK,EAAE2E,OACNnH,EAAI,EACCL,EAAI,EAAGA,EAAIwC,EAAGxC,IAEjBuC,EAAI,GADJlC,GAAKwC,EAAE7C,GAAKyB,GAEJ,IAENpB,IADAkC,IAAMlC,GAAKqU,IACFD,GAEX5R,EAAE7C,GAAKK,EAAIsU,EACXtU,GAAKA,GAAKqU,GAAOnS,EAWd,SAASkW,GAAQ5V,EAAapB,GACnC,IAAIzB,EAEA+B,EADAjB,EAAI,EAER,IAAKd,EAAI6C,EAAE2E,OAAS,EAAGxH,GAAK,EAAGA,IAC7B+B,EAAIjB,EAAI2T,EAAQ5R,EAAE7C,GAClB6C,EAAE7C,GAAKyN,KAAK0C,MAAMpO,EAAIN,GACtBX,EAAIiB,EAAIN,EAEV,OAAOX,EAyCF,SAASuV,GACdxT,EACAD,EACAL,EACAwW,GAEA,IAAI/Y,EAAGK,EAAGmC,EAAG2V,EAGb,IAFA3V,EAAIK,EAAE2E,OAASuR,EAAKnW,EAAE4E,OAAS3E,EAAE2E,OAASuR,EAAKnW,EAAE4E,OACjD2Q,EAAKtV,EAAE2E,OACFnH,EAAI,EAAGL,EAAI+Y,EAAI/Y,EAAIwC,EAAGxC,IACzBK,GAAKwC,EAAE7C,GAAKuC,EAAIK,EAAE5C,EAAI+Y,GACtBlW,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAER,IAAK1U,EAAIwC,EAAGnC,GAAKL,EAAImY,EAAInY,IACvBK,GAAKwC,EAAE7C,GACP6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAeH,SAASkD,GAAU/U,EAAaD,EAAamW,GAClD,IAAI/Y,EAAGK,EAAGmC,EAAG2V,EAGb,IAFA3V,EAAIK,EAAE2E,OAASuR,EAAKnW,EAAE4E,OAAS3E,EAAE2E,OAASuR,EAAKnW,EAAE4E,OACjD2Q,EAAKtV,EAAE2E,OACFnH,EAAI,EAAGL,EAAI+Y,EAAI/Y,EAAIwC,EAAGxC,IACzBK,GAAKwC,EAAE7C,GAAK4C,EAAE5C,EAAI+Y,GAClBlW,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAER,IAAK1U,EAAIwC,EAAGnC,GAAKL,EAAImY,EAAInY,IACvBK,GAAKwC,EAAE7C,GACP6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAcH,SAASiD,GAAU9U,EAAaD,EAAamW,GAClD,IAAI/Y,EAAGK,EAAGmC,EAAG2V,EAGb,IAFA3V,EAAIK,EAAE2E,OAASuR,EAAKnW,EAAE4E,OAAS3E,EAAE2E,OAASuR,EAAKnW,EAAE4E,OACjD2Q,EAAKtV,EAAE2E,OACFnH,EAAI,EAAGL,EAAI+Y,EAAI/Y,EAAIwC,EAAGxC,IACzBK,GAAKwC,EAAE7C,GAAK4C,EAAE5C,EAAI+Y,GAClBlW,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAER,IAAK1U,EAAIwC,EAAGnC,GAAKL,EAAImY,EAAInY,IACvBK,GAAKwC,EAAE7C,GACP6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAgBH,SAASgC,GAAK7T,EAAaD,GAChC,IAAI5C,EAAGK,EAAGmC,EAEV,IADAA,EAAIK,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS5E,EAAE4E,OAClCnH,EAAI,EAAGL,EAAI,EAAGA,EAAIwC,EAAGxC,IACxBK,GAAKwC,EAAE7C,GAAK4C,EAAE5C,GACd6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAER,IAAK1U,EAAIwC,EAAGnC,GAAKL,EAAI6C,EAAE2E,OAAQxH,IAC7BK,GAAKwC,EAAE7C,GACP6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAcH,SAASkC,GAAK/T,EAAaD,GAChC,IAAI5C,EAAGK,EAAGmC,EAEV,IADAA,EAAIK,EAAE2E,OAAS5E,EAAE4E,OAAS3E,EAAE2E,OAAS5E,EAAE4E,OAClCnH,EAAI,EAAGL,EAAI,EAAGA,EAAIwC,EAAGxC,IACxBK,GAAKwC,EAAE7C,GAAK4C,EAAE5C,GACd6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EAER,IAAK1U,EAAIwC,EAAGnC,GAAKL,EAAI6C,EAAE2E,OAAQxH,IAC7BK,GAAKwC,EAAE7C,GACP6C,EAAE7C,GAAKK,EAAIsU,EACXtU,IAAMqU,EA8BH,SAASuB,GAAKpT,EAAapB,GAC5BwT,EAAGzN,SAAW3E,EAAE2E,OAAQyN,EAAKe,GAAInT,GAChCiT,GAAMb,EAAIpS,GACXqS,EAAG1N,SAAW3E,EAAE2E,SAAQ0N,EAAKc,GAAInT,IACrC2U,GAAQvC,EAAIxT,EAAGyT,EAAIrS,GAad,SAASmW,GAASnW,EAAaD,EAAanB,GACjD,IAAIzB,EAGJ,IAFI+U,EAAGvN,QAAU,EAAI3E,EAAE2E,SAAQuN,EAAK,IAAI7K,MAAM,EAAIrH,EAAE2E,SACpD4O,GAASrB,EAAI,GACR/U,EAAI,EAAGA,EAAI4C,EAAE4E,OAAQxH,IAAS4C,EAAE5C,IAAIqW,GAActB,EAAIlS,EAAGD,EAAE5C,GAAIA,GACpEiW,GAAKlB,EAAItT,GACTqU,GAAMjT,EAAGkS,GAWJ,SAASkE,GAAWpW,EAAapB,GACtC,IAAIzB,EAAG+I,EAAM1I,EAAGiX,EAAQ9U,EACxB,IAAK8U,EAAKzU,EAAE2E,OAAQ8P,EAAK,IAAMzU,EAAEyU,EAAK,GAAIA,KAI1C,IAHA9U,EAAI8U,EAAK7V,EAAE+F,OAAS,EAAI8P,EAAK,EAAI7V,EAAE+F,OAC/BuN,EAAGvN,QAAUhF,IAAGuS,EAAK,IAAI7K,MAAM1H,IACnC4T,GAASrB,EAAI,GACR/U,EAAI,EAAGA,EAAIsX,EAAItX,IAAK,CAIvB,IAHAK,EAAI0U,EAAG,EAAI/U,GAAK6C,EAAE7C,GAAK6C,EAAE7C,GACzB+U,EAAG,EAAI/U,GAAKK,EAAIsU,EAChBtU,IAAMqU,EACD3L,EAAI/I,EAAI,EAAG+I,EAAIuO,EAAIvO,IACtB1I,EAAI0U,EAAG/U,EAAI+I,GAAK,EAAIlG,EAAE7C,GAAK6C,EAAEkG,GAAK1I,EAClC0U,EAAG/U,EAAI+I,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EAERK,EAAG/U,EAAIsX,GAAMjX,EAEf4V,GAAKlB,EAAItT,GACTqU,GAAMjT,EAAGkS,GAWJ,SAASmB,GAAKrT,EAAaL,GAChC,IAAIxC,EAAG4C,EACP,IAAK5C,EAAI6C,EAAE2E,OAAQxH,EAAI,IAAM6C,EAAE7C,EAAI,GAAIA,KAGvC,OADA8V,GADAlT,EAAI,IAAIsH,MAAMlK,EAAIwC,GACTK,GACFD,EAeF,SAAS4T,GAAQ3T,EAAaD,EAAanB,GAChD,IAAIyX,EAAIC,EAAIC,EAAIC,EAKhB,GAJIjE,EAAG5N,QAAU/F,EAAE+F,SAAQ4N,EAAKY,GAAIvU,IAIlB,IAAN,EAAPA,EAAE,IAAP,CAaA,IADA2U,GAAShB,EAAI,GACRgE,EAAK3X,EAAE+F,OAAQ4R,EAAK,IAAM3X,EAAE2X,EAAK,GAAIA,KAS1C,IARAC,EAAK5E,EAzjCA,SAAuB5R,EAAWpB,GAIvC,IAHA,IAAIQ,EAAI,EACJM,EAAI,IAEC,CACP,GAAU,IAANM,EAAS,OAAOZ,EACpB,GAAU,IAANY,EAAS,OAAO,EAKpB,GAJAN,GAAKN,EAAIwL,KAAK0C,MAAM1O,EAAIoB,GAId,KAFVpB,GAAKoB,GAEQ,OAAON,EACpB,GAAU,IAANd,EAAS,OAAO,EACpBQ,GAAKM,EAAIkL,KAAK0C,MAAMtN,EAAIpB,GAExBoB,GAAKpB,GA0iCM6X,CAAcxB,GAAOrW,EAAGgT,GAAQA,GAC7CW,EAAGgE,GAAM,EACTJ,GAASnW,EAAGuS,EAAI3T,GAEZuT,EAAGxN,QAAU3E,EAAE2E,OAAQwN,EAAKgB,GAAInT,GAC/BiT,GAAMd,EAAInS,GAGVqW,EAAKtW,EAAE4E,OAAS,EAAI0R,EAAK,GAAMtW,EAAEsW,GAAKA,KAC3C,GAAa,GAATtW,EAAEsW,GAAN,CAKA,IAAKC,EAAK,GAAMzE,EAAM,EAAIyE,KAAQvW,EAAEsW,GAAMC,GAAKA,IAAO,GACtD,OAAS,CACP,KAAMA,IAAO,GAAI,CAGf,KADAD,EACS,EAEP,YADAK,GAAM1W,EAAGgS,EAAKpT,EAAG4X,GAGnBF,EAAK,GAAMzE,EAAM,EAEnB6E,GAAM1W,EAAGA,EAAGpB,EAAG4X,GAEXF,EAAKvW,EAAEsW,IAETK,GAAM1W,EAAGmS,EAAIvT,EAAG4X,SAlBlBjD,GAASvT,EAAG,QAtBZ,IAFAiT,GAAMV,EAAIvS,GACVuT,GAASvT,EAAG,IACJoU,GAAUrU,EAAG,IACR,EAAPA,EAAE,IAAQoW,GAASnW,EAAGuS,EAAI3T,GAC9BgX,GAAQ7V,EAAG,GACXqW,GAAW7D,EAAI3T,GA8Dd,SAAS8X,GAAM1W,EAAaD,EAAanB,EAAa4X,GAC3D,IAAIrZ,EAAG+I,EAAG1I,EAAGmZ,EAAItY,EAAGuY,EAChBL,EAAK3X,EAAE+F,OACP+P,EAAK3U,EAAE4E,OAMX,IAJI6N,EAAG7N,QAAU4R,IAAI/D,EAAK,IAAInL,MAAMkP,IAEpChD,GAASf,EAAI,GAEN+D,EAAK,GAAkB,GAAb3X,EAAE2X,EAAK,GAASA,KACjC,KAAO7B,EAAK,GAAkB,GAAb3U,EAAE2U,EAAK,GAASA,KAIjC,IAHAkC,EAAKpE,EAAG7N,OAAS,EAGZxH,EAAI,EAAGA,EAAIoZ,EAAIpZ,IAAK,CAQvB,IALAK,GAFAa,EAAImU,EAAG,GAAKxS,EAAE7C,GAAK4C,EAAE,KACrB4W,GAAOtY,EAAIyT,GAAQ0E,EAAM1E,GACXlT,EAAE,IAAOiT,EACvBxT,EAAI2B,EAAE7C,GAGN+I,EAAI,EACGA,EAAIwO,EAAK,GACdlX,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IAEF,KAAOA,EAAIwO,GACTlX,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GAAK7H,EAAI0B,EAAEmG,GAC/BsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IAEF,KAAOA,EAAIqQ,EAAK,GACd/Y,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IACA1I,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IAEF,KAAOA,EAAIqQ,GACT/Y,GAAKgV,EAAGtM,GAAKyQ,EAAK/X,EAAEsH,GACpBsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IAEF,KAAOA,EAAI0Q,GACTpZ,GAAKgV,EAAGtM,GACRsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAChBtU,IAAMqU,EACN3L,IAEFsM,EAAGtM,EAAI,GAAK1I,EAAIsU,EAGbqC,GAAQvV,EAAG4T,IAAKqB,GAAKrB,EAAI5T,GAC9BqU,GAAMjT,EAAGwS,GC1lEJ,SAASqE,GAAShY,GACvB,MAA0B,iBAAb,GAAoC,OAAXA,EA2CjC,SAASiY,GAAUC,GAExB,OAAOA,IAAQ,EAyBV,SAASC,GAAaC,EAAcC,GAIzCD,EAAOH,GAAUG,GACjBC,EAAMJ,GAAUI,GAGhB,MAAMC,EAAS/B,GAAW6B,EAAKxP,SAAS,IAAK,GAAI,IAEjD8M,GAAW4C,EAAQ,IAEnBpD,GAAKoD,EAAQ/B,GAAW8B,EAAIzP,SAAS,IAAK,GAAI,KAO9C,OANakO,GAAWwB,EAAQ,IAmB3B,SAASC,GACd7M,EACA8M,EAAoB,GACpBC,EACAC,GAAyB,EACzBC,GAAU,GAEV,MAAM7M,EAAOJ,EAAsBsB,YAAetB,EAAqB5F,OACjE8S,EAAcF,EAAyBF,EAAY1M,EAAM0M,EAAa1M,EAAM0M,EAClF,GAAGI,EAAc,GAAKA,EAAcJ,EAAW,CAE7C,MAAMK,EAAU,IAAIjW,WAAWgW,GAC/B,GAAGH,EACD,IAAI,IAAIna,EAAI,EAAGA,EAAIsa,IAAeta,EAChCua,EAAQva,GAAK,OAGfua,EAAQnL,YAGV,OAAGhC,aAAiB0B,aACVuL,EAAU/L,EAAciM,EAASnN,GAASkB,EAAclB,EAAOmN,IAAUC,OACzEpN,aAAiB9I,WACjB+V,EAAU/L,EAAciM,EAASnN,GAASkB,EAAclB,EAAOmN,GAG/DF,EAAU,IAAIE,GAAShL,OAAOnC,GAASA,EAAMmC,OAAO,IAAIgL,IAIpE,OAAOnN,ECvIM,QAAC,QAAU,CAAC,aAAe,CAAC,CAAC,GAAK,UAAU,UAAY,SAAS,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,SAAS,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,iCAAiC,KAAO,iBAAiB,KAAO,SAAS,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,mBAAmB,KAAO,UAAU,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,YAAY,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,UAAU,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,SAAS,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,wBAAwB,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,GAAG,KAAO,sBAAsB,QAAU,CAAC,CAAC,IAAM,WAAW,OAAS,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,SAAS,CAAC,IAAM,UAAU,OAAS,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,yBAAyB,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,oBAAoB,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,+BAA+B,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,iBAAiB,CAAC,IAAM,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,OAAS,OAAO,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,mBAAmB,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,YAAY,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,YAAY,CAAC,IAAM,UAAU,OAAS,mBAAmB,OAAS,GAAG,KAAO,uBAAuB,IAAM,CAAC,aAAe,CAAC,CAAC,IAAM,WAAW,UAAY,YAAY,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,UAAU,UAAY,SAAS,OAAS,GAAG,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,SAAS,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,WAAW,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,QAAQ,UAAY,mBAAmB,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,QAAQ,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,aAAa,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,4BAA4B,CAAC,KAAO,wBAAwB,KAAO,8BAA8B,KAAO,QAAQ,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,oBAAoB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,SAAS,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,4BAA4B,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,2BAA2B,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,mBAAmB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,qBAAqB,KAAO,sCAAsC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,aAAa,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,YAAY,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,SAAS,CAAC,IAAM,SAAS,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,cAAc,KAAO,6BAA6B,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,SAAS,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,SAAS,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,GAAG,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,2BAA2B,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,8BAA8B,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,wBAAwB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,kBAAkB,KAAO,0BAA0B,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,QAAQ,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,oBAAoB,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,SAAS,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,yBAAyB,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,yBAAyB,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,GAAG,KAAO,WAAW,CAAC,IAAM,SAAS,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,mBAAmB,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,4BAA4B,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,oBAAoB,CAAC,KAAO,qBAAqB,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,6BAA6B,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,2BAA2B,KAAO,OAAO,CAAC,KAAO,4BAA4B,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,uBAAuB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,OAAO,CAAC,KAAO,yBAAyB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,wBAAwB,KAAO,kBAAkB,CAAC,KAAO,sBAAsB,KAAO,kBAAkB,CAAC,KAAO,wBAAwB,KAAO,mBAAmB,CAAC,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,KAAO,uBAAuB,KAAO,mBAAmB,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,sBAAsB,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,yBAAyB,KAAO,gBAAgB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,oBAAoB,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,iBAAiB,CAAC,IAAM,SAAS,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,kBAAkB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,iCAAiC,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,kBAAkB,KAAO,iCAAiC,CAAC,IAAM,SAAS,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,qBAAqB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,6BAA6B,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,UAAU,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,eAAe,KAAO,6BAA6B,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,SAAS,UAAY,0BAA0B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,iCAAiC,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,oCAAoC,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,oBAAoB,CAAC,IAAM,OAAO,UAAY,4BAA4B,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,kBAAkB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,iBAAiB,KAAO,eAAe,CAAC,IAAM,UAAU,UAAY,kCAAkC,OAAS,GAAG,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,sCAAsC,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,iBAAiB,KAAO,0BAA0B,KAAO,0BAA0B,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,kBAAkB,KAAO,yBAAyB,CAAC,KAAO,gBAAgB,KAAO,SAAS,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,iCAAiC,KAAO,4BAA4B,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,2BAA2B,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,sBAAsB,KAAO,iCAAiC,KAAO,iCAAiC,CAAC,GAAK,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,WAAW,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,yBAAyB,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,QAAQ,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,eAAe,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,YAAY,KAAO,qBAAqB,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,sCAAsC,CAAC,KAAO,yBAAyB,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,oBAAoB,KAAO,QAAQ,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,uBAAuB,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,6BAA6B,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,qCAAqC,CAAC,KAAO,eAAe,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,KAAO,qBAAqB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,qBAAqB,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,wBAAwB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,4BAA4B,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,2BAA2B,CAAC,KAAO,4BAA4B,KAAO,kBAAkB,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,gBAAgB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,yBAAyB,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,GAAG,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,qBAAqB,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,UAAU,KAAO,4BAA4B,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,UAAU,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,6BAA6B,CAAC,KAAO,UAAU,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,oBAAoB,CAAC,KAAO,YAAY,KAAO,+BAA+B,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,oBAAoB,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,oCAAoC,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,mBAAmB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,IAAM,SAAS,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,SAAS,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,SAAS,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,eAAe,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,IAAM,OAAO,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,2BAA2B,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,2BAA2B,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,SAAS,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,oBAAoB,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,IAAM,SAAS,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,uCAAuC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,qCAAqC,OAAS,GAAG,KAAO,2BAA2B,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,2BAA2B,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,0CAA0C,OAAS,GAAG,KAAO,oCAAoC,CAAC,GAAK,UAAU,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,oCAAoC,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,IAAM,SAAS,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,qBAAqB,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,uBAAuB,CAAC,GAAK,SAAS,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,QAAQ,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,0BAA0B,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,IAAM,SAAS,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,cAAc,CAAC,GAAK,SAAS,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,YAAY,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,yBAAyB,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,cAAc,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,eAAe,CAAC,KAAO,IAAI,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,SAAS,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,KAAO,WAAW,CAAC,IAAM,SAAS,UAAY,2BAA2B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,IAAM,UAAU,UAAY,mCAAmC,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,IAAM,SAAS,UAAY,6BAA6B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,eAAe,KAAO,UAAU,CAAC,IAAM,SAAS,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,+BAA+B,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,UAAU,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,wBAAwB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,yBAAyB,KAAO,WAAW,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,YAAY,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,qBAAqB,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,iBAAiB,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,wBAAwB,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,SAAS,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,2BAA2B,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,wBAAwB,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,KAAO,aAAa,KAAO,gCAAgC,CAAC,KAAO,oBAAoB,KAAO,mCAAmC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,mCAAmC,KAAO,mCAAmC,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,0BAA0B,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,WAAW,KAAO,0BAA0B,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,oBAAoB,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,2BAA2B,CAAC,IAAM,SAAS,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,iCAAiC,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,KAAO,2BAA2B,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,2BAA2B,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,gCAAgC,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,SAAS,KAAO,UAAU,CAAC,IAAM,QAAQ,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,cAAc,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,cAAc,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,kCAAkC,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,KAAO,mBAAmB,CAAC,IAAM,SAAS,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,mBAAmB,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,kCAAkC,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,gBAAgB,KAAO,SAAS,CAAC,KAAO,cAAc,KAAO,qBAAqB,KAAO,eAAe,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,uBAAuB,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,sBAAsB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,IAAM,UAAU,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,UAAU,KAAO,8BAA8B,CAAC,GAAK,UAAU,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,GAAK,UAAU,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,yCAAyC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,wCAAwC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,WAAW,CAAC,KAAO,cAAc,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,0CAA0C,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,UAAU,UAAY,4CAA4C,OAAS,GAAG,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,6CAA6C,OAAS,GAAG,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,KAAO,kBAAkB,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,+BAA+B,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,+BAA+B,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,oCAAoC,OAAS,GAAG,KAAO,0BAA0B,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,qBAAqB,KAAO,0BAA0B,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,kBAAkB,KAAO,mBAAmB,CAAC,KAAO,iBAAiB,KAAO,oBAAoB,KAAO,8BAA8B,CAAC,IAAM,SAAS,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,UAAU,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,aAAa,KAAO,2BAA2B,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,gCAAgC,KAAO,gBAAgB,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,gCAAgC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,eAAe,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,sBAAsB,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,uBAAuB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,0CAA0C,OAAS,GAAG,KAAO,gCAAgC,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,iBAAiB,KAAO,4BAA4B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,SAAS,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,uCAAuC,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,8BAA8B,KAAO,6BAA6B,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,8BAA8B,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,kCAAkC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,SAAS,UAAY,6BAA6B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,sCAAsC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,uCAAuC,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,eAAe,KAAO,sBAAsB,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,cAAc,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,8BAA8B,CAAC,KAAO,aAAa,KAAO,2BAA2B,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,eAAe,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,2BAA2B,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,SAAS,KAAO,2BAA2B,CAAC,KAAO,cAAc,KAAO,mCAAmC,CAAC,KAAO,QAAQ,KAAO,mCAAmC,CAAC,KAAO,aAAa,KAAO,4BAA4B,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,SAAS,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,8BAA8B,CAAC,KAAO,SAAS,KAAO,uBAAuB,CAAC,KAAO,SAAS,KAAO,4BAA4B,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,mBAAmB,KAAO,6BAA6B,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,CAAC,KAAO,cAAc,KAAO,+BAA+B,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,eAAe,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,QAAQ,UAAY,+BAA+B,OAAS,GAAG,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,kDAAkD,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,CAAC,KAAO,gBAAgB,KAAO,SAAS,CAAC,KAAO,mBAAmB,KAAO,SAAS,KAAO,wBAAwB,CAAC,GAAK,UAAU,UAAY,oEAAoE,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,QAAQ,KAAO,SAAS,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,UAAU,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,yBAAyB,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,SAAS,CAAC,KAAO,KAAK,KAAO,UAAU,KAAO,yBAAyB,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,sBAAsB,CAAC,GAAK,SAAS,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,+BAA+B,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,iCAAiC,OAAS,GAAG,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,aAAa,KAAO,uBAAuB,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,SAAS,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,mBAAmB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,SAAS,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,QAAQ,KAAO,YAAY,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gCAAgC,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,YAAY,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,YAAY,KAAO,oBAAoB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,QAAQ,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,qBAAqB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,SAAS,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,GAAG,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,UAAU,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,OAAO,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,sBAAsB,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,oCAAoC,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,kCAAkC,KAAO,eAAe,CAAC,GAAK,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,kBAAkB,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,oBAAoB,KAAO,kCAAkC,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,WAAW,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,gDAAgD,OAAS,CAAC,CAAC,KAAO,qBAAqB,KAAO,oBAAoB,CAAC,KAAO,oBAAoB,KAAO,qBAAqB,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,qCAAqC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,8BAA8B,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,sBAAsB,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,eAAe,CAAC,KAAO,0BAA0B,KAAO,eAAe,CAAC,KAAO,yBAAyB,KAAO,eAAe,CAAC,KAAO,0BAA0B,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,0BAA0B,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,wBAAwB,CAAC,KAAO,SAAS,KAAO,wBAAwB,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,gCAAgC,CAAC,IAAM,UAAU,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,2BAA2B,CAAC,IAAM,WAAW,UAAY,WAAW,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,qBAAqB,CAAC,IAAM,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,iBAAiB,KAAO,SAAS,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,gBAAgB,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,SAAS,UAAY,SAAS,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,yBAAyB,KAAO,gBAAgB,CAAC,KAAO,8BAA8B,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,2BAA2B,KAAO,OAAO,CAAC,KAAO,6BAA6B,KAAO,OAAO,CAAC,KAAO,8BAA8B,KAAO,OAAO,CAAC,KAAO,gCAAgC,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,cAAc,CAAC,IAAM,SAAS,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,aAAa,CAAC,GAAK,SAAS,UAAY,6BAA6B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,SAAS,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,0BAA0B,CAAC,GAAK,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,MAAM,KAAO,cAAc,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,yCAAyC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,IAAM,UAAU,UAAY,4CAA4C,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,uCAAuC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,SAAS,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,YAAY,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,eAAe,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,oBAAoB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,iCAAiC,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gCAAgC,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,qCAAqC,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,WAAW,KAAO,0BAA0B,CAAC,GAAK,SAAS,UAAY,+BAA+B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,YAAY,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,cAAc,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,SAAS,UAAY,QAAQ,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,oBAAoB,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,iBAAiB,KAAO,QAAQ,KAAO,SAAS,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,kBAAkB,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,GAAG,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,uBAAuB,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,uBAAuB,KAAO,iBAAiB,KAAO,2BAA2B,CAAC,IAAM,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,0BAA0B,CAAC,IAAM,WAAW,UAAY,mBAAmB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,SAAS,UAAY,eAAe,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,8BAA8B,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,0BAA0B,CAAC,KAAO,qBAAqB,KAAO,8BAA8B,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,uBAAuB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,sBAAsB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,4BAA4B,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,oBAAoB,CAAC,GAAK,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,2BAA2B,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,4BAA4B,KAAO,yBAAyB,CAAC,IAAM,UAAU,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,eAAe,KAAO,qBAAqB,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,KAAO,gBAAgB,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,GAAG,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,YAAY,CAAC,KAAO,aAAa,KAAO,mBAAmB,KAAO,cAAc,CAAC,IAAM,WAAW,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,wBAAwB,CAAC,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,KAAO,wBAAwB,KAAO,qBAAqB,CAAC,KAAO,eAAe,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,aAAa,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,qBAAqB,KAAO,cAAc,CAAC,KAAO,wBAAwB,KAAO,cAAc,CAAC,KAAO,wBAAwB,KAAO,cAAc,CAAC,KAAO,gCAAgC,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,8BAA8B,KAAO,uCAAuC,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,mBAAmB,KAAO,kBAAkB,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,aAAa,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,cAAc,CAAC,GAAK,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,wBAAwB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,WAAW,KAAO,wBAAwB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,UAAU,KAAO,wBAAwB,CAAC,KAAO,eAAe,KAAO,cAAc,CAAC,KAAO,gBAAgB,KAAO,cAAc,CAAC,KAAO,8BAA8B,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,iBAAiB,KAAO,cAAc,CAAC,KAAO,gBAAgB,KAAO,cAAc,CAAC,KAAO,kBAAkB,KAAO,cAAc,CAAC,KAAO,iBAAiB,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,+BAA+B,CAAC,KAAO,aAAa,KAAO,8BAA8B,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,wCAAwC,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,0BAA0B,CAAC,KAAO,WAAW,KAAO,2BAA2B,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,IAAM,WAAW,UAAY,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,wBAAwB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,eAAe,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,eAAe,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,gBAAgB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,SAAS,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,IAAI,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,aAAa,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,qBAAqB,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,WAAW,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,wBAAwB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,GAAK,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,cAAc,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,eAAe,CAAC,GAAK,WAAW,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,gBAAgB,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,sBAAsB,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,IAAI,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,kBAAkB,CAAC,IAAM,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,eAAe,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,gBAAgB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,4BAA4B,OAAS,GAAG,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,YAAY,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,wBAAwB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,4BAA4B,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,qBAAqB,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,eAAe,CAAC,KAAO,oBAAoB,KAAO,eAAe,CAAC,KAAO,gBAAgB,KAAO,eAAe,CAAC,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,aAAa,CAAC,IAAM,UAAU,UAAY,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,kBAAkB,CAAC,GAAK,WAAW,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,GAAK,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,mBAAmB,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,CAAC,KAAO,QAAQ,KAAO,qCAAqC,CAAC,KAAO,eAAe,KAAO,uCAAuC,KAAO,wBAAwB,CAAC,GAAK,UAAU,UAAY,aAAa,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,2BAA2B,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,gCAAgC,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,IAAM,WAAW,UAAY,wBAAwB,OAAS,GAAG,KAAO,uBAAuB,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,UAAU,UAAY,2CAA2C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,4CAA4C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,mDAAmD,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,mCAAmC,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,aAAa,KAAO,2BAA2B,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,SAAS,KAAO,0BAA0B,CAAC,IAAM,UAAU,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,gCAAgC,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,GAAG,KAAO,gBAAgB,CAAC,IAAM,UAAU,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,gBAAgB,KAAO,kCAAkC,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,UAAU,CAAC,IAAM,UAAU,UAAY,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,2BAA2B,CAAC,KAAO,kBAAkB,KAAO,2BAA2B,CAAC,KAAO,SAAS,KAAO,8BAA8B,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,WAAW,UAAY,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,8BAA8B,CAAC,KAAO,kBAAkB,KAAO,8BAA8B,CAAC,KAAO,SAAS,KAAO,8BAA8B,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,UAAU,CAAC,GAAK,UAAU,UAAY,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,GAAK,UAAU,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,GAAK,UAAU,UAAY,sCAAsC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,sBAAsB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,+BAA+B,CAAC,IAAM,WAAW,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,8BAA8B,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,gCAAgC,CAAC,IAAM,UAAU,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,OAAO,CAAC,KAAO,wBAAwB,KAAO,QAAQ,KAAO,wBAAwB,CAAC,IAAM,WAAW,UAAY,iCAAiC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,gCAAgC,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,kCAAkC,CAAC,GAAK,WAAW,UAAY,oDAAoD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,iDAAiD,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,IAAM,UAAU,UAAY,+CAA+C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,sBAAsB,CAAC,KAAO,aAAa,KAAO,uBAAuB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,8CAA8C,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,yBAAyB,KAAO,8BAA8B,CAAC,GAAK,WAAW,UAAY,6CAA6C,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,WAAW,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,WAAW,KAAO,qCAAqC,CAAC,IAAM,WAAW,UAAY,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,UAAU,UAAY,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,iCAAiC,CAAC,IAAM,UAAU,UAAY,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,UAAU,KAAO,WAAW,CAAC,KAAO,UAAU,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,YAAY,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,yBAAyB,CAAC,GAAK,UAAU,UAAY,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,6BAA6B,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,wBAAwB,KAAO,oBAAoB,CAAC,IAAM,WAAW,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,QAAQ,KAAO,iBAAiB,CAAC,IAAM,UAAU,UAAY,uCAAuC,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,wCAAwC,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,gDAAgD,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,UAAU,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,UAAU,CAAC,IAAM,WAAW,UAAY,8BAA8B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,UAAU,UAAY,yBAAyB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,uBAAuB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,UAAY,4BAA4B,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,WAAW,UAAY,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,mBAAmB,CAAC,GAAK,UAAU,UAAY,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,mBAAmB,CAAC,IAAM,UAAU,UAAY,kCAAkC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,+BAA+B,CAAC,IAAM,UAAU,UAAY,qCAAqC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,+BAA+B,CAAC,IAAM,UAAU,UAAY,0BAA0B,OAAS,GAAG,KAAO,+BAA+B,CAAC,IAAM,UAAU,UAAY,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,uBAAuB,KAAO,WAAW,QAAU,CAAC,CAAC,IAAM,UAAU,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,IAAM,WAAW,OAAS,gBAAgB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,IAAM,WAAW,OAAS,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,cAAc,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,cAAc,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,2BAA2B,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,UAAU,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,CAAC,KAAO,WAAW,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,sBAAsB,KAAO,gBAAgB,CAAC,IAAM,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,YAAY,CAAC,GAAK,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,eAAe,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,GAAG,KAAO,yBAAyB,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,6BAA6B,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,sBAAsB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,mBAAmB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,UAAU,KAAO,qBAAqB,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,4BAA4B,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,SAAS,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,iCAAiC,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,sBAAsB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,gBAAgB,CAAC,IAAM,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,mBAAmB,OAAS,GAAG,KAAO,iBAAiB,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,eAAe,KAAO,gBAAgB,CAAC,IAAM,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,iBAAiB,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,uBAAuB,KAAO,gBAAgB,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,eAAe,CAAC,IAAM,UAAU,OAAS,iBAAiB,OAAS,GAAG,KAAO,UAAU,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,GAAG,KAAO,mBAAmB,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,iBAAiB,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,gBAAgB,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,MAAM,KAAO,UAAU,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,SAAS,KAAO,iBAAiB,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iCAAiC,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,iCAAiC,CAAC,GAAK,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,iCAAiC,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,mBAAmB,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,iBAAiB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,UAAU,CAAC,KAAO,mBAAmB,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,4BAA4B,CAAC,KAAO,SAAS,KAAO,qBAAqB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,IAAM,WAAW,OAAS,kBAAkB,OAAS,GAAG,KAAO,gBAAgB,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,oBAAoB,KAAO,wBAAwB,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,6BAA6B,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,yBAAyB,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,SAAS,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,wBAAwB,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,iBAAiB,KAAO,WAAW,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,gBAAgB,CAAC,IAAM,UAAU,OAAS,4BAA4B,OAAS,GAAG,KAAO,0BAA0B,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,4BAA4B,CAAC,IAAM,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,eAAe,KAAO,kCAAkC,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,0CAA0C,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,0BAA0B,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,cAAc,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,uBAAuB,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,oCAAoC,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,yBAAyB,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,6BAA6B,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,4BAA4B,CAAC,IAAM,SAAS,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,gCAAgC,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,cAAc,KAAO,+BAA+B,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,yBAAyB,KAAO,kBAAkB,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,UAAU,KAAO,mBAAmB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,eAAe,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,SAAS,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,yBAAyB,CAAC,KAAO,MAAM,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,SAAS,CAAC,KAAO,OAAO,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,UAAU,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,yBAAyB,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,uBAAuB,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,gCAAgC,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,YAAY,KAAO,8BAA8B,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,KAAK,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,iBAAiB,CAAC,GAAK,UAAU,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,SAAS,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,iCAAiC,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,CAAC,KAAO,eAAe,KAAO,uBAAuB,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,8BAA8B,CAAC,IAAM,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,UAAU,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,mBAAmB,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,wBAAwB,CAAC,IAAM,WAAW,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,kCAAkC,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,GAAG,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,6BAA6B,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,iBAAiB,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,wBAAwB,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,wBAAwB,KAAO,6BAA6B,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,mBAAmB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,uBAAuB,CAAC,GAAK,UAAU,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,2BAA2B,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,uBAAuB,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,kBAAkB,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,wBAAwB,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,MAAM,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,wBAAwB,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,gBAAgB,KAAO,UAAU,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,YAAY,CAAC,IAAM,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,aAAa,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,wBAAwB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,eAAe,KAAO,qBAAqB,KAAO,wBAAwB,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,2BAA2B,CAAC,IAAM,UAAU,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,yBAAyB,KAAO,mCAAmC,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,QAAQ,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,oBAAoB,KAAO,kBAAkB,CAAC,KAAO,qBAAqB,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,2BAA2B,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,0BAA0B,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,GAAG,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,iBAAiB,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,mBAAmB,KAAO,mCAAmC,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,+BAA+B,CAAC,KAAO,WAAW,KAAO,mBAAmB,KAAO,uBAAuB,CAAC,IAAM,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,IAAM,QAAQ,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,CAAC,KAAO,WAAW,KAAO,QAAQ,KAAO,uBAAuB,CAAC,IAAM,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,UAAU,KAAO,wBAAwB,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,eAAe,KAAO,gBAAgB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,GAAG,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,SAAS,CAAC,KAAO,kBAAkB,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,mBAAmB,CAAC,GAAK,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,0BAA0B,CAAC,KAAO,gBAAgB,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,aAAa,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,gBAAgB,KAAO,UAAU,KAAO,oBAAoB,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,0BAA0B,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,4BAA4B,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,gBAAgB,KAAO,uCAAuC,CAAC,KAAO,SAAS,KAAO,6BAA6B,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,SAAS,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,IAAM,UAAU,OAAS,sCAAsC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,0BAA0B,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,qBAAqB,CAAC,IAAM,UAAU,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,4BAA4B,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,kBAAkB,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,4BAA4B,CAAC,KAAO,gBAAgB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,sBAAsB,CAAC,KAAO,OAAO,KAAO,uBAAuB,KAAO,iBAAiB,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,GAAG,KAAO,6BAA6B,CAAC,GAAK,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,IAAI,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,oBAAoB,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,GAAG,KAAO,6BAA6B,CAAC,IAAM,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,aAAa,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,GAAG,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,uBAAuB,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,oBAAoB,CAAC,KAAO,mBAAmB,KAAO,SAAS,KAAO,eAAe,CAAC,IAAM,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,4BAA4B,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,6BAA6B,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,6BAA6B,CAAC,IAAM,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,2BAA2B,CAAC,KAAO,cAAc,KAAO,+BAA+B,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,iBAAiB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,UAAU,CAAC,KAAO,kBAAkB,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,yBAAyB,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,wBAAwB,CAAC,IAAM,WAAW,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,WAAW,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,qBAAqB,KAAO,gBAAgB,CAAC,KAAO,mBAAmB,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,KAAO,mBAAmB,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,GAAG,KAAO,wBAAwB,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,IAAM,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,QAAQ,CAAC,KAAO,QAAQ,KAAO,OAAO,KAAO,KAAK,CAAC,IAAM,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,oBAAoB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,gCAAgC,OAAS,GAAG,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,aAAa,CAAC,GAAK,WAAW,OAAS,kBAAkB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,0BAA0B,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,uBAAuB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,oBAAoB,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,GAAG,KAAO,oBAAoB,CAAC,GAAK,SAAS,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,iBAAiB,CAAC,IAAM,WAAW,OAAS,uCAAuC,OAAS,GAAG,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,uCAAuC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,4BAA4B,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,UAAU,KAAO,kBAAkB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,eAAe,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,uCAAuC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,gBAAgB,KAAO,qBAAqB,KAAO,WAAW,CAAC,IAAM,SAAS,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,mBAAmB,KAAO,aAAa,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,aAAa,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,QAAQ,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,QAAQ,CAAC,IAAM,SAAS,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,sBAAsB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,GAAG,KAAO,gCAAgC,CAAC,GAAK,WAAW,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,MAAM,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,WAAW,KAAO,yBAAyB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,2BAA2B,CAAC,GAAK,UAAU,OAAS,sCAAsC,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,eAAe,KAAO,QAAQ,KAAO,2BAA2B,CAAC,GAAK,WAAW,OAAS,qCAAqC,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,KAAO,yBAAyB,CAAC,IAAM,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,eAAe,KAAO,4BAA4B,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,2BAA2B,KAAO,kCAAkC,CAAC,IAAM,UAAU,OAAS,kCAAkC,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,QAAQ,KAAO,iBAAiB,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,qBAAqB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,YAAY,KAAO,eAAe,CAAC,KAAO,MAAM,KAAO,mBAAmB,KAAO,iBAAiB,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,8BAA8B,KAAO,gBAAgB,CAAC,KAAO,KAAK,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,KAAK,KAAO,cAAc,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,eAAe,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,iBAAiB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,gBAAgB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,qBAAqB,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,YAAY,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,SAAS,CAAC,GAAK,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,WAAW,KAAO,yBAAyB,CAAC,KAAO,WAAW,KAAO,+BAA+B,KAAO,SAAS,CAAC,IAAM,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,SAAS,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,uBAAuB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,mBAAmB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,cAAc,CAAC,KAAO,cAAc,KAAO,SAAS,KAAO,SAAS,CAAC,GAAK,UAAU,OAAS,oBAAoB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,kBAAkB,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,WAAW,KAAO,UAAU,CAAC,KAAO,aAAa,KAAO,gBAAgB,KAAO,mBAAmB,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,mBAAmB,CAAC,IAAM,UAAU,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,UAAU,KAAO,iBAAiB,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,iBAAiB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,GAAG,KAAO,2BAA2B,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,GAAG,KAAO,0BAA0B,CAAC,GAAK,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,2BAA2B,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,iBAAiB,CAAC,KAAO,SAAS,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,YAAY,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,4BAA4B,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,WAAW,KAAO,yBAAyB,CAAC,IAAM,UAAU,OAAS,4BAA4B,OAAS,GAAG,KAAO,wBAAwB,CAAC,IAAM,WAAW,OAAS,qCAAqC,OAAS,GAAG,KAAO,iCAAiC,CAAC,GAAK,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,KAAK,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,yBAAyB,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,gBAAgB,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,UAAU,CAAC,KAAO,IAAI,KAAO,iBAAiB,KAAO,cAAc,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,mBAAmB,CAAC,KAAO,QAAQ,KAAO,kBAAkB,KAAO,uBAAuB,CAAC,GAAK,SAAS,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,WAAW,KAAO,uBAAuB,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,6BAA6B,CAAC,IAAM,WAAW,OAAS,oBAAoB,OAAS,GAAG,KAAO,kBAAkB,CAAC,GAAK,UAAU,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,QAAQ,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,OAAO,KAAO,UAAU,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,wBAAwB,CAAC,IAAM,UAAU,OAAS,mCAAmC,OAAS,GAAG,KAAO,yBAAyB,CAAC,GAAK,UAAU,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,WAAW,KAAO,0BAA0B,KAAO,yBAAyB,CAAC,IAAM,UAAU,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,sBAAsB,CAAC,GAAK,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,aAAa,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,OAAO,KAAO,QAAQ,KAAO,qBAAqB,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,8BAA8B,CAAC,IAAM,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,iBAAiB,KAAO,gBAAgB,CAAC,KAAO,cAAc,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,qBAAqB,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,sBAAsB,CAAC,IAAM,UAAU,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,4BAA4B,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,OAAO,CAAC,KAAO,QAAQ,KAAO,kBAAkB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,sBAAsB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,oBAAoB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,SAAS,OAAS,qBAAqB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,mBAAmB,CAAC,IAAM,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,MAAM,KAAO,qBAAqB,CAAC,KAAO,UAAU,KAAO,eAAe,CAAC,KAAO,SAAS,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,2BAA2B,CAAC,IAAM,WAAW,OAAS,uBAAuB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,UAAU,KAAO,gBAAgB,KAAO,eAAe,CAAC,IAAM,WAAW,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,QAAQ,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,SAAS,KAAO,iBAAiB,KAAO,kCAAkC,CAAC,GAAK,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,cAAc,KAAO,WAAW,KAAO,gCAAgC,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,QAAQ,KAAO,0BAA0B,CAAC,GAAK,UAAU,OAAS,+BAA+B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,QAAQ,CAAC,KAAO,YAAY,KAAO,UAAU,CAAC,KAAO,QAAQ,KAAO,eAAe,KAAO,gBAAgB,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,YAAY,KAAO,SAAS,KAAO,QAAQ,CAAC,IAAM,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,aAAa,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,gCAAgC,CAAC,GAAK,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,SAAS,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,UAAU,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,eAAe,CAAC,KAAO,cAAc,KAAO,gBAAgB,KAAO,+BAA+B,CAAC,GAAK,WAAW,OAAS,4CAA4C,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,oCAAoC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,kCAAkC,CAAC,GAAK,UAAU,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,OAAO,KAAO,UAAU,CAAC,KAAO,cAAc,KAAO,OAAO,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,QAAQ,KAAO,gCAAgC,CAAC,IAAM,WAAW,OAAS,yBAAyB,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,SAAS,KAAO,QAAQ,KAAO,WAAW,CAAC,IAAM,SAAS,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,WAAW,KAAO,cAAc,CAAC,KAAO,SAAS,KAAO,gBAAgB,CAAC,KAAO,UAAU,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,UAAU,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,qCAAqC,CAAC,IAAM,WAAW,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,mBAAmB,KAAO,WAAW,CAAC,IAAM,WAAW,OAAS,iCAAiC,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,cAAc,KAAO,aAAa,CAAC,KAAO,QAAQ,KAAO,gBAAgB,CAAC,KAAO,SAAS,KAAO,eAAe,CAAC,KAAO,aAAa,KAAO,gBAAgB,CAAC,KAAO,gBAAgB,KAAO,gBAAgB,CAAC,KAAO,eAAe,KAAO,gBAAgB,CAAC,KAAO,sBAAsB,KAAO,iBAAiB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,WAAW,CAAC,IAAM,UAAU,OAAS,2BAA2B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,cAAc,KAAO,qBAAqB,CAAC,IAAM,UAAU,OAAS,8BAA8B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,KAAK,CAAC,KAAO,kBAAkB,KAAO,gBAAgB,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,iCAAiC,CAAC,GAAK,UAAU,OAAS,yCAAyC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,aAAa,KAAO,SAAS,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,gCAAgC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,WAAW,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,aAAa,CAAC,KAAO,UAAU,KAAO,cAAc,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,kCAAkC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,kBAAkB,CAAC,KAAO,SAAS,KAAO,aAAa,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,mCAAmC,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,mBAAmB,KAAO,WAAW,CAAC,GAAK,UAAU,OAAS,0BAA0B,OAAS,CAAC,CAAC,KAAO,aAAa,KAAO,WAAW,KAAO,QAAQ,CAAC,GAAK,WAAW,OAAS,4BAA4B,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,WAAW,KAAO,+BAA+B,CAAC,GAAK,WAAW,OAAS,wBAAwB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,QAAQ,CAAC,IAAM,UAAU,OAAS,sBAAsB,OAAS,CAAC,CAAC,KAAO,QAAQ,KAAO,mBAAmB,CAAC,KAAO,YAAY,KAAO,WAAW,KAAO,sBAAsB,CAAC,IAAM,WAAW,OAAS,wBAAwB,OAAS,GAAG,KAAO,+BAA+B,CAAC,GAAK,WAAW,OAAS,+BAA+B,OAAS,GAAG,KAAO,QAAQ,CAAC,GAAK,UAAU,OAAS,6BAA6B,OAAS,CAAC,CAAC,KAAO,OAAO,KAAO,WAAW,KAAO,UAAU,MAAQ,KC1B9hjQ,GAAI,IAAI9I,WAAW,KACnBmW,GAAK,IAAInW,WAAW,KACpBoW,GAAK,IAAIxY,YAAY,KACrByY,GAAK,IAAIzY,YAAY,KACrB0Y,GAAK,IAAI1Y,YAAY,KACrB2Y,GAAK,IAAI3Y,YAAY,KACrB4Y,GAAK,IAAI5Y,YAAY,KACrB6Y,GAAK,IAAI7Y,YAAY,KACrB8Y,GAAK,IAAI9Y,YAAY,KACrB+Y,GAAK,IAAI/Y,YAAY,KAqDzB,SAASgZ,GAAS3Z,GACd,GAAIA,aAAeW,YACf,OAAOX,EAEX,GAAmB,iBAARA,EAAkB,CACzB,GAAIA,EAAIiG,OAAS,GAAM,EACnB,IAAK,IAAIxH,EAAIuB,EAAIiG,OAAS,EAAGxH,GAAK,EAAGA,IACjCuB,GAAO,QACf,IAAI4Z,EAAM,IAAIjZ,YAAYX,EAAIiG,OAAS,GACvC,IAASxH,EAAI,EAAGA,EAAIuB,EAAIiG,OAAQxH,GAAK,EACjCmb,EAAInb,EAAI,IArBFob,EAqBgBpb,GArBrBkP,EAqBgB3N,GApBbyK,WAAWoP,IAAQ,GACzBlM,EAAIlD,WAAWoP,EAAM,IAAM,GAC3BlM,EAAIlD,WAAWoP,EAAM,IAAM,EAC3BlM,EAAIlD,WAAWoP,EAAM,IAkBvB,OAAOD,EAtBf,IAAajM,EAAKkM,EAwBd,GAAI7Z,aAAe+C,WAAY,CAE3B,IADI6W,EAAM,IAAIjZ,YAAYX,EAAIiG,OAAS,GAC9BxH,EAAI,EAAGA,EAAIuB,EAAIiG,OAAQxH,GAAK,EACjCmb,EAAInb,EAAI,GAAMuB,EAAIvB,IAAM,GAClBuB,EAAIvB,EAAI,IAAM,GACduB,EAAIvB,EAAI,IAAM,EACduB,EAAIvB,EAAI,GAElB,OAAOmb,EAEX,MAAM,IAAItP,MAAM,iCAEpB,SAASwP,GAAIC,EAAMC,EAAOhQ,QACX,IAAPA,IAAiBA,EAAK+P,GAC1B,IAAK,IAAItb,EAAI,EAAGA,EAAIsb,EAAK9T,OAAQxH,IAC7BuL,EAAGvL,GAAKsb,EAAKtb,GAAKub,EAAMvb,IAhFhC,WAYI,IAXA,IAEIwb,EACAC,EAEA1Z,EACA2Z,EACAC,EAPArb,EAAI,IAAIgE,WAAW,KACnBpD,EAAI,IAAIoD,WAAW,KAOnBzB,EAAI,EACJ+Y,EAAO,EAEF5b,EAAI,EAAGA,EAAI,IAAKA,IACrBM,EAAEN,GAAKA,GAAK,EAAe,KAAVA,GAAK,GACtBkB,EAAEZ,EAAEN,GAAKA,GAAKA,EAElB,MAAQ,GAAE6C,GAAIA,GAAK2Y,GAAM,EAGrBzZ,GADAA,EAAI6Z,EAAOA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,EAAIA,GAAQ,IAC9C,EAAQ,IAAJ7Z,EAAU,GACvB,GAAEc,GAAKd,EACP0Y,GAAG1Y,GAAKc,EAGR8Y,EAAY,SADPrb,EAAEmb,EAAKnb,EAAEkb,EAAKlb,EAAEuC,KACQ,MAAL4Y,EAAoB,IAALD,EAAiB,SAAJ3Y,EACpD6Y,EAAc,IAAPpb,EAAEyB,GAAiB,SAAJA,EACtB2Y,GAAG7X,GAAK6Y,EAAOA,GAAQ,GAAKA,IAAS,EACrCf,GAAG9X,GAAK6Y,EAAOA,GAAQ,GAAKA,IAAS,EACrCd,GAAG/X,GAAK6Y,EAAOA,GAAQ,GAAKA,IAAS,EACrCb,GAAGhY,GAAK6Y,EAAOA,GAAQ,GAAKA,IAAS,EACrCZ,GAAG/Y,GAAK4Z,EAAOA,GAAQ,GAAKA,IAAS,EACrCZ,GAAGhZ,GAAK4Z,EAAOA,GAAQ,GAAKA,IAAS,EACrCX,GAAGjZ,GAAK4Z,EAAOA,GAAQ,GAAKA,IAAS,EACrCV,GAAGlZ,GAAK4Z,EAAOA,GAAQ,GAAKA,IAAS,EACrCC,EAAO1a,EAAE0a,IAAS,EAiD1BC,GAIA,IAAIC,GAAqB,WACrB,SAASA,EAAIC,GACT,IAAIxa,EAAM2Z,GAASa,GACnB,GAAmB,IAAfxa,EAAIiG,QAA+B,IAAfjG,EAAIiG,QAA+B,IAAfjG,EAAIiG,OAC5C,MAAM,IAAIqE,MAAM,oBAEpB9E,KAAKiV,OAAS,IAAI9Z,YAAY,EAAIX,EAAIiG,OAAS,IAC/CT,KAAKkV,OAAS,IAAI/Z,YAAY,EAAIX,EAAIiG,OAAS,IAC/CT,KAAKiV,OAAOtT,IAAInH,GAKhB,IAJA,IAEIoN,EAFAuN,EAAO,EACPlc,EAAIuB,EAAIiG,OAGLxH,EAAI,EAAIuB,EAAIiG,OAAS,GAAIxH,IAC5B2O,EAAM5H,KAAKiV,OAAOhc,EAAI,IAElBA,EAAIuB,EAAIiG,QAAW,GAAqB,IAAfjG,EAAIiG,QAAgBxH,EAAIuB,EAAIiG,QAAW,KAChEmH,EAAM,GAAEA,IAAQ,KAAO,GAAK,GAAGA,GAAO,GAAM,MAAQ,GAAK,GAAGA,GAAO,EAAK,MAAQ,EAAI,GAAQ,IAANA,GAElF3O,EAAIuB,EAAIiG,QAAW,IACnBmH,EAAMA,GAAO,EAAIA,IAAQ,GAAMuN,GAAQ,GACvCA,EAAOA,GAAQ,EAAkB,KAAbA,GAAQ,KAGpCnV,KAAKiV,OAAOhc,GAAK+G,KAAKiV,OAAOhc,EAAIuB,EAAIiG,QAAUmH,EAGnD,IAAK,IAAI5F,EAAI,EAAG/I,EAAG+I,IAAK/I,IACpB2O,EAAM5H,KAAKiV,OAAW,EAAJjT,EAAQ/I,EAAIA,EAAI,GAE9B+G,KAAKkV,OAAOlT,GADZ/I,GAAK,GAAK+I,EAAI,EACG4F,EAGCmM,GAAG,GAAEnM,IAAQ,KACzBoM,GAAG,GAAGpM,GAAO,GAAM,MACnBqM,GAAG,GAAGrM,GAAO,EAAK,MAClBsM,GAAG,GAAQ,IAANtM,IAiFvB,OA7EAmN,EAAIla,UAAUua,QAAU,SAAUC,GAa9B,IAZA,IAQIC,EACAC,EACAC,EAVAC,EAAUtB,GAASkB,GACnBxD,EAAM,IAAI1W,YAAY,GACtBD,EAAIua,EAAQ,GAAKzV,KAAKiV,OAAO,GAC7BzZ,EAAIia,EAAQ,GAAKzV,KAAKiV,OAAO,GAC7B3b,EAAImc,EAAQ,GAAKzV,KAAKiV,OAAO,GAC7B1b,EAAIkc,EAAQ,GAAKzV,KAAKiV,OAAO,GAC7BS,EAAS1V,KAAKiV,OAAOxU,OAAS,EAAI,EAClChF,EAAI,EAKCxC,EAAI,EAAGA,EAAIyc,EAAQzc,IACxBqc,EAAK3B,GAAGzY,IAAM,IAAM0Y,GAAIpY,GAAK,GAAM,KAAOqY,GAAIva,GAAK,EAAK,KAAOwa,GAAO,IAAJva,GAAWyG,KAAKiV,OAAOxZ,GACzF8Z,EAAK5B,GAAGnY,IAAM,IAAMoY,GAAIta,GAAK,GAAM,KAAOua,GAAIta,GAAK,EAAK,KAAOua,GAAO,IAAJ5Y,GAAW8E,KAAKiV,OAAOxZ,EAAI,GAC7F+Z,EAAK7B,GAAGra,IAAM,IAAMsa,GAAIra,GAAK,GAAM,KAAOsa,GAAI3Y,GAAK,EAAK,KAAO4Y,GAAO,IAAJtY,GAAWwE,KAAKiV,OAAOxZ,EAAI,GAC7FlC,EAAIoa,GAAGpa,IAAM,IAAMqa,GAAI1Y,GAAK,GAAM,KAAO2Y,GAAIrY,GAAK,EAAK,KAAOsY,GAAO,IAAJxa,GAAW0G,KAAKiV,OAAOxZ,EAAI,GAC5FP,EAAIoa,EACJ9Z,EAAI+Z,EACJjc,EAAIkc,EACJ/Z,GAAK,EAIT,IAASxC,EAAI,EAAGA,EAAI,EAAGA,IACnB4Y,EAAI5Y,GAAM,GAAEiC,IAAM,KAAO,GACnB,GAAGM,GAAK,GAAM,MAAQ,GACtB,GAAGlC,GAAK,EAAK,MAAQ,EACrB,GAAM,IAAJC,GACFyG,KAAKiV,OAAOxZ,KAClB6Z,EAAKpa,EACLA,EAAIM,EACJA,EAAIlC,EACJA,EAAIC,EACJA,EAAI+b,EAER,OAAOzD,GAEXkD,EAAIla,UAAU8a,QAAU,SAAUN,GAa9B,IAZA,IAOIC,EACAC,EACAC,EATAC,EAAUtB,GAASkB,GACnBxD,EAAM,IAAI1W,YAAY,GACtBD,EAAIua,EAAQ,GAAKzV,KAAKkV,OAAO,GAC7B1Z,EAAIia,EAAQ,GAAKzV,KAAKkV,OAAO,GAC7B5b,EAAImc,EAAQ,GAAKzV,KAAKkV,OAAO,GAC7B3b,EAAIkc,EAAQ,GAAKzV,KAAKkV,OAAO,GAC7BQ,EAAS1V,KAAKkV,OAAOzU,OAAS,EAAI,EAIlChF,EAAI,EAECxC,EAAI,EAAGA,EAAIyc,EAAQzc,IACxBqc,EAAKvB,GAAG7Y,IAAM,IAAM8Y,GAAIxY,GAAK,GAAM,KAAOyY,GAAI3a,GAAK,EAAK,KAAO4a,GAAO,IAAJ3a,GAAWyG,KAAKkV,OAAOzZ,GACzF8Z,EAAKxB,GAAGvY,IAAM,IAAMwY,GAAI1a,GAAK,GAAM,KAAO2a,GAAI1a,GAAK,EAAK,KAAO2a,GAAO,IAAJhZ,GAAW8E,KAAKkV,OAAOzZ,EAAI,GAC7F+Z,EAAKzB,GAAGza,IAAM,IAAM0a,GAAIza,GAAK,GAAM,KAAO0a,GAAI/Y,GAAK,EAAK,KAAOgZ,GAAO,IAAJ1Y,GAAWwE,KAAKkV,OAAOzZ,EAAI,GAC7FlC,EAAIwa,GAAGxa,IAAM,IAAMya,GAAI9Y,GAAK,GAAM,KAAO+Y,GAAIzY,GAAK,EAAK,KAAO0Y,GAAO,IAAJ5a,GAAW0G,KAAKkV,OAAOzZ,EAAI,GAC5FP,EAAIoa,EACJ9Z,EAAI+Z,EACJjc,EAAIkc,EACJ/Z,GAAK,EAGT,IAASxC,EAAI,EAAGA,EAAI,EAAGA,IACnB4Y,EAAI,GAAK5Y,GAAMya,GAAGxY,IAAM,KAAO,GACzBwY,GAAIlY,GAAK,GAAM,MAAQ,GACvBkY,GAAIpa,GAAK,EAAK,MAAQ,EACtBoa,GAAO,IAAJna,GACHyG,KAAKkV,OAAOzZ,KAClB6Z,EAAKpa,EACLA,EAAIM,EACJA,EAAIlC,EACJA,EAAIC,EACJA,EAAI+b,EAER,OAAOzD,GAEJkD,EArHa,GA2HpBa,GAAyB,WACzB,SAASA,EAAQpb,EAAKqb,EAAI1C,QACJ,IAAdA,IAAwBA,EAAY,IACxCnT,KAAKxF,IAAM2Z,GAAS3Z,GACpBwF,KAAK6V,GAAK1B,GAAS0B,GACnB7V,KAAK8V,OAAS,IAAIf,GAAIva,GACtBwF,KAAKmT,UAAYA,EAAY,EA4CjC,OAvCAyC,EAAQ/a,UAAUua,QAAU,SAAUK,EAASrB,GAM3C,IALA,IAAI5R,EAAO2R,GAASsB,GAChBM,EAAa3B,GAAO,IAAIjZ,YAAYqH,EAAK/B,QACzCuV,EAAQhW,KAAK6V,GAAGjU,SAAS5B,KAAKmT,UAAWnT,KAAK6V,GAAGpV,QACjDwV,EAAQjW,KAAK6V,GAAGjU,SAAS,EAAG5B,KAAKmT,WACjC+C,EAAO,IAAI/a,YAAY6E,KAAKmT,WACvBla,EAAI,EAAGA,EAAIuJ,EAAK/B,OAAQxH,GAAK+G,KAAKmT,UAAW,CAClD,IAAIrX,EAAI0G,EAAKZ,SAAS3I,EAAGA,EAAI+G,KAAKmT,WAClCmB,GAAIxY,EAAGma,EAAOC,GACd,IAAIra,EAAImE,KAAK8V,OAAOV,QAAQc,GAC5B5B,GAAIzY,EAAGma,GACPA,EAAQla,EACRma,EAAQpa,EACR,IAAK,IAAImG,EAAI/I,EAAGwC,EAAI,EAAGuG,EAAIQ,EAAK/B,QAAUhF,EAAI,EAAGuG,IAAKvG,IAClDsa,EAAW/T,GAAKnG,EAAEJ,GAE1B,OAAOsa,GAKXH,EAAQ/a,UAAU8a,QAAU,SAAUF,EAASrB,GAM3C,IALA,IAAI2B,EAAa5B,GAASsB,GACtBjT,EAAO4R,GAAO,IAAIjZ,YAAY4a,EAAWtV,QACzCwV,EAAQjW,KAAK6V,GAAGjU,SAAS5B,KAAKmT,UAAWnT,KAAK6V,GAAGpV,QACjDuV,EAAQhW,KAAK6V,GAAGjU,SAAS,EAAG5B,KAAKmT,WACjC+C,EAAO,IAAI/a,YAAY6E,KAAKmT,WACvBla,EAAI,EAAGA,EAAIuJ,EAAK/B,OAAQxH,GAAK+G,KAAKmT,UAAW,CAClD,IAAIrX,EAAIia,EAAWnU,SAAS3I,EAAGA,EAAI+G,KAAKmT,WACxCmB,GAAIxY,EAAGma,EAAOC,GACd,IAAIra,EAAImE,KAAK8V,OAAOH,QAAQO,GAC5B5B,GAAIzY,EAAGma,GACPA,EAAQla,EACRma,EAAQpa,EACR,IAAK,IAAImG,EAAI/I,EAAGwC,EAAI,EAAGuG,EAAIQ,EAAK/B,QAAUhF,EAAI,EAAGuG,IAAKvG,IAClD+G,EAAKR,GAAKnG,EAAEJ,GAEpB,OAAO+G,GAEJoT,EAlDiB,GAyGb,IAjDgB,WAC3B,SAASA,EAAQpb,EAAK2b,EAAShD,GAO3B,QANkB,IAAdA,IAAwBA,EAAY,IACxCnT,KAAKU,OAAS,EACdV,KAAKxF,IAAM2Z,GAAS3Z,GACpBwF,KAAKmW,QAAUhC,GAASgC,GACxBnW,KAAK8V,OAAS,IAAIf,GAAIva,GACtBwF,KAAKmT,UAAYA,EAAY,EACD,IAAxBnT,KAAKmW,QAAQ1V,OACb,MAAM,IAAIqE,MAAM,gDAMxB8Q,EAAQ/a,UAAUua,QAAU,SAAUK,EAASrB,GAI3C,IAHA,IAAI5R,EAAO2R,GAASsB,GAChBM,EAAa3B,GAAO,IAAIjZ,YAAYqH,EAAK/B,QACzCC,EAASV,KAAKU,OACTzH,EAAI,EAAGA,EAAIuJ,EAAK/B,OAAQxH,GAAK+G,KAAKmT,UAAW,CAElD,IADA,IAAIrX,EAAIkE,KAAK8V,OAAOV,QAAQpV,KAAKmW,SACxBnU,EAAI/I,EAAGwC,EAAIiF,EAAQsB,EAAIQ,EAAK/B,QAAUhF,EAAIuE,KAAKmT,UAAWnR,IAAKvG,IACpEsa,EAAW/T,GAAKlG,EAAEL,GAAK+G,EAAKR,GAC5BQ,EAAK/B,OAASxH,GAAK+G,KAAKmT,WACxBnT,KAAKoW,mBACL1V,IACAzH,GAAKyH,EACLA,EAAS,GAIjB,OADAV,KAAKU,QAAUV,KAAKU,OAAU8B,EAAK/B,OAAS,GAAM,EAC3CsV,GAKXH,EAAQ/a,UAAU8a,QAAU,SAAUF,EAASrB,GAC3C,OAAOpU,KAAKoV,QAAQK,EAASrB,IAEjCwB,EAAQ/a,UAAUub,iBAAmB,WAEjC,IAAK,IAAIC,EAAQrW,KAAKmW,QAAQ1V,OAAS,EAAG4V,GAAS,OACzCrW,KAAKmW,QAAQE,GAAS,YADsBA,OAzChC,GAiDf,I,mBC/Tf,MAAMC,GAAS,CACbC,EAAG,IAAIhZ,WAAW,GAClBiZ,GAAI,IAAIlZ,YAAY,GACpBmZ,GAAI,IAAItb,YAAY,IAEf,SAASub,GAAe3Z,GAC7B,MAAM4Z,EAAQL,GAAOvZ,GAErB,OADAuL,OAAOC,gBAAgBoO,GAChBA,EAAM,G,2SCaf,MAAMC,GAA4B,oBAAb,QAA4B,WAAY/Z,OAASA,OAAOyL,OAAOsO,OAASjM,KAAKrC,OAAOsO,OAwBlG,SAASC,GAAaxQ,GAC3B,OAAOuQ,GAAOE,OAAO,QAAS1P,EAAoBf,IAAQwD,KAAKrO,GACtD,IAAI+B,WAAW/B,IAiBnB,SAASub,GAAe1Q,GAC7B,OAAOuQ,GAAOE,OAAO,UAAW1P,EAAoBf,IAAQwD,KAAKrO,GAExD,IAAI+B,WAAW/B,IAiBnB,SAASwb,GAAe3Q,EAAmB4Q,EAAsBC,GAGtE7Q,EAAQ6M,GAAW7M,GAOnB,OAAO2B,EAJQ,IAAI,GAAIC,EAAcgP,GAAWhP,EAAciP,IAChC9B,QAAQnN,EAAc5B,KAM/C,SAAS8Q,GAAe9Q,EAAmB4Q,EAAsBC,GAQtE,OAAOlP,EALQ,IAAI,GAAIC,EAAcgP,GAAWhP,EAAciP,IAChCvB,QAAQ1N,EAAc5B,KAO/C,SAAS+Q,GAAW/Q,EAAmBgR,GAG5C,MAAMrZ,EAAIkT,GAAWmG,EAAUC,QAAS,IAClCvb,EAAImV,GAAWmG,EAAUE,SAAU,IAQzC,OAJuBhR,EAAakL,GADZjC,EAFd0B,GAAW9K,EAAWC,GAAQ,IAENtK,EAAGiC,GAC2B,KAO3D,SAAewZ,GAAY/D,EAAkDgE,EAA0BC,G,0CAC5G,MAAMC,QAAkBf,GAAOe,UAC7B,MACAlE,EACA,CAACja,KAAM,WACP,EACA,CAAoB,eA6BtB,OAVWod,GAAOgB,WAAW,CACzBpe,KAAM,SACNie,OACAC,aACAG,KAAM,CAACre,KAAM,YAEfme,EACA,KAGU9N,KAAK4J,GAAU,IAAIlW,WAAWkW,OAGrC,SAASqE,GAAqBC,GACnC,IAAI3S,EAIJ,IAEEA,EAWG,SAAuB4S,GAC5B,IAGI/e,EAAGuK,EACHxB,EAAGiW,EACH/V,EACAwB,EALAwU,EAASxR,KAAKC,KADJ,GACmBgH,GAAO,EACpCwK,EAAK,EAKLjd,EAAI,IAAIiI,MAAM+U,GACd1c,EAAI,IAAI2H,MAAM+U,GACd5e,EAAI,IAAI6J,MAAM+U,GACdvc,EAAI,IAAIwH,MAAM+U,GACdha,EAAI,IAAIiF,MAAM+U,GACdpc,EAAI,IAAIqH,MAAM+U,GACdrc,EAAI,IAAIsH,MAAM+U,GAElB,IAAIjf,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAMrB,IALAuK,EAA+B,IAAN,GAApBkT,GAAe,IACpB3H,GAAMjT,EAAGkT,EAAIjB,GAAW2I,GAAe,IAAK,GAAI,GAAIsB,IACpDjJ,GAAMlT,EAAGC,GACTmc,EAAM,GAAMhf,EAAI,GAEX+I,EAAI,EAAGA,EAAIiW,IAAOjW,EAAG,CAMxB,MALEmW,EACFpJ,GAAM7T,EAAGY,GACTiT,GAAMvT,EAAGM,GACTuT,GAAS/V,EAAGkK,IAELgO,GAAOhW,IACF,EAAPA,EAAE,KACHqU,GAAKvW,EAAG4B,GACL+U,GAAQ3W,EAAG0e,IACZrI,GAAKrW,EAAG0e,IAGZnI,GAAK3U,EAAGA,GACL+U,GAAQ/U,EAAG8c,IACZrI,GAAKzU,EAAG8c,GAEVlH,GAAYtV,EAAG,GAYjB,GATAuT,GAAMjT,EAAGxC,GACN2W,GAAQnU,EAAGD,IACZkT,GAAM7Q,EAAGpC,GACT6T,GAAKzR,EAAGrC,KAERkT,GAAM7Q,EAAGrC,GACT8T,GAAKzR,EAAGpC,IAEVgU,GAAM5R,EAAG8Z,EAAMrc,EAAGT,EAAGM,IACjB0U,GAAUvU,EAAG,GACf,MAEmB,IAAjBqG,EAAKA,EAAI,IACX+M,GAAMlT,EAAGC,GAGb,GAAGmU,GAAQtU,EAAGmS,GACZ,MAIJ2C,GAAQuH,EAAMrc,EAAGG,EAAGD,GAEjBoU,GAAQtU,EAAGG,IACZoG,EAAIpG,EACJ4H,EAAI/H,IAEJuG,EAAIvG,EACJ+H,EAAI5H,GAKN,MAAO,CAAC,IAAIyB,WAAWoU,GAAazP,IAAK,IAAI3E,WAAWoU,GAAajO,IAAKyU,GAtF/DC,CAAclH,GAAW9K,EAAW2R,GAAU,GAAIrR,KAAKC,KAAK,GAAKgH,GAAO,IAEjF,MAAM1S,GACNod,QAAQC,MAAM,sBAAuBrd,GAKvC,OAAOmK,EAiFF,SAASmT,GAAYzc,EAA0BD,EAA0BxC,GAC9E,IACE,MAAMmf,EAAUtH,GAAW9K,EAAWtK,GAAI,IACpC2c,EAAUvH,GAAW9K,EAAWvK,GAAI,IACpC6c,EAAUxH,GAAW9K,EAAW/M,GAAI,IAG1C,OAAOkN,EAAakL,GAFFjC,EAAOgJ,EAASC,EAASC,GAED,KAC1C,MAAMzd,GACNod,QAAQC,MAAM,gBAAiBrd,IAQ5B,SAAS0d,GAAetS,EAAoB9C,GAIjD,OAFe,KAAKwC,QAAQM,EAAO9C,EAAW,CAACiB,GAAI,eAAYuE,GCpQjE,MAAM6P,IAAa,GAAOC,IAAIC,aAAaC,KAAKzf,GAAqB,cAAhBA,EAAE0f,WAA2B3L,GAC5E4L,IAAY,GAAOJ,IAAIC,aAAaC,KAAKzf,GAAqB,aAAhBA,EAAE0f,WAA0B3L,GAC1E6L,IAAU,GAAOL,IAAIC,aAAaC,KAAKzf,GAAqB,WAAhBA,EAAE0f,WAAwB3L,GACtE8L,IAAc,GAAOC,QAAQN,aAAaC,KAAKzf,GAAqB,gBAAhBA,EAAE0f,WAA6B3L,GAIzF,MAAM,GAUJ,YAAYpJ,EAA4D,IAThE,KAAAoV,UAAY,KACZ,KAAA3Y,OAAS,EACT,KAAA4Y,SAAU,EACV,KAAAlP,OAAQ,EAOdpK,KAAKqZ,UAAYpV,EAAQsV,gBAAkB,KAC3CvZ,KAAKsZ,QAAUrV,EAAQqV,UAAW,EAClCtZ,KAAKwZ,eAGA,eACLxZ,KAAKyT,OAAS,IAAI1L,YAAY/H,KAAKqZ,WACnCrZ,KAAKyZ,QAAU,IAAI/X,WAAW1B,KAAKyT,QACnCzT,KAAK0Z,SAAW,IAAInc,WAAWyC,KAAKyT,QAG/B,WACL,MAAMkG,EAAe,IAAI5R,YAAY/H,KAAKU,QAQpCkZ,EAAc,IAAIlY,WAAWiY,GAQnC,OAPAC,EAAYjY,IAAI3B,KAAKyZ,QAAQ7X,SAAS,EAAG5B,KAAKU,OAAS,IAOhDkZ,EAGF,YACL,OAAO5Z,KAAK6Z,WAAWpG,OAKlB,SAASqG,GAAiB,GAC/B,GAAGA,EAAO,CACR,MAAMH,EAAe,IAAI5R,YAAY/H,KAAKU,QACpCqZ,EAAc,IAAIxc,WAAWoc,GAInC,OAFAI,EAAYpY,IAAI3B,KAAK0Z,SAAS9X,SAAS,EAAG5B,KAAKU,SAExCqZ,EAGT,MAAM1T,EAAkB,IAAIlD,MAAMnD,KAAKU,QACvC,IAAI,IAAIzH,EAAI,EAAGA,EAAI+G,KAAKU,OAAQzH,IAC9BoN,EAAMpN,GAAK+G,KAAK0Z,SAASzgB,GAE3B,OAAOoN,EAGF,YACL,OAAOrG,KAAKU,OAGP,YAAYsZ,GACjB,GAAGha,KAAKU,OAASsZ,EAAYha,KAAKqZ,UAChC,OAIFrZ,KAAKqZ,UAAwF,EAA5E3S,KAAKC,KAAKD,KAAKqJ,IAAqB,EAAjB/P,KAAKqZ,UAAerZ,KAAKU,OAASsZ,EAAY,IAAM,GACxF,MAAMC,EAAiBja,KAAKyT,OAEtByG,EAAgB,IAAIxY,WAAWuY,GAErCja,KAAKwZ,eAEL,IAAI9X,WAAW1B,KAAKyT,QAAQ9R,IAAIuY,GAK3B,SAASjhB,EAAWkhB,GACzBna,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOnhB,EAAEsK,SAAS,IAAKtK,EAAGkhB,GAEpD,MAAMzZ,EAASV,KAAKU,OAAS,EAK7B,OAJAV,KAAKqa,YAAY,GACjBra,KAAKyZ,QAAQ/Y,GAAUzH,EACvB+G,KAAKU,QAAU,EAERA,EAGF,SAASzH,EAAWkhB,GACzB,OAAOna,KAAKsa,SAASrhB,GAAIkhB,GAAS,IAAM,QAGnC,UAAUlhB,EAAYkhB,GACxBlhB,EACD+G,KAAKsa,SAASrB,IAAWkB,GAAS,IAAM,SAExCna,KAAKsa,SAAS1B,IAAYuB,GAAS,IAAM,SAItC,WAAWI,EAAeC,EAAcL,GAC7Cna,KAAKsa,SAASE,GAAOL,GAAS,IAAM,cACpCna,KAAKsa,SAASC,GAAQJ,GAAS,IAAM,eAGhC,UAAUM,EAAwCN,GACvD,GAAGhX,MAAMuX,QAAQD,GACf,OAAoB,IAAjBA,EAAMha,OACAT,KAAK2a,WAAWF,EAAM,GAAIA,EAAM,GAAIN,GAEpCna,KAAK4a,cAAcH,EAAO,GAAIN,GAIrB,iBAAVM,IACRA,EAAQA,EAAQA,EAAMlX,WAAa,KAGrC,MAAMvH,EAAI,WAGJd,EAAIgW,GAAWuJ,EAAO,GAAI,IAC1BjX,EAAIyL,GAAI/T,GACRnB,EAAIkV,GAAI/T,GACduV,GAAQvV,EAAGgW,GAAW,EAAI3N,SAAS,IAAK,GAAI,IAAKC,EAAGzJ,GAGpD,MAAMgZ,GAAQtB,GAAWjO,EAAG,IAC5B,IAAIwP,GAAOvB,GAAW1X,EAAG,IAEtBgZ,EAAOC,IACRA,GAAOhX,GAOTgE,KAAKsa,SAAStH,GAAMmH,GAAS,IAAM,cACnCna,KAAKsa,SAASvH,GAAOoH,GAAS,IAAM,eAG/B,YAAY/e,EAAQ+e,GACzB,MAAM1G,EAAS,IAAI1L,YAAY,GACzB0R,EAAU,IAAI/X,WAAW+R,GACZ,IAAIoH,aAAapH,GAEzB,GAAKrY,EAEhB4E,KAAKsa,SAASb,EAAQ,IAAKU,GAAS,IAAM,gBAC1Cna,KAAKsa,SAASb,EAAQ,IAAKU,GAAS,IAAM,iBAGrC,YAAYnf,EAAWmf,GAC5Bna,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOpf,GAAImf,GAAS,IAAM,gBAE3CpR,IAAN/N,IACDA,EAAI,IAEN,MAAM8f,EAAQC,SAASC,mBAAmBhgB,IAE1CgF,KAAKqa,YAAYS,EAAMra,OAAS,GAEhC,MAAMgG,EAAMqU,EAAMra,OACfgG,GAAO,IACRzG,KAAK0Z,SAAS1Z,KAAKU,UAAY+F,GAE/BzG,KAAK0Z,SAAS1Z,KAAKU,UAAY,IAC/BV,KAAK0Z,SAAS1Z,KAAKU,UAAkB,IAAN+F,EAC/BzG,KAAK0Z,SAAS1Z,KAAKU,WAAmB,MAAN+F,IAAiB,EACjDzG,KAAK0Z,SAAS1Z,KAAKU,WAAmB,SAAN+F,IAAmB,IAErD,IAAI,IAAIxN,EAAI,EAAGA,EAAIwN,EAAKxN,IACtB+G,KAAK0Z,SAAS1Z,KAAKU,UAAYoa,EAAM7V,WAAWhM,GAIlD,KAAM+G,KAAKU,OAAS,GAClBV,KAAK0Z,SAAS1Z,KAAKU,UAAY,EAI5B,WAAW2F,EAA4C8T,GACzD9T,aAAiB0B,YAClB1B,EAAQ,IAAI9I,WAAW8I,QACL0C,IAAV1C,IACRA,EAAQ,IAGVrG,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,IAAqB8T,GAAS,IAAM,UAGhF,MAAM1T,EAAOJ,EAAqB5F,OAelC,IAdAT,KAAKqa,YAAY5T,EAAM,GACpBA,GAAO,IACRzG,KAAK0Z,SAAS1Z,KAAKU,UAAY+F,GAE/BzG,KAAK0Z,SAAS1Z,KAAKU,UAAY,IAC/BV,KAAK0Z,SAAS1Z,KAAKU,UAAkB,IAAN+F,EAC/BzG,KAAK0Z,SAAS1Z,KAAKU,WAAmB,MAAN+F,IAAiB,EACjDzG,KAAK0Z,SAAS1Z,KAAKU,WAAmB,SAAN+F,IAAmB,IAGrDzG,KAAK0Z,SAAS/X,IAAI0E,EAAqBrG,KAAKU,QAC5CV,KAAKU,QAAU+F,EAGTzG,KAAKU,OAAS,GAClBV,KAAK0Z,SAAS1Z,KAAKU,UAAY,EAI5B,cAAc2F,EAA4CtJ,EAAcod,GAC1E9T,aAAiB0B,cAClB1B,EAAQ,IAAI9I,WAAW8I,IAGzB,MAAMI,EAAOJ,EAAqB5F,OAClC,GAAI1D,EAAO,IAAc,EAAN0J,IAAa1J,EAAM,CACpC,MAAMub,EAAQ,IAAIxT,MAAM,iBAAmB/H,EAAO,KAAO0J,GAEzD,MADA4R,QAAQC,MAAMA,EAAOjS,EAAO8T,GACtB7B,EAGRtY,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,IAAuB8T,GAAS,IAAM,OAASpd,GAC3FiD,KAAKqa,YAAY5T,GAEjBzG,KAAK0Z,SAAS/X,IAAI0E,EAAqBrG,KAAKU,QAC5CV,KAAKU,QAAU+F,EAGV,cAAcJ,EAA0B8T,GAC1C9T,aAAiB0B,cAClB1B,EAAQ,IAAI9I,WAAW8I,IAGzB,MAAMI,EAAMJ,EAAM5F,OAElBT,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,GAAS8T,GAAS,IAC9Dna,KAAKqa,YAAY5T,GAEjBzG,KAAK0Z,SAAS/X,IAAI0E,EAAOrG,KAAKU,QAC9BV,KAAKU,QAAU+F,EAGV,YAAYwU,EAAoBC,GACrC,MACMC,GADSnb,KAAKsZ,QAAU,GAAOF,QAAU,GAAOP,KAC5BuC,QAAQrC,KAAK1f,GAAKA,EAAEgiB,SAAWJ,GAEzD,IAAIE,EACF,MAAM,IAAIrW,MAAM,aAAemW,EAAa,UAG9Cjb,KAAKsb,SAASH,EAAW9N,GAAI4N,EAAa,QAE1C,MAAMM,EAASL,EAAOK,QAAUL,EAC1BM,EAA8C,GAEpD,IAAI,MAAMC,KAASN,EAAWD,OAAQ,CACpC,IAAI5P,EAAOmQ,EAAMnQ,KAEjB,IAA0B,IAAvBA,EAAKnB,QAAQ,KAAa,CAC3B,MAAMuR,EAAWpQ,EAAKqQ,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAEnC,KAAKT,EAAOU,EAAS,IAAO,IAAMA,EAAS,IAAM,CAC/C,KAAmB,SAAhBF,EAAS,GAAgBH,EAAOE,EAAMjiB,WAA+BuP,IAAvBmS,EAAOO,EAAMjiB,OAI5D,SAFA0hB,EAAOU,EAAS,KAAO,IAAMA,EAAS,GAO1CtQ,EAAOoQ,EAAS,GAIlB,MAAMtW,EAASpF,KAAK6b,YAAYX,EAAOO,EAAMjiB,MAAO8R,EAAM2P,EAAa,IAAMQ,EAAMjiB,KAAO,KAE9E,MAAT8R,IACD4P,EAAOO,EAAMjiB,MAAQ0hB,EAAOO,EAAMjiB,OAAS,EAC3CgiB,EAAaC,EAAMjiB,MAAQ4L,GAI/B,IAAI,IAAI0W,KAAaN,EACnBxb,KAAKyZ,QAAQ+B,EAAaM,IAAcZ,EAAOY,GAGjD,OAAOX,EAAW7P,KAGb,YAAYgB,EAAUhB,EAAc6O,GAEzC,OAAO7O,GACL,IAAK,IACHgB,EAAMA,GAAO,EACf,IAAK,MACH,OAAOtM,KAAKsb,SAAShP,EAAK6N,GAC5B,IAAK,OACH,OAAOna,KAAK+b,UAAUzP,EAAK6N,GAC7B,IAAK,SACH,OAAOna,KAAK4a,cAActO,EAAK,IAAK6N,GACtC,IAAK,SACH,OAAOna,KAAK4a,cAActO,EAAK,IAAK6N,GACtC,IAAK,SACH,OAAOna,KAAK4a,cAActO,EAAK,IAAK6N,GACtC,IAAK,SACH,OAAOna,KAAKgc,YAAY1P,EAAK6N,GAC/B,IAAK,QACH,OAAOna,KAAKic,WAAW3P,EAAK6N,GAC9B,IAAK,SACH,OAAOna,KAAKkc,YAAY5P,EAAK6N,GAC/B,IAAK,OACH,OAAOna,KAAKmc,UAAU7P,EAAK6N,GAC7B,IAAK,OACH,OAGJ,GAAGhX,MAAMuX,QAAQpO,GAAM,CACrB,GAAyB,WAAtBhB,EAAKvE,OAAO,EAAG,GAChB/G,KAAKsa,SAASpB,GAAQiB,EAAQ,aACzB,GAA0B,WAAtB7O,EAAKvE,OAAO,EAAG,GACxB,MAAM,IAAIjC,MAAM,uBAAyBwG,GAG3C,MAAM8Q,EAAW9Q,EAAKvE,OAAO,EAAGuE,EAAK7K,OAAS,GAC9CT,KAAKsa,SAAShO,EAAI7L,OAAQ0Z,EAAQ,WAClC,IAAI,IAAIlhB,EAAI,EAAGA,EAAIqT,EAAI7L,OAAQxH,IAC7B+G,KAAK6b,YAAYvP,EAAIrT,GAAImjB,EAAUjC,EAAQ,IAAMlhB,EAAI,KAGvD,OAAO,EACF,GAAwC,WAApCqS,EAAKvE,OAAO,EAAG,GAAGsV,cAC3B,MAAM,IAAIvX,MAAM,yBAGlB,IAAI6N,GAASrG,GACX,MAAM,IAAIxH,MAAM,2BAA6BwG,GAG/C,MAAMgR,EAAStc,KAAKsZ,QAAU,GAAOF,QAAU,GAAOP,IAChDG,EAAY1M,EAAO,EACzB,IAAIiQ,GAAS,EACb,MAAMC,EAAsCF,EAAOxD,aAAaC,KAAKzf,GAAKA,EAAE0f,YAAcA,GAM1F,IAJGuD,EAA6B,MAAnBjR,EAAKxE,OAAO,MACvBwE,EAAOA,EAAKvE,OAAO,KAGjByV,EACF,MAAM,IAAI1X,MAAM,gBAAkBkU,EAAY,UAG7CA,IAAc1N,IACfiR,GAAS,GAGPA,GACFvc,KAAKsa,SAASkC,EAAgBnP,GAAI8M,EAAQ,IAAMnB,EAAY,SAG9D,MAAMuC,EAASjP,EAAIiP,OACbC,EAA8C,GAEpD,IAAI,MAAMC,KAASe,EAAgBtB,OAAQ,CACzC,IAAI5P,EAAOmQ,EAAMnQ,KAGjB,IAA0B,IAAvBA,EAAKnB,QAAQ,KAAa,CAC3B,MAAMuR,EAAWpQ,EAAKqQ,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAInC,KAAKrP,EAAIsP,EAAS,IAAO,IAAMA,EAAS,IAAM,CAC5C,KAAmB,SAAhBF,EAAS,GAAgBH,GAAUA,EAAOE,EAAMjiB,WAA4BuP,IAApBuD,EAAImP,EAAMjiB,OAInE,SAFA8S,EAAIsP,EAAS,KAAO,IAAMA,EAAS,GAMvCtQ,EAAOoQ,EAAS,GAIlB,MAAMtW,EAASpF,KAAK6b,YAAYvP,EAAImP,EAAMjiB,MAAO8R,EAAM6O,EAAQ,IAAMnB,EAAY,KAAOyC,EAAMjiB,KAAO,KAEzF,MAAT8R,IACDgB,EAAImP,EAAMjiB,MAAQ8S,EAAImP,EAAMjiB,OAAS,EACrCgiB,EAAaC,EAAMjiB,MAAQ4L,GAI/B,IAAI,IAAI0W,KAAaN,EACnBxb,KAAKyZ,QAAQ+B,EAAaM,IAAcxP,EAAIwP,GAG9C,OAAOU,EAAgBlR,MAI3B,MAAM,GAYJ,YAAYmI,EAAkCxP,EAAgE,IAXtG,KAAAvD,OAAS,EAQT,KAAA4Y,SAAmB,EAKtB7F,aAAkB1L,aACnB/H,KAAKyT,OAASA,EACdzT,KAAKyZ,QAAU,IAAI/X,WAAW+R,GAC9BzT,KAAK0Z,SAAW,IAAInc,WAAWyC,KAAKyT,UAEpCzT,KAAKyT,OAASA,EAAOA,OACrBzT,KAAKyZ,QAAU,IAAI/X,WAAW+R,EAAOA,QACrCzT,KAAK0Z,SAAWjG,GAKlBzT,KAAKyc,SAAW,aAAcxY,EAAUA,EAAQwY,SAAW,GAC3Dzc,KAAKsZ,QAAU,YAAarV,GAAUA,EAAQqV,QAC9CtZ,KAAKoK,WAA0BrB,IAAlB9E,EAAQmG,OAAsBnG,EAAQmG,MAG7C,QAAQ+P,GAEd,GAAIna,KAAK0Z,SAASjZ,OAAST,KAAKU,OAAU,EAExC,MADA2X,QAAQC,MAAMtY,KAAK0Z,SAAU1Z,KAAKU,QAC5B,IAAIoE,MAAM,qBAAuBqV,GAGzC,MAAMlhB,EAAI+G,KAAKyZ,QAAQzZ,KAAKU,OAAS,GAUrC,OAPAV,KAAKoK,OACAiO,QAAQ+B,IAAI,MAAOnhB,EAAEsK,SAAS,IAAKtK,EAAGkhB,EACzCna,KAAK0Z,SAASxV,MAAMlE,KAAKU,OAAS,GAAIV,KAAKU,OAAS,IACpDV,KAAK0Z,SAASxV,MAAMlE,KAAKU,OAAS,GAAIV,KAAKU,OAAS,IAAIgc,KAE1D1c,KAAKU,QAAU,EAERzH,EAGF,SAASkhB,GACd,OAAOna,KAAK2c,SAASxC,GAAS,IAAM,QAG/B,YAAYA,GACjB,MAAM1G,EAAS,IAAI1L,YAAY,GACzB0R,EAAU,IAAI/X,WAAW+R,GACzBmJ,EAAa,IAAI/B,aAAapH,GAKpC,OAHAgG,EAAQ,GAAKzZ,KAAK2c,SAASxC,GAAS,IAAM,gBAC1CV,EAAQ,GAAKzZ,KAAK2c,SAASxC,GAAS,IAAM,iBAEnCyC,EAAW,GAGb,UAAUzC,GACf,MAAMK,EAAOxa,KAAK2c,SAASxC,GAAS,IAAM,cAM1C,OAFgBrH,GAHF9S,KAAK2c,SAASxC,GAAS,IAAM,eAGPK,GAK/B,UAAUL,GACf,MAAMlhB,EAAI+G,KAAK2c,SAASxC,GAAS,IAAM,SACvC,OAAGlhB,IAAMggB,IAEChgB,IAAM2f,KAIhB5Y,KAAKU,QAAU,EACRV,KAAK6c,YAAY,SAAU1C,IAG7B,YAAYA,GACjB,IAAI1T,EAAMzG,KAAK0Z,SAAS1Z,KAAKU,UAElB,MAAR+F,IACDA,EAAMzG,KAAK0Z,SAAS1Z,KAAKU,UACtBV,KAAK0Z,SAAS1Z,KAAKU,WAAa,EAChCV,KAAK0Z,SAAS1Z,KAAKU,WAAa,IAGrC,IAUI1F,EAVA8f,EAAQ,GACZ,IAAI,IAAI7hB,EAAI,EAAGA,EAAIwN,EAAKxN,IACtB6hB,GAASjY,OAAOC,aAAa9C,KAAK0Z,SAAS1Z,KAAKU,WAIlD,KAAMV,KAAKU,OAAS,GAClBV,KAAKU,SAIP,IACE1F,EAAI8hB,mBAAmBC,OAAOjC,IAC9B,MAAO7f,GACPD,EAAI8f,EAKN,OAFA9a,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOpf,GAAImf,GAAS,IAAM,WAE7Cnf,EAGF,WAAWmf,GAChB,IAAI1T,EAAMzG,KAAK0Z,SAAS1Z,KAAKU,UAElB,MAAR+F,IACDA,EAAMzG,KAAK0Z,SAAS1Z,KAAKU,UACtBV,KAAK0Z,SAAS1Z,KAAKU,WAAa,EAChCV,KAAK0Z,SAAS1Z,KAAKU,WAAa,IAGrC,MAAM2F,EAAQrG,KAAK0Z,SAAS9X,SAAS5B,KAAKU,OAAQV,KAAKU,OAAS+F,GAIhE,IAHAzG,KAAKU,QAAU+F,EAGTzG,KAAKU,OAAS,GAClBV,KAAKU,SAKP,OAFAV,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,IAAS8T,GAAS,IAAM,UAE7D9T,EAKF,cAActJ,EAAc+c,GAAiB,EAAMK,GACxD,GAAGpd,EAAO,GACR,MAAM,IAAI+H,MAAM,iBAAmB/H,GAGrC,MAAM0J,EAAM1J,EAAO,EACnB,GAAG+c,EAAO,CACR,MAAM1U,EAASpF,KAAK0Z,SAAS9X,SAAS5B,KAAKU,OAAQV,KAAKU,OAAS+F,GAEjE,OADAzG,KAAKU,QAAU+F,EACRrB,EAGT,MAAMiB,EAAkB,IAAIlD,MAAMsD,GAClC,IAAI,IAAIxN,EAAI,EAAGA,EAAIwN,EAAKxN,IACtBoN,EAAMpN,GAAK+G,KAAK0Z,SAAS1Z,KAAKU,UAKhC,OAFAV,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,IAAS8T,GAAS,IAAM,OAASpd,GAEtEsJ,EAKF,cAAcI,EAAqBqT,GAAiB,EAAMK,GAC/D,IAAW,IAAR1T,IACDA,EAAMzG,KAAK2c,SAASxC,GAAS,IAAM,YAC1Bna,KAAK0Z,SAAS/R,WACrB,MAAM,IAAI7C,MAAM,6BAA+B2B,EAAM,iBAAmBzG,KAAK0Z,SAAS/R,YAI1F,GAAGmS,EAAO,CACR,MAAMzT,EAAQ,IAAI9I,WAAWkJ,GAG7B,OAFAJ,EAAM1E,IAAI3B,KAAK0Z,SAAS9X,SAAS5B,KAAKU,OAAQV,KAAKU,OAAS+F,IAC5DzG,KAAKU,QAAU+F,EACRJ,EAGT,MAAMA,EAAkB,IAAIlD,MAAMsD,GAClC,IAAI,IAAIxN,EAAI,EAAGA,EAAIwN,EAAKxN,IACtBoN,EAAMpN,GAAK+G,KAAK0Z,SAAS1Z,KAAKU,UAKhC,OAFAV,KAAKoK,OAASiO,QAAQ+B,IAAI,MAAOhU,EAAWC,GAAS8T,GAAS,IAEvD9T,EAGD,YAAYiF,EAAc6O,GAChC,MAAM1T,EAAMzG,KAAK2c,QAAQxC,EAAQ,WAC3B/U,EAAgB,IAAIjC,MAAMsD,GAChC,GAAGA,EAAM,EAAG,CACV,MAAM2V,EAAW9Q,EAAKvE,OAAO,EAAGuE,EAAK7K,OAAS,GAC9C,IAAI,IAAIxH,EAAI,EAAGA,EAAIwN,IAAOxN,EACxBmM,EAAOnM,GAAK+G,KAAK6c,YAAYT,EAAUjC,EAAQ,IAAMlhB,EAAI,KAI7D,OAAOmM,EAGF,YAAYkG,EAAc6O,GAC/B,OAAO7O,GACL,IAAK,IACL,IAAK,MACH,OAAOtL,KAAKgd,SAAS7C,GACvB,IAAK,OACH,OAAOna,KAAKid,UAAU9C,GACxB,IAAK,SACH,OAAOna,KAAKkd,cAAc,KAAK,EAAM/C,GACvC,IAAK,SACH,OAAOna,KAAKkd,cAAc,KAAK,EAAM/C,GACvC,IAAK,SACH,OAAOna,KAAKkd,cAAc,KAAK,EAAM/C,GACvC,IAAK,SACH,OAAOna,KAAKmd,YAAYhD,GAC1B,IAAK,QACH,OAAOna,KAAKod,WAAWjD,GACzB,IAAK,SACH,OAAOna,KAAKqd,YAAYlD,GAC1B,IAAK,OACH,OAAOna,KAAKsd,UAAUnD,GACxB,IAAK,OACH,OAAO,EAKX,GAFAA,EAAQA,GAAS7O,GAAQ,SAEH,MAAnBA,EAAKxE,OAAO,IAAoC,UAAtBwE,EAAKvE,OAAO,EAAG,GAC1C,OAAO/G,KAAKud,YAAYjS,EAAM6O,GAGhC,MAAMmC,EAAStc,KAAKsZ,QAAU,GAAOF,QAAU,GAAOP,IACtD,IAAI2D,EAAsC,KACtCgB,GAAW,EAEf,GAAsB,MAAnBlS,EAAKxE,OAAO,GAAY,CACzB,MAAM2W,EAAYnS,EAAKvE,OAAO,GAE9B,GADAyV,EAAkBF,EAAOxD,aAAaC,KAAKzf,GAAKA,EAAEgS,OAASmS,IACvDjB,EACF,MAAM,IAAI1X,MAAM,mCAAqCwG,OAO/C,CACR,MAAMoS,EAAiB1d,KAAK2c,QAAQxC,EAAQ,QAE5C,GAAGuD,IAAmBvE,GAAY,CAChC,MACMwE,EAAehF,GADF3Y,KAAKod,WAAWjD,EAAQ,oBAI3C,OAFwB,IAAI,GAAkBwD,GAEvBd,YAAYvR,EAAM6O,GAG3C,GAAGuD,IAAmBxE,GACpB,OAAOlZ,KAAKud,YAAYjS,EAAM6O,GAGhC,IAAIvR,EAAQ0T,EAAOsB,kBACnB,IAAIhV,EAAO,CACT0T,EAAOsB,kBAAoBhV,EAAQ,GACnC,IAAI,IAAI3P,EAAI,EAAGwN,EAAM6V,EAAOxD,aAAarY,OAAQxH,EAAIwN,EAAKxN,IACxD2P,EAAM0T,EAAOxD,aAAa7f,GAAGoU,IAAMpU,EAIvC,MAAMA,EAAI2P,EAAM8U,GAKhB,QAJS3U,IAAN9P,IACDujB,EAAkBF,EAAOxD,aAAa7f,KAGpCujB,GAAmBxc,KAAKsZ,QAAS,CACnC,MAAMuE,EAAiB,GAAOhF,IAC9B,IAAI,IAAI5f,EAAI,EAAGwN,EAAMoX,EAAe/E,aAAarY,OAAQxH,EAAIwN,EAAKxN,IAChE,IAAI4kB,EAAe/E,aAAa7f,GAAGoU,KAAOqQ,EAAgB,CACxDlB,EAAkBqB,EAAe/E,aAAa7f,UAEvC+G,KAAKsZ,QACZkE,GAAW,EACX,OAKN,IAAIhB,EAAiB,CAGnB,IAAIsB,EAAcC,EAFlB1F,QAAQC,MAAM,yBAA0BoF,GAGxC,IACEI,EAAO9d,KAAKgd,SAAS7C,GACrB4D,EAAO/d,KAAKgd,SAAS7C,GACrB,MAAMzV,IAIR,MAAM,IAAII,MAAM,0BAA4B4Y,EAAiB,IAAMI,EAAO,IAAMC,EAAO,IAAM5D,IAIjG,MAAMnB,EAAYwD,EAAgBxD,UAE5B5T,EAAc,CAAC,EAAK4T,GACpBgF,GAAehe,KAAKsZ,QAAU,MAAQ,IAAMN,EAClD,GAAGhZ,KAAKyc,SAASuB,GACfhe,KAAKyc,SAASuB,GAAa5Y,EAAQ+U,EAAQ,IAAMnB,EAAY,UAE7D,IAAI,IAAI/f,EAAI,EAAGwN,EAAM+V,EAAgBtB,OAAOza,OAAQxH,EAAIwN,EAAKxN,IAAK,CAChE,MAAMwiB,EAAQe,EAAgBtB,OAAOjiB,GACrC,IAAIqS,EAAOmQ,EAAMnQ,KAEL,MAATA,QAAkCvC,IAAlB3D,EAAOmW,SACxBnW,EAAOmW,OAAS,IAGlB,MAAM0C,GAAiC,IAAvB3S,EAAKnB,QAAQ,KAC7B,GAAG8T,EAAQ,CACT,MAAMvC,EAAWpQ,EAAKqQ,MAAM,KACtBC,EAAWF,EAAS,GAAGC,MAAM,KAEnC,KAAKvW,EAAOwW,EAAS,IAAO,IAAMA,EAAS,IAEzC,SAKFtQ,EAAOoQ,EAAS,GAGlB,MAAMxhB,EAAQ8F,KAAK6c,YAAYvR,EAAM6O,EAAQ,IAAMnB,EAAY,KAAOyC,EAAMjiB,KAAO,KAEhFykB,GAAmB,SAAT3S,EACXlG,EAAOmW,OAAOE,EAAMjiB,MAAQU,EAM5BkL,EAAOqW,EAAMjiB,MAAQU,EAS3B,OAJGsjB,IACDxd,KAAKsZ,SAAU,GAGVlU,EAGF,YACL,OAAOpF,KAAKU,OAGP,UAAUA,GACfV,KAAKU,OAASA,GAYlBgK,EAAewT,kBAAoB,GACnCxT,EAAeyT,gBAAkB,GC7yBjC,IAAYC,IAAZ,SAAYA,GACV,mBACA,qBACA,mBACA,iBACA,qBALF,CAAYA,QAAQ,KAQb,MAAMC,GAAa,CAACD,GAASE,KAAMF,GAAStZ,MAAOsZ,GAASG,KAAMH,GAASI,IAAKJ,GAASK,OAE1FC,GAAYC,KAAKC,MACvB,SAASC,KACP,MAAO,MAAQF,KAAKC,MAAQF,IAAa,KAAMI,QAAQ,GAAK,IAGvD,SAASC,GAAOjT,EAAgBR,EAAiB8S,GAASI,IAAMJ,GAASG,KAAOH,GAAStZ,MAAOka,GAAmB,GAOxH,SAASR,KAAOhX,GACd,OAAO8D,EAAO8S,GAASI,KAAOnG,QAAQ+B,IAAIyE,KAAM/S,KAAWtE,GAqC7D,OA5CI,GAAUwX,IACZ1T,EAAO8S,GAAStZ,OASlB0Z,EAAIS,KAAO,YAAYzX,GACrB,OAAO8D,EAAO8S,GAASG,MAAQlG,QAAQ4G,KAAKJ,KAAM/S,KAAWtE,IAG/DgX,EAAIU,KAAO,YAAY1X,GACrB,OAAO8D,EAAO8S,GAASI,KAAOnG,QAAQ6G,KAAKL,KAAM/S,KAAWtE,IAG9DgX,EAAIlG,MAAQ,YAAY9Q,GACtB,OAAO8D,EAAO8S,GAAStZ,OAASuT,QAAQC,MAAMuG,KAAM/S,KAAWtE,IAGjEgX,EAAIW,MAAQ,YAAY3X,GACtB,OAAO8D,EAAO8S,GAASI,KAAOnG,QAAQ8G,MAAMN,KAAM/S,KAAWtE,IAO/DgX,EAAIpU,MAAQ,YAAY5C,GACtB,OAAO8D,EAAO8S,GAASK,OAASpG,QAAQjO,MAAMyU,KAAM/S,KAAWtE,IAGjEgX,EAAIY,UAAY,SAASC,GACvBvT,EAAS,IAAMuT,EAAU,MAG3Bb,EAAIY,UAAUtT,GAEd0S,EAAIc,SAAW,SAASC,GACtBjU,EAAO+S,GAAWna,MAAM,EAAGqb,EAAQ,GAAG9X,OAAO,CAACC,EAAK9L,IAAM8L,EAAM9L,EAAG,IAG7D4iB,E,2SCpDGO,GAAO,MAAOX,GAAStZ,OAyB5B,SAAe0a,GAAWC,EAAkBvjB,EAAwBwjB,G,0CACzE,MAAMC,EAAQD,EAAQxjB,EAAM0jB,SAAW1jB,EAAM2jB,aAGvC9kB,EAAImW,GAAW9K,EAAWuZ,EAAK5kB,GAAI,IACnCgD,EAAImT,GAAW9K,EAAWlK,EAAM4jB,OAAQ,IACxCnkB,EAAIoS,GAAW4R,EAAKhkB,EAAG,GAAI,KA0B3BG,EAAIoV,GAAW9K,QArDhB,SAAgCqZ,EAAkBM,EAAyBC,G,0CAEhF,IAAIvM,QAAe,GAAawM,aAAa,cAAe1Y,EAAcwY,GAAa,IAAI1Y,aAAcC,OAAOmY,GAAWM,IAG3HtM,EAASlM,EAAcyY,EAAavM,EAAQuM,GAE5CvM,QAAe,GAAawM,aAAa,cAAexM,GAGxD,IAAIoE,QAAa,GAAaoI,aAAa,SAAU,IAAI1iB,WAAWkW,GAASsM,EAAa,KAQ1F,OALAlI,EAAOtQ,EAAcyY,EAAanI,EAAMmI,GAExCvM,QAAe,GAAawM,aAAa,cAAepI,GAGjDpE,KAkCeyM,CAAiBT,EAAUE,EAAKQ,MAAOR,EAAKS,QACxB,IAIpCC,EAAW,SAAS/Z,EAA4BG,GAKpD,OAJKH,aAAe/I,aAClB+I,EAAMc,EAAoBd,IAGrB4M,GAAW5M,EAAKG,GAAK,GAAM,GAAM,IAGpC6Z,EAAWD,EAAS9Z,EAAakL,GAAW1W,EAAG,KAAM,KACrDwlB,EAAWF,EAAS9Z,EAAakL,GAAW9V,EAAG,KAAM,KACrD6kB,EAAaH,EAAS9Z,EAAakL,GAAW1T,EAAG,KAAM,KAMvDnC,EAAI4T,EAAO7T,EAAGG,EAAGf,GAEjB0lB,EAAWna,IACf,MAAMuL,EAAM,IAAItU,WAAW+I,EAAI7F,QAC/B,IAAI,IAAIxH,EAAI,EAAGA,EAAIqN,EAAI7F,OAAQxH,GAAK,EAClC4Y,EAAI5Y,GAAKqN,EAAIrN,EAAI,GACjB4Y,EAAI5Y,EAAI,GAAKqN,EAAIrN,EAAI,GACrB4Y,EAAI5Y,EAAI,GAAKqN,EAAIrN,EAAI,GACrB4Y,EAAI5Y,EAAI,GAAKqN,EAAIrN,GAGnB,OAAO4Y,GAIT,GAAG6N,EAAO,CAER,OAAOW,EADO9Z,EAAakL,GAAW7V,EAAG,KAC2B,KAKtE,MAMM8kB,EAAM1R,EAAII,EALN8B,GAAW9K,QADD,GAAa6Z,aAAa,cAAe1Y,EAAc+Y,EAAUC,KAC7C,IAKhB3kB,GAAIb,GAMtB4lB,EAAwB,CAACC,EAAaC,KAC1C,MAAMC,EAAOpR,EAAImR,EAAOD,GAGxB,QAAGzQ,GAAS2Q,IACVlS,EAAQkS,GAHkB,MAI1BlS,EAAQgS,GAJkB,MAK1Bla,KAAK0C,OAAOwF,EAAQgS,GAAU,GAAK,GAJZ,OAgCrB,EAAC1lB,EAAC,WAAE6lB,EAAU,EAAEzlB,QAvBY,KAAW,mCAC3C,OAAY,CACV,MAAMJ,EAAIgW,GAAW9K,EAAWqa,EAAQvkB,EAAM8kB,gBAAiB,IAOzD/kB,EAAIuT,EAAO7T,EAAGT,EAAGH,GAEvB,GAAG4lB,EAAsB1kB,EAAGlB,GAAI,CAC9B,MAAMgmB,EAAaxa,EAAakL,GAAWxV,EAAG,KAGxCX,EAAI4V,UADM,GAAa+O,aAAa,cAAe1Y,EAAcwZ,EAAYP,KAC5D9D,IAAK,IAC5B,IAAIlL,GAAOlW,KAAO6U,GAAS7U,GACzB,MAAO,CAACJ,IAAG6lB,aAAYzlB,UAME2lB,GAWjC,IAAIC,EAIGA,EAHHjR,GAAQlS,EAAG2iB,GAGF3iB,EADL6R,GAAI7R,EAAGhD,GAEfmmB,EAAMlS,EAAIU,EAAIwR,EAAKR,GAAM3lB,GASzB,MAGM0C,EAAI+R,EAAO0R,EADJtR,GAAI1U,EAFNkU,EAAK9T,EAAGQ,IAGSf,GAEtBkH,QAAU,GAAage,aAAa,cAAeI,EAAS9Z,EAAakL,GAAWhU,EAAG,KAAM,MAInG,IAAI0jB,QAAW,GAAalB,aAAa,cAAeK,GAExDa,EAAKha,EAASga,QADG,GAAalB,aAAa,cAAeM,IAG1D,MAAMtP,EAAO1J,EAAc4Z,QACnB,GAAalB,aAAa,cAAeN,EAAKQ,aAC9C,GAAaF,aAAa,cAAeN,EAAKS,OACpDW,EACAP,EACAve,GAGImf,QAAW,GAAanB,aAAa,cAAehP,GAW1D,MATY,CACVvV,EAAG,wBACH2lB,OAAQnlB,EAAMmlB,OACdplB,EAAG,IAAIsB,WAAWwjB,GAClBK,SCxDW,OAFM,IAnIrB,cCFe,MAGN,aAAiD/F,KAAmB7T,GACzE,OAAOxH,KAAKshB,kBAAqEjG,KAAW7T,KDa9F,cACE+Z,QAfM,KAAAC,WAA8B,EAC9B,KAAAvU,OAAS,EACT,KAAAwU,SAMJ,GACI,KAAAC,QAAuB,GACvB,KAAAtX,OAAQ,EAMdiO,QAAQ+B,IAAI,kBAGZpa,KAAK2hB,MAAQ,CACX,YAAa9K,GACb,cAAeE,GACf,OAAUS,GACV,cAAeR,GACf,cAAeG,GACf,cAAeC,GACf,UAAaU,GACb,UAAWS,GACX,eAAkBI,GAClB,WAAc6G,IA+DX,kBAAqBoC,KAAiBpa,GAK3C,OAJAxH,KAAKoK,OAASiO,QAAQ+B,IAAI,WAAYwH,EAAMpa,GAIrC+B,QAAQK,QAAW5J,KAAK2hB,MAAMC,MAASpa,ME9BlD,MAAMqa,GAAc,IA/Db,MAIL,cAHQ,KAAAC,cAAkC,CAAC,EAAG,GACtC,KAAAC,WAAqB,EAG3B,EAAejoB,IAAI,sBAAsB+P,KAAMrF,IAC1CA,IACDxE,KAAK+hB,WAAavd,KAKjB,aACL,MAAMwd,EAAYrD,KAAKC,MAKvB,IAAIqD,EAA0C,CAJlCvb,KAAK0C,MAAM4Y,EAAY,KAAQhiB,KAAK+hB,WACnCC,EAAY,KAG4C,GAF1DtL,GAAe,KAE4D,EAAK,IACxF1W,KAAK8hB,cAAc,GAAKG,EAAU,IACnCjiB,KAAK8hB,cAAc,KAAOG,EAAU,IAAMjiB,KAAK8hB,cAAc,IAAMG,EAAU,MAC7EA,EAAY,CAACjiB,KAAK8hB,cAAc,GAAI9hB,KAAK8hB,cAAc,GAAK,IAG9D9hB,KAAK8hB,cAAgBG,EAWrB,OATYnP,GAAamP,EAAU,GAAIA,EAAU,IAY5C,gBAAgBC,EAAoBC,GAEzC,MAAMC,EAAgBF,GADtBC,GAAaA,GAAaxD,KAAKC,OAAS,IAAO,GAEzCyD,EAAU3b,KAAK4b,IAAItiB,KAAK+hB,WAAaK,GAAiB,GAC5D,EAAezgB,IAAI,CACjB4gB,mBAAoBH,IAGtBpiB,KAAK8hB,cAAgB,CAAC,EAAG,GACzB9hB,KAAK+hB,WAAaK,EAYlB,OAHAxW,EAJwC,CACtCN,KAAM,wBACNgC,QAAS8U,IAKJC,IAKX3X,EAAemX,YAAcA,GACd,UClFR,MAEDW,GAAM,CACVnV,GAAI,QACJwK,KAAM,mCACN4K,QAAS,QACTC,YAAa,YACbC,gBAAiB,QACjBC,SAAU,QACVC,aAAc,KACdC,QAAS,CAVgB,oBAWzBC,SAAU,EACVC,aAZyB,qBAYX/Y,SAASgZ,SACvBC,OAAQ,KAGPV,GAAIQ,eACLR,GAAInV,GAAK,KACTmV,GAAI3K,KAAO,oCAGE,UC5Bf,IAAYsL,IAAZ,SAAYA,GACV,6BACA,+BACA,uBACA,2BAJF,CAAYA,QAAgB,K,2SCwE5B,IAAIC,GAEW,MAAM,GA4DnB,YAAmBC,EAAsBC,EAA6BC,EACpEC,EAA+BC,EAAwBxf,EAA4B,IADlE,KAAAof,OAAsB,KAAAC,UAA6B,KAAAC,YACrC,KAAAE,YAtDzB,KAAAC,mBAAoC,GAEpC,KAAAC,aAEJ,GAEI,KAAAC,gBAA6C,GAC7C,KAAAC,YAA6B,GAC7B,KAAAC,eAAgC,GACjC,KAAAC,kBAAmB,EAGlB,KAAAC,QAAkB,EAWlB,KAAAC,MAAgB,EAKhB,KAAAC,cAGG,KAKJ,KAAAC,UAAW,EACX,KAAAC,OAA2BjB,GAAiBkB,OAC3C,KAAAC,iBAAmB,EAEnB,KAAAla,MAAQ,GAAwB,EAAMA,MAEvC,KAAAma,eAAiB,EAatBvkB,KAAKwkB,aAAepd,EAAoBpH,KAAKsjB,SAC7CtjB,KAAKwjB,WAAapc,EAAoBoc,GAEtCxjB,KAAKykB,eAAiBxgB,EAAQygB,WAC9B1kB,KAAK2kB,iBAAmB1gB,EAAQ2gB,aAChC5kB,KAAK6kB,gBAAkB7kB,KAAKykB,cAAgBzkB,KAAK2kB,eAEjD,MAAMzB,EAASljB,KAAKykB,aAAe,KAAOzkB,KAAK2kB,eAAiB,KAAO,GACvE3kB,KAAKxG,KAAO,OAAS6pB,EAAOH,EAE5BljB,KAAKoa,IAAM2E,GAAO/e,KAAKxG,KAAM4kB,GAASI,IAA6BJ,GAAStZ,MAAQsZ,GAASG,MAC7Fve,KAAKoa,IAAI,eAQTpa,KAAK8kB,gBAqBF9kB,KAAKyjB,UAA4BsB,UAAY/kB,KAW5CA,KAAKyjB,UAA4BuB,WACnChlB,KAAKilB,oBAAoB9B,GAAiB+B,WAItC,gBACNllB,KAAKikB,MAAQ,EACbjkB,KAAKmlB,cAAgBnlB,KAAKolB,UAC1BplB,KAAKolB,UAAY,IAAI7nB,WAAW,GAAG8K,YAY7B,kBAAkBgd,GACxB,MAAMC,EAActlB,KAAK2jB,aAAa0B,GACtC,QAAIC,IAIDA,EAAYC,WC1LZ,SAA2B5O,EAAiBhN,GACjD,IAAI,IAA2B1Q,EAAd0d,EAAMlW,OAAqB,EAAGxH,GAAK,IAAKA,EACvD0Q,EAASgN,EAAM1d,GAAIA,EAAG0d,GDyLpB6O,CAAeF,EAAYG,MAAO,CAACC,EAAoBC,KACrD,MAAMC,EAAmB5lB,KAAK6lB,kBAAkBH,GAC5CE,EAGFN,EAAYG,MAAME,GAAOC,EAAiBE,OAF1CR,EAAYG,MAAM3c,OAAO6c,EAAK,KAOpCL,EAAYQ,OAAS,GAAYC,aACjCT,EAAYU,OAAShmB,KAAKimB,cAAcX,EAAYY,mBAAqBZ,EAAYC,WAMrFvlB,KAAK2jB,aAAa2B,EAAYQ,QAAUR,SACjCtlB,KAAK2jB,aAAa0B,GAElBC,GAGD,cAAcY,GACpB,IAAIjC,EAAqB,EAAbjkB,KAAKikB,MAOjB,OALIiC,IACFjC,IACAjkB,KAAKikB,SAGAA,EAGF,YAAY5I,EAAgBH,EAAajX,GAC9C,MAAMkiB,EAAa,IAAI,GAAgB,CAAC7M,SAAS,IAEjD6M,EAAWC,YAAY/K,EAAQH,GAE/B,MAAM+G,EAAY,GAAY8D,aACxB9B,EAAQjkB,KAAKimB,gBACbxQ,EAAU,CACdqQ,OAAQ7D,EACR+D,OAAQ/B,EACRoC,KAAMF,EAAWG,UAAS,IAO5B,OAJG,EAAMlc,OACPpK,KAAKoa,IAAI,UAAWiB,EAAQH,EAAQ+G,EAAWgC,GAG1CjkB,KAAKumB,YAAY9Q,EAASxR,GAG5B,eAAetJ,EAAasJ,GACjC,MAAMkiB,EAAa,IAAI,GAAgB,CAAC7M,SAAS,IACjD6M,EAAWtK,YAAYlhB,EAAQ,UAE/B,MAAMsnB,EAAY,GAAY8D,aACxB9B,EAAQjkB,KAAKimB,cAAchiB,EAAQiiB,mBACnCzQ,EAAU,CACdqQ,OAAQ7D,EACR+D,OAAQ/B,EACRoC,KAAMF,EAAWG,UAAS,IAO5B,OAJG,EAAMlc,OACPpK,KAAKoa,IAAI,aAAczf,EAAQsnB,EAAWgC,GAGrCjkB,KAAKumB,YAAY9Q,EAASxR,GAG5B,YAAYoX,EAAgBH,EAAc,GAAIjX,EAA4B,IAC/E,MAAMkiB,EAAa,IAAI,GAAgBliB,GAEvC,IAAIjE,KAAK+jB,iBAAkB,CAGzB,MAAMyC,EAAkB,GAAO3N,IAAIuC,QAAQrC,KAAK1f,GAAkB,oBAAbA,EAAEgiB,QACvD,IAAImL,EAAiB,MAAM,IAAI1hB,MAAM,uBACrCqhB,EAAW7K,UAAUkL,EAAgBnZ,GAAI,mBAGzC8Y,EAAW7K,SAAS,GAAOmL,MAAO,SAElC,MAAMC,EAAiB,GAAO7N,IAAIuC,QAAQrC,KAAK1f,GAAkB,mBAAbA,EAAEgiB,QACtD,IAAIqL,EAAgB,MAAM,IAAI5hB,MAAM,sBAEpCqhB,EAAW7K,UAAUoL,EAAerZ,GAAI,kBACxC8Y,EAAW7K,SAAS,EAAK,SACzB6K,EAAW7K,SAAS,GAAIjO,GAAI,UAC5B8Y,EAAWnK,YAAY,GAAiB2K,WAAa,oBAAqB,gBAC1ER,EAAWnK,YAAY4K,UAAUC,UAAY,mBAAoB,kBACjEV,EAAWnK,YAAY,GAAIyG,SAAW,GAAIO,aAAe,IAAM,GAAIE,OAAS,IAAK,eACjFiD,EAAWnK,YAAY4K,UAAUE,UAAY,KAAM,oBACnDX,EAAWnK,YAAY,GAAI4G,SAAU,aACrCuD,EAAWnK,YAAY,GAAiB8K,SAAU,aAcpD,GAAG7iB,EAAQ8iB,eAAgB,CACzB,QAAiChe,IAA9Bqa,GAAyC,CAC1C,MAAM/pB,EAAI,GAAOwf,IAAIuC,QAAQrC,KAAK1f,GAAkB,mBAAbA,EAAEgiB,QACzC+H,GAA4B/pB,GAAKA,EAAEgU,GAAK,EAGvC+V,IAKD+C,EAAW7K,SAAS8H,GAA2B,kBAC/C+C,EAAWpK,UAAU9X,EAAQ8iB,eAAgB,WAE7C/mB,KAAKoa,IAAI9B,MAAM,sBAInBrU,EAAQ+iB,WAAab,EAAWC,YAAY/K,EAAQH,GAMpD,MAEMzF,EAAU,CACdqQ,OAHgB,GAAYC,aAI5BC,OAHYhmB,KAAKimB,gBAIjBI,KAAMF,EAAWG,UAAS,GAC1BW,OAAO,GAST,OANG,EAAM7c,MACPpK,KAAKoa,IAAI,WAAYiB,EAAQ5F,EAASyF,EAAQjX,GACtCjE,KAAKoK,OACbpK,KAAKoa,IAAI,WAAYiB,EAAQH,EAAQjX,GAGhCjE,KAAKumB,YAAY9Q,EAASxR,GAG5B,UAEJjE,KAAKyjB,UAA4ByD,UAG7B,wBACDlnB,KAAKyjB,UAA4B0D,WAClCnnB,KAAKyjB,UAA4B0D,YAI/B,iBACDnnB,KAAKyjB,UAA4B2D,gBAClCpnB,KAAKyjB,UAA4B2D,iBA4R9B,YAAY3R,EAKjBxR,GACD,MAAMojB,EAAU,IAAI9d,QAAQ,CAACK,EAASG,KACpC/J,KAAK2jB,aAAalO,EAAQqQ,QAAUnsB,OAAO2tB,OAAO7R,EAASxR,EAASA,EAAQiiB,uBACxEnd,EACA,CACAwe,SAAU,CAAC3d,UAASG,YAMxB/J,KAAK4jB,gBAAgBnO,EAAQqQ,QAAU,EAEnC7hB,EAAQujB,YACVxnB,KAAKynB,kBAGJ9U,GAAS1O,KACVA,EAAQge,UAAYxM,EAAQqQ,UAIhC,IAAI7hB,EAAQiiB,oBAAsBjiB,EAAQyjB,WAAY,CACpD,MAAMC,EAAUC,WAAW,KACtB5nB,KAAKskB,kBAAqB3F,KAAKC,MAAQ5e,KAAKskB,iBA/mB5B,MAmnBnBtkB,KAAKoa,IAAI9B,MAAM,UAAW7C,GACvBzV,KAAKmkB,UACNnkB,KAAKilB,oBAAoB9B,GAAiB0E,YArnBzB,KA6nBrBR,EAAQ7d,QAAQ,KACdse,aAAaH,GACb3nB,KAAKilB,oBAAoB9B,GAAiB+B,aAExCllB,KAAKukB,eACPvkB,KAAK+nB,sBAGL/nB,KAAKukB,oBACoBxb,IAAxB/I,KAAKgoB,iBACNF,aAAa9nB,KAAKgoB,gBAClBhoB,KAAKgoB,oBAAiBjf,GAI1B,OAAOse,EAGF,mBACDrnB,KAAKukB,gBAAkBvkB,KAAKioB,cAAmClf,IAAxB/I,KAAKgoB,iBAC9ChoB,KAAKgoB,eAAiBrd,KAAKid,WAAW,KACpC5nB,KAAKgoB,oBAAiBjf,EACtB/I,KAAKoa,IAAI,SACTpa,KAAKioB,WAnpBS,MAwpBb,oBAAoB7D,EAA0B8D,GACnD,MAAM/D,EAAWC,IAAWjB,GAAiB+B,UACvCiD,EAAanoB,KAAKokB,SAAWA,EACnCpkB,KAAKmkB,SAAWA,EAChBnkB,KAAKokB,OAASA,EAEX+D,IACE,GAAiBC,0BAClB,GAAiBA,yBAAyB,CACxC1sB,EAAG,kBACH0oB,SACAf,KAAMrjB,KAAKqjB,KACX7pB,KAAMwG,KAAKxG,KACXqrB,gBAAiB7kB,KAAK6kB,gBACtBF,eAAgB3kB,KAAK2kB,eACrBF,aAAczkB,KAAKykB,aACnByD,YAIDloB,KAAKmkB,UACNnkB,KAAKynB,mBAcH,WAAWxF,EAAmBoG,EAAQ,KAC5C,MAAMnuB,EAAQmuB,EAAQ1J,KAAKC,MAAQyJ,EAAQ,EACrC/C,EAActlB,KAAK2jB,aAAa1B,GACtC,GAAGqD,EAAYC,UACb,IAAI,MAAM+C,KAAchD,EAAYG,MAClCzlB,KAAK4jB,gBAAgB0E,GAAcpuB,OAGrC8F,KAAK4jB,gBAAgB3B,GAAa/nB,EAGjCorB,EAAYiD,OACbvoB,KAAKoa,IAAI9B,MAAM,6BAA8BgN,GAG5CtlB,KAAKoK,OACNpK,KAAKoa,IAAIhQ,MAAM,cAAe6X,EAAWqD,EAAatlB,KAAK4jB,gBAAiByE,GAG9EroB,KAAKynB,gBAAgBY,GAIT,UAAUG,EAA6BC,G,0CACnD,MAAM3sB,EAAI2sB,EAAQ,EAAI,EAChBC,EAAmBnhB,EAAcvH,KAAKwkB,aAAa5iB,SAAS,GAAK9F,EAAG,GAAKA,EAAI,IAAK0sB,GAElFG,QAAoB,GAAa1I,aAAa,cAAeyI,GAEnE,OADe,IAAInrB,WAAWorB,GAAa/mB,SAAS,EAAG,OAKjD,YAAYgnB,EAAoBH,GACtC,MAAM3sB,EAAI2sB,EAAQ,EAAI,EAChBI,EAAY,IAAItrB,WAAW,IAC3BurB,EAAY,IAAIvrB,WAAW,IAC3BwrB,EAAuC,GAU7C,OARAF,EAAUlnB,IAAIinB,EAAQ,GACtBC,EAAUlnB,IAAI3B,KAAKwkB,aAAa5iB,SAAS9F,EAAGA,EAAI,IAAK,IACrDitB,EAAS5jB,KAAK,GAAa8a,aAAa,cAAe4I,IAEvDC,EAAUnnB,IAAI3B,KAAKwkB,aAAa5iB,SAAS,GAAK9F,EAAG,GAAKA,EAAI,IAAK,GAC/DgtB,EAAUnnB,IAAIinB,EAAQ,IACtBG,EAAS5jB,KAAK,GAAa8a,aAAa,cAAe6I,IAEhDvf,QAAQ2B,IAAI6d,GAAUlf,KAAMmf,IACjC,MAAMC,EAAS,IAAI1rB,WAAW,IACxB2rB,EAAQ,IAAI3rB,WAAW,IACvB4rB,EAAQ,IAAI5rB,WAAWyrB,EAAQ,IAC/BI,EAAQ,IAAI7rB,WAAWyrB,EAAQ,IAUrC,OARAC,EAAOtnB,IAAIwnB,EAAMvnB,SAAS,EAAG,IAC7BqnB,EAAOtnB,IAAIynB,EAAMxnB,SAAS,EAAG,IAAK,GAClCqnB,EAAOtnB,IAAIwnB,EAAMvnB,SAAS,GAAI,IAAK,IAEnCsnB,EAAMvnB,IAAIynB,EAAMxnB,SAAS,EAAG,IAC5BsnB,EAAMvnB,IAAIwnB,EAAMvnB,SAAS,EAAG,IAAK,GACjCsnB,EAAMvnB,IAAIynB,EAAMxnB,SAAS,GAAI,IAAK,IAE3B,CAACqnB,EAAQC,KAIb,YACL,OAAO,GAAiBG,YAAcrpB,KAAK6kB,gBAGrC,0BAGN,GAAG7kB,KAAKspB,YACN,OAAO,EAGT,GAAGtpB,KAAK6jB,YAAYpjB,OAAQ,CAC1B,MAAM8oB,EAA2BvpB,KAAK6jB,YAAY3f,QAGlDlE,KAAKwpB,eAAe,CAClB9tB,EAAG,WACH+tB,QAASF,GACR,CACDrD,mBAAmB,EACnBsB,YAAY,IAIhB,GAAGxnB,KAAK8jB,eAAerjB,OAAQ,CAC7B,MAAMipB,EAA8B1pB,KAAK8jB,eAAe5f,QAClDylB,EAA+B,CACnCnC,YAAY,EACZtB,mBAAmB,EACnBjE,UAAW,IAIbjiB,KAAKwpB,eAAe,CAClB9tB,EAAG,iBACH+tB,QAASC,GACRC,GAEH3pB,KAAKkkB,cAAgB,CACnB0F,WAAYD,EAAW1H,UACvB4H,eAAgBH,GAIpB,IAAII,EACJ,MAAMC,EAAgC,GAGtC,IAAIC,EAAkB,EAOlBC,GAAiB,EAGrB,MAAMpd,EAAsBlT,OAAOkT,KAAK7M,KAAK4jB,iBbzwBpCsG,IAAIC,GACNjZ,GAAWiZ,EAAM,KACvBC,KAAK,CAAClvB,EAAGM,IACHuW,GAAI7W,EAAGM,IACb0uB,IAAIjX,GACExB,GAAWwB,EAAQ,KaqwB1B,IAAI,MAAMgP,KAAapV,EAAM,CAIzB,MAAM4I,EAAUzV,KAAK2jB,aAAa1B,GAClC,GAAGxM,GAAWA,EAAQ4Q,KAAM,CAK1B,MAAMgE,EAAoB5U,EAAQ4Q,KAAK5lB,OAAS,GAEhD,GAAIupB,EAAkBK,EAAqB,SACzCrqB,KAAKoa,IAAI6E,KAAK,iBAAkBxJ,EAASsU,GACzCE,GAAiB,EAEdH,GACD,MAIJC,EAAS5kB,KAAKsQ,GACduU,GAAmBK,EAUnBP,EAAarU,SAKRzV,KAAK4jB,gBAAgB3B,GAwBhC,IAAI8H,EAAStpB,OAEX,OAOF,GAAGspB,EAAStpB,OAAS,EAAG,CACtB,MAAM8kB,EAAYvlB,KAAKsqB,yBAAyBN,EAAiBD,GACjED,EAAavE,EAAUgF,gBAEvBvqB,KAAK2jB,aAAamG,EAAWhE,QAAUP,EAAU9P,aAEjDzV,KAAK2jB,aAAamG,EAAWhE,QAAUgE,EAGzC9pB,KAAK6jB,YAAc,GAEH7jB,KAAKwqB,qBAAqBV,GAU1C9pB,KAAKyqB,cAMFR,GACDjqB,KAAKynB,kBAID,yBAAyBuC,EAAyBD,GACxD,MAAMxE,EAAY,IAAI,GAAgB,CACpCjM,SAAS,EACTC,eAAgByQ,EAAkB,KAGpCzE,EAAUjK,SAAS,WAAY,iBAC/BiK,EAAUjK,SAASyO,EAAStpB,OAAQ,oBAEpC,MAAMiqB,EAA0B,GAChCX,EAASjiB,QAAQ,CAAC2N,EAASxc,KACzByxB,EAAcvlB,KAAKsQ,EAAQqQ,QAE3BP,EAAUxJ,UAAUtG,EAAQqQ,OAAQ,aAAe7sB,EAAI,aACvDssB,EAAUjK,SAAS7F,EAAQuQ,OAAQ,aAAe/sB,EAAI,aACtDssB,EAAUjK,SAAS7F,EAAQ4Q,KAAK5lB,OAAQ,aAAexH,EAAI,YAC3DssB,EAAUoF,cAAclV,EAAQ4Q,KAAM,aAAeptB,EAAI,aAG3D,MAAMwc,EAAqB,CACzBqQ,OAAQ,GAAYC,aACpBC,OAAQhmB,KAAKimB,eAAc,GAC3BV,WAAW,EACXE,MAAOiF,GAOT,OAJG,EAAMtgB,OACPpK,KAAKoa,IAAI6E,KAAK,YAAayL,EAAejV,EAAQqQ,OAAQrQ,EAAQuQ,QAG7D,CACLvQ,UACA8U,gBAAiB5wB,OAAO2tB,OAAO,CAACjB,KAAMd,EAAUe,UAAS,IAAQ7Q,IAIvD,oBAAoB+S,G,0CAChC,MAAMI,QAAe5oB,KAAK4qB,UAAUpC,GAAiB,GAC/CqC,QAAc7qB,KAAK8qB,YAAYlC,GAAQ,GAM7C,MAAO,CACLviB,YAJ2B,GAAa4Z,aAAa,cAAeuI,EAAiBqC,EAAM,GAAIA,EAAM,IAKrGjC,aAII,oBAAoBA,EAAoBmC,GAE9C,OAAO/qB,KAAK8qB,YAAYlC,GAAQ,GAAO/e,KAAMghB,GAEpC,GAAa5K,aAAa,cAAe8K,EAAeF,EAAM,GAAIA,EAAM,KAI3E,mBAAmBpV,GASzB,MAAMuV,EAAO,IAAI,GAAgB,CAC/BzR,eAAgB9D,EAAQ4Q,KAAK5lB,OAAS,OAGxCuqB,EAAKpQ,cAAc5a,KAAKwjB,WAAY,GAAI,QACxCwH,EAAKpQ,cAAc5a,KAAKolB,UAAW,GAAI,cAEvC4F,EAAKjP,UAAUtG,EAAQqQ,OAAQ,cAC/BkF,EAAK1P,SAAS7F,EAAQuQ,OAAQ,UAE9BgF,EAAK1P,SAAS7F,EAAQ4Q,KAAK5lB,OAAQ,uBACnCuqB,EAAKL,cAAclV,EAAQ4Q,KAAM,gBAmBjC,MAAM4E,EAAaD,EAAKE,YAMlBC,EAAiB,GAAMH,EAAKI,YAAc,GAAO,IAAM,EAAI1U,GAAe,GAAK,GAU/E8R,EAAkBjhB,EAAc0jB,EATY,IAAI1tB,WAAW4tB,GAAe9iB,aAsBhF,OAAOrI,KAAKqrB,oBAAoB7C,GAAiB3e,KAAMyhB,IAKrD,MAAMC,EAAU,IAAI,GAAgB,CAClChS,eAAgB+R,EAAgBjlB,MAAM5F,OAAS,MAEjD8qB,EAAQ3Q,cAAc5a,KAAKujB,UAAW,GAAI,eAC1CgI,EAAQ3Q,cAAc0Q,EAAgB1C,OAAQ,IAAK,WACnD2C,EAAQZ,cAAcW,EAAgBjlB,MAAO,kBAW7C,OAToBklB,EAAQjF,UAAS,KAajC,qBAAqB7Q,GAC3B,OAAOzV,KAAKwrB,mBAAmB/V,GAAS5L,KAAK4hB,IAC3CzrB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,sDAAuDqL,EAAS,CAACA,EAAQqQ,QAAQtd,OAAOiN,EAAQgQ,OAAS,KAItI,OAFqCzlB,KAAKyjB,UAAUiI,KAAKD,KA8BtD,cAAcE,GAMnB3rB,KAAKskB,iBAAmB3F,KAAKC,MAE7B,MAAMgN,EAAe,IAAI,GAAkBD,GAErCpI,EAAYqI,EAAa1O,cAAc,IAAI,EAAM,eACvD,IAAIlW,EAASuc,EAAWvjB,KAAKujB,WAC3B,MAAM,IAAIze,MAAM,oCAAsCye,EAAU7G,KAGlE,MAAMkM,EAASgD,EAAa1O,cAAc,KAAK,EAAM,WAC/C6N,EAAgBa,EAAaC,cAAcF,EAAehkB,WAAaikB,EAAaR,aAAa,EAAM,kBAE7G,OAAOprB,KAAK8rB,oBAAoBlD,EAAQmC,GAAelhB,KAAM2e,GAEpDxoB,KAAK4qB,UAAUpC,GAAiB,GAAO3e,KAAMkiB,IAClD,IAAI/kB,EAAS4hB,EAAQmD,GAGnB,MAFA/rB,KAAKoa,IAAI6E,KAAK,gBAAiB2J,EAAQmD,GACvC/rB,KAAK8kB,gBACC,IAAIhgB,MAAM,iDAIlB,IAAI8mB,EAAe,IAAI,GAAkBpD,EAAiB,CAAClP,SAAS,IAEjDsS,EAAa1O,cAAc,IAAI,EAAM,QACxD,MAAMkI,EAAYwG,EAAa1O,cAAc,IAAI,EAAM,cACjD+E,EAAY2J,EAAa3O,UAAU,cAEzC,KAAIjW,EAASoe,EAAWplB,KAAKolB,YACzBplB,KAAKmlB,eAAkBne,EAASoe,EAAWplB,KAAKmlB,gBAIlD,MAHAnlB,KAAKoa,IAAI6E,KAAK,WAAYmG,EAAWplB,KAAKolB,UAAWplB,KAAKmlB,cAAeqD,GAGnE,IAAI1jB,MAAM,mCAAqCsB,EAAWgf,IAGlE,MAAMnB,EAAQ2H,EAAa5O,SAAS,UAE9BgP,EAAcxD,EAAgB7gB,WAE9BskB,EAAoBL,EAAa5O,SAAS,wBAChD,IAAItc,EAASkrB,EAAaR,YAE1B,GAAIa,EAAoB,GACtBA,EAAoBD,EAActrB,EAClC,MAAM,IAAIoE,MAAM,6BAA+BmnB,GAEjD,MAAMC,EAAcN,EAAaC,cAAcI,GAAmB,EAAM,gBAExEvrB,EAASkrB,EAAaR,YACtB,MAAMD,EAAgBa,EAActrB,EACpC,GAAGyqB,EAAgB,IAAMA,EAAgB,KACvC,MAAM,IAAIrmB,MAAM,gCAAkCqmB,GAIpDS,EAAe,IAAI,GAA8BM,EAAa,CAC5D5S,SAAS,EACTmD,SAAU,CACR0P,WAAY,CAAC/mB,EAAa+U,KACxB/U,EAAO0gB,OAAS8F,EAAa3O,UAAU9C,EAAQ,YAC/C/U,EAAOgnB,MAAQR,EAAa5O,SAAS7C,EAAQ,WAC7C/U,EAAOiB,MAAQulB,EAAa5O,SAAS7C,EAAQ,WAE7C,MAAMzZ,EAASkrB,EAAaR,YAI5B,IACEhmB,EAAOihB,KAAOuF,EAAa/O,YAAY,SAAU1C,EAAQ,UACzD,MAAMlf,GACN+E,KAAKoa,IAAI9B,MAAM,cAAgBrd,EAAYwa,QAAUxa,EAAYoxB,OACjEjnB,EAAOihB,KAAO,CACZ3qB,EAAG,cACH4c,MAAOrd,GAIR2wB,EAAaR,cAAgB1qB,EAAS0E,EAAOiB,OAG9CulB,EAAaU,UAAU5rB,EAAS0E,EAAOiB,QAI3CkmB,cAAe,CAACnnB,EAAa+U,KAC3B/U,EAAOwkB,WAAagC,EAAa3O,UAAU9C,EAAQ,gBAEnD,MAAMmL,EAActlB,KAAK2jB,aAAave,EAAOwkB,YACvCte,EAAOga,GAAeA,EAAY0B,YAAc,SAEnD5hB,EAAOwkB,aAAetE,IAKzBlgB,EAAOA,OAASwmB,EAAa/O,YAAYvR,EAAM6O,EAAQ,iBAQ7D,MAAO,CACLqS,SAHeZ,EAAa/O,YAAY,GAAI,SAI5CoF,YACAmD,YACAnB,YAMA,gBAAgBwI,GACtB,MAAMjJ,ET/uCMtQ,GADM,IAAI3V,WAAWoU,GAAaT,GSgvCfub,EThvCiC,KAAK,IACjC,GAAG,GAAM,GAAO,GSivCpD,EAAe9qB,IAAI,CACjB,CAAC,KAAO3B,KAAKqjB,KAAO,gBAAiBjd,EAAWod,KAGlDxjB,KAAKwjB,WAAa,IAAIjmB,WAAWimB,GAI5B,gBAAgB6E,GAcrB,MAAMrE,EAAUrF,KAAKC,OAASyJ,GAAS,GACvC,GAAGroB,KAAKgkB,eAAsBjb,IAAVsf,GAAuBroB,KAAKgkB,SAAWA,GAEzD,OAUChkB,KAAK0sB,gBACN5E,aAAa9nB,KAAK0sB,gBAGpB,MAAMC,EAAK,KAGT3sB,KAAK0sB,eAAiB,EACtB1sB,KAAKgkB,QAAU,EAYfhkB,KAAK4sB,2BAIP5sB,KAAKgkB,QAAUA,EAEZqE,EACDroB,KAAK0sB,eAAiB/hB,KAAKid,WAAW+E,EAAItE,GAE1CsE,IAII,WAAWE,GAEjB7sB,KAAK6jB,YAAY1e,KAAK0nB,GAKtB7sB,KAAKynB,kBAIC,iBAAiBoF,GACpB7sB,KAAKoK,OACNpK,KAAKoa,IAAIhQ,MAAM,aAAcyiB,GAG/B7sB,KAAK8jB,eAAe3e,KAAK0nB,GACzB7sB,KAAKynB,gBAAgB,KAGhB,cACL,IAAIqF,GAAW,EAwBf,OAtBAnzB,OAAOkT,KAAK7M,KAAK2jB,cAAc7b,QAAS+kB,IACtC,MAAMpX,EAAUzV,KAAK2jB,aAAakJ,GAGlC,GAAGpX,EAAQyQ,wBAAqDnd,IAAhC/I,KAAK4jB,gBAAgBiJ,UAE5C7sB,KAAK2jB,aAAakJ,QACpB,GAAGpX,EAAQ8P,UAAW,CAC3B,IAAI,MAAM+C,KAAc7S,EAAQgQ,MAC9B,QAAqC1c,IAAlC/I,KAAK2jB,aAAa2E,GAGnB,YADAwE,GAAW,UAKR9sB,KAAK2jB,aAAakJ,QAEzBC,GAAW,KAIPA,EAGF,kBAAkB7K,GACxB,MAAMqD,EAActlB,KAAK2jB,aAAa1B,GACnCqD,IAAgBA,EAAYiD,QAE7BjD,EAAYiD,OAAQ,GAIhB,aAAawE,GACnB,MAAMC,GAAWD,EAASE,eAAiB,IAAIC,MAAM,6BAA+B,GAGpF,OAFAH,EAASI,WAAaJ,EAASI,WAExB,CACLC,MAAOL,EAASI,YAAcJ,EAASI,YAAc,EAAI,IAAMJ,EAASI,WACxE7hB,KAAM0hB,EAAQ,IAAM,UACpBK,YAAaL,EAAQ,IAAO,QAAUD,EAASI,WAAa,IAAMJ,EAASE,cAC3EK,cAAeP,GAQZ,SACL,IAAI,MAAM1f,KAAMrN,KAAK2jB,aAAc,CACjC,MAAMvmB,EAAM4C,KAAK2jB,aAAatW,IAC3BjQ,EAAIipB,MAAQjpB,EAAImoB,YACjBvlB,KAAKutB,WAAWlgB,IAyBf,eAAeoI,EAAcwM,EAAmBmD,GACrD,GAAiB,iBAAd3P,EAAQ/Z,EAET,YADAsE,KAAKoa,IAAI6E,KAAK,+BAAgCxJ,EAASwM,GAKzD,GADiBpb,SAASob,EAAUlb,OAAO,GAAI,IAAK,IACtC,EACZ/G,KAAKoa,IAAI6E,KAAK,2BAA4BgD,EAAWxM,QAQvD,OAAOA,EAAQ/Z,GACb,IAAK,gBACH,IAAI,MAAM8xB,KAAgB/X,EAAQsU,SAChC/pB,KAAKytB,eAAeD,EAAcA,EAAa1H,OAAQV,GAGzD,MAGF,IAAK,kBACHplB,KAAKoa,IAAI,kBAAmB3E,GAE5BzV,KAAK0tB,gBAAgBjY,EAAQkY,iBAE1B3tB,KAAK2jB,aAAalO,EAAQmY,aAC3B5tB,KAAKutB,WAAW9X,EAAQmY,YAG1B5tB,KAAK6tB,WAAW5L,GAWhB,MAGF,IAAK,uBAGH,OAFAjiB,KAAKoa,IAAI9B,MAAM,uBAAwB7C,GAEhCA,EAAQ0X,YACb,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAAI,CAEP,MAAMla,EAAS/B,GAAW+Q,EAAW,IACrCnR,GAAYmC,EAAQ,IACpB,MAAM6a,EAAgB,GAAYC,iBAAiBtc,GAAWwB,EAAQ,MAC5C,KAAvBwC,EAAQ0X,YAAqBW,KAC9B9tB,KAAKoa,IAAI,kBACTpa,KAAK8kB,iBAGP,MAAMkJ,EAAahuB,KAAK6lB,kBAAkBpQ,EAAQmY,YAC/CI,GAAYhuB,KAAKutB,WAAWS,EAAWlI,SAkB9C,MAGF,IAAK,UACH,IAAmD,IAAhD9lB,KAAK0jB,mBAAmBvZ,QAAQ8X,GAGjC,YADAjiB,KAAK6tB,WAAW5L,GAIlBjiB,KAAK0jB,mBAAmBve,KAAK8c,GAC1BjiB,KAAK0jB,mBAAmBjjB,OAAS,KAClCT,KAAK0jB,mBAAmBtf,QAG1BpE,KAAKytB,eAAehY,EAAQ4Q,KAAM5Q,EAAQqQ,OAAQV,GAClD,MAGF,IAAK,sBACHplB,KAAK6tB,WAAW5L,GAEbjiB,KAAKoK,OACNpK,KAAKoa,IAAIhQ,MAAM,sBAAuBqL,GAIxCzV,KAAKiuB,kBAAkBxY,EAAQyY,cAC/BluB,KAAK0tB,gBAAgBjY,EAAQuK,aAE7B,EAAelmB,IAAI,MAAM+P,KAAMkZ,IAC1BA,IAAa/iB,KAAKqjB,OAASrjB,KAAK6kB,iBAAmB,GAAiBsJ,kBACrE,GAAiBA,iBAAiB1Y,KAGtC,MAGF,IAAK,WACH,IAAI,MAAMoX,KAASpX,EAAQgU,QACzBzpB,KAAKiuB,kBAAkBpB,GAGzB,MAGF,IAAK,oBACH,IAAI7sB,KAAK2jB,aAAalO,EAAQqQ,QAAS,CACrC9lB,KAAK6tB,WAAWpY,EAAQ2Y,eACxB,MAEJ,IAAK,wBACH,GAAGpuB,KAAK6jB,YAAY1Z,QAAQsL,EAAQ2Y,eAClC,MAEFpuB,KAAKquB,iBAAiB5Y,EAAQ2Y,eAC9B,MAEF,IAAK,kBAEH,GADApuB,KAAK6tB,WAAWpY,EAAQ2Y,eACrBpuB,KAAKkkB,eACNlkB,KAAKkkB,cAAc0F,aAAenU,EAAQmU,YAC1C5pB,KAAK8jB,eAAerjB,OAEpB,IAAI,MAAM6tB,KAAYtuB,KAAKkkB,cAAc2F,eAAgB,CACvD,MAAMxV,EAAMrU,KAAK8jB,eAAe3Z,QAAQmkB,IAC5B,IAATja,GACDrU,KAAK8jB,eAAehb,OAAOuL,EAAK,GAKtC,MAGF,IAAK,aAAc,CACjBrU,KAAK6tB,WAAW5L,GAEhB,MAAMoD,EAAgB5P,EAAQmU,WACxBtE,EAActlB,KAAK2jB,aAAa0B,GAGtC,GADArlB,KAAKiuB,kBAAkB5I,GACpBC,EAAa,CACd,MAAMiC,EAAWjC,EAAYiC,SAC7B,GAAwB,cAArB9R,EAAQrQ,OAAO1J,EAAmB,CACnC,MAAM4c,EAAQtY,KAAKuuB,aAAa9Y,EAAQrQ,QACxCpF,KAAKoa,IAAI,YAAa9B,GACnBiP,GACDA,EAASxd,OAAOuO,QAGfiP,GAKDA,EAAS3d,QAAQ6L,EAAQrQ,QAGxBkgB,EAAY2B,QAAUjnB,KAAK+jB,mBAC5B/jB,KAAK+jB,kBAAmB,UAKrB/jB,KAAK2jB,aAAa0B,QAEtBrlB,KAAKoK,OACNpK,KAAKoa,IAAI,kCAAmCiL,EAAe5P,GAI/D,MAGF,IAAK,OACH,GAAIzV,KAAKyjB,UAA4BsB,UAAW,CAC9C,MAAMM,EAAgB5P,EAAQqQ,OACxBR,EAActlB,KAAK2jB,aAAa0B,GAEnCC,IACDA,EAAYiC,SAAS3d,QAAQ6L,UACtBzV,KAAK2jB,aAAa0B,IAI7B,MAGF,QACErlB,KAAK6tB,WAAW5L,GAMyB,OAAtC,GAAiBkM,kBAClB,GAAiBA,iBAAiB1Y,KE/kD5C,MAAM+Y,GAAmB,IApElB,MAAP,cACU,KAAAC,WAA6B,GAC9B,KAAA3H,SAAWF,UAAUE,UAAY,GAAIjE,aACrC,KAAAsL,iBAAuC,KACvC,KAAA/F,yBAAmE,KACnE,KAAAiB,WAAY,EACZ,KAAA1C,UAAYC,UAAUD,UAEtB,gBAAgB5B,GACrB,MAAMY,EAAM3lB,KAAKyuB,WAAWtkB,QAAQ4a,IACxB,IAATY,GACD3lB,KAAKyuB,WAAW3lB,OAAO6c,EAAK,GAIzB,oBAAoBhc,GACzB3J,KAAKmuB,iBAAmBxkB,EAGnB,aAAa0Z,EAAcC,EAAqBC,EAAuBC,EAAwBC,EAAwBxf,GAE5H,MAAM8gB,EAAY,IAAI,GAAa1B,EAAMC,EAASC,EAAWC,EAAYC,EAAWxf,GAEpF,OADAjE,KAAKyuB,WAAWtpB,KAAK4f,GACdA,EAGF,WACL,GAAG/kB,KAAKqpB,UAAW,CACjB,MAAMqF,EAAoB1uB,KAAKyuB,WAAWE,OAAO5J,GAAaA,EAAUuE,aAExEtpB,KAAKqpB,WAAY,EACjBrpB,KAAKmuB,kBAAoBnuB,KAAKmuB,iBAAiB,CAACzyB,EAAG,wBAEnD,IAAI,MAAMqpB,KAAa2J,EACrB3J,EAAU0C,mBAKT,UACLznB,KAAKqpB,WAAY,EAGZ,YAAYuF,GACjB5uB,KAAK8mB,SAAW8H,EAChB,IAAI,MAAM7J,KAAa/kB,KAAKyuB,WACtB1J,EAAUF,kBACZE,EAAUhB,kBAAmB,GAK5B,wBACL,IAAI,MAAMgB,KAAa/kB,KAAKyuB,WAC1B1J,EAAU8J,wBAIP,iBACL,IAAI,MAAM9J,KAAa/kB,KAAKyuB,WAC1B,IAAI1J,EAAUF,gBAAiB,CAC7BE,EAAUqC,iBACV,SAOR1c,IAAmBA,EAAe8jB,iBAAmBA,IACtC,UC9BA,MAAMM,GAUnB,YAAYC,GACV/uB,KAAKgvB,aAAaD,GAGb,aAAaA,GAAe,GACjC/uB,KAAK+uB,aAAeA,EACpB/uB,KAAKuL,UAAY,GACjBvL,KAAKivB,gBAAkB,GAGlB,iBAA4Cz1B,EAASmQ,EAAwB1F,G,SAC7D,QAApB,EAAAjE,KAAKuL,UAAU/R,UAAK,QAAKwG,KAAKuL,UAAU/R,GAAQ,IAAK2L,KAAK,CAACwE,WAAU1F,YAEnEjE,KAAKivB,gBAAgBn0B,eAAetB,KACrCmQ,KAAY3J,KAAKivB,gBAAgBz1B,IAEM,QAAnC,EAAAyK,SAAmC,eAAEirB,OACvClvB,KAAKuL,UAAU/R,GAAM21B,MAQpB,2BAA2B7iB,GAGhC,IAAI,MAAMrT,KAAKqT,EACbtM,KAAKovB,iBAAiBn2B,EAAGqT,EAAIrT,IAI1B,oBAA+CO,EAASmQ,EAAwB1F,GAClFjE,KAAKuL,UAAU/R,IAChBwG,KAAKuL,UAAU/R,GAAMkP,cAAcxP,GAAKA,EAAEyQ,WAAaA,GAMpD,cAAyCnQ,KAAYgO,GACvDxH,KAAK+uB,eACN/uB,KAAKivB,gBAAgBz1B,GAAQgO,GAG/B,MAAMlB,EAAsD,GAKtDiF,EAAYvL,KAAKuL,UAAU/R,GACjC,GAAG+R,EAAW,CAECA,EAAUrH,QAClB4D,QAAS0D,I,OAEE,IADAD,EAAU1C,UAAW3P,GAAMA,EAAEyQ,WAAa6B,EAAS7B,YAKjErD,EAAInB,KAAKqG,EAAS7B,YAAYnC,KAEkB,QAA5C,EAAAgE,EAASvH,eAAmC,eAAEirB,OAChDlvB,KAAKqvB,oBAAoB71B,EAAMgS,EAAS7B,aAgB9C,OAAOrD,EAGF,UACLtG,KAAKuL,UAAY,GACjBvL,KAAKivB,gBAAkB,IC9IZ,MAAM,WAAeH,GASlC,YAAsBzL,EAAwBiM,EAAaC,GACzDhO,QADoB,KAAA8B,OAAwB,KAAAiM,MAFtC,KAAAllB,MAAQ,EAAMA,QAAS,EAkDvB,KAAAolB,WAAa,KACnBxvB,KAAKoa,IAAI,UAETpa,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,uBAC7BpK,KAAKyvB,cAAc,SAGb,KAAAC,YAAez0B,IACrB+E,KAAKoa,IAAI9B,MAAM,cAAerd,GAC9B+E,KAAK2vB,SAGC,KAAAC,YAAc,KACpB5vB,KAAKoa,IAAI,UAETpa,KAAK6vB,kBACL7vB,KAAKyvB,cAAc,UAGb,KAAAK,cAAiBC,IACvB/vB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,KAAM,gBAA8B2lB,EAAM/E,KAAKrjB,YAE5E3H,KAAKyvB,cAAc,UAAWM,EAAM/E,OAG/B,KAAAU,KAAQrF,IACbrmB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,0BAA2Bic,EAAK5lB,QAE7DT,KAAKgwB,GAAGtE,KAAKrF,IAzEb,IAAI4J,EAAW7R,GAAStZ,MAAQsZ,GAASI,IAMzC,OALGxe,KAAKoK,QAAO6lB,GAAY7R,GAASK,OACpCze,KAAKoa,IAAM2E,GAAO,MAAMsE,EAASkM,EAAWU,GAC5CjwB,KAAKoa,IAAI,eACTpa,KAAKkwB,UAEElwB,KAGD,kBACFA,KAAKgwB,KAIThwB,KAAKgwB,GAAGX,oBAAoB,OAAQrvB,KAAKwvB,YACzCxvB,KAAKgwB,GAAGX,oBAAoB,QAASrvB,KAAK4vB,aAC1C5vB,KAAKgwB,GAAGX,oBAAoB,QAASrvB,KAAK0vB,aAC1C1vB,KAAKgwB,GAAGX,oBAAoB,UAAWrvB,KAAK8vB,eAC5C9vB,KAAKgwB,QAAKjnB,GAGJ,UACN/I,KAAKgwB,GAAK,IAAIG,UAAUnwB,KAAKsvB,IAAK,UAClCtvB,KAAKgwB,GAAGI,WAAa,cACrBpwB,KAAKgwB,GAAGZ,iBAAiB,OAAQpvB,KAAKwvB,YACtCxvB,KAAKgwB,GAAGZ,iBAAiB,QAASpvB,KAAK4vB,aACvC5vB,KAAKgwB,GAAGZ,iBAAiB,QAASpvB,KAAK0vB,aACvC1vB,KAAKgwB,GAAGZ,iBAAiB,UAAWpvB,KAAK8vB,eAGpC,QACL,GAAI9vB,KAAKgwB,GAAT,CAIAhwB,KAAKoa,IAAI,mBAET,IACEpa,KAAKgwB,GAAGL,QACR,MAAMjrB,IAGR1E,KAAK4vB,gBCtDT,MAAMS,GAGJ,YAAYC,GACVtwB,KAAKuwB,SAAWD,EAGlB,YACE,IAAI,IAAIr3B,EAAI,GAAIA,GAAK,EAAGA,IAAK,CAC3B,GAAwB,MAArB+G,KAAKuwB,SAASt3B,GAEV,CACL+G,KAAKuwB,SAASt3B,KACd,MAHA+G,KAAKuwB,SAASt3B,GAAK,IAS3B,MAAM,GAMJ,YAAYuB,EAAiB2b,GAJ7B,KAAAqa,kBAAgC,KAChC,KAAAC,uBAAyB,GAIvBzwB,KAAKuwB,SAAW,IAAIF,GAAQla,GAC5BnW,KAAK0wB,KAAO,IAAI,GAAIl2B,GAGtB,OAAO8S,GACL,MAAMqjB,EAAYrjB,EAAQpJ,QAE1B,IAAI,IAAIjL,EAAI,EAAGA,EAAI03B,EAAUlwB,OAAQxH,IACA,KAAhC+G,KAAKywB,yBACNzwB,KAAKwwB,kBAAoB,IAAIjzB,WAAWyK,EAAgBhI,KAAK0wB,KAAKtb,QAAQpV,KAAKuwB,SAASA,YACxFvwB,KAAKywB,uBAAyB,EAC9BzwB,KAAKuwB,SAASK,aAGhBD,EAAU13B,IAAM+G,KAAKwwB,kBAAkBxwB,KAAKywB,0BAG9C,OAAOE,GAOI,MAAME,GAOZ,KAAKC,GACV,MAAMC,EAAc,IAAIxzB,WAAW,IAGnC,IAFAwzB,EAAY1oB,cAEA,CACV,IAAIwK,EAAOke,EAAY,IAAM,GAAOA,EAAY,IAAM,GAAOA,EAAY,IAAM,EAAMA,EAAY,GAC7FC,EAAQD,EAAY,IAAM,GAAOA,EAAY,IAAM,GAAOA,EAAY,IAAM,EAAMA,EAAY,GAClG,GAAsB,MAAnBA,EAAY,IACH,aAARle,GACQ,aAARA,GACQ,YAARA,GACQ,aAARA,GACQ,aAARA,GACQ,aAARA,GACS,IAATme,EAEA,MAEJD,EAAY1oB,YAOd,MAAM4oB,EAAkBF,EAAY7sB,QAAQ4N,UAEtCmD,EAAS8b,EAAY7sB,MAAM,EAAG,IAC9BgtB,EAAQH,EAAY7sB,MAAM,GAAI,IAC9BgR,EAAS+b,EAAgB/sB,MAAM,EAAG,IAClCitB,EAAQF,EAAgB/sB,MAAM,GAAI,IAQxClE,KAAKoxB,OAAS,IAAI,GAAInc,EAAQic,GAC9BlxB,KAAKqxB,OAAS,IAAI,GAAInc,EAAQic,GAE9BJ,EAAYpvB,IAAImvB,EAAMQ,aAAc,IACpC,MAAMX,EAAY3wB,KAAKsH,OAAOypB,GAM9B,OAFAA,EAAYpvB,IAAIgvB,EAAUzsB,MAAM,GAAI,IAAK,IAElC6sB,EAoCF,OAAOzjB,GACZ,OAAOtN,KAAKoxB,OAAOG,OAAOjkB,GAGrB,OAAOA,GACZ,OAAOtN,KAAKqxB,OAAOE,OAAOjkB,IC5Hf,WAzBR,MAAP,cACS,KAAAkkB,IAAM,IACN,KAAAF,aAAe,IAAI/zB,WAAW,CAACyC,KAAKwxB,IAAKxxB,KAAKwxB,IAAKxxB,KAAKwxB,IAAKxxB,KAAKwxB,MAIlE,aAAaxG,GACdA,EAAKvqB,OAAS,GAAO,GACvB4X,QAAQC,MAAM,gBAAiB0S,EAAKvqB,OAAQuqB,GAG9C,MAAMvkB,EAAMukB,EAAKvqB,OAIjB,OAHe,IAAIlD,WAAW,IAAImE,WAAW,CAAuC+E,IAAMgN,QAG5EjL,OAAOwiB,GAGhB,WAAWA,GAChB,MAAMvqB,EAASuqB,EAAK,GAAMA,EAAK,IAAM,EAAMA,EAAK,IAAM,GAAOA,EAAK,IAAM,GAExE,OAAOA,EAAK9mB,MAAM,EAAG,EAAIzD,KCfd,MAAM,GAwBnB,YAAoBgxB,EACVpO,EACAiM,EACAC,EACAmC,GAJU,KAAAD,aACV,KAAApO,OACA,KAAAiM,MACA,KAAAC,YACA,KAAAmC,eA3BF,KAAAZ,MAAQa,GACR,KAAAC,YAAc,IAAIf,GAGlB,KAAAnP,QAMF,GAEE,KAAAtX,MAAQ,EAAMA,QAAS,EAExB,KAAA4a,WAAY,EAIX,KAAA6M,eAAgB,EAmBhB,KAAAC,OAAS,KACf9xB,KAAKglB,WAAY,EAEjB,MAAM+L,EAAc/wB,KAAK4xB,YAAYG,KAAK/xB,KAAK8wB,OAI/C,GAFA9wB,KAAKgyB,WAAWtG,KAAKqF,GAElB/wB,KAAK+kB,UACN/kB,KAAK0hB,QAAQjhB,OAAS,EACtBT,KAAK+kB,UAAUE,oBAAoB9B,GAAiB+B,WACpDllB,KAAK+kB,UAAU0F,cACfzqB,KAAK+kB,UAAUkN,cAEf,IAAI,MAAMvQ,KAAW1hB,KAAK0hB,QACrBA,EAAQwQ,SAAWxQ,EAAQ2E,OAC5B3E,EAAQwQ,QAAUlyB,KAAKmyB,WAAWzQ,EAAQ2E,OAKhDuB,WAAW,KACT5nB,KAAKoyB,kBACJ,IAGG,KAAAC,UAAa5e,IACnB,IAAIuX,EAAOhrB,KAAK4xB,YAAYU,OAAO,IAAI/0B,WAAWkW,IAGlD,GAFAuX,EAAOhrB,KAAK8wB,MAAMyB,WAAWvH,GAE1BhrB,KAAK+kB,UAmBN,OAhBA/kB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,2BAA4B4gB,EAAKvqB,aAC9DT,KAAK+kB,UAAUyN,cAAcxH,GAAMnhB,KAAK2iB,IACtCxsB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,qCAAsCoiB,GAEnE,IACExsB,KAAK+kB,UAAU0I,eAAejB,EAASA,SAAUA,EAASvK,UAAWuK,EAASpH,WAC9E,MAAM1gB,GACN1E,KAAKoa,IAAI9B,MAAM,+CAAgD5T,MAIhE+tB,MAAM/tB,IACP1E,KAAKoa,IAAI9B,MAAM,8CAA+C5T,KAQlE,MAAMgd,EAAU1hB,KAAK0hB,QAAQtd,QACzBsd,EAKJA,EAAQ9X,QAAQohB,GAJdhrB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,sBAAuB4gB,EAAKtO,MAOrD,KAAAgW,QAAU,KAGhB,IAAIC,EAAqBzK,EACzB,GAHAloB,KAAKgN,QAGFhN,KAAK6xB,cAAe,CACrB,MAAMpvB,EAAOkc,KAAKC,MACZkC,EAAOre,EAAOzC,KAAK4yB,cACzBD,GAAeE,MAAM/R,IAASA,EAAO9gB,KAAK0xB,aAAe1xB,KAAK0xB,aAAe5Q,EAAO,EACpFoH,EAAUzlB,EAAOkwB,EAGhB3yB,KAAK+kB,YACN/kB,KAAK+kB,UAAUE,oBAAoB9B,GAAiBkB,OAAQ6D,GAC5DloB,KAAK0hB,QAAQjhB,OAAS,GAGrBT,KAAK6xB,eACN7xB,KAAKoa,IAAI,uCAAwCuY,EAAc,KAC/D3yB,KAAK8yB,iBAAmBnoB,KAAKid,WAAW5nB,KAAKmnB,UAAWwL,IAExD3yB,KAAKoa,IAAI,2BAkBN,KAAA+M,UAAY,KAMjB,QAL6Bpe,IAA1B/I,KAAK8yB,mBACNhL,aAAa9nB,KAAK8yB,kBAClB9yB,KAAK8yB,sBAAmB/pB,IAGvB/I,KAAKgyB,WAAR,CAOA,GAHAhyB,KAAKoa,IAAI,0BACTpa,KAAK4yB,cAAgBjU,KAAKC,MAEtB5e,KAAK+kB,UAOP/kB,KAAK+kB,UAAUE,oBAAoB9B,GAAiB4P,iBANpD,IAAI,MAAMrR,KAAW1hB,KAAK0hB,QACrBA,EAAQsR,WACTtR,EAAQsR,UAAW,GAOzBhzB,KAAKkwB,YAlIL,IAAID,EAAW7R,GAAStZ,MAAQsZ,GAASI,IACtCxe,KAAKoK,QAAO6lB,GAAY7R,GAASK,OACpCze,KAAKoa,IAAM2E,GAAO,OAAOsE,EAASkM,EAAWU,GAC7CjwB,KAAKoa,IAAI,eAETpa,KAAKkwB,UAwFA,QACLlwB,KAAKglB,WAAY,EAEdhlB,KAAKgyB,aACNhyB,KAAKgyB,WAAW3C,oBAAoB,OAAQrvB,KAAK8xB,QACjD9xB,KAAKgyB,WAAW3C,oBAAoB,QAASrvB,KAAK0yB,SAClD1yB,KAAKgyB,WAAW3C,oBAAoB,UAAWrvB,KAAKqyB,WACpDryB,KAAKgyB,gBAAajpB,GAiCf,iBACL/I,KAAK2vB,QACL3vB,KAAKmnB,YAGA,UACLnnB,KAAKizB,kBAAiB,GACtBjzB,KAAK2vB,QAGA,QACL,MAAMqC,EAAahyB,KAAKgyB,WACxB,GAAGA,EAAY,CACb,MAAMhN,EAAYhlB,KAAKglB,UACvBhlB,KAAKgN,QACFgY,IACDgN,EAAW5C,iBAAiB,UAAWpvB,KAAKqyB,WAC5CL,EAAW5C,iBAAiB,QAAS,KACnC4C,EAAW3C,oBAAoB,UAAWrvB,KAAKqyB,YAC9C,CAACnD,MAAM,IACV8C,EAAWrC,UASV,iBAAiBuD,GACtBlzB,KAAK6xB,cAAgBqB,EAEjBA,EAKOlzB,KAAKgyB,iBAAwCjpB,IAA1B/I,KAAK8yB,kBACjC9yB,KAAKmnB,iBALwBpe,IAA1B/I,KAAK8yB,mBACNhL,aAAa9nB,KAAK8yB,kBAClB9yB,KAAK8yB,sBAAmB/pB,GAOtB,UACH/I,KAAKgyB,YACNhyB,KAAK2vB,QAGP3vB,KAAKgyB,WAAa,IAAIhyB,KAAKyxB,WAAWzxB,KAAKqjB,KAAMrjB,KAAKsvB,IAAKtvB,KAAKuvB,WAChEvvB,KAAKgyB,WAAW5C,iBAAiB,OAAQpvB,KAAK8xB,QAC9C9xB,KAAKgyB,WAAW5C,iBAAiB,QAASpvB,KAAK0yB,SAC/C1yB,KAAKgyB,WAAW5C,iBAAiB,UAAWpvB,KAAKqyB,WAG3C,WAAWhM,GACjB,MAAM8M,EAAWnzB,KAAK8wB,MAAMsC,aAAa/M,GAMzC,OAHgBrmB,KAAK4xB,YAAYtqB,OAAO6rB,GAMnC,KAAK9M,GACVrmB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,6BAA8Bic,EAAK5lB,QAEhE,MAAMyxB,EAAuBlyB,KAAKglB,UAAYhlB,KAAKmyB,WAAW9L,QAAQtd,EAItE,IAAG/I,KAAK+kB,UAGD,CACL,MAAMsC,EAAU,IAAI9d,QAAqB,CAACK,EAASG,KACjD/J,KAAK0hB,QAAQvc,KAAK,CAACyE,UAASG,SAAQsc,OAAM6L,cAK5C,OAFAlyB,KAAKoyB,iBAEE/K,EATPrnB,KAAK0hB,QAAQvc,KAAK,CAACkhB,OAAM6L,YACzBlyB,KAAKoyB,iBAYD,iBACN,IAAIpyB,KAAKglB,UAEP,OASF,IAAIvkB,EAAST,KAAK0hB,QAAQjhB,OAE1B,IAAI,IAAIxH,EAAI,EAAGA,EAAIwH,IAAUxH,EAAG,CAK9B,MAAMyoB,EAAU1hB,KAAK0hB,QAAQzoB,IACvB,KAACotB,EAAI,SAAE2M,GAAYtR,EACzB,IAAIwQ,EAAUxQ,EAAQwQ,QACnB7L,IAAS2M,IAIVhzB,KAAKoK,OAASpK,KAAKoa,IAAIhQ,MAAM,0BAA2Bic,EAAK5lB,QAWzDyxB,IACFA,EAAUxQ,EAAQwQ,QAAUlyB,KAAKmyB,WAAW9L,IAK5CrmB,KAAKgyB,WAAWtG,KAAKwG,GAInBxQ,EAAQ9X,QAIV8X,EAAQsR,UAAW,GAHnBhzB,KAAK0hB,QAAQ5Y,OAAO7P,IAAK,GACzBwH,QCpTK,OAFgB,oBAAb,OAA2B5D,OAAS8N,KCQ/C,MAAM0oB,GAAazM,UAAYA,UAAUD,UAAY,KAU/C2M,IATW1M,UAAUD,UAAUzc,OAAO,yBACzB0c,UAAUD,UAAUtK,cAAclS,QAAQ,WACzC,SAASH,KAAK4c,UAAUD,YAAc,aAAa3c,KAAK4c,UAAU2M,SAG7D,mBAAmBvpB,KAAK4c,UAAUC,WACxC,aAAvBD,UAAUC,UAA2BD,UAAU4M,eAAiB,IAC/D,GAAYC,YAEY,WAAY,QAAWJ,MAAe,yBAAyBrpB,KAAKqpB,KAAkBA,GAAWnG,MAAM,YAAcmG,GAAWnG,MAAM,aACxItG,UAAUD,UAAUtK,cAAclS,QAAQ,WAICyc,UAAU4M,eAAiB,GAAK5M,UAAUD,UAAUzc,OAAO,kHCZhI,IAAIwpB,GAAW,EA4BA,MAAM,WAAsB5E,GAOzC,YAAsBzL,EAAwBiM,EAAaC,GACzDhO,QADoB,KAAA8B,OAAwB,KAAAiM,MAE5CtvB,KAAKqN,KAAOqmB,GACZC,GAAehyB,IAAI3B,KAAKqN,GAAIrN,MAE5B,MAAM4hB,EAAwB,CAC5BtW,KAAM,cACNgC,QAAS,CACPhC,KAAM,QACNgC,QAAS,CACP+V,OACAiM,MACAC,aAEFliB,GAAIrN,KAAKqN,KAIbxB,EAAU+V,GAGL,KAAKtU,GACV,MAAMsU,EAAwB,CAC5BtW,KAAM,cACNgC,QAAS,CACPhC,KAAM,OACNgC,UACAD,GAAIrN,KAAKqN,KAIbxB,EAAU+V,GAGL,QACL,MAAMA,EAAwB,CAC5BtW,KAAM,cACNgC,QAAS,CACPhC,KAAM,QACN+B,GAAIrN,KAAKqN,KAIbxB,EAAU+V,IAKP,MAAM+R,GAA6C,IAAIC,ICzDxDC,GAAc,EAAM7pB,KAAO,QAAU,GAEpC,MAAM,GAAb,cACU,KAAA8pB,cAAgB,CAAC,QAAS,QAAS,SAAU,QAAS,SAEtD,KAAAC,UAAY,EAAM/pB,KACtB,CACA,CAACqD,GAAI,EAAG2mB,KAAM,iBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,iBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,kBAAmBC,KAAM,KAEvC,CACA,CAAC5mB,GAAI,EAAG2mB,KAAM,iBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,iBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,kBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,iBAAmBC,KAAM,IACvC,CAAC5mB,GAAI,EAAG2mB,KAAM,gBAAmBC,KAAM,KAGpC,KAAAC,cAAyB,GAGxB,KAAAC,gBAAkB,CAAC9Q,EAAc+Q,EAAgClR,KACvE,MAAMmR,EAAO,QAAUR,GACjBS,EAAe,SAAS,GAAIpR,OAAO7G,kBAAkBgH,IAAOH,sBAA2BmR,IAO7F,OAAO,IAAI,GAFwCf,IAAa1oB,QAAyC,IAApB,GAAiD,GAAgB,GAE7GyY,EAAMiR,EANV,WAAnBF,EAA8B,KAA0B,aAAnBA,EAAgC,KAAO,GAE3C,MA0B9C,aAAa/Q,EAAc+Q,EAAiC,SAAUG,EAA+B,YAAaC,GAAQ,GAK3Hx0B,KAAKk0B,cAAcp5B,eAAey5B,KACpCv0B,KAAKk0B,cAAcK,GAAiB,CAClCE,OAAQ,GACRC,SAAU,GACVC,OAAQ,KAIZ,MAAMC,EAAU50B,KAAKk0B,cAAcK,GAAeH,GAE7C/Q,KAAQuR,IACXA,EAAQvR,GAAQ,IAGlB,MAAMwR,EAAaD,EAAQvR,GAE3B,IAAIwR,EAAWp0B,SAAW+zB,EAAkD,CAC1E,IAAI/Q,EAEJ,MAAMP,EAA4B,WAAnBkR,EAA8B,GAAK,KAUlD,OALA3Q,EAAYzjB,KAAKm0B,gBAAgB9Q,EAAM+Q,EAAgBlR,GAKnDO,GAKD+Q,GACDK,EAAW1vB,KAAKse,GAGXA,IARLpL,QAAQC,MAAM,mBAAoB+K,GAC3B,MAUX,OAAOwR,EAAW,GAGb,uBAA0BvoB,EAAUmX,GACzC,IAAI,MAAM8Q,KAAiBjoB,EAEzB,IAAI,MAAM8nB,KAAkB9nB,EAAIioB,GAE9B,IAAI,MAAMlR,KAAQ/W,EAAIioB,GAAeH,GAAiB,CAEpD,MAAMS,EAAkBvoB,EAAIioB,GAAeH,GAAgB/Q,GACrDsC,EAAMkP,EAAW1qB,QAAQsZ,IACnB,IAATkC,GACDkP,EAAW/rB,OAAO6c,EAAK,KAQpB,WAAI,G,uSCdJ,WAzHR,MA+DL,cAjBQ,KAAAmP,kBAAuC,CAAC,CAC9Cxd,QAAS,mgBACTC,SAAU,WAGJ,KAAAwd,cAAmC,CAAC,CAE1Czd,QAAS,mgBACTC,SAAU,WAGJ,KAAAyd,iBAEJ,GACI,KAAAC,UAAW,EACX,KAAAC,eAAgC,KAGnC,EAAMlrB,OACPhK,KAAK+0B,cAAgB/0B,KAAK80B,mBAIvB,UACL,OAAG90B,KAAKk1B,eAAuBl1B,KAAKk1B,eAC5Bl1B,KAAKi1B,SACJ1rB,QAAQK,UAGV5J,KAAKk1B,eAAiB3rB,QAAQ2B,IAAIlL,KAAK+0B,cAAc7K,IAAIiL,IAC9D,MAAMC,EAAe,IAAI,GACzBA,EAAanZ,WAAW1V,EAAa4uB,EAAU7d,SAAU,KACzD8d,EAAanZ,WAAW1V,EAAa4uB,EAAU5d,UAAW,KAE1D,MAAM9D,EAAS2hB,EAAalK,YAE5B,OAAO,GAAajL,aAAa,YAAaxM,GAAQ5J,KAAKxD,IACzD,MAAMgvB,EAAmBhvB,EAAMnC,OAAO,GACtCmxB,EAAiBvjB,UAEjB9R,KAAKg1B,iBAAiB5uB,EAAWivB,GAAkBhZ,eAAiB,CAClE/E,QAAS6d,EAAU7d,QACnBC,SAAU4d,EAAU5d,eAGtB1N,KAAK,KACP7J,KAAKi1B,UAAW,EAGhBj1B,KAAKk1B,eAAiB,OAIb,OAAOI,G,gDACZt1B,KAAKu1B,UAEX,IAAI,IAAIt8B,EAAI,EAAGA,EAAIq8B,EAAa70B,SAAUxH,EAAG,CAE3C,IAAIu8B,EAAiB/jB,GAAWP,GAAWokB,EAAar8B,GAAI,IAAK,IAAIojB,cAElEmZ,EAAe/0B,OAAS,KACzB+0B,EAAiB,IAAIryB,MAAM,GAAKqyB,EAAe/0B,QAAQg1B,KAAK,KAAKlwB,KAAK,IAAMiwB,GAI9E,MAAME,EAAW11B,KAAKg1B,iBAAiBQ,GACvC,GAAGE,EACD,OAAO/7B,OAAO2tB,OAAO,CACnBqO,YAAaL,EAAar8B,IACzBy8B,S,uSCudI,WA7fR,MAOL,cANQ,KAAAE,OAEJ,GAKF51B,KAAKoa,IAAM2E,GAAO,aAAcX,GAAStZ,MAAQsZ,GAASI,KAGpD,iBAAiB6E,EAAcwS,GACrC,MAAMC,EAAgBD,EAAaluB,WAE7B5C,EAAS,IAAI,GACnBA,EAAO4V,WAAW,EAAG,EAAG,eACxB5V,EAAOgX,UAAU,GAAYgK,aAAc,UAC3ChhB,EAAOuW,SAASwa,EAAe,kBAE/B,MAAMC,EAAchxB,EAAOuhB,UAAS,GAC9BvM,EAAc,IAAIxc,WAAWw4B,EAAYpuB,WAAamuB,GAC5D/b,EAAYpY,IAAIo0B,GAChBhc,EAAYpY,IAAIk0B,EAAcE,EAAYt1B,QAE1C,MAAMgjB,EAAYuS,GAAeC,aAAa5S,GACxC6S,EAAY,CAChB9I,KAAM,IACN9hB,KAAM,wBAGL,GACDtL,KAAKoa,IAAI,gDAIX,OADgBqJ,EAAUiI,KAAK3R,GAChBlQ,KAAKzE,IAKlB,GAJG,GACDpF,KAAKoa,IAAI,sCAAuChV,IAG9CA,IAAWA,EAAOuC,WACpB,MAAMuuB,EAGR,IAIE,MAAMtK,EAAe,IAAI,GAAkBxmB,EAAQ,CAACkU,SAAS,IAE7D,GAAqB,IAAlBlU,EAAO3E,OAAc,CACtB,MAAM01B,EAAYvK,EAAa5O,WAE/B,MADAhd,KAAKoa,IAAI9B,MAAM,mDAAoD6d,GAC7DA,EAGR,MAAMC,EAAcxK,EAAa3O,UAAU,eACxB,MAAhBmZ,GAAqBp2B,KAAKoa,IAAI9B,MAAM,oBAAqB8d,GAE5D,MAAMtQ,EAAS8F,EAAa3O,UAAU,UACxB,MAAX6I,GAAgB9lB,KAAKoa,IAAI9B,MAAM,eAAgBwN,GAElD,MAAMuQ,EAAUzK,EAAa5O,SAAS,WAGtC,OAFIqZ,GAASr2B,KAAKoa,IAAI9B,MAAM,aAAc+d,GAEnCzK,EACP,MAAM3wB,GACN+E,KAAKoa,IAAI9B,MAAM,gDAAiDrd,GAEhE,MADctB,OAAO2tB,OAAO4O,EAAW,CAAC5I,cAAeryB,MAGvDqd,IAOF,MANIA,EAAM7C,SAAY6C,EAAMhN,OAC1BgN,EAAQ3e,OAAO2tB,OAAO4O,EAAW,CAC/B5I,cAAehV,KAIbA,IAII,UAAUge,G,0CACtB,MAAM/K,EAAU,IAAI,GAAgB,CAACjS,SAAS,IAQ9C,IAAIsS,EANJL,EAAQnF,YAAY,eAAgB,CAACmQ,MAAOD,EAAKC,QAE9C,GACDv2B,KAAKoa,IAAI,cAAekc,EAAKC,MAAM7Z,KAIrC,IACE,MAAM2K,EAAUrnB,KAAKw2B,iBAAiBF,EAAKjT,KAAMkI,EAAQjF,UAAS,IAClEmQ,GAAelB,UACf3J,QAAqBvE,EACrB,MAAM/O,GAEN,MADAtY,KAAKoa,IAAI9B,MAAM,eAAiBA,EAAgB7C,SAC1C6C,EAGR,MAAMkU,EAAkBZ,EAAa/O,YAAY,SAEjD,GAAkB,UAAf2P,EAAS9wB,EACV,MAAM,IAAIoJ,MAAM,gCAAkC0nB,EAAS9wB,GAG7D,IAAIsL,EAASsvB,EAAKC,MAAO/J,EAAS+J,OAEhC,MADAv2B,KAAKoa,IAAI9B,MAAMge,EAAKC,MAAO/J,EAAS+J,OAC9B,IAAIzxB,MAAM,6BAGlBwxB,EAAKI,YAAclK,EAASmK,aAC5BL,EAAKM,GAAKpK,EAASoK,GACnBN,EAAKhB,aAAe9I,EAASqK,+BAE1B,GACD72B,KAAKoa,IAAI,YAAahU,EAAWkwB,EAAKI,aAActwB,EAAWkwB,EAAKM,IAAKN,EAAKhB,cAGhF,MAAMje,QAAkBof,GAAeK,OAAOR,EAAKhB,cACnD,IAAIje,EACF,MAAM,IAAIvS,MAAM,4BAGlBwxB,EAAKjf,UAAYA,EAEd,GACDrX,KAAKoa,IAAI,yBAA0Bkc,EAAKM,IAI1C,IACE,IAAIG,QAAc,GAAa9W,aAAa,YAAaqW,EAAKM,IAC9D,MAAMte,GAEN,MADAtY,KAAKoa,IAAI9B,MAAM,yBAA0BA,GACnCA,EAUR,OAPAge,EAAKv7B,EAAIg8B,EAAM,GACfT,EAAK9yB,EAAIuzB,EAAM,GAEZ,GACD/2B,KAAKoa,IAAI,wBAAyB2c,GAG7B/2B,KAAKg3B,gBAAgBV,MAGhB,gBAAgBA,G,0CAC5BA,EAAKW,SAAW,IAAI15B,WAAW,IAAI8K,YAEnC,MAAM6uB,EAAoC,CACxCx7B,EAAG,oBACHk7B,GAAIN,EAAKM,GACT77B,EAAGu7B,EAAKv7B,EACRyI,EAAG8yB,EAAK9yB,EACR+yB,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnBS,UAAWb,EAAKW,SAChBG,GAAI,GAGAC,EAA2B,IAAI,GAAgB,CAAC/d,SAAS,IAC/D+d,EAAyBxb,YAAYqb,EAAmB,iBAAkB,kBAE1E,MAAMlM,EAAOqM,EAAyB/Q,UAAS,GAC/C,GAAG0E,EAAKvqB,OAAS,IACf,KAAM,0CAGR,MAAM+nB,EAAkBtV,GAAW8X,EAAM,KAAK,GAAO,GAAM,GACrDsM,EAAkB9O,EAAgBtkB,QAAQ4N,UAuB1CylB,OArBqB,KAAW,mCACpC,OAAQ,CACN,MAAMC,EAAU,IAAIj6B,WAAW,IAAI8K,YAC7BovB,EAAeH,EAAgB9uB,aAAa,GAAayX,aAAa,cAAeuX,EAAQhvB,OAAOggB,KAC1G,GAA2B,MAAxBiP,EAAah3B,OACd,KAAM,yCAGR,MAAMi3B,QAAqB,GAAazX,aAAa,cAAewX,EAAcD,EAAS,IAAIj6B,WAAW,CAAC,KAErGg6B,EADapwB,EAASqwB,QAAe,GAAavX,aAAa,cAAeyX,IACjDlvB,OAAOkvB,GAK1C,IAA2D,IAAxD3lB,GAH2Bb,GAAW9K,EAAWmxB,GAAkB,IACvCrmB,GAAWolB,EAAKjf,UAAUC,QAAS,KAGhE,OAAOigB,MAKiBI,GACxB5M,EAAgB7X,SAAiB,GAAa+M,aAAa,cAAesX,EAAiBjB,EAAKjf,WAAY,KAAK,GAAM,GAAM,GAE7HugB,EAA+B,CACnCrB,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnB37B,EAAGu7B,EAAKv7B,EACRyI,EAAG8yB,EAAK9yB,EACRq0B,uBAAwBvB,EAAKjf,UAAUse,YACvCmC,eAAgB/M,GAGZQ,EAAU,IAAI,GAAgB,CAACjS,SAAS,IAC9CiS,EAAQnF,YAAY,gBAAiBwR,GAErC,MAAMG,EAAexM,EAAQjF,UAAS,GAMtC,IAAIsF,EAJD,GACD5rB,KAAKoa,IAAI,qBAAsBwd,GAIjC,IACEhM,QAAqB5rB,KAAKw2B,iBAAiBF,EAAKjT,KAAM0U,GACtD,MAAMzf,GAEN,MADAtY,KAAKoa,IAAI9B,MAAM,2BAA4BA,GACrCA,EAGR,MAAMkU,EAAWZ,EAAa/O,YAAY,mBAAoB,YAM9D,GAJG,GACD7c,KAAKoa,IAAI,gCAAiCoS,GAG1B,0BAAfA,EAAS9wB,GAAgD,wBAAf8wB,EAAS9wB,EACpD,MAAM,IAAIoJ,MAAM,2CAA6C0nB,EAAS9wB,GAGxE,IAAIsL,EAASsvB,EAAKC,MAAO/J,EAAS+J,OAChC,MAAM,IAAIzxB,MAAM,wCAGlB,IAAIkC,EAASsvB,EAAKI,YAAalK,EAASmK,cACtC,MAAM,IAAI7xB,MAAM,+CAGlB,GAAkB,0BAAf0nB,EAAS9wB,EAA+B,CAEzC,IAAIsL,SADwB,GAAaiZ,aAAa,YAAaqW,EAAKW,WAAW/yB,OAAO,IAC/DsoB,EAASwL,gBAClC,MAAM,IAAIlzB,MAAM,sDAGlB,MAAM,IAAIA,MAAM,8BAIlB,UACQ9E,KAAKi4B,0BAA0B3B,EAAM9J,EAAS0L,kBACpD,MAAMj9B,GAEN,MADA+E,KAAKoa,IAAI9B,MAAM,uCAAwCrd,GACjDA,EAKR,OAAO+E,KAAKm4B,sBAAsB7B,MAGtB,0BAA0BA,EAAmB8B,G,0CACzD9B,EAAKnU,UAAYxD,KAAKC,MAGtB0X,EAAK+B,iBAAmB,GAAapY,aAAa,YAAaqW,EAAKW,SAASzuB,OAAO8tB,EAAKI,eACxFluB,cAAc,GAAayX,aAAa,YAAaqW,EAAKI,YAAYluB,OAAO8tB,EAAKW,YAAY/yB,MAAM,EAAG,KAExGoyB,EAAKgC,gBAAkB,GAAarY,aAAa,YAAaqW,EAAKI,YAAYluB,OAAO8tB,EAAKW,YAAY/yB,MAAM,IAC5GsE,aAAa,GAAayX,aAAa,YAAaqW,EAAKW,SAASzuB,OAAO8tB,EAAKW,WAAYX,EAAKW,SAAS/yB,MAAM,EAAG,IAElH,MAAMq0B,EAAiB,IAAIh7B,iBAAiB,GAAa0iB,aAAa,cAAemY,EAAiB9B,EAAK+B,UAAW/B,EAAKgC,WAErHzgB,EAAO0gB,EAAer0B,MAAM,EAAG,IAC/Bs0B,EAAoBD,EAAer0B,MAAM,IAEzC0nB,EAAe,IAAI,GAAkB4M,EAAmB,CAAClf,SAAS,IAClEkT,EAAWZ,EAAa/O,YAAY,wBAE1C,GAAkB,yBAAf2P,EAAS9wB,EACV,MAAM,IAAIoJ,MAAM,+CAAiD0nB,GAGnE,IAAIxlB,EAASsvB,EAAKC,MAAO/J,EAAS+J,OAChC,MAAM,IAAIzxB,MAAM,4CAGlB,IAAIkC,EAASsvB,EAAKI,YAAalK,EAASmK,cACtC,MAAM,IAAI7xB,MAAM,kDAGf,GACD9E,KAAKoa,IAAI,0BAEXkc,EAAK36B,EAAI6wB,EAAS7wB,EAClB26B,EAAKmC,QAAUjM,EAASkM,SACxBpC,EAAKqC,GAAKnM,EAASoM,IACnBtC,EAAKpU,WAAasK,EAASqM,YAC3BvC,EAAKwC,MAAQ,EAEb94B,KAAK+4B,eAAezC,EAAK36B,EAAG26B,EAAKmC,QAASnC,EAAKqC,IAE/C,MAAMj4B,EAASkrB,EAAaR,YAE5B,IAAIpkB,EAAS6Q,QAAY,GAAaoI,aAAa,YAAauY,EAAkBt0B,MAAM,EAAGxD,KACzF,MAAM,IAAIoE,MAAM,gDAGlB,GAAYipB,gBAAgBuI,EAAKpU,WAAYoU,EAAKnU,cAG5C,eAAexmB,EAAW88B,EAAqBE,GAClD,GACD34B,KAAKoa,IAAI,sBAAuBze,EAAG88B,EAASE,GAG9C,MAAMK,EAAa5yB,EAAWqyB,GAC9B,GAAS,IAAN98B,GAA0B,qgBAAfq9B,EAEZ,MAAM,IAAIl0B,MAAM,oDAGf,GACD9E,KAAKoa,IAAI,kBAGX,MAAM6e,EAAY/nB,GAAW9K,EAAWuyB,GAAK,IACvCO,EAAiBhoB,GAAW8nB,EAAY,IAE9C,GAAGjnB,GAAIknB,EAAWnrB,IAAQ,EACxB,MAAM,IAAIhJ,MAAM,4CAGlB,GAAGiN,GAAIknB,EAAWvpB,EAAIwpB,EAAgBprB,KAAS,EAC7C,MAAM,IAAIhJ,MAAM,sDAGf,GACD9E,KAAKoa,IAAI,yBAGX,MACM+e,E3BqDH,SAAar9B,EAAab,GAC/B,IAAI6T,EAAMG,GAAInT,GACdb,GAAK,EACL,IAAI,IAAIhC,EAAI,EAAGA,EAAIgC,IAAKhC,EACtB6V,EAAMM,EAAKN,EAAKhT,GAElB,OAAOqT,GAAKL,EAAK,G2B3DCsqB,CADHrrB,GAAW,EAAG,GAAI,GACL,MAE1B,GAAGgE,GAAIknB,EAAWE,GAAW,EAC3B,MAAM,IAAIr0B,MAAM,qDAElB,GAAGiN,GAAIknB,EAAWvpB,EAAIwpB,EAAgBC,KAAa,EACjD,MAAM,IAAIr0B,MAAM,+DAOlB,OAJG,GACD9E,KAAKoa,IAAI,8CAGJ,EAGK,sBAAsBkc,G,0CAClC,MAAM+C,EAAS9yB,EAAa+vB,EAAK36B,EAAE4H,SAAS,KAE5C+yB,EAAK96B,EAAI,IAAI+B,WAAW,KAAK8K,YAI7B,IACE,IAAIixB,QAAW,GAAarZ,aAAa,UAAWoZ,EAAQ/C,EAAK96B,EAAG86B,EAAKmC,SACzE,MAAMngB,GACN,MAAMA,EAGR,MAAM0S,EAAO,IAAI,GAAgB,CAAC1R,SAAS,IAC3C0R,EAAKnP,YAAY,CACfngB,EAAG,uBACH66B,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnB6C,SAAU,CAAC,EAAGjD,EAAKwC,SACnB5X,IAAKoY,GACJ,wBAEH,MAAM7B,SAAsB,GAAaxX,aAAa,YAAa+K,EAAKE,cAAc1iB,OAAOwiB,EAAK1E,UAAS,IACrGyE,QAAsB,GAAa9K,aAAa,cAAewX,EAAcnB,EAAK+B,UAAW/B,EAAKgC,UAElG/M,EAAU,IAAI,GAAgB,CAACjS,SAAS,IAW9C,IAAIsS,EAVJL,EAAQnF,YAAY,uBAAwB,CAC1CmQ,MAAOD,EAAKC,MACZI,aAAcL,EAAKI,YACnBoB,eAAgB/M,IAGf,GACD/qB,KAAKoa,IAAI,6BAIX,IACEwR,QAAqB5rB,KAAKw2B,iBAAiBF,EAAKjT,KAAMkI,EAAQjF,UAAS,IACvE,MAAM5hB,GACN,MAAMA,EAGR,MAAM8nB,EAAWZ,EAAa/O,YAAY,+BAE1C,GAAkB,cAAf2P,EAAS9wB,GAAoC,iBAAf8wB,EAAS9wB,GAAuC,gBAAf8wB,EAAS9wB,EACzE,MAAM,IAAIoJ,MAAM,sDAAwD0nB,EAAS9wB,GAGnF,IAAIsL,EAASsvB,EAAKC,MAAO/J,EAAS+J,OAChC,MAAM,IAAIzxB,MAAM,mDAGlB,IAAIkC,EAASsvB,EAAKI,YAAalK,EAASmK,cACtC,MAAM,IAAI7xB,MAAM,0DAIlB,IACE,IAAIwe,QAAgB,GAAarD,aAAa,UAAWqW,EAAKqC,GAAIrC,EAAK96B,EAAG86B,EAAKmC,SAC/E,MAAM/zB,GACN,MAAM4e,EAGR,MAAMkW,QAAoB,GAAavZ,aAAa,YAAaqD,GACjEmW,EAAaD,EAAYt1B,MAAM,EAAG,GAClCqf,EAAYiW,EAAYt1B,OAAO,GAK/B,OAHG,GACDlE,KAAKoa,IAAI,kCAAmCoS,EAAS9wB,EAAG4nB,GAEnDkJ,EAAS9wB,GACd,IAAK,YAAa,CAChB,MAAMg+B,SAAuB,GAAazZ,aAAa,YAAaqW,EAAKW,SAASzuB,OAAO,CAAC,GAAIixB,KAAcv1B,OAAO,IAEnH,IAAI8C,EAAS0yB,EAAelN,EAASmN,iBAEnC,MADA35B,KAAKoa,IAAI9B,MAAM,uDAAwDohB,EAAelN,GAChF,IAAI1nB,MAAM,4BAGlB,MAAM0e,EAAarc,EAASmvB,EAAKW,SAAS/yB,MAAM,EAAG,GAAIoyB,EAAKI,YAAYxyB,MAAM,EAAG,IASjF,OARG,GACDlE,KAAKoa,IAAI,oBAAqBmJ,EAAWD,EAASE,GAGpD8S,EAAK/S,UAAYA,EACjB+S,EAAKhT,QAAUA,EACfgT,EAAK9S,WAAaA,EAEX8S,EAGT,IAAK,eAEH,IAAItvB,SADyB,GAAaiZ,aAAa,YAAaqW,EAAKW,SAASzuB,OAAO,CAAC,GAAIixB,KAAcv1B,OAAO,IACvFsoB,EAASoN,iBACnC,MAAM,IAAI90B,MAAM,6DAGlB,OAAO9E,KAAKm4B,sBAAsB7B,GAGpC,IAAK,cAEH,IAAItvB,SADyB,GAAaiZ,aAAa,YAAaqW,EAAKW,SAASzuB,OAAO,CAAC,GAAIixB,KAAcv1B,OAAO,IACvFsoB,EAASqN,iBACnC,MAAM,IAAI/0B,MAAM,6DAGlB,MAAM,IAAIA,MAAM,6CAKT,KAAKue,G,0CAChB,GAAGA,KAAQrjB,KAAK41B,OACd,OAAO51B,KAAK41B,OAAOvS,GAGrB,MAAMkT,EAAgC,IAAIh5B,WAAW,IAAI8K,YAIzD,IAAI2tB,GAAeC,aAAa5S,GAC9B,MAAM,IAAIve,MAAM,+BAAiCue,GAKnD,MAAMiT,EAAoB,CAACjT,OAAMkT,QAAOuD,SAAU,GAElD,IACE,MAAMzS,EAAUrnB,KAAK+5B,UAAUzD,GAE/B,OADAt2B,KAAK41B,OAAOvS,GAAQgE,QACPA,EACb,MAAM3iB,GACN,GAAuC4xB,EAAKwD,UAAY,EACtD,OAAO95B,KAAK+5B,UAAU,CACpB1W,KAAMiT,EAAKjT,KACXkT,MAAO,IAAIh5B,WAAW,IAAI8K,YAC1ByxB,SAAUxD,EAAKwD,SAAW,IAK9B,aADO95B,KAAK41B,OAAOvS,GACb3e,QC3lBG,SAAS,MCuBjB,SAASs1B,KACd,IAAIC,EAAsB,CACxBC,aAAa,EACbC,YAAY,EAEZC,OAAQ,OACRvuB,UAAW,IAAIrE,KACbyyB,EAAeI,WAAa7yB,EAC5ByyB,EAAe1uB,UAAUzD,QAAS6B,GAAkBA,KAAYnC,KAGlE+D,UAAW,GACX+uB,kBAAoB3wB,IACfswB,EAAeI,YAChB1wB,KAAYswB,EAAeI,YAG7BJ,EAAe1uB,UAAUpG,KAAKwE,KAI9B4d,EAAkC,IAAIhe,QAAW,CAACK,EAASG,KAC7DkwB,EAAerwB,QAAW1P,IACrBqtB,EAAS2S,aAAe3S,EAAS4S,aAEpC5S,EAAS2S,aAAc,EACvBtwB,EAAQ1P,KAGV+/B,EAAelwB,OAAS,IAAIvC,KACvB+f,EAAS4S,YAAc5S,EAAS2S,cAEnC3S,EAAS4S,YAAa,EACtBpwB,KAAUvC,OAqBd,OAXA+f,EAASkL,MAAM,IAAMjpB,QAAQ,KAC3B+d,EAAS6S,OAAS7S,EAAS1b,UAAY0b,EAAS8S,WAAa,KAC7D9S,EAAShc,UAAU9K,OAAS,EAEzB8mB,EAASgT,SACVhT,EAASgT,OAAS,UAItB5gC,OAAO2tB,OAAOC,EAAU0S,GAEjB1S,EC/DF,SAASiT,GAAWC,EAAYpf,GACrC,OAAO,IAAI9R,QAAcK,IACvB,MAAM8wB,EAAS,IAAIC,WACnBD,EAAOtL,iBAAiB,UAAYn0B,GAAM2O,EAAQ3O,EAAE2/B,OAAOx1B,SAC3Ds1B,EAAOrf,GAAQof,KAYZ,SAASI,GAAsBJ,GACpC,OAAOD,GAAWC,EAAM,qBAOnB,SAASK,GAAcC,EAAgBC,EAAmB,IAC/D,IAAIP,EACJ,MAAMQ,EAeD,SAA0BD,GAC/B,IAcyB,IAdtB,CACD,aACA,YACA,YACA,aACA,YACA,YACA,aACA,kBACA,YACA,aACA,YACA,mBACA,mBACA7wB,QAAQ6wB,GACR,MAAO,2BAGT,OAAOA,EAlCcE,CAAiBF,GACtC,IACEP,EAAO,IAAIU,KAAKJ,EAAW,CAACzvB,KAAM2vB,IAClC,MAAMhgC,GAEN,IAAImgC,EAAK,IAAIC,YACbN,EAAUjzB,QAASwzB,IACjBF,EAAGG,OAAOD,KAEZb,EAAOW,EAAGI,QAAQP,GAEpB,OAAOR,ECXM,MAAM,GAanB,YAAYgB,EAAOC,GATX,KAAAC,oBAAqB,ECqGxB,SAAoBhhC,EAAaihC,GACtC,GAAIA,EAEJ,IAAI,IAAI3iC,KAAK2iC,OACU7yB,IAAlB6yB,EAAW3iC,KACZ0B,EAAO1B,GAAK2iC,EAAW3iC,IDhGzB4iC,CAAW77B,KAAMy7B,GAEd,EAAMzxB,OACPhK,KAAKxG,MAAQ,SAGfwG,KAAK07B,UAAYA,EAEjB17B,KAAKoa,IAAM2E,GAAO,OAAS/e,KAAK07B,WAEhC17B,KAAK87B,cAAa,GAElB,GAAW3uB,SAAShI,KAAKnF,MAGpB,sBAAsB+7B,GAC3B/7B,KAAKmN,SAASrF,QAAQsF,IACpB,GAAG2uB,GAAYA,IAAa3uB,EAC1B,OAGF,MAAMquB,EAAKruB,EAAQquB,GAChBA,IACDA,EAAGO,QAAU,OACbP,EAAG9L,WAuCF,cACL,OAAO3vB,KAAK27B,mBAGP,aAAaM,GAAY,GAC9B,GAAGj8B,KAAKk8B,gBAAkBD,EACxB,OAAOj8B,KAAKk8B,cAad,IACE,IAAI3Q,EAAU4Q,UAAUC,KAAKp8B,KAAKxG,KAAMwG,KAAKyiB,SAE7C,IAAI8I,EACF,OAAOhiB,QAAQQ,SAEjB,MAAMuO,GAGN,OAFAtY,KAAKoa,IAAI9B,MAAM,mBAAqBA,EAAgB7C,SACpDzV,KAAK27B,oBAAqB,EACnBpyB,QAAQQ,OAAOuO,GAGxB,IAAI+jB,GAAW,EAOf,OANAzU,WAAW,KACLyU,GACF9Q,EAAQ+Q,QAAQ,CAAChxB,KAAM,wBAExB,KAEItL,KAAKk8B,cAAgB,IAAI3yB,QAAqB,CAACK,EAASG,KAC7DwhB,EAAQgR,UAAaxM,IACnBsM,GAAW,EACX,MAAMZ,EAAKlQ,EAAQnmB,OACnB,IAAIo3B,GAAY,EAEhBx8B,KAAKoa,IAAI,UAETqhB,EAAGa,QAAWhkB,IACZtY,KAAK27B,oBAAqB,EAC1B37B,KAAKoa,IAAI9B,MAAM,8CAA+CA,GAC9DvO,EAAOuO,IAGTmjB,EAAGO,QAAW/gC,IACZ+E,KAAKoa,IAAI9B,MAAM,UAAWrd,IACzBuhC,GAAax8B,KAAK87B,gBAGrBL,EAAGgB,QAAWxhC,IACZ+E,KAAKoa,IAAI9B,MAAM,SAAUrd,GACzB,MAAMyhC,EAAczhC,EAAE2/B,OAEtB56B,KAAK87B,aAAaU,GAAY,GAE3BE,EAAYJ,SACbI,EAAYJ,QAAQrhC,GAGtBwgC,EAAG9L,SAGL8L,EAAGkB,gBAAmB1hC,IACpB+E,KAAKoa,IAAI9B,MAAM,0BAGjB1O,EAAQ5J,KAAKy7B,GAAKA,IAGpBlQ,EAAQ+Q,QAAWvM,IACjBsM,GAAW,EACXr8B,KAAK27B,oBAAqB,EAC1B37B,KAAKoa,IAAI9B,MAAM,8CAA+CyX,GAC9DhmB,EAAOgmB,IAGTxE,EAAQqR,gBAAmB7M,IACzBsM,GAAW,EACXr8B,KAAKoa,IAAI6E,KAAK,8BAA+B8Q,EAAM8M,WAAY,KAAM9M,EAAM+M,YAG3E,IAAIrB,EAAK1L,EAAM6K,OAAOx1B,OACtBpF,KAAK+8B,OAAOj1B,QAASk1B,IAOfvB,EAAGwB,iBAAiBC,SAASF,EAAMxjC,OAxFnB,EAACiiC,EAAiBuB,K,MAC1C,MAAMr6B,EAAK84B,EAAG0B,kBAAkBH,EAAMxjC,MAEtC,GAAgB,QAAb,EAAAwjC,EAAMI,eAAO,eAAE38B,OAChB,IAAI,MAAMmI,KAASo0B,EAAMI,QACvBz6B,EAAG06B,YAAYz0B,EAAM00B,UAAW10B,EAAM20B,QAAS30B,EAAM40B,mBAoFnDL,CAAkB1B,EAAIuB,QAOzB,OAAOS,GAMZ,OAJIt6B,MAAMuX,QAAQ+iB,KAChBA,EAAY,GAAGj1B,OAAOi1B,IAGjBz9B,KAAK09B,eAAe,YAAcC,GAC/BF,EAAuBvT,IAAKuT,GAAcE,EAAY7wB,OAAO2wB,IACxB,IAG1C,MAAM/B,GACX,OAAO17B,KAAK09B,eAAe,YAAcC,GAAgBA,EAAY3wB,QAA2B,GAAI0uB,GAG/F,KAAK+B,EAA8BvjC,GAiBxC,OALIiJ,MAAMuX,QAAQ+iB,KAChBA,EAAY,GAAGj1B,OAAOi1B,GACtBvjC,EAAQ,GAAGsO,OAAOtO,IAGb8F,KAAK09B,eAAe,YAAcC,GAC/BF,EAAuBvT,IAAI,CAACuT,EAAW9X,IAAQgY,EAAYC,IAAI1jC,EAAMyrB,GAAM8X,IACxC,IAGxC,SAASI,EAAkBpD,GAMhC,OAJKA,aAAgBU,OACnBV,EAAOK,GAAc,CAACL,KAGjBz6B,KAAK89B,KAAKD,EAAUpD,GAqEtB,IAAOgD,GAOZ,OAJIt6B,MAAMuX,QAAQ+iB,KAChBA,EAAY,GAAGj1B,OAAOi1B,IAGjBz9B,KAAK09B,eAAkB,WAAaC,GACjCF,EAAuBvT,IAAKuT,GAAcE,EAAY7jC,IAAI2jC,IACxB,IAGtC,eAAkBrjC,EAA0BujC,EAAyEvjB,EAAcshB,EAAY17B,KAAK07B,WAC1J,IAAIqC,EAOJ,OALG3jB,IACD2jB,EAAOC,YAAYpf,MACnB5e,KAAKoa,IAAIA,EAAM,YAGVpa,KAAK87B,eAAejyB,KAAM4xB,GACxB,IAAIlyB,QAAW,CAACK,EAASG,KAK9B,MAAM2yB,EAAcjB,EAAGiB,YAAY,CAAChB,GAAYthC,GAEhDsiC,EAAYJ,QAAWrhC,IACrB6sB,aAAaH,GACb5d,EAAO2yB,EAAYpkB,QAGrBokB,EAAYuB,WAAchjC,IACxB6sB,aAAaH,GAEVvN,GACDpa,KAAKoa,IAAIA,EAAM,QAAS4jB,YAAYpf,MAAQmf,GAG9C,MAAM/U,EAAUjvB,EAAEmwB,IAAInwB,GAAKA,EAAEqL,QAC7BwE,EAAQ8Q,EAAUsO,EAAUA,EAAQ,KAGtC,MAAMrB,EAAUC,WAAW,KACzB5nB,KAAKoa,IAAI9B,MAAM,2BAA4BokB,IAC1C,KAOGwB,EAAWP,EAAYjB,EAAYiB,YAAYjC,IAE/ChhB,EAAUvX,MAAMuX,QAAQwjB,GACxBnkC,EAAkB2gB,EAAUwjB,EAAW,GAAG11B,OAAO01B,MA0BtD,SACL,OAAOl+B,KAAK09B,eAAoB,WAAaC,GAAgBA,EAAYQ,SAA6B,KAxXzF,GAAAhxB,SAAwC,G,2SEgezD,MAAMixB,GAAa,IAncZ,MAAP,cACU,KAAAC,iBAMJ,GAEI,KAAAC,oBAAuD,GACvD,KAAAC,kBAAoE,GACpE,KAAAxb,SAAiB,EAIjB,KAAA3I,IAAiC2E,GAAO,OAExC,KAAAyf,oBAKJ,GAqBS,c,0CACX,GAAGx+B,KAAK+iB,SACN,OAAO/iB,KAAK+iB,SAGd,MAAMA,QAAiB,EAAejpB,IAAI,MAS1C,OARIkG,KAAK+iB,WACHA,EAGF/iB,KAAK+iB,SAAWA,EAFhB/iB,KAAKy+B,YAAY,GAAI1b,WAMlB/iB,KAAK+iB,YAGD,YAAY2b,G,0CACvB,IAAIA,EAASC,KAAM,CACjB,MAAM5b,QAAiB/iB,KAAK4+B,cAC5BF,EAASC,KAAO5b,EAGlB,EAAephB,IAAI,CACjBk9B,UAAWH,OAUR,YAAYrb,GACjB,MAAMyb,EAAU9+B,KAAK+iB,SAClB+b,GACD9+B,KAAK++B,aAAaD,GAASj1B,KAAKkb,IAC9B/kB,KAAKg/B,mBAAmBja,KAI5B/kB,KAAK+iB,SAAWM,EAEhB,EAAe1hB,IAAI,CACjBy1B,GAAIp3B,KAAK+iB,WAIA,S,0CACX,MAAMkc,EAAgC,GAGtC,IAAI,IAAI5b,EAAO,EAAGA,GAAQ,EAAGA,IAC3B4b,EAAY95B,KAFC,KAEake,EAAO,aAInC,MAAM6b,QAAsB31B,QAAQ2B,IAAI+zB,EAAY/U,IAAI1vB,GAAO,EAAeV,IAAIU,KAE5E2kC,EAAiC,GACvC,IAAI,IAAIlmC,EAAI,EAAGA,EAAIimC,EAAcz+B,OAAQxH,IACpCimC,EAAcjmC,IACfkmC,EAAeh6B,KAAKnF,KAAKo/B,UAAU,cAAe,GAAI,CAAC/b,KAAOpqB,EAAI,EAAYomC,cAAc,KAIhG,MAAMryB,EAAQ,KAGZhN,KAAK+iB,cAAWha,EAEhB,GAAWu2B,iBACX30B,KAAKc,YAAY,CAACH,KAAM,WAO1B,OAJAsc,WAAW5a,EAAO,KAIXzD,QAAQ2B,IAAIi0B,GAAgB1M,MAAOna,IACxCA,EAAMinB,SAAU,IACf/1B,QAAQwD,MAKN,aAAaqW,EAAYpf,EAA4B,IAC1D,MAAMmwB,EAAiCnwB,EAAQ2gB,aAAe,WAAc3gB,EAAQygB,WAAa,SAAW,SAStG6P,EAAgB,YAGlBv0B,KAAKq+B,iBAAiBvjC,eAAey5B,KACvCv0B,KAAKq+B,iBAAiB9J,GAAiB,CACrCE,OAAQ,GACRC,SAAU,GACVC,OAAQ,KAIZ,MAAM5oB,EAAQ/L,KAAKq+B,iBAAiB9J,GAAeH,GAC9C/Q,KAAQtX,IACXA,EAAMsX,GAAQ,IAGhB,MAAMoL,EAAa1iB,EAAMsX,GAEnBmc,EAAmC,WAAnBpL,GAAiD,UAAlBG,EAA4B,EAAqC,EACtH,GAAG9F,EAAWhuB,QAAU++B,EAAe,CACrC,IAAIvmC,EAAIw1B,EAAWhuB,OAAS,EAAGg/B,GAAQ,EACvC,KAAMxmC,GAAK,IAAKA,EACd,GAAGw1B,EAAWx1B,GAAGkrB,SAAU,CACzBsb,GAAQ,EACR,MAIJ,MAAM1a,EAAY0a,EAAQhR,EAAW3lB,OAAO7P,EAAG,GAAG,GAAKw1B,EAAWU,MAElE,OADAV,EAAWiR,QAAQ3a,GACZxb,QAAQK,QAAQmb,GAGzB,MAAM4a,EAAS,CAACtc,EAAMkR,EAAeH,GAAgB7uB,KAAK,KAC1D,GAAGvF,KAAKu+B,kBAAkBoB,GACxB,OAAO3/B,KAAKu+B,kBAAkBoB,GAGhC,MAAMC,EAAgB,KAAKvc,aACrBwc,EAAmB,KAAKxc,gBAE9B,OAAOrjB,KAAKu+B,kBAAkBoB,GAAUp2B,QAAQ2B,IAAI,CAAC00B,EAAIC,GAAI3V,IAAI1vB,GAAO,EAAeV,IAAIU,KAC1FqP,KAAK,EAAOi2B,EAAYC,KAAmB,mCAC1C,MAAMtc,EAAYuS,GAAeC,aAAa5S,EAAM+Q,EAAgBG,EAAkC,WAAnBH,GACnF,IAAIrP,EACJ,GAAG+a,GAAoC,MAAtBA,EAAWr/B,OAAgB,CACtCs/B,GAA0C,KAAzBA,EAAct/B,SACjCs/B,EAAgB,oBAGlB,MAAMzc,EAAU/c,EAAau5B,GACvBvc,SAAmB,GAAatD,aAAa,YAAaqD,IAAUpf,OAAO,GAC3Esf,EAAajd,EAAaw5B,GAEhChb,EAAY,GAAiBga,aAAa1b,EAAMC,EAASC,EAAWC,EAAYC,EAAWxf,QAE3F,IACE,MAAMqyB,QAAa0J,GAAW1J,KAAKjT,GAE7B4c,EAAW,CACf,CAACL,GAAKx5B,EAAWkwB,EAAKhT,SACtB,CAACuc,GAAKz5B,EAAWkwB,EAAK9S,aAGxB,EAAe7hB,IAAIs+B,GAEnBlb,EAAY,GAAiBga,aAAa1b,EAAMiT,EAAKhT,QAASgT,EAAK/S,UAAW+S,EAAK9S,WAAYC,EAAWxf,GAC1G,MAAMqU,GAGN,MAFAtY,KAAKoa,IAAI,sBAAuB9B,EAAQA,EAAgB+T,cACjDrsB,KAAKu+B,kBAAkBoB,GACxBrnB,EAWV,cAHOtY,KAAKu+B,kBAAkBoB,GAC9BlR,EAAWiR,QAAQ3a,GACnB/kB,KAAKg/B,mBAAmBja,GACjBA,MAIJ,mBAAmBA,GACxB,GAAGA,EAAUkD,QACX,QAGqClD,EAAUF,gBAC/Ctb,QAAQK,SAAQ,GAChB5J,KAAK4+B,cAAc/0B,KAAKkZ,GAAYgC,EAAU1B,OAASN,IAC5ClZ,KAAKq2B,IACbnb,EAAUkD,SAIViY,IACDnb,EAAUkD,QAAU,KAClBjoB,KAAKoa,IAAI,kBAAmB2K,EAAU1B,MAEtC0B,EAAUkD,aAAUlf,EACpBgc,EAAUmC,UACV,GAAiBiZ,gBAAgBpb,GACjC,GAAeqb,gBAAgBpgC,KAAKq+B,iBAAkBtZ,GACtD,GAAeqb,gBAAgBpK,GAAe9B,cAAenP,EAAUtB,YAGzEsB,EAAUgD,qBAKT,UAAyC1M,EAAWH,EAAkC,GAAIjX,EAA4B,IAQ3H,MAAMsjB,EAAWyS,KAEjB,IAAI,eAACjT,EAAc,qBAAEsZ,GAAwBp8B,EAO7C,GANGo8B,GACD9Y,EAAS1d,KAAK,YACL7J,KAAKw+B,oBAAoB6B,KAIjC31B,EAAgB,CACjB,MAAM41B,EAAY3hB,KAAKC,MACjB2hB,EAAW,GAAIC,YAAY,KAC3BC,GAAoBA,EAAgBnX,aACtCtpB,KAAKoa,IAAI9B,MAAM,+BAAgC+C,EAAQH,EAAQjX,EAAS,SAAU0a,KAAKC,MAAQ0hB,GAAa,MAG7G,KAEH/Y,EAAS/d,QAAQ,KACfk3B,cAAcH,KAIlB,MAAMI,EAAiBroB,IACjBA,EAEO3F,GAAS2F,KAClBA,EAAQ,CAAC7C,QAAS6C,IAFlBA,EAAQ,CAAChN,KAAM,eAKjBic,EAASxd,OAAOuO,IAEG,MAAfA,EAAM8U,MAA+B,oBAAf9U,EAAMhN,MACd,MAAfgN,EAAM8U,MAA+B,wBAAf9U,EAAMhN,OAC7BtL,KAAK4gC,SAGJ38B,EAAQo7B,eAIO,MAAf/mB,EAAM8U,OACP9U,EAAMinB,SAAU,GAGdt7B,EAAQ48B,aACVvoB,EAAMlc,MAAQif,EACd/C,EAAM+T,MAAQA,GAAU/T,EAAMgV,eAAiBhV,EAAMgV,cAAcjB,OAAU/T,EAAM+T,QAAS,IAAKvnB,OAASunB,MAC1GzE,WAAW,KACLtP,EAAMinB,UACU,MAAfjnB,EAAM8U,MACPptB,KAAK4gC,SAKPtoB,EAAMinB,SAAU,IAEjB,QAIP,IAAIlc,EAEAod,EACApU,GAAQ,IAAKvnB,OAASunB,OAAS,cACnC,MAAMyU,EAAkB/b,IACtB,GAAGgC,EAAgB,CACjB,MAAMga,EAAQ/gC,KAAKw+B,oBAAoBzX,GACpCga,IACD98B,EAAQ8iB,eAAiBga,EAAM9e,WAInC,MAAMoF,GAAWoZ,EAAkB1b,GAAWic,YAAY3lB,EAAQH,EAAQjX,GAS1E,OAPGo8B,IACDrgC,KAAKw+B,oBAAoB6B,GAAwB,CAC/Cpe,UAAYhe,EAAsBge,UAClCoF,QAASE,IAINF,EAAQxd,KAAK0d,EAAS3d,QAAU0O,IAMrC,GAJkB,2BAAfA,EAAMhN,MACPtL,KAAKoa,IAAI9B,MAAM,QAASA,EAAM8U,KAAM9U,EAAMhN,KAAMtL,KAAK+iB,SAAUM,EAAMhI,EAAQH,GAG7D,MAAf5C,EAAM8U,MAAgBptB,KAAK+iB,WAAaM,EACvB,4BAAf/K,EAAMhN,OACP,EAAewB,OAAO,MACtB,EAAeA,OAAO,cAIxB6zB,EAAcroB,QACT,GAAkB,MAAfA,EAAM8U,MAAgBptB,KAAK+iB,UAAYM,IAASrjB,KAAK+iB,SAAU,CACvE,QAAsCha,IAAnC/I,KAAKs+B,oBAAoBjb,GAAqB,CAC/C,MAAMgE,EAAU,IAAI9d,QAAQ,CAAC03B,EAAeC,KAC1ClhC,KAAKo/B,UAAU,2BAA4B,CAAC+B,MAAO9d,GAAO,CAACwd,YAAY,IAAOh3B,KAAMu3B,IAClFphC,KAAKo/B,UAAU,2BAA4B,CACzC/xB,GAAI+zB,EAAa/zB,GACjBhH,MAAO+6B,EAAa/6B,OACnB,CAACgd,OAAMwd,YAAY,IAAOh3B,KAAKo3B,EAAeC,IAChDA,KAGLlhC,KAAKs+B,oBAAoBjb,GAAQgE,EAGnCrnB,KAAKs+B,oBAAoBjb,GAAMxZ,KAAK,KAElC7J,KAAKo/B,UAAU/jB,EAAQH,EAAQjX,GAAS4F,KAAK0d,EAAS3d,QAAS+2B,IAC9DA,QACE,GAAkB,MAAfroB,EAAM8U,KAAc,CAC5B,MAAMiU,GAAW/oB,EAAMhN,KAAK4hB,MAAM,yDAAyD,GACxFmU,IAAYhe,IACVpf,EAAQof,KACTpf,EAAQof,KAAOge,EAEfrhC,KAAKy+B,YAAY4C,GAGnBrhC,KAAK++B,aAAasC,EAASp9B,GAAS4F,KAAMkb,IACxCA,EAAUic,YAAY3lB,EAAQH,EAAQjX,GAAS4F,KAAK0d,EAAS3d,QAAS+2B,IACrEA,SAEA,GAAkB,MAAfroB,EAAM8U,MAAuD,IAAvC9U,EAAMhN,KAAKnB,QAAQ,gBAAuB,CACxE,MAAMk3B,GAAW/oB,EAAMhN,KAAK4hB,MAAM,yBAAyB,GACxDmU,IAAYhe,EACbrjB,KAAK++B,aAAasC,EAASp9B,GAAS4F,KAAMkb,IACxCA,EAAUic,YAAY3lB,EAAQH,EAAQjX,GAAS4F,KAAK0d,EAAS3d,QAAS+2B,IACrEA,GAEHA,EAAcroB,QAEX,GAAIrU,EAAQ8oB,UAA2B,MAAfzU,EAAM8U,KAU9B,IAAInpB,EAAQ8oB,UAAY,CAAC,kBAAmB,oBAAoBuU,SAAShpB,EAAMhN,MAAO,CAC3F,MAAMy1B,EAAQ/gC,KAAKw+B,oBAAoBzX,GAEvCA,OAAiBhe,SACV9E,EAAQ8iB,eAEZga,EAAOA,EAAM1Z,QAAQxd,KAAK,IAAMi3B,EAAeL,IAC7CK,EAAeL,QACf,GAAIx8B,EAAQ8oB,UAA2B,MAAfzU,EAAM8U,KAYZ,YAAf9U,EAAMhN,KACdsc,WAAW,KACTkZ,EAAeL,IACd,KAEHE,EAAcroB,OAjBmC,CACjD,MAAMsG,EAAMD,KAAKC,MACjB,GAAG3a,EAAQs9B,UACN3iB,GAAO3a,EAAQs9B,SAChB,OAAOZ,EAAcroB,GAIzBrU,EAAQu9B,SAAWv9B,EAAQu9B,SAAW96B,KAAK+6B,IAAI,GAAuB,IAAnBx9B,EAAQu9B,UAAkB,EAC7E5Z,WAAW,KACTkZ,EAAeL,IACK,IAAnBx8B,EAAQu9B,cA7BsC,CACjD,MAAMA,GAAYlpB,EAAMhN,KAAK4hB,MAAM,qBAAqB,IAAM,EAE9D,GAAGsU,QAAwCz4B,IAA5B9E,EAAQy9B,gBAAgCz9B,EAAQy9B,gBAAkB,MAAQz9B,EAAQo8B,qBAC/F,OAAOM,EAAcroB,GAGvBsP,WAAW,KACTkZ,EAAeL,IACiB,IAA/Be,OAuCT,OARGne,EAAQpf,EAAQof,MAAQrjB,KAAK+iB,UAC9B/iB,KAAK++B,aAAa1b,EAAMpf,GAAS4F,KAAKi3B,EAAgBH,GAEtD3gC,KAAK4+B,cAAc/0B,KAAKkZ,IACtB/iB,KAAK++B,aAAa1b,EAAON,EAAU9e,GAAS4F,KAAKi3B,EAAgBH,KAI9DpZ,IAKX7c,EAAe0zB,WAAaA,GACb,U,2SCzcA,WArDR,MAGL,cAFO,KAAAuD,eAAgB,EAGrB,IACE7G,GAAc,GAAI,IAClB,MAAM7/B,GACN+E,KAAK2hC,eAAgB,GAIlB,cACL,OAAO3hC,KAAK2hC,cAGP,MAAMC,EAA0Dv7B,GACrE,OAAGA,aAAiB80B,MJKaV,EIJHp0B,EJKzBw0B,GAAsBJ,GAAM5wB,KAAK4J,GAAU,IAAIlW,WAAWkW,KIL1B5J,KAAKvD,GAC/Bs7B,EAAWC,MAAMv7B,IAGnBs7B,EAAWC,MAAMx7B,GJAvB,IAA8Bo0B,EII5B,kBAAkBO,EAAkB8G,GACzC,MAAM/G,EAAwC,GAuB9C,MAtBuB,CACrB8G,MAAaE,GAA8B,mCACzC,IAAI/hC,KAAK2hC,cACP,MAAM,EAGR5G,EAAU51B,KAAK48B,MAEjBC,SAAU,KACRjH,EAAUt6B,OAAS,GAErBwhC,SAAU,CAACC,GAAgB,KACzB,MAAMzH,EAAOK,GAAcC,EAAWC,GAMtC,OAJGkH,GAAiBJ,GAClBA,EAAiBrH,GAGZA,M,uSC5CA,MAAM,GAQnB,YAAoB0H,GAAA,KAAAA,SAJZ,KAAAn2B,YAAa,EAKhB,EAAMhC,OACPhK,KAAKmiC,QAAU,SAGd,GAAuBh1B,SAAS1M,SACjCT,KAAKgM,WAAa,GAAuBmB,SAAS,GAAGnB,YAGvDhM,KAAK87B,eACL,GAAuB3uB,SAAShI,KAAKnF,MAG/B,e,MACN,OAAyB,QAAlB,EAAAA,KAAKk8B,qBAAa,QAAKl8B,KAAKk8B,cAAgBkG,OAAOhG,KAAKp8B,KAAKmiC,QAG/D,OAAO1E,GACZ,OAAOz9B,KAAKqiC,iBAAkBt2B,GAAUA,EAAMe,OAAO,IAAM2wB,IAGtD,YACL,OAAO2E,OAAOt1B,OAAO9M,KAAKmiC,QAGrB,IAAI1E,GACT,OAAOz9B,KAAKqiC,iBAAkBt2B,GAAUA,EAAMmhB,MAAM,IAAMuQ,IAGrD,KAAKA,EAAmBjR,GAE7B,OAAOxsB,KAAKqiC,iBAAkBt2B,GAAUA,EAAM6xB,IAAI,IAAMH,EAAWjR,IAG9D,QAAQqR,EAAkBxiB,EAAmC,QAOlE,OAAOrb,KAAKlG,IAAI+jC,GAAUh0B,KAAM2iB,IAC9B,IAAIA,EAEF,KAAM,iBAOR,OAJgBA,EAASnR,OAQtB,SAASwiB,EAAkBpD,GAE3BA,aAAgBU,OACnBV,EAAOK,GAAcL,IAGvB,MAAMjO,EAAW,IAAI8V,SAAS7H,EAAM,CAClC8H,QAAS,CACP,iBAAkB,GAAK9H,EAAK+H,QAIhC,OAAOxiC,KAAK89B,KAAKD,EAAUrR,GAAU3iB,KAAK,IAAM4wB,GAG3C,iBAAoB9wB,GACzB,OAAI3J,KAAKgM,WAIF,IAAIzC,QAAW,CAAMK,EAASG,IAAW,mCAC9C,IAAI04B,GAAW,EACf,MAAM9a,EAAUC,WAAW,KACzB7d,IAEA04B,GAAW,GACV,MAEH,IACE,MAAM12B,QAAc/L,KAAK87B,eACzB,IAAI/vB,EAGF,MAFA/L,KAAKgM,YAAa,EAClBhM,KAAKk8B,mBAAgBnzB,EACf,YAGR,MAAM25B,QAAY/4B,EAASoC,GAE3B,GAAG02B,EAAU,OACb74B,EAAQ84B,GACR,MAAMh+B,GACNqF,EAAOrF,GAGTojB,aAAaH,OA3BNpe,QAAQQ,OAAO,mBA+BnB,cAAc8zB,EAAkB7C,GACrC,MAAM2H,EAAa,GAAYC,kBAAkB5H,EAAWP,GACnDz6B,KAAK6iC,SAAShF,EAAUpD,GAAMhI,MAAM,IAAMgI,IAGnD,OAAOlxB,QAAQK,QAAQ+4B,GAGlB,qBAAqB51B,GAC1B,OAAOxD,QAAQ2B,IAAIlL,KAAKmN,SAAS+c,IAAI9c,IAGnC,GAFAA,EAAQpB,WAAae,GAEjBA,EACF,OAAOK,EAAQ01B,gBA3HN,GAAA31B,SAAqC,G,2SC6qBtD,MAAM41B,GAAiB,IA7nBhB,MAsCL,cArCQ,KAAAC,aAAe,IAAI,GAAuB,eAE1C,KAAAC,uBAEJ,GAEI,KAAAC,eAEJ,GAEI,KAAAC,cAWJ,GACI,KAAAC,gBAA4C,GAE7C,KAAAC,oBAA4E,GAC5E,KAAAC,yBAKH,GAEI,KAAAlpB,IAAiC2E,GAAO,MAAOX,GAAStZ,MAAQsZ,GAASI,KACzE,KAAA+kB,OAAS,EACT,KAAAC,QAAU,EACV,KAAAp5B,MAAQ,EAAMA,MAqKd,KAAAq5B,cAAgB,CAACp9B,EAAmBw3B,IAGnC,GAAa5d,aAAa,iBAAkB5Z,EAAMnC,QAAQuP,QAAQ,GAGnE,KAAAiwB,YAAc,CAACr9B,EAAmBw3B,KACxC,MAAM8F,EAAiB3J,KAIvB,OADApuB,EADa,CAACN,KAAM,cAAegC,QAAS,CAACuwB,WAAUx3B,WAEhDrG,KAAKqjC,oBAAoBxF,GAAY8F,GA7K5CnD,YAAY,KACV,IAAI,MAAM9jB,KAAO1c,KAAKsjC,yBAA0B,CAC9C,MAAM,SAAC/b,GAAYvnB,KAAKsjC,yBAAyB5mB,IAC9C6K,EAAS2S,aAAe3S,EAAS4S,oBAC3Bn6B,KAAKsjC,yBAAyB5mB,KAGxC,MAKG,gBAAgB2G,EAAuBhW,EAAYsf,EAAwCiX,EAAqBJ,EAAkB,QACxGz6B,IAA7B/I,KAAKmjC,cAAc9f,KACpBrjB,KAAKmjC,cAAc9f,GAAQ,GAC3BrjB,KAAKojC,gBAAgB/f,GAAQ,GAG/B,MAAMwgB,EAAe7jC,KAAKmjC,cAAc9f,GAElCgE,EAAU,IAAI9d,QAA6B,CAACK,EAASG,KACzD85B,EAAa1+B,KAAK,CAACkI,KAAIm2B,UAAS7W,KAAIpF,SAAU,CAAC3d,UAASG,UAAS65B,kBAOnE,OAJAhc,WAAW,KACT5nB,KAAK8jC,cAAczgB,IAClB,GAEIgE,EAGD,cAAchE,GACpB,MAAMwgB,EAAe7jC,KAAKmjC,cAAc9f,GAClC0gB,EAAyB,WAAT1gB,EAAoB,GAAK,GAG/C,GAAGrjB,KAAKojC,gBAAgB/f,IAAS0gB,IAAkBF,IAAiBA,EAAapjC,OAC/E,OAAO,EAIT,MAAMuqB,EAAO6Y,EAAan7B,cAAcnP,GAAmB,IAAdA,EAAEiqC,UAAkBK,EAAan7B,cAAcnP,GAAKA,EAAEiqC,UAAYxjC,KAAKwjC,UAAYK,EAAaz/B,QACvIw/B,EAAc5Y,EAAK4Y,aAAe,EAExC5jC,KAAKojC,gBAAgB/f,IAASugB,EAE9B5Y,EAAK2B,KACJ9iB,KAAMzE,IACLpF,KAAKojC,gBAAgB/f,IAASugB,EAC9B5jC,KAAK8jC,cAAczgB,GAEnB2H,EAAKzD,SAAS3d,QAAQxE,IACpBkT,IAEEA,GAAUA,EAAMhN,OAAwB,sBAAfgN,EAAMhN,MAA+C,oBAAfgN,EAAMhN,OACvEtL,KAAKoa,IAAI9B,MAAM,uBAAwBA,GAGzCtY,KAAKojC,gBAAgB/f,IAASugB,EAC9B5jC,KAAK8jC,cAAczgB,GAEnB2H,EAAKzD,SAASxd,OAAOuO,KAIlB,WAAWkrB,GAEhBxjC,KAAKwjC,QAAUA,EAGT,iBACN,OAAOxjC,KAAKgjC,aAGP,eAAenF,GACpB,MAAM9U,GAAY/oB,KAAKijC,uBAAuBpF,GAAY,CAAC79B,KAAKijC,uBAAuBpF,SAAa90B,KACjG/I,KAAKkjC,eAAerF,GAAY16B,MAAM6gC,KAAKhkC,KAAKkjC,eAAerF,IAAa,IAC/E,IAAIoG,GAAW,EACf,IAAI,IAAIhrC,EAAI,EAAGwH,EAASsoB,EAAStoB,OAAQxH,EAAIwH,IAAUxH,EAAG,CACxD,MAAMouB,EAAU0B,EAAS9vB,IACtBouB,GAAYA,EAAQ8S,YAAe9S,EAAQ6S,cAC5C7S,EAAQkT,SACR0J,GAAW,GAIf,OAAOA,EAGF,mBAAmB5gB,EAAYpZ,EAAgCvJ,EAAgBwjC,EAAe72B,EAAK,EAAGm2B,EAAU,EAAGW,GACxH,OAAOnkC,KAAKokC,gBAAgB/gB,EAAMhW,EAAI,IAAW,mCAG/C,OAFA82B,GAAeA,IAER,GAAW/E,UAAU,oBAAqB,CAC/Cn1B,WACAvJ,SACAwjC,SACC,CACD7gB,OACAuB,cAAc,OAEf5kB,KAAKqkC,SAASH,GAAQV,GAGpB,gBAAgBngB,EAAYpZ,EAA6BvJ,EAAgBwjC,EAAe72B,EAAK,EAAGm2B,EAAU,EAAGW,GAClH,OAAOnkC,KAAKokC,gBAAgB/gB,EAAMhW,EAAI,IAAW,mCAC/C82B,GAAeA,IAEf,MAAMG,EAAS,IAAkC,mCAC/CH,GAAeA,IAWf,OATgB,GAAW/E,UAAU,iBAAkB,CACrDn1B,WACAvJ,SACAwjC,SACC,CACD7gB,OACAuB,cAAc,IAGD6N,MAAO/tB,IACpB,GAAgB,2BAAbA,EAAI4G,KACL,OAAOtL,KAAKukC,iBAAiBt6B,GAAUJ,KAAKy6B,GAG9C,MAAM5/B,OAKJ8/B,EAAYv6B,EAASw6B,eAC3B,GAAGD,IAAcv6B,EAASy6B,iBAAkB,CAC1Cz6B,EAASy6B,kBAAmB,EAC5B,MAAMhoB,EAAMtW,EAAWo+B,GACvB,GAAGxkC,KAAKsjC,yBAAyB5mB,GAC/B,OAAO1c,KAAKukC,iBAAiBt6B,GAAUJ,KAAKy6B,GAIhD,OAAOA,OACNtkC,KAAKqkC,SAASH,GAAQV,GAOnB,SAASn9B,GACf,OAAOA,EAAQ,KAAO,IAGhB,aAAam8B,GACnB,IAAIn8B,EAOJ,OALAA,EAAQ,IAKDA,OAiBD,iBAAiBs+B,GACvB,MAAMH,EAAaG,EAAkEF,eAC/E/nB,EAAMtW,EAAWo+B,GAEvB,IAAIzqC,EAAIiG,KAAKsjC,yBAAyB5mB,GACtC,IAAI3iB,EAAG,CACL,MAAMwtB,EAAWyS,KAEjBjgC,EAAIiG,KAAKsjC,yBAAyB5mB,GAAO,CACvC6K,WACAI,QAAS,GAAIC,WAAW,KACtB5nB,KAAKoa,IAAI9B,MAAM,gCAAkCqsB,GACjDpd,EAASxd,OAAO,+BACf,MAGLwd,EAAS/d,QAAQ,KACfse,aAAa/tB,EAAE4tB,WAIjB/b,EADa,CAACN,KAAM,mBAAoBgC,QAASk3B,IAKnD,OAAOzqC,EAAEwtB,SAAS1d,KAAK26B,IACrB,GAAG9nB,IAAQtW,EAAWo+B,GACpB,KAAM,6BAGPG,EAAkEF,eAAiBD,IAIjF,aAAavgC,G,MAClB,IAAI,GAAY2gC,cACd,OAAOr7B,QAAQQ,OAAO,CAACuB,KAAM,+BAG/B,MAAMk3B,EAAmB,QAAZ,EAAAv+B,EAAQu+B,YAAI,QAAI,GACvB,KAACnf,EAAI,SAAEpZ,GAAYhG,EAEzB,IAAI4gC,EAEoB,eAArB5gC,EAAQ+2B,UAA8B8J,KAGV,4BAArB7gC,EAAQ+2B,WAChB6J,EAAU7kC,KAAKyjC,cACfx/B,EAAQ+2B,SAAW,qBAJnB6J,EAAU7kC,KAAK0jC,YACfz/B,EAAQ+2B,SAAW,aAMrB,MAAM6C,EC/TH,SAA+B5zB,EAAoDhG,GAGxF,MACM8gC,EADW,MACatkC,OAAS,IAAM,GAE7C,IAAI0H,EACJ,OAAO8B,EAASvO,GACd,IAAK,yBACHyM,EAAM,CAAC,QANM,GAMY,GAAI8B,EAASoD,GAAIpD,EAAS+6B,YAAYrW,OAAOsW,SAAS1/B,KAX7D,KAYlB,MAGF,IAAK,4BACH4C,EAAM,CAAC,WAXM,GAWe,GAAI8B,EAASoD,GAAIpD,EAAS+6B,YAAYrW,OAAOsW,SAAS1/B,KAhBhE,KAiBlB,MAGF,IAAK,6BACH4C,EAAM,CAAC,YAAa8B,EAASi7B,SAAUj7B,EAASsR,OAAO4pB,IAAM,MAAQ,SAAS5/B,KArB5D,KAsBlB,MAEF,IAAK,uBAKH4C,EAAM,CAAC,kBAJK8B,EAASm7B,WAAiD/3B,IACnEpD,EAASm7B,WAAwDC,YACjEp7B,EAASm7B,WAAmDE,UAC7Dr7B,EAASm7B,WAAW1pC,EACQuO,EAASs7B,eAAehgC,KA7BpC,KA8BlB,MAGF,IAAK,oBACH4C,EAAM8B,EAASu7B,UAAY,IAAMv7B,EAASw7B,SAC1C,MAGF,IAAK,uBACHt9B,EAAM,CAAC,UAAW8B,EAASqlB,KAAK/pB,KAvCd,KAwClB,MAGF,QACE8S,QAAQC,MAAM,yBAA0BrO,GACxC9B,EAAM,GAKV,OAAOA,GAAO48B,EAAM,IAAMA,EAAMA,GD+QbW,CAAsBz7B,EAAqBhG,EAAQ45B,UAC9D8H,EAAgB3lC,KAAKijC,uBAAuBpF,GAC5C+H,EAAc5lC,KAAK6lC,iBAQzB,GANA7lC,KAAKoK,OAASpK,KAAKoa,IAAI,eAAgByjB,EAAU2E,EAAMv4B,EAAUhG,EAAQ+2B,UAMtE2K,EAGD,OAAGnD,EACMmD,EAAc97B,KAAM4wB,GACtBA,EAAK+H,KAAOA,GACbxiC,KAAKoK,OAASpK,KAAKoa,IAAI,+CAAgDqgB,EAAK+H,KAAMA,GAE3ExiC,KAAK8lC,WAAWjI,GAAUh0B,KAAK,IAC7B7J,KAAK+lC,aAAa9hC,IACxBwuB,MAAM,IACAzyB,KAAK+lC,aAAa9hC,KAGpBw2B,GAIJkL,EAIX,MAAMpe,EAAWyS,KACXgB,EAAW/2B,EAAQ+2B,UAAY,aAErC,IAEIgL,EAFA/B,GAAW,EACXgC,GAAW,EAEXC,EAAgB5tB,WACXtY,KAAKijC,uBAAuBpF,GACnCtW,EAASxd,OAAOuO,GAChB4tB,EAAe,QAEZF,GAAqB1tB,GAAwB,sBAAfA,EAAMhN,MACrC06B,EAAgBhE,YAIpB,MAAM30B,EAAKrN,KAAKujC,SAEhBqC,EAAYO,QAAQtI,GAAUh0B,KAAW4wB,GAAe,mCAItD,GAAGA,EAAK+H,KAAOA,EAGb,YADMxiC,KAAK8lC,WAAWjI,IAChB,EAGRtW,EAAS3d,QAAQ6wB,OAChBhI,MAAM,KAEmBmT,EAAYQ,cAAcvI,EAAU7C,GAE5CnxB,KAAM+3B,IACtBoE,EAAkBpE,EAClB,MAAMsC,EAAQjgC,EAAQoiC,WAAarmC,KAAKsmC,aAAa9D,GACrD,IAAI9hC,EAGF6lC,EADEC,EAA6Cj9B,QAAQK,UAGzD,MAIM68B,EAAoB,CAAMpgC,EAAmB3F,IAAmB,mCACpE,GAAGmkC,EAAS,CAIV,aAFwBA,EAAQx+B,EAAOw3B,GAKzC,OAAOx3B,KAGHtM,EAAmB,yBAAfkQ,EAASvO,EAA+BsE,KAAK0mC,mBAAmBjsC,KAAKuF,MAAQA,KAAK2mC,gBAAgBlsC,KAAKuF,MAE3G4mC,EAAqB,GAC3BlmC,EAtBkB,EAuBlB,GAEE6lC,EAAoBvM,KACpB4M,EAAQzhC,KAAK,CAACzE,SAAQ8lC,mBAAkBD,sBACxCC,EAAmBD,EACnB7lC,GAAUwjC,QACJxjC,EAAS8hC,GAEjB,IAAIjgC,EAAO,EACX,MAAMskC,EAAa,IAAW,mCAG5B,MAAM,OAACnmC,EAAM,iBAAE8lC,EAAgB,kBAAED,GAAqBK,EAAQxiC,QAC9D,IAEE,MAAMgB,QAAerL,EAAEspB,EAAMpZ,EAAiBvJ,EAAQwjC,EAAO72B,EAAIpJ,EAAQu/B,QAASW,GAE5E99B,EAAQjB,EAAOiB,MAElBugC,EAAQnmC,QACTomC,IAGF7mC,KAAKoK,OAASpK,KAAKoa,IAAI,uCAAwCyjB,EAAUz4B,GACzE,MAAM0hC,EAAUpmC,EAASwjC,GAAS1B,IAASn8B,EAAMsB,WACjD,GAAGtB,EAAMsB,WAAY,CAEnBpF,GAAQ8D,EAAMsB,WAIZ4f,EAAS6S,OAAO,CAAC73B,OAAM7B,SAAQJ,MAAOkiC,IAGxC,MAAMuE,QAAwBN,EAAkBpgC,GAChD89B,UAEMqC,EACNrC,UAEM,GAAYtC,MAAMD,EAAYmF,GAGtCR,EAAkB38B,UAEfk9B,IACDb,GAAW,EAEX1e,EAAS3d,QAAQg4B,EAAWK,SAASO,EAzZxB,OA2Zf,MAAM99B,GACNwhC,EAAaxhC,OAIjB,IAAI,IAAIzL,EAAI,EAAGwH,EAASiG,KAAK+6B,IA1ETuF,IA0E0BJ,EAAQnmC,QAASxH,EAAIwH,IAAUxH,EAC3E4tC,MAEDpU,MAAO/tB,IACJ,CAAC,mBAAmB48B,SAAS58B,IAC/B1E,KAAKoa,IAAI9B,MAAM,kBAAmB5T,OAKxC,MAAMy/B,EAAc,KAClB,GAAGF,EAAU,CACX,MAAM3rB,EAAQ,IAAIxT,MAAM,YAGxB,MADAwT,EAAMhN,KAAO,oBACPgN,IAsBV,OAlBAiP,EAASgT,OAAS,KACZ0J,GAAagC,IACfhC,GAAW,SACJjkC,KAAKijC,uBAAuBpF,GACnCqI,EAAa,CAAC56B,KAAM,wBAIxBic,EAAS6S,OAAU6M,IACjBp7B,EAAU,CAACo7B,SAAU,OAAF,QAAGpJ,YAAaoJ,MAGrCjnC,KAAKijC,uBAAuBpF,GAAYtW,EAExCA,EAAS/d,QAAQ,YACRxJ,KAAKijC,uBAAuBpF,KAG9BtW,EAGD,WAAWsW,GAGjB,cADO79B,KAAKijC,uBAAuBpF,GAC5B79B,KAAK6lC,iBAAiB/4B,OAAO+wB,GAG/B,YAAW,KAACqJ,EAAI,SAAErJ,I,MACvB,MAAMsJ,EAAWD,EAAK1E,KACpB4E,EAAYD,GAAY,SAE1B,IAAIlD,GAAW,EACbgC,GAAW,EACXoB,EAAY,EACZC,EAAW,OAKAH,EAAW,SACtBG,EAAW,OACHH,EAAW,SACnBG,EAAW,OAGb,MAAM1D,EAAc5jC,KAAKqkC,SAASiD,GAE5BC,EAAa7gC,KAAKC,KAAKwgC,EAAWG,GAClCE,EhC9gBD,GAAK9wB,GAAe,IAAMA,GAAe,IAAM,SgCghBpD,IAAI+wB,EAAQ,EAEZ,MAAMC,EAA6B,CACjChsC,EAAG0rC,EAAY,eAAiB,YAChC/5B,GAAIm6B,EACJG,MAAOJ,EACP/tC,KAAMqkC,EACN+J,aAAc,IAGV3N,EAIF,CACFG,OAASyN,OAELtgB,EAAuD,IAAIhe,QAAQ,CAACK,EAASG,KACjF,GAAGw9B,EAAa,IACd,OAAOx9B,EAAO,CAACuB,KAAM,iBAGvB2uB,EAAerwB,QAAUA,EACzBqwB,EAAelwB,OAASA,IAI1B,GAFApQ,OAAO2tB,OAAOC,EAAU0S,GAErBsN,EAAa,IACd,OAAOhgB,EAGT,IAAI2e,EAAgB5tB,IACC,qBAAhBA,aAAK,EAALA,EAAOhN,OACRtL,KAAKoa,IAAI9B,MAAM,WAAYA,GAG7BiP,EAASxd,OAAOuO,GAChB2rB,GAAW,EACXiC,EAAe,QAGjB,MAAM7qB,EAAS+rB,EAAY,yBAA2B,sBAEhD/5B,EAAKrN,KAAKujC,SAMV54B,EAAO3K,KA+Db,MAAMmY,EA9DN,YACE,IAAI,IAAIzX,EAAS,EAAGA,EAASymC,EAAUzmC,GAAU4mC,EAAU,CACzD,MAAMvF,EAAO0F,UACP98B,EAAKy5B,gBAAgB,SAAU/2B,EAAI,IAGhCwtB,GAFMqM,EAAKhjC,MAAMxD,EAAQA,EAAS4mC,IAENz9B,KAAK4J,IACtC,GAAGwwB,EACD,KAAM,CAAC34B,KAAM,mBA6Bf,OA1BAX,EAAKP,OAASO,EAAKyP,IAAI,2BAA4BgtB,EAAWrF,EAAMtuB,EAAO9L,WAAY,IAAIpK,WAAWkW,GAAQhT,OAAQ,IAAIlD,WAAWkW,GAAQvP,QAAQzD,QA0B9I,GAAW2+B,UAAU/jB,EAAQ,CAClCysB,QAASN,EACTO,UAAWhG,EACXiG,iBAAkBT,EAClBlhC,MAAOoN,GACC,CAERiR,YAAY,IACX7a,KAAMzE,IACPiiC,IAIA9f,EAAS6S,OAAO,CAAC73B,KAAM8kC,EAAYC,EAAUhnC,MAAO6mC,IAEjDE,GAAaE,IACdhgB,EAAS3d,QAAQ89B,GACjBzB,GAAW,IAEZC,KAEJtC,GAAanR,MAAMyT,IAIf+B,GACLpD,EAAU,KACd,GAAGZ,EAAU,OACb,MAAMlqC,EAAIoe,EAAGnX,OACVjH,EAAEwI,MAAQ0hC,GACZlqC,EAAEG,MAAwB2P,KAAKg7B,IAQlC,IAAI,IAAI5rC,EAAI,EAAGwH,EAASiG,KAAK+6B,IALTuF,IAK0BO,GAAatuC,EAAIwH,IAAUxH,EACvE4rC,IAGFtd,EAASgT,OAAS,KAEZ0J,GAAagC,IACfhC,GAAW,EACXiC,EAAa,CAAC56B,KAAM,sBAIxBic,EAAS6S,OAAU6M,IACjBp7B,EAAU,CAACo7B,SAAU,OAAF,QAAGpJ,YAAaoJ,MAGrC1f,EAAS/d,QAAQ,KACf7H,EAAImL,OAAOya,GACP5lB,EAAI6gC,aACCxiC,KAAKkjC,eAAerF,KAI/B,MAAMl8B,EAAmC,QAA7B,EAAA3B,KAAKkjC,eAAerF,UAAS,QAAK79B,KAAKkjC,eAAerF,GAAY,IAAIqK,IAElF,OADAvmC,EAAIiO,IAAI2X,GACDA,IAKX7c,EAAeq4B,eAAiBA,GACjB,U,uSEtqBf,IAAIoF,IAAgB,EACb,MAAMrD,GAAkB,IACtBqD,GAGT,GAAiBC,oBAAqB97B,IACpCT,EAAU,CAAC0lB,OAAQjlB,MAGrB,GAAiB8b,yBAA4BhE,IAC3CvY,EAAU,CAACP,KAAM,yBAA0BgC,QAAS8W,KAGtD,MAAMikB,GAAgB,CACpB3E,YAAc9hB,IACZ,MAAM,SAACic,EAAQ,MAAEx3B,GAASub,EAAKtU,QACzBia,EAAW,GAAe8b,oBAAoBxF,GACjDtW,IACDA,EAAS3d,QAAQvD,UACV,GAAeg9B,oBAAoBxF,KAI9CyK,YAAc1mB,IACZumB,GAAgBvmB,EAAKtU,SAGvBi7B,YAAc3mB,IACZ,MAAM4mB,EAAa5mB,EAAKtU,QAClBD,EAAKm7B,EAAWn7B,GAEhBo7B,EAAgB9U,GAAe75B,IAAIuT,GAClB,YAApBm7B,EAAWl9B,KACZm9B,EAAchZ,cAAc,UAAW+Y,EAAWl7B,SACtB,SAApBk7B,EAAWl9B,KACnBm9B,EAAchZ,cAAc,QACA,UAApB+Y,EAAWl9B,OACnBm9B,EAAchZ,cAAc,SAC5BkE,GAAe7mB,OAAOO,KAI1Bq7B,kBAAoB9mB,IAClB,EAAe+mB,WAAW/mB,EAAKvU,GAAIuU,EAAKtU,UAG1CqZ,UAAY/E,IACV,GAAiB+E,UAAY/E,EAAKtU,SAGpCs7B,OAAQ,KACN,GAAiB/Z,yBAGnBzH,eAAgB,KACd,GAAiBA,kBAGnByhB,cAAgBjnB,IACd,MAAM7U,EAAU6U,EAAKtU,QAErB,GAAuBu7B,cAAc97B,IAGvCw3B,iBAAmB3iB,IACjB,MAAMlF,EAAMtW,EAAWwb,EAAKknB,iBACtB/uC,EAAI,GAAeupC,yBAAyB5mB,GAC5C6K,EAAWxtB,aAAC,EAADA,EAAGwtB,SACjBA,IACE3F,EAAKtJ,MACNiP,EAASxd,OAAO6X,EAAKtJ,OAErBiP,EAAS3d,QAAQgY,EAAKtU,YAqG9B,GAAI8hB,iBAAiB,UA/FGn0B,GAAW,qCACjC,IACE,MAAM2mB,EAKF3mB,EAAE+vB,KACA/d,EAAS2U,EAAK3U,OAGd7R,EAAIitC,GAAczmB,EAAKtW,MAC7B,GAAGlQ,EAED,YADAA,EAAEwmB,GAIJ,IAAIA,EAAKA,KACP,OAGF,OAAOA,EAAKA,MACV,IAAK,aACL,IAAK,iBACH,OAAO,GAAa3B,aAAa2B,EAAKA,QAASA,EAAKpa,MAAaqC,KAAKzE,IACpEyG,EAAU,CAACoB,SAAQ7H,aAGvB,IAAK,kBACL,IAAK,aACL,IAAK,iBACL,IAAK,aACL,IAAK,eACH,IAEE,IAAIA,EAAc,GAAewc,EAAKA,MAAM1e,MAAM,GAAgB0e,EAAKpa,MAEpEpC,aAAkBmE,UAInBnE,QAAeA,GAGjByG,EAAU,CAACoB,SAAQ7H,WACnB,MAAMkT,GACNzM,EAAU,CAACoB,SAAQqL,UAGrB,MAGF,IAAK,eAEH,GAAWsJ,EAAKA,MAAM1e,MAAM,GAAY0e,EAAKpa,MAAMgC,QAAQ,KACzDqC,EAAU,CAACoB,SAAQ7H,OAAQ,SAG7B,MAGF,IAAK,cACL,IAAK,WACL,IAAK,UAEH,GAAiBwc,EAAKA,MAAM1e,MAAM,GAAkB0e,EAAKpa,MACzD,MAGF,QACE,IAEE,IAAIpC,EAAS,GAAWwc,EAAKA,MAAM1e,MAAM,GAAY0e,EAAKpa,MAEvDpC,aAAkBmE,UACnBnE,QAAeA,GAKjByG,EAAU,CAACoB,SAAQ7H,WACnB,MAAMkT,GACNzM,EAAU,CAACoB,SAAQqL,YAOzB,MAAM5T,GACN2T,QAAQC,MAAM,qBAAsB5T,QAMxCmH,EAAU","file":"mtproto.worker.08024df6e720e6031331.bundle.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).pako={})}(this,(function(e){\"use strict\";var t=(e,t,i,n)=>{let a=65535&e|0,r=e>>>16&65535|0,s=0;for(;0!==i;){s=i>2e3?2e3:i,i-=s;do{a=a+t[n++]|0,r=r+a|0}while(--s);a%=65521,r%=65521}return a|r<<16|0};const i=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var n=(e,t,n,a)=>{const r=i,s=a+n;e^=-1;for(let i=a;i>>8^r[255&(e^t[i])];return-1^e};var a=function(e,t){let i,n,a,r,s,o,l,d,f,h,c,u,w,b,k,m,_,g,v,p,y,x,E,R;const A=e.state;i=e.next_in,E=e.input,n=i+(e.avail_in-5),a=e.next_out,R=e.output,r=a-(t-e.avail_out),s=a+(e.avail_out-257),o=A.dmax,l=A.wsize,d=A.whave,f=A.wnext,h=A.window,c=A.hold,u=A.bits,w=A.lencode,b=A.distcode,k=(1<>>24,c>>>=g,u-=g,g=_>>>16&255,0===g)R[a++]=65535&_;else{if(!(16&g)){if(0==(64&g)){_=w[(65535&_)+(c&(1<>>=g,u-=g),u<15&&(c+=E[i++]<>>24,c>>>=g,u-=g,g=_>>>16&255,!(16&g)){if(0==(64&g)){_=b[(65535&_)+(c&(1<o){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(c>>>=g,u-=g,g=a-r,p>g){if(g=p-g,g>d&&A.sane){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(y=0,x=h,0===f){if(y+=l-g,g2;)R[a++]=x[y++],R[a++]=x[y++],R[a++]=x[y++],v-=3;v&&(R[a++]=x[y++],v>1&&(R[a++]=x[y++]))}else{y=a-p;do{R[a++]=R[y++],R[a++]=R[y++],R[a++]=R[y++],v-=3}while(v>2);v&&(R[a++]=R[y++],v>1&&(R[a++]=R[y++]))}break}}break}}while(i>3,i-=v,u-=v<<3,c&=(1<{const u=c.bits;let w,b,k,m,_,g,v=0,p=0,y=0,x=0,E=0,R=0,A=0,Z=0,S=0,O=0,U=null,T=0;const D=new Uint16Array(16),I=new Uint16Array(16);let B,N,C,z=null,F=0;for(v=0;v<=r;v++)D[v]=0;for(p=0;p=1&&0===D[x];x--);if(E>x&&(E=x),0===x)return a[f++]=20971520,a[f++]=20971520,c.bits=1,0;for(y=1;y0&&(0===e||1!==x))return-1;for(I[1]=0,v=1;v852||2===e&&S>592)return 1;for(;;){B=v-A,h[p]g?(N=z[F+h[p]],C=U[T+h[p]]):(N=96,C=0),w=1<>A)+b]=B<<24|N<<16|C|0}while(0!==b);for(w=1<>=1;if(0!==w?(O&=w-1,O+=w):O=0,p++,0==--D[v]){if(v===x)break;v=t[i+h[p]]}if(v>E&&(O&m)!==k){for(0===A&&(A=E),_+=y,R=v-A,Z=1<852||2===e&&S>592)return 1;k=O&m,a[k]=E<<24|R<<16|_-f|0}}return 0!==O&&(a[_+O]=v-A<<24|64<<16|0),c.bits=E,0},h={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:c,Z_BLOCK:u,Z_TREES:w,Z_OK:b,Z_STREAM_END:k,Z_NEED_DICT:m,Z_STREAM_ERROR:_,Z_DATA_ERROR:g,Z_MEM_ERROR:v,Z_BUF_ERROR:p,Z_DEFLATED:y}=h,x=12,E=30,R=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function A(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Z=e=>{if(!e||!e.state)return _;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,b},S=e=>{if(!e||!e.state)return _;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Z(e)},O=(e,t)=>{let i;if(!e||!e.state)return _;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,S(e))},U=(e,t)=>{if(!e)return _;const i=new A;e.state=i,i.window=null;const n=O(e,t);return n!==b&&(e.state=null),n};let T,D,I=!0;const B=e=>{if(I){T=new Int32Array(512),D=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(f(1,e.lens,0,288,T,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;f(2,e.lens,0,32,D,0,e.work,{bits:5}),I=!1}e.lencode=T,e.lenbits=9,e.distcode=D,e.distbits=5},N=(e,t,i,n)=>{let a;const r=e.state;return null===r.window&&(r.wsize=1<=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whaveU(e,15),inflateInit2:U,inflate:(e,i)=>{let r,s,o,l,d,h,A,Z,S,O,U,T,D,I,C,z,F,L,M,H,j,K,P=0;const Y=new Uint8Array(4);let G,X;const W=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return _;r=e.state,r.mode===x&&(r.mode=13),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,O=h,U=A,K=b;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,r.check=n(r.check,Y,2,0),Z=0,S=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&Z)<<8)+(Z>>8))%31){e.msg=\"incorrect header check\",r.mode=E;break}if((15&Z)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(Z>>>=4,S-=4,j=8+(15&Z),0===r.wbits)r.wbits=j;else if(j>r.wbits){e.msg=\"invalid window size\",r.mode=E;break}r.dmax=1<>8&1),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=3;case 3:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,Y[2]=Z>>>16&255,Y[3]=Z>>>24&255,r.check=n(r.check,Y,4,0)),Z=0,S=0,r.mode=4;case 4:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>8),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=5;case 5:if(1024&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(T=r.length,T>h&&(T=h),T&&(r.head&&(j=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(s.subarray(l,l+T),j)),512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,r.length-=T),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.name+=String.fromCharCode(j))}while(j&&T>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=x;break;case 10:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>=7&S,S-=7&S,r.mode=27;break}for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<>>=1,S-=1,3&Z){case 0:r.mode=14;break;case 1:if(B(r),r.mode=20,i===w){Z>>>=2,S-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=E}Z>>>=2,S-=2;break;case 14:for(Z>>>=7&S,S-=7&S;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=E;break}if(r.length=65535&Z,Z=0,S=0,r.mode=15,i===w)break e;case 15:r.mode=16;case 16:if(T=r.length,T){if(T>h&&(T=h),T>A&&(T=A),0===T)break e;o.set(s.subarray(l,l+T),d),h-=T,l+=T,A-=T,d+=T,r.length-=T;break}r.mode=x;break;case 17:for(;S<14;){if(0===h)break e;h--,Z+=s[l++]<>>=5,S-=5,r.ndist=1+(31&Z),Z>>>=5,S-=5,r.ncode=4+(15&Z),Z>>>=4,S-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=E;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,S-=3}for(;r.have<19;)r.lens[W[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,G={bits:r.lenbits},K=f(0,r.lens,0,19,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid code lengths set\",r.mode=E;break}r.have=0,r.mode=19;case 19:for(;r.have>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=C,S-=C,r.lens[r.have++]=F;else{if(16===F){for(X=C+2;S>>=C,S-=C,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=E;break}j=r.lens[r.have-1],T=3+(3&Z),Z>>>=2,S-=2}else if(17===F){for(X=C+3;S>>=C,S-=C,j=0,T=3+(7&Z),Z>>>=3,S-=3}else{for(X=C+7;S>>=C,S-=C,j=0,T=11+(127&Z),Z>>>=7,S-=7}if(r.have+T>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=E;break}for(;T--;)r.lens[r.have++]=j}}if(r.mode===E)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=E;break}if(r.lenbits=9,G={bits:r.lenbits},K=f(1,r.lens,0,r.nlen,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid literal/lengths set\",r.mode=E;break}if(r.distbits=6,r.distcode=r.distdyn,G={bits:r.distbits},K=f(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,G),r.distbits=G.bits,K){e.msg=\"invalid distances set\",r.mode=E;break}if(r.mode=20,i===w)break e;case 20:r.mode=21;case 21:if(h>=6&&A>=258){e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,a(e,U),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,r.mode===x&&(r.back=-1);break}for(r.back=0;P=r.lencode[Z&(1<>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,r.length=F,0===z){r.mode=26;break}if(32&z){r.back=-1,r.mode=x;break}if(64&z){e.msg=\"invalid literal/length code\",r.mode=E;break}r.extra=15&z,r.mode=22;case 22:if(r.extra){for(X=r.extra;S>>=r.extra,S-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[Z&(1<>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,64&z){e.msg=\"invalid distance code\",r.mode=E;break}r.offset=F,r.extra=15&z,r.mode=24;case 24:if(r.extra){for(X=r.extra;S>>=r.extra,S-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=E;break}r.mode=25;case 25:if(0===A)break e;if(T=U-A,r.offset>T){if(T=r.offset-T,T>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=E;break}T>r.wnext?(T-=r.wnext,D=r.wsize-T):D=r.wnext-T,T>r.length&&(T=r.length),I=r.window}else I=o,D=d-r.offset,T=r.length;T>A&&(T=A),A-=T,r.length-=T;do{o[d++]=I[D++]}while(--T);0===r.length&&(r.mode=21);break;case 26:if(0===A)break e;o[d++]=r.length,A--,r.mode=21;break;case 27:if(r.wrap){for(;S<32;){if(0===h)break e;h--,Z|=s[l++]<{if(!e||!e.state)return _;let t=e.state;return t.window&&(t.window=null),e.state=null,b},inflateGetHeader:(e,t)=>{if(!e||!e.state)return _;const i=e.state;return 0==(2&i.wrap)?_:(i.head=t,t.done=!1,b)},inflateSetDictionary:(e,i)=>{const n=i.length;let a,r,s;return e&&e.state?(a=e.state,0!==a.wrap&&11!==a.mode?_:11===a.mode&&(r=1,r=t(r,i,n,0),r!==a.check)?g:(s=N(e,i,n,n),s?(a.mode=31,v):(a.havedict=1,b))):_},inflateInfo:\"pako inflate (from Nodeca project)\"};const z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var F=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)z(i,t)&&(e[t]=i[t])}}return e},L=e=>{let t=0;for(let i=0,n=e.length;i=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;H[254]=H[254]=1;var j=e=>{let t,i,n,a,r,s=e.length,o=0;for(a=0;a>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},K=(e,t)=>{let i,n;const a=t||e.length,r=new Array(2*a);for(n=0,i=0;i4)r[n++]=65533,i+=s-1;else{for(t&=2===s?31:3===s?15:7;s>1&&i1?r[n++]=65533:t<65536?r[n++]=t:(t-=65536,r[n++]=55296|t>>10&1023,r[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&M)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+H[e[i]]>t?i:t},Y={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var G=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var X=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const W=Object.prototype.toString,{Z_NO_FLUSH:q,Z_FINISH:J,Z_OK:Q,Z_STREAM_END:V,Z_NEED_DICT:$,Z_STREAM_ERROR:ee,Z_DATA_ERROR:te,Z_MEM_ERROR:ie}=h;function ne(e){this.options=F({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new G,this.strm.avail_out=0;let i=C.inflateInit2(this.strm,t.windowBits);if(i!==Q)throw new Error(Y[i]);if(this.header=new X,C.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=j(t.dictionary):\"[object ArrayBuffer]\"===W.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=C.inflateSetDictionary(this.strm,t.dictionary),i!==Q)))throw new Error(Y[i])}function ae(e,t){const i=new ne(t);if(i.push(e),i.err)throw i.msg||Y[i.err];return i.result}ne.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,a=this.options.dictionary;let r,s,o;if(this.ended)return!1;for(s=t===~~t?t:!0===t?J:q,\"[object ArrayBuffer]\"===W.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),r=C.inflate(i,s),r===$&&a&&(r=C.inflateSetDictionary(i,a),r===Q?r=C.inflate(i,s):r===te&&(r=$));i.avail_in>0&&r===V&&i.state.wrap>0&&0!==e[i.next_in];)C.inflateReset(i),r=C.inflate(i,s);switch(r){case ee:case te:case $:case ie:return this.onEnd(r),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(0===i.avail_out||r===V))if(\"string\"===this.options.to){let e=P(i.output,i.next_out),t=i.next_out-e,a=K(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(a)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(r!==Q||0!==o){if(r===V)return r=C.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},ne.prototype.onData=function(e){this.chunks.push(e)},ne.prototype.onEnd=function(e){e===Q&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=L(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var re=ne,se=ae,oe=function(e,t){return(t=t||{}).raw=!0,ae(e,t)},le=ae,de=h,fe={Inflate:re,inflate:se,inflateRaw:oe,ungzip:le,constants:de};e.Inflate=re,e.constants=de,e.default=fe,e.inflate=se,e.inflateRaw=oe,e.ungzip=le,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function bytesToHex(bytes: ArrayLike) {\r\n const arr: string[] = new Array(bytes.length);\r\n for(let i = 0; i < bytes.length; ++i) {\r\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\r\n }\r\n return arr.join('');\r\n}\r\n\r\nexport function bytesFromHex(hexString: string) {\r\n const len = hexString.length;\r\n const bytes = new Uint8Array(Math.ceil(len / 2));\r\n let start = 0;\r\n\r\n if(len % 2) { // read 0x581 as 0x0581\r\n bytes[start++] = parseInt(hexString.charAt(0), 16);\r\n }\r\n\r\n for(let i = start; i < len; i += 2) {\r\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\r\n let mod3: number;\r\n let result = '';\r\n\r\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\r\n mod3 = nIdx % 3;\r\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\r\n if(mod3 === 2 || nLen - nIdx === 1) {\r\n result += String.fromCharCode(\r\n uint6ToBase64(nUint24 >>> 18 & 63),\r\n uint6ToBase64(nUint24 >>> 12 & 63),\r\n uint6ToBase64(nUint24 >>> 6 & 63),\r\n uint6ToBase64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return result.replace(/A(?=A$|$)/g, '=');\r\n}\r\n\r\nexport function uint6ToBase64(nUint6: number) {\r\n return nUint6 < 26\r\n ? nUint6 + 65\r\n : nUint6 < 52\r\n ? nUint6 + 71\r\n : nUint6 < 62\r\n ? nUint6 - 4\r\n : nUint6 === 62\r\n ? 43\r\n : nUint6 === 63\r\n ? 47\r\n : 65;\r\n}\r\n\r\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n if(len !== bytes2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < len; ++i) {\r\n if(bytes1[i] !== bytes2[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\r\n const len = bytes1.length;\r\n const bytes = new Uint8Array(len);\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = bytes1[i] ^ bytes2[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\n/* export function bytesToArrayBuffer(b: number[]) {\r\n return (new Uint8Array(b)).buffer;\r\n}\r\n\r\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\r\n // Be careful with converting subarrays!!\r\n if(bytes instanceof ArrayBuffer) {\r\n return bytes;\r\n }\r\n if(bytes.buffer !== undefined &&\r\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\r\n return bytes.buffer;\r\n }\r\n return bytesToArrayBuffer(bytes);\r\n} */\r\n\r\nexport function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\r\n if(bytes instanceof Uint8Array) {\r\n return bytes;\r\n } else if(typeof(bytes) === 'string') {\r\n return new TextEncoder().encode(bytes);\r\n }\r\n\r\n return new Uint8Array(bytes);\r\n}\r\n\r\n/* export function bytesFromArrayBuffer(buffer: ArrayBuffer) {\r\n const len = buffer.byteLength;\r\n const byteView = new Uint8Array(buffer);\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = byteView[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bufferConcat(buffer1: any, buffer2: any) {\r\n const l1 = buffer1.byteLength || buffer1.length;\r\n const l2 = buffer2.byteLength || buffer2.length;\r\n const tmp = new Uint8Array(l1 + l2);\r\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\r\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\r\n\r\n return tmp.buffer;\r\n} */\r\n\r\nexport function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\r\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\r\n\r\n const tmp = new Uint8Array(length);\r\n \r\n let lastLength = 0;\r\n args.forEach(b => {\r\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\r\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\r\n });\r\n\r\n return tmp/* .buffer */;\r\n}\r\n\r\nexport function bytesFromWordss(input: Uint32Array) {\r\n const o = new Uint8Array(input.byteLength);\r\n for(let i = 0, length = input.length * 4; i < length; ++i) {\r\n o[i] = ((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\r\n }\r\n\r\n return o;\r\n}\r\n\r\nexport function bytesToWordss(input: Parameters[0]) {\r\n const bytes = convertToUint8Array(input);\r\n\r\n const words: number[] = [];\r\n for(let i = 0, len = bytes.length; i < len; ++i) {\r\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\r\n }\r\n\r\n return new Uint32Array(words);\r\n}\r\n\r\n// * https://stackoverflow.com/a/52827031\r\n/* export const isBigEndian = (() => {\r\n const array = new Uint8Array(4);\r\n const view = new Uint32Array(array.buffer);\r\n return !((view[0] = 1) & array[0]);\r\n})(); */\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes';\n\nObject.defineProperty(Uint8Array.prototype, 'hex', {\n get: function(): string {\n return bytesToHex(this);\n },\n \n set: function(str: string) {\n this.set(bytesFromHex(str));\n },\n enumerable: true,\n configurable: true\n});\n\nUint8Array.prototype.randomize = function() {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(this);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n \n return this;\n};\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n //return {type: 'bytes', value: [...this]};\n};\n\nArray.prototype.findAndSplice = function(verify: (value: T, index?: number, array?: Array) => boolean) {\n let index = this.findIndex(verify);\n return index !== -1 ? this.splice(index, 1)[0] : undefined;\n};\n\nString.prototype.toHHMMSS = function(leadZero = false) {\n const sec_num = parseInt(this + '', 10);\n const hours = Math.floor(sec_num / 3600);\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\n \n if(hours) leadZero = true;\n if(minutes < 10) minutes = leadZero ? \"0\" + minutes : minutes;\n if(seconds < 10) seconds = \"0\" + seconds;\n return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds;\n};\n\n/* Promise.prototype.finally = Promise.prototype.finally || {\n finally(fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n }\n}.finally; */\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n hex: string;\n randomize: () => Uint8Array,\n concat: (...args: Array) => Uint8Array,\n //toString: () => string,\n toJSON: () => number[],\n //toJSON: () => {type: 'bytes', value: number[]},\n }\n \n interface Array {\n findAndSplice(verify: (value: T, index?: number, array?: Array) => boolean): T;\n }\n \n interface String {\n toHHMMSS(leadZero?: boolean): string;\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' });\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { notifySomeone, isWorker } from '../helpers/context';\r\nimport { WorkerTaskTemplate } from '../types';\r\n//import { stringify } from '../helpers/json';\r\n\r\nclass LocalStorage> {\r\n private prefix = '';\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\r\n if(Modes.test) {\r\n this.prefix = 't_';\r\n }\r\n }\r\n\r\n public get(key: T, useCache = true): Storage[T] {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.cache[key];\r\n } else if(this.useStorage) {\r\n let value: Storage[T];\r\n try {\r\n value = localStorage.getItem(this.prefix + key as string) as any;\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n\r\n if(value !== null) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch(err) {\r\n //console.error(err);\r\n }\r\n } else {\r\n value = undefined;\r\n }\r\n\r\n return value;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.cache[key] = value;\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n const stringified = JSON.stringify(value);\r\n localStorage.setItem(this.prefix + key, stringified);\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n //if(this.useStorage) {\r\n try {\r\n localStorage.removeItem(this.prefix + key);\r\n } catch(err) {\r\n \r\n }\r\n //}\r\n }\r\n\r\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\r\n // if(this.useStorage) {\r\n try {\r\n let obj: Partial = {};\r\n if(preserveKeys) {\r\n preserveKeys.forEach(key => {\r\n const value = this.get(key);\r\n if(value !== undefined) {\r\n obj[key] = value;\r\n }\r\n });\r\n }\r\n \r\n localStorage.clear();\r\n\r\n if(preserveKeys) {\r\n this.set(obj);\r\n }\r\n } catch(err) {\r\n\r\n }\r\n // }\r\n } */\r\n\r\n public clear() {\r\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id'];\r\n for(let i = 1; i <= 5; ++i) {\r\n keys.push(`dc${i}_server_salt`);\r\n keys.push(`dc${i}_auth_key`);\r\n }\r\n\r\n for(let key of keys) {\r\n this.delete(key, true);\r\n }\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n this.useStorage = enabled;\r\n\r\n if(!enabled) {\r\n this.clear();\r\n } else {\r\n return this.set(this.cache);\r\n }\r\n }\r\n}\r\n\r\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\r\n args: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: any\r\n};\r\n\r\nexport default class LocalStorageController> {\r\n private static STORAGES: LocalStorageController[] = [];\r\n private taskId = 0;\r\n private tasks: {[taskID: number]: (result: any) => void} = {};\r\n //private log = (...args: any[]) => console.log('[SW LS]', ...args);\r\n //private log = (...args: any[]) => {};\r\n\r\n private storage: LocalStorage;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\r\n LocalStorageController.STORAGES.push(this);\r\n\r\n if(!isWorker) {\r\n this.storage = new LocalStorage(/* preserveKeys */);\r\n }\r\n }\r\n\r\n public finishTask(taskId: number, result: any) {\r\n //this.log('finishTask:', taskID, result, Object.keys(this.tasks));\r\n\r\n if(!this.tasks.hasOwnProperty(taskId)) {\r\n //this.log('no such task:', taskID, result);\r\n return;\r\n }\r\n\r\n this.tasks[taskId](result);\r\n delete this.tasks[taskId];\r\n }\r\n\r\n private proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']) {\r\n return new Promise((resolve, reject) => {\r\n if(isWorker) {\r\n const taskId = this.taskId++;\r\n\r\n this.tasks[taskId] = resolve;\r\n const task: LocalStorageProxyTask = {\r\n type: 'localStorageProxy', \r\n id: taskId,\r\n payload: {\r\n type,\r\n args\r\n }\r\n };\r\n\r\n notifySomeone(task);\r\n } else {\r\n args = Array.prototype.slice.call(args);\r\n\r\n // @ts-ignore\r\n const result: any = this.storage[type].apply(this.storage, args as any);\r\n resolve(result);\r\n }\r\n });\r\n }\r\n\r\n public get(key: T, useCache?: boolean) {\r\n return this.proxy('get', key, useCache);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal?: boolean) {\r\n return this.proxy('set', obj, onlyLocal);\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal?: boolean) {\r\n return this.proxy('delete', key, saveLocal);\r\n }\r\n\r\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\r\n return this.proxy('clear'/* , preserveKeys */);\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n return this.proxy('toggleStorage', enabled);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport type { DcId } from '../types';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport LocalStorageController from './localStorage';\r\n\r\nconst sessionStorage = new LocalStorageController<{\r\n dc: DcId,\r\n user_auth: UserAuth,\r\n state_id: number,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance,\r\n kz_version: 'K' | 'Z',\r\n tgme_sync: {\r\n canRedirect: boolean,\r\n ts: number\r\n }\r\n}>(/* ['kz_version'] */);\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","'use strict'\n//@flow\n\n/** * * * * * * * * * *\n * Big Integer Library *\n * Created 2000 *\n * Leemon Baird *\n * www.leemon.com *\n * * * * * * * * * * * */\n\n////////////////////////////////////////////////////////////////////////////////////////\n// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.\n// For most functions, if it needs a BigInt as a local variable it will actually use\n// a global, and will only allocate to it only when it's not the right size. This ensures\n// that when a function is called repeatedly with same-sized parameters, it only allocates\n// memory on the first call.\n//\n// Note that for cryptographic purposes, the calls to Math.random() must\n// be replaced with calls to a better pseudorandom number generator.\n//\n// In the following, \"bigInt\" means a bigInt with at least one leading zero element,\n// and \"integer\" means a nonnegative integer less than radix. In some cases, integer\n// can be negative. Negative bigInts are 2s complement.\n//\n// The following functions do not modify their inputs.\n// Those returning a bigInt, string, or Array will dynamically allocate memory for that value.\n// Those returning a boolean will return the integer 0 (false) or 1 (true).\n// Those returning boolean or int will not allocate memory except possibly on the first\n// time they're called with a given parameter size.\n//\n// bigInt add(x,y) //return (x+y) for bigInts x and y.\n// bigInt addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.\n// string bigInt2str(x,base) //return a string form of bigInt x in a given base, with 2 <= base <= 95\n// int bitSize(x) //return how many bits long the bigInt x is, not counting leading zeros\n// bigInt dup(x) //return a copy of bigInt x\n// boolean equals(x,y) //is the bigInt x equal to the bigint y?\n// boolean equalsInt(x,y) //is bigint x equal to integer y?\n// bigInt expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed\n// Array findPrimes(n) //return array of all primes less than integer n\n// bigInt GCD(x,y) //return greatest common divisor of bigInts x and y (each with same number of elements).\n// boolean greater(x,y) //is x>y? (x and y are nonnegative bigInts)\n// boolean greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?\n// bigInt int2bigInt(t,n,m) //return a bigInt equal to integer t, with at least n bits and m array elements\n// bigInt inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null\n// int inverseModInt(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse\n// boolean isZero(x) //is the bigInt x equal to zero?\n// boolean millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is bigInt, 1=1). If s=1, then the most significant of those n bits is set to 1.\n// bigInt randTruePrime(k) //return a new, random, k-bit, true prime bigInt using Maurer's algorithm.\n// bigInt randProbPrime(k) //return a new, random, k-bit, probable prime bigInt (probability it's composite less than 2^-80).\n// bigInt str2bigInt(s,b,n,m) //return a bigInt for number represented in string s in base b with at least n bits and m array elements\n// bigInt sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement\n// bigInt trim(x,k) //return a copy of x with exactly k leading zero elements\n//\n//\n// The following functions each have a non-underscored version, which most users should call instead.\n// These functions each write to a single parameter, and the caller is responsible for ensuring the array\n// passed in is large enough to hold the result.\n//\n// void addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer\n// void add_(x,y) //do x=x+y for bigInts x and y\n// void copy_(x,y) //do x=y on bigInts x and y\n// void copyInt_(x,n) //do x=n on bigInt x and integer n\n// void GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). (This never overflows its array).\n// boolean inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist\n// void mod_(x,n) //do x=x mod n for bigInts x and n. (This never overflows its array).\n// void mult_(x,y) //do x=x*y for bigInts x and y.\n// void multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.\n// void powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.\n// void randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.\n// void randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.\n// void sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.\n//\n// The following functions do NOT have a non-underscored version.\n// They each write a bigInt result to one or more parameters. The caller is responsible for\n// ensuring the arrays passed in are large enough to hold the results.\n//\n// void addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))\n// void carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.\n// void divide_(x,y,q,r) //divide x by y giving quotient q and remainder r\n// int divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder. (This never overflows its array).\n// void eGCD_(x,y,d,a,b) //sets a,b,d to positive bigInts such that d = GCD_(x,y) = a*x-b*y\n// void halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement. (This never overflows its array).\n// void leftShift_(x,n) //left shift bigInt x by n bits. n64 multiplier, but not with JavaScript's 32*32->32)\n// - speeding up mont_(x,y,n,np) when x==y by doing a non-modular, non-Montgomery square\n// followed by a Montgomery reduction. The intermediate answer will be twice as long as x, so that\n// method would be slower. This is unfortunate because the code currently spends almost all of its time\n// doing mont_(x,x,...), both for randTruePrime_() and powMod_(). A faster method for Montgomery squaring\n// would have a large impact on the speed of randTruePrime_() and powMod_(). HAC has a couple of poorly-worded\n// sentences that seem to imply it's faster to do a non-modular square followed by a single\n// Montgomery reduction, but that's obviously wrong.\n////////////////////////////////////////////////////////////////////////////////////////\n\nexport type Bool = 1 | 0\n\n//globals\nexport var bpe = 0 //bits stored per array element\nvar mask = 0 //AND this with an array element to chop it down to bpe bits\nvar radix = mask + 1 //equals 2^bpe. A single 1 bit to the left of the last bit of mask.\n\n//the digits for converting to different bases\nvar digitsStr =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\\\'\"+-'\n\n//initialize the global variables\n\n//bpe=number of bits in the mantissa on this platform\nfor (bpe = 0; 1 << (bpe + 1) > 1 << bpe; bpe++);\nbpe >>= 1 //bpe=number of bits in one element of the array representing the bigInt\nmask = (1 << bpe) - 1 //AND the mask with an integer to get its bpe least significant bits\nradix = mask + 1 //2^bpe. a single 1 bit to the left of the first bit of mask\nexport var one = int2bigInt(1, 1, 1) //constant used in powMod_()\nexport var zero = int2bigInt(0, 1, 1)\n\n//the following global variables are scratchpad memory to\n//reduce dynamic memory allocation in the inner loop\nvar t: number[] | number = new Array(0)\nvar ss = t //used in mult_()\nvar s0 = t //used in multMod_(), squareMod_()\n// var s1=t; //used in powMod_(), multMod_(), squareMod_()\n// var s2=t; //used in powMod_(), multMod_()\nvar s3 = t //used in powMod_()\nvar s4 = t,\n s5 = t //used in mod_()\nvar s6 = t //used in bigInt2str()\nvar s7 = t //used in powMod_()\nvar T = t //used in GCD_()\nvar sa = t //used in mont_()\nvar mr_x1 = t,\n mr_r = t,\n mr_a = t, //used in millerRabin()\n eg_v = t,\n eg_u = t,\n eg_A = t,\n eg_B = t,\n eg_C = t,\n eg_D = t, //used in eGCD_(), inverseMod_()\n //, md_q1=t, md_q2=t, md_q3=t, md_r=t, md_r1=t, md_r2=t, md_tt=t, //used in mod_()\n\n primes = t,\n pows = t,\n s_i = t,\n s_i2 = t,\n s_R = t,\n s_rm = t,\n s_q = t,\n s_n1 = t,\n s_a = t,\n s_r2 = t,\n s_n = t,\n s_b = t,\n s_d = t,\n s_x1 = t,\n s_x2 = t,\n s_aa = t, //used in randTruePrime_()\n rpprb = t //used in randProbPrimeRounds() (which also uses \"primes\")\n\n////////////////////////////////////////////////////////////////////////////////////////\n\nvar k, buff\n\n/**\n * return array of all primes less than integer n\n *\n * @param {number} n\n * @returns {number[]}\n */\nexport function findPrimes(n: number): number[] {\n var i, s, p, ans\n s = new Array(n)\n for (i = 0; i < n; i++) s[i] = 0\n s[0] = 2\n p = 0 //first p elements of s are primes, the rest are a sieve\n for (; s[p] < n; ) {\n //s[p] is the pth prime\n for (\n i = s[p] * s[p];\n i < n;\n i += s[p] //mark multiples of s[p]\n )\n s[i] = 1\n p++\n s[p] = s[p - 1] + 1\n for (; s[p] < n && s[s[p]]; s[p]++); //find next prime (where s[p]==0)\n }\n ans = new Array(p)\n for (i = 0; i < p; i++) ans[i] = s[i]\n return ans\n}\n\n/**\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\n *\n * x is a bigInt, and b is an integer, with b 0; j--);\n for (z = 0, w = x[j]; w; w >>= 1, z++);\n z += bpe * j\n return z\n}\n\n/**\n * return a copy of x with at least n elements, adding leading zeros if needed\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {number[]}\n */\nexport function expand(x: number[], n: number): number[] {\n var ans = int2bigInt(0, (x.length > n ? x.length : n) * bpe, 0)\n copy_(ans, x)\n return ans\n}\n\n/**\n * return a k-bit true random prime using Maurer's algorithm.\n *\n * @export\n * @param {number} k\n * @returns {number[]}\n */\n/* export function randTruePrime(k: number): number[] {\n var ans = int2bigInt(0, k, 0)\n randTruePrime_(ans, k)\n return trim(ans, 1)\n} */\n\n/**\n * return a k-bit random probable prime with probability of error < 2^-80\n *\n * @export\n * @param {number} k\n * @returns {number[]}\n */\n/* export function randProbPrime(k: number): number[] {\n if (k >= 600) return randProbPrimeRounds(k, 2) //numbers from HAC table 4.3\n if (k >= 550) return randProbPrimeRounds(k, 4)\n if (k >= 500) return randProbPrimeRounds(k, 5)\n if (k >= 400) return randProbPrimeRounds(k, 6)\n if (k >= 350) return randProbPrimeRounds(k, 7)\n if (k >= 300) return randProbPrimeRounds(k, 9)\n if (k >= 250) return randProbPrimeRounds(k, 12) //numbers from HAC table 4.4\n if (k >= 200) return randProbPrimeRounds(k, 15)\n if (k >= 150) return randProbPrimeRounds(k, 18)\n if (k >= 100) return randProbPrimeRounds(k, 27)\n return randProbPrimeRounds(k, 40) //number from HAC remark 4.26 (only an estimate)\n} */\n\n/**\n * return a k-bit probable random prime using n rounds of Miller Rabin\n * (after trial division with small primes)\n *\n * @export\n * @param {number} k\n * @param {number} n\n * @returns {number[]}\n */\n/* export function randProbPrimeRounds(k: number, n: number): number[] {\n var ans, i, divisible, B\n B = 30000 //B is largest prime to use in trial division\n ans = int2bigInt(0, k, 0)\n\n //optimization: try larger and smaller B to find the best limit.\n\n if (primes.length === 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\n\n if (rpprb.length !== ans.length) rpprb = dup(ans)\n\n for (;;) {\n //keep trying random values for ans until one appears to be prime\n //optimization: pick a random number times L=2*3*5*...*p, plus a\n // random element of the list of all numbers in [0,L) not divisible by any prime up to p.\n // This can reduce the amount of random number generation.\n\n randBigInt_(ans, k, 0) //ans = a random odd number to check\n ans[0] |= 1\n divisible = 0\n\n //check ans for divisibility by small primes up to B\n for (i = 0; i < primes.length && primes[i] <= B; i++)\n if (modInt(ans, primes[i]) === 0 && !equalsInt(ans, primes[i])) {\n divisible = 1\n break\n }\n\n //optimization: change millerRabin so the base can be bigger than the number being checked, then eliminate the while here.\n\n //do n rounds of Miller Rabin, with random bases less than ans\n for (i = 0; i < n && !divisible; i++) {\n randBigInt_(rpprb, k, 0)\n while (\n !greater(ans, rpprb) //pick a random rpprb that's < ans\n )\n randBigInt_(rpprb, k, 0)\n if (!millerRabin(ans, rpprb)) divisible = 1\n }\n\n if (!divisible) return ans\n }\n} */\n\n/**\n * return a new bigInt equal to (x mod n) for bigInts x and n.\n *\n * @param {number[]} x\n * @param {number[]} n\n * @returns {number[]}\n */\nexport function mod(x: number[], n: number[]): number[] {\n var ans = dup(x)\n mod_(ans, n)\n return trim(ans, 1)\n}\n\n/**\n * return (x+n) where x is a bigInt and n is an integer.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {number[]}\n */\n/* export function addInt(x: number[], n: number): number[] {\n var ans = expand(x, x.length + 1)\n addInt_(ans, n)\n return trim(ans, 1)\n} */\n\n/**\n * return x*y for bigInts x and y. This is faster when y y.length ? x.length + 1 : y.length + 1)\n sub_(ans, y)\n return trim(ans, 1)\n}\n\n/**\n * return (x+y) for bigInts x and y\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {number[]}\n */\nexport function add(x: number[], y: number[]): number[] {\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\n add_(ans, y)\n return trim(ans, 1)\n}\n\n/**\n * return (x**(-1) mod n) for bigInts x and n.\n *\n * If no inverse exists, it returns null\n *\n * @param {number[]} x\n * @param {number[]} n\n * @returns {(number[] | null)}\n */\n/* export function inverseMod(x: number[], n: number[]): number[] | null {\n var ans = expand(x, n.length)\n var s = inverseMod_(ans, n)\n return s ? trim(ans, 1) : null\n} */\n\n/**\n * return (x*y mod n) for bigInts x,y,n.\n *\n * For greater speed, let y= 2\n\n if (s_i2.length != ans.length) {\n s_i2 = dup(ans)\n s_R = dup(ans)\n s_n1 = dup(ans)\n s_r2 = dup(ans)\n s_d = dup(ans)\n s_x1 = dup(ans) //TODO Seems like a bug in eslint, reports as unused\n s_x2 = dup(ans)\n s_b = dup(ans)\n s_n = dup(ans)\n s_i = dup(ans)\n s_rm = dup(ans)\n s_q = dup(ans)\n s_a = dup(ans)\n s_aa = dup(ans)\n }\n\n if (k <= recLimit) {\n //generate small random primes by trial division up to its square root\n pm = (1 << ((k + 2) >> 1)) - 1 //pm is binary number with all ones, just over sqrt(2^k)\n copyInt_(ans, 0)\n for (dd = 1; dd; ) {\n dd = 0\n ans[0] = 1 | (1 << (k - 1)) | Math.floor(Math.random() * (1 << k)) //random, k-bit, odd integer, with msb 1\n for (j = 1; j < primes.length && (primes[j] & pm) == primes[j]; j++) {\n //trial division by all primes 3...sqrt(2^k)\n if (0 == ans[0] % primes[j]) {\n dd = 1\n break\n }\n }\n }\n carry_(ans)\n return\n }\n\n B = c * k * k //try small primes up to B (or all the primes[] array if the largest is less than B).\n if (k > 2 * m)\n //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\n for (r = 1; k - k * r <= m; ) r = pows[Math.floor(Math.random() * 512)] //r=Math.pow(2,Math.random()-1);\n else r = 0.5\n\n //simulation suggests the more complex algorithm using r=.333 is only slightly faster.\n\n recSize = Math.floor(r * k) + 1\n\n randTruePrime_(s_q, recSize)\n copyInt_(s_i2, 0)\n s_i2[Math.floor((k - 2) / bpe)] |= 1 << ((k - 2) % bpe) //s_i2=2^(k-2)\n divide_(s_i2, s_q, s_i, s_rm) //s_i=floor((2^(k-1))/(2q))\n\n z = bitSize(s_i)\n\n for (;;) {\n for (;;) {\n //generate z-bit numbers until one falls in the range [0,s_i-1]\n randBigInt_(s_R, z, 0)\n if (greater(s_i, s_R)) break\n } //now s_R is in the range [0,s_i-1]\n addInt_(s_R, 1) //now s_R is in the range [1,s_i]\n add_(s_R, s_i) //now s_R is in the range [s_i+1,2*s_i]\n\n copy_(s_n, s_q)\n mult_(s_n, s_R)\n multInt_(s_n, 2)\n addInt_(s_n, 1) //s_n=2*s_R*s_q+1\n\n copy_(s_r2, s_R)\n multInt_(s_r2, 2) //s_r2=2*s_R\n\n //check s_n for divisibility by small primes up to B\n for (divisible = 0, j = 0; j < primes.length && primes[j] < B; j++)\n if (modInt(s_n, primes[j]) == 0 && !equalsInt(s_n, primes[j])) {\n divisible = 1\n break\n }\n\n if (!divisible)\n if (!millerRabinInt(s_n, 2))\n //if it passes small primes check, then try a single Miller-Rabin base 2\n //this line represents 75% of the total runtime for randTruePrime_\n divisible = 1\n\n if (!divisible) {\n //if it passes that test, continue checking s_n\n addInt_(s_n, -3)\n for (j = s_n.length - 1; s_n[j] == 0 && j > 0; j--); //strip leading zeros\n for (zz = 0, w = s_n[j]; w; w >>= 1, zz++);\n zz += bpe * j //zz=number of bits in s_n, ignoring leading zeros\n for (;;) {\n //generate z-bit numbers until one falls in the range [0,s_n-1]\n randBigInt_(s_a, zz, 0)\n if (greater(s_n, s_a)) break\n } //now s_a is in the range [0,s_n-1]\n addInt_(s_n, 3) //now s_a is in the range [0,s_n-4]\n addInt_(s_a, 2) //now s_a is in the range [2,s_n-2]\n copy_(s_b, s_a)\n copy_(s_n1, s_n)\n addInt_(s_n1, -1)\n powMod_(s_b, s_n1, s_n) //s_b=s_a^(s_n-1) modulo s_n\n addInt_(s_b, -1)\n if (isZero(s_b)) {\n copy_(s_b, s_a)\n powMod_(s_b, s_r2, s_n)\n addInt_(s_b, -1)\n copy_(s_aa, s_n)\n copy_(s_d, s_b)\n GCD_(s_d, s_n) //if s_b and s_n are relatively prime, then s_n is a prime\n if (equalsInt(s_d, 1)) {\n copy_(ans, s_aa)\n return //if we've made it this far, then s_n is absolutely guaranteed to be prime\n }\n }\n }\n }\n} */\n\n/**\n * Return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\n *\n * @export\n * @param {number} n\n * @param {number} s\n * @returns {number[]}\n */\n/* export function randBigInt(n: number, s: number): number[] {\n var a, b\n a = Math.floor((n - 1) / bpe) + 2 //# array elements to hold the BigInt with a leading 0 element\n b = int2bigInt(0, 0, a)\n randBigInt_(b, n, s)\n return b\n} */\n\n/**\n * Set b to an n-bit random BigInt. If s=1, then the most significant of those n bits is set to 1.\n *\n * Array b must be big enough to hold the result. Must have n>=1\n *\n * @export\n * @param {number[]} b\n * @param {number} n\n * @param {number} s\n * @return {void}\n */\n/* export function randBigInt_(b: number[], n: number, s: number): void {\n var i, a\n for (i = 0; i < b.length; i++) b[i] = 0\n a = Math.floor((n - 1) / bpe) + 1 //# array elements to hold the BigInt\n for (i = 0; i < a; i++) {\n b[i] = Math.floor(Math.random() * (1 << (bpe - 1)))\n }\n b[a - 1] &= (2 << ((n - 1) % bpe)) - 1\n if (s == 1) b[a - 1] |= 1 << ((n - 1) % bpe)\n} */\n\n/**\n * Return the greatest common divisor of bigInts x and y (each with same number of elements).\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {number[]}\n */\nexport function GCD(x: number[], y: number[]): number[] {\n var xc, yc\n xc = dup(x)\n yc = dup(y)\n GCD_(xc, yc)\n return xc\n}\n\n/**\n * set x to the greatest common divisor of bigInts x and y (each with same number of elements).\n *\n * y is destroyed.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n */\nexport function GCD_(x: number[], y: number[]): void {\n var i: number, xp: number, yp: number, A: number, B, C: number, D: number, q, sing\n var qp\n if (T.length !== x.length) T = dup(x)\n\n sing = 1\n while (sing) {\n //while y has nonzero elements other than y[0]\n sing = 0\n for (\n i = 1;\n i < y.length;\n i++ //check if y has nonzero elements other than 0\n )\n if (y[i]) {\n sing = 1\n break\n }\n if (!sing) break //quit when y all zero elements except possibly y[0]\n\n for (i = x.length; !x[i] && i >= 0; i--); //find most significant element of x\n xp = x[i]\n yp = y[i]\n A = 1\n B = 0\n C = 0\n D = 1\n while (yp + C && yp + D) {\n q = Math.floor((xp + A) / (yp + C))\n qp = Math.floor((xp + B) / (yp + D))\n if (q != qp) break\n t = A - q * C\n A = C\n C = t // do (A,B,xp, C,D,yp) = (C,D,yp, A,B,xp) - q*(0,0,0, C,D,yp)\n t = B - q * D\n B = D\n D = t\n t = xp - q * yp\n xp = yp\n yp = t\n }\n if (B) {\n copy_(T, x)\n linComb_(x, y, A, B) //x=A*x+B*y\n linComb_(y, T, D, C) //y=D*y+C*T\n } else {\n mod_(x, y)\n copy_(T, x)\n copy_(x, y)\n copy_(y, T)\n }\n }\n if (y[0] === 0) return\n t = modInt(x, y[0])\n copyInt_(x, y[0])\n y[0] = t\n while (y[0]) {\n x[0] %= y[0]\n t = x[0]\n x[0] = y[0]\n y[0] = t\n }\n}\n\n/**\n * do x=x**(-1) mod n, for bigInts x and n.\n *\n * If no inverse exists, it sets x to zero and returns 0, else it returns 1.\n * The x array must be at least as large as the n array.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} n\n * @returns {(0 | 1)}\n */\n/* export function inverseMod_(x: number[], n: number[]): Bool {\n var k = 1 + 2 * Math.max(x.length, n.length)\n\n if (!(x[0] & 1) && !(n[0] & 1)) {\n //if both inputs are even, then inverse doesn't exist\n copyInt_(x, 0)\n return 0\n }\n\n if (eg_u.length != k) {\n eg_u = new Array(k)\n eg_v = new Array(k)\n eg_A = new Array(k)\n eg_B = new Array(k)\n eg_C = new Array(k)\n eg_D = new Array(k)\n }\n\n copy_(eg_u, x)\n copy_(eg_v, n)\n copyInt_(eg_A, 1)\n copyInt_(eg_B, 0)\n copyInt_(eg_C, 0)\n copyInt_(eg_D, 1)\n for (;;) {\n while (!(eg_u[0] & 1)) {\n //while eg_u is even\n halve_(eg_u)\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\n //if eg_A==eg_B==0 mod 2\n halve_(eg_A)\n halve_(eg_B)\n } else {\n add_(eg_A, n)\n halve_(eg_A)\n sub_(eg_B, x)\n halve_(eg_B)\n }\n }\n\n while (!(eg_v[0] & 1)) {\n //while eg_v is even\n halve_(eg_v)\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\n //if eg_C==eg_D==0 mod 2\n halve_(eg_C)\n halve_(eg_D)\n } else {\n add_(eg_C, n)\n halve_(eg_C)\n sub_(eg_D, x)\n halve_(eg_D)\n }\n }\n\n if (!greater(eg_v, eg_u)) {\n //eg_v <= eg_u\n sub_(eg_u, eg_v)\n sub_(eg_A, eg_C)\n sub_(eg_B, eg_D)\n } else {\n //eg_v > eg_u\n sub_(eg_v, eg_u)\n sub_(eg_C, eg_A)\n sub_(eg_D, eg_B)\n }\n\n if (equalsInt(eg_u, 0)) {\n while (\n negative(eg_C) //make sure answer is nonnegative\n )\n add_(eg_C, n)\n copy_(x, eg_C)\n\n if (!equalsInt(eg_v, 1)) {\n //if GCD_(x,n)!=1, then there is no inverse\n copyInt_(x, 0)\n return 0\n }\n return 1\n }\n }\n} */\n\n/**\n * return x**(-1) mod n, for integers x and n.\n *\n * Return 0 if there is no inverse\n *\n * @param {number} x\n * @param {number} n\n * @returns {number}\n */\nexport function inverseModInt(x: number, n: number): number {\n var a = 1,\n b = 0,\n t\n for (;;) {\n if (x === 1) return a\n if (x === 0) return 0\n b -= a * Math.floor(n / x)\n //$off\n n %= x\n\n if (n === 1) return b //to avoid negatives, change this b to n-b, and each -= to +=\n if (n === 0) return 0\n a -= b * Math.floor(x / n)\n //$off\n x %= n\n }\n /*::\n declare var never: empty\n return never\n */\n}\n\n//this deprecated function is for backward compatibility only.\n/* function inverseModInt_(x: number, n: number) {\n return inverseModInt(x, n)\n} */\n\n/**\n * Given positive bigInts x and y, change the bigints v, a, and b to positive bigInts such that:\n *\n * v = GCD_(x,y) = a*x-b*y\n *\n * The bigInts v, a, b, must have exactly as many elements as the larger of x and y.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} v\n * @param {number[]} a\n * @param {number[]} b\n * @return {void}\n */\nexport function eGCD_(\n x: number[],\n y: number[],\n v: number[],\n a: number[],\n b: number[],\n): void {\n var g = 0\n var k = Math.max(x.length, y.length)\n if (eg_u.length != k) {\n eg_u = new Array(k)\n eg_A = new Array(k)\n eg_B = new Array(k)\n eg_C = new Array(k)\n eg_D = new Array(k)\n }\n while (!(x[0] & 1) && !(y[0] & 1)) {\n //while x and y both even\n halve_(x)\n halve_(y)\n g++\n }\n copy_(eg_u, x)\n copy_(v, y)\n copyInt_(eg_A, 1)\n copyInt_(eg_B, 0)\n copyInt_(eg_C, 0)\n copyInt_(eg_D, 1)\n for (;;) {\n while (!(eg_u[0] & 1)) {\n //while u is even\n halve_(eg_u)\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\n //if A==B==0 mod 2\n halve_(eg_A)\n halve_(eg_B)\n } else {\n add_(eg_A, y)\n halve_(eg_A)\n sub_(eg_B, x)\n halve_(eg_B)\n }\n }\n\n while (!(v[0] & 1)) {\n //while v is even\n halve_(v)\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\n //if C==D==0 mod 2\n halve_(eg_C)\n halve_(eg_D)\n } else {\n add_(eg_C, y)\n halve_(eg_C)\n sub_(eg_D, x)\n halve_(eg_D)\n }\n }\n\n if (!greater(v, eg_u)) {\n //v<=u\n sub_(eg_u, v)\n sub_(eg_A, eg_C)\n sub_(eg_B, eg_D)\n } else {\n //v>u\n sub_(v, eg_u)\n sub_(eg_C, eg_A)\n sub_(eg_D, eg_B)\n }\n if (equalsInt(eg_u, 0)) {\n while (negative(eg_C)) {\n //make sure a (C) is nonnegative\n add_(eg_C, y)\n sub_(eg_D, x)\n }\n multInt_(eg_D, -1) ///make sure b (D) is nonnegative\n copy_(a, eg_C)\n copy_(b, eg_D)\n leftShift_(v, g)\n return\n }\n }\n}\n\n/**\n * is bigInt x negative?\n *\n * @param {number[]} x\n * @returns {(1 | 0)}\n */\nexport function negative(x: number[]) {\n //TODO Flow Bool type inference\n return (x[x.length - 1] >> (bpe - 1)) & 1\n}\n\n/**\n * is (x << (shift*bpe)) > y?\n *\n * x and y are nonnegative bigInts\n * shift is a nonnegative integer\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} shift\n * @returns {(1 | 0)}\n */\nexport function greaterShift(x: number[], y: number[], shift: number): Bool {\n var i,\n kx = x.length,\n ky = y.length\n k = kx + shift < ky ? kx + shift : ky\n for (i = ky - 1 - shift; i < kx && i >= 0; i++) if (x[i] > 0) return 1 //if there are nonzeros in x to the left of the first column of y, then x is bigger\n for (i = kx - 1 + shift; i < ky; i++) if (y[i] > 0) return 0 //if there are nonzeros in y to the left of the first column of x, then x is not bigger\n for (i = k - 1; i >= shift; i--)\n if (x[i - shift] > y[i]) return 1\n else if (x[i - shift] < y[i]) return 0\n return 0\n}\n\n/**\n * is x > y?\n *\n * x and y both nonnegative\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {(1 | 0)}\n */\nexport function greater(x: number[], y: number[]): Bool {\n var i\n var k = x.length < y.length ? x.length : y.length\n\n for (i = x.length; i < y.length; i++) if (y[i]) return 0 //y has more digits\n\n for (i = y.length; i < x.length; i++) if (x[i]) return 1 //x has more digits\n\n for (i = k - 1; i >= 0; i--)\n if (x[i] > y[i]) return 1\n else if (x[i] < y[i]) return 0\n return 0\n}\n\n/**\n * divide x by y giving quotient q and remainder r.\n *\n * q = floor(x/y)\n * r = x mod y\n *\n * All 4 are bigints.\n *\n * * x must have at least one leading zero element.\n * * y must be nonzero.\n * * q and r must be arrays that are exactly the same length as x. (Or q can have more).\n * * Must have x.length >= y.length >= 2.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} q\n * @param {number[]} r\n * @return {void}\n */\nexport function divide_(\n x: number[],\n y: number[],\n q: number[],\n r: number[],\n): void {\n var kx, ky\n var i, j, y1, y2, c, a, b\n copy_(r, x)\n for (ky = y.length; y[ky - 1] === 0; ky--); //ky is number of elements in y, not including leading zeros\n\n //normalize: ensure the most significant element of y has its highest bit set\n b = y[ky - 1]\n for (a = 0; b; a++) b >>= 1\n a = bpe - a //a is how many bits to shift so that the high order bit of y is leftmost in its array element\n leftShift_(y, a) //multiply both by 1< ky; kx--); //kx is number of elements in normalized x, not including leading zeros\n\n copyInt_(q, 0) // q=0\n while (!greaterShift(y, r, kx - ky)) {\n // while (leftShift_(y,kx-ky) <= r) {\n subShift_(r, y, kx - ky) // r=r-leftShift_(y,kx-ky)\n q[kx - ky]++ // q[kx-ky]++;\n } // }\n\n for (i = kx - 1; i >= ky; i--) {\n if (r[i] == y[ky - 1]) q[i - ky] = mask\n else q[i - ky] = Math.floor((r[i] * radix + r[i - 1]) / y[ky - 1])\n\n //The following for(;;) loop is equivalent to the commented while loop,\n //except that the uncommented version avoids overflow.\n //The commented loop comes from HAC, which assumes r[-1]==y[-1]==0\n // while (q[i-ky]*(y[ky-1]*radix+y[ky-2]) > r[i]*radix*radix+r[i-1]*radix+r[i-2])\n // q[i-ky]--;\n for (;;) {\n y2 = (ky > 1 ? y[ky - 2] : 0) * q[i - ky]\n c = y2 >> bpe\n y2 = y2 & mask\n y1 = c + q[i - ky] * y[ky - 1]\n c = y1 >> bpe\n y1 = y1 & mask\n\n if (\n c == r[i]\n ? y1 == r[i - 1] ? y2 > (i > 1 ? r[i - 2] : 0) : y1 > r[i - 1]\n : c > r[i]\n )\n q[i - ky]--\n else break\n }\n\n linCombShift_(r, y, -q[i - ky], i - ky) //r=r-q[i-ky]*leftShift_(y,i-ky)\n if (negative(r)) {\n addShift_(r, y, i - ky) //r=r+leftShift_(y,i-ky)\n q[i - ky]--\n }\n }\n\n rightShift_(y, a) //undo the normalization step\n rightShift_(r, a) //undo the normalization step\n}\n\n/**\n * do carries and borrows so each element of the bigInt x fits in bpe bits.\n *\n * @param {number[]} x\n */\nexport function carry_(x: number[]): void {\n var i, k, c, b\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i]\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n }\n}\n\n/**\n * return x mod n for bigInt x and integer n.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {number}\n */\nexport function modInt(x: number[], n: number): number {\n var i,\n c = 0\n for (i = x.length - 1; i >= 0; i--) c = (c * radix + x[i]) % n\n return c\n}\n\n/**\n * convert the integer t into a bigInt with at least the given number of bits.\n * the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)\n * Pad the array with leading zeros so that it has at least minSize elements.\n *\n * There will always be at least one leading 0 element.\n *\n * @export\n * @param {number} t\n * @param {number} bits\n * @param {number} minSize\n * @returns {number[]}\n */\nexport function int2bigInt(t: number, bits: number, minSize: number): number[] {\n var i, k\n k = Math.ceil(bits / bpe) + 1\n k = minSize > k ? minSize : k\n var buff = new Array(k)\n copyInt_(buff, t)\n return buff\n}\n\n/**\n * return the bigInt given a string representation in a given base.\n * Pad the array with leading zeros so that it has at least minSize elements.\n * If base=-1, then it reads in a space-separated list of array elements in decimal.\n *\n * The array will always have at least one leading zero, unless base=-1.\n *\n * @export\n * @param {string} s\n * @param {number} base\n * @param {number} [minSize]\n * @returns {number[]}\n */\nexport function str2bigInt(\n s: string,\n base: number,\n minSize?: number,\n): number[] {\n var d, i, x, y, kk\n var k = s.length\n if (base === -1) {\n //comma-separated list of array elements in decimal\n x = new Array(0)\n for (;;) {\n y = new Array(x.length + 1)\n for (i = 0; i < x.length; i++) y[i + 1] = x[i]\n y[0] = parseInt(s, 10) //TODO PERF Should we replace that with ~~ (not not)? https://jsperf.com/number-vs-parseint-vs-plus/7\n x = y\n d = s.indexOf(',', 0)\n if (d < 1) break\n //$off\n s = s.substring(d + 1)\n if (s.length == 0) break\n }\n //$off\n if (x.length < minSize) {\n //$off\n y = new Array(minSize)\n copy_(y, x)\n return y\n }\n return x\n }\n\n x = int2bigInt(0, base * k, 0)\n for (i = 0; i < k; i++) {\n d = digitsStr.indexOf(s.substring(i, i + 1), 0)\n if (base <= 36 && d >= 36)\n //convert lowercase to uppercase if base<=36\n d -= 26\n if (d >= base || d < 0) {\n //stop at first illegal character\n break\n }\n multInt_(x, base)\n addInt_(x, d)\n }\n\n for (k = x.length; k > 0 && !x[k - 1]; k--); //strip off leading zeros\n //$off\n k = minSize > k + 1 ? minSize : k + 1\n //$off\n y = new Array(k)\n //$off\n kk = k < x.length ? k : x.length\n //$off\n for (i = 0; i < kk; i++) y[i] = x[i]\n //$off\n for (; i < k; i++) y[i] = 0\n return y\n}\n\n//return the bigInt given a string representation in a given base.\n//Pad the array with leading zeros so that it has at least minSize elements.\n//If base=-1, then it reads in a space-separated list of array elements in decimal.\n//The array will always have at least one leading zero, unless base=-1.\n// function str2bigInt(s,b,minSize) {\n// var d, i, j, base, str, x, y, kk;\n// if (typeof b === 'string') {\n// base = b.length;\n// str = b;\n// } else {\n// base = b;\n// str = digitsStr;\n// }\n// var k=s.length;\n// if (base==-1) { //comma-separated list of array elements in decimal\n// x=new Array(0);\n// for (;;) {\n// y=new Array(x.length+1);\n// for (i=0;i=36) { //convert lowercase to uppercase if base<=36\n// d-=26;\n// }\n// if (d>=base || d<0) { //ignore illegal characters\n// continue;\n// }\n// multInt_(x,base);\n// addInt_(x,d);\n// }\n\n// for (k=x.length;k>0 && !x[k-1];k--); //strip off leading zeros\n// k=minSize>k+1 ? minSize : k+1;\n// y=new Array(k);\n// kk=k y.length) {\n for (; i < x.length; i++) if (x[i]) return 0\n } else {\n for (; i < y.length; i++) if (y[i]) return 0\n }\n return 1\n}\n\n/**\n * is the bigInt x equal to zero?\n *\n * @export\n * @param {number[]} x\n * @returns {(1 | 0)}\n */\nexport function isZero(x: number[]): Bool {\n var i\n for (i = 0; i < x.length; i++) if (x[i]) return 0\n return 1\n}\n\n/**\n * Convert a bigInt into a string in a given base, from base 2 up to base 95.\n *\n * Base -1 prints the contents of the array representing the number.\n *\n * @export\n * @param {number[]} x\n * @param {number} base\n * @returns {string}\n */\nexport function bigInt2str(x: number[], base: number): string {\n var i,\n t,\n s = ''\n\n if (s6.length !== x.length) s6 = dup(x)\n else copy_(s6, x)\n\n if (base === -1) {\n //return the list of array contents\n for (i = x.length - 1; i > 0; i--) s += x[i] + ','\n s += x[0]\n } else {\n //return it in the given base\n while (!isZero(s6)) {\n t = divInt_(s6, base) //t=s6 % base; s6=floor(s6/base);\n s = digitsStr.substring(t, t + 1) + s\n }\n }\n if (s.length === 0) s = '0'\n return s\n}\n\n/**\n * Convert a bigInt into bytes\n * @param x bigInt\n * @param littleEndian byte order by default\n */\nexport function bigInt2bytes(x: number[], littleEndian = true) {\n if(s6.length !== x.length) s6 = dup(x);\n else copy_(s6, x);\n\n const out: number[] = [];\n\n //console.log('bigInt2bytes');\n while(!isZero(s6)) {\n t = divInt_(s6, 256); //t=s6 % base; s6=floor(s6/base);\n out.push(t);\n //console.log('bigInt2bytes', t);\n }\n\n if(littleEndian) {\n out.reverse();\n }\n\n //console.log('bigInt2bytes', out);\n\n return out;\n}\n\n/**\n * Compare two bigInts and return -1 if x is less, 0 if equals, 1 if greater\n * @param x bigInt\n * @param y bigInt\n */\nexport function cmp(x: number[], y: number[]) {\n return greater(x, y) ? 1 : (equals(x, y) ? 0 : -1);\n}\n\n/* Object.assign(self, {\n cmp,\n str2bigInt,\n int2bigInt,\n bigInt2str,\n one,\n divide_,\n divInt_,\n dup,\n negative\n}); */\n\n/**\n * Returns a duplicate of bigInt x\n *\n * @export\n * @param {number[]} x\n * @returns {number[]}\n */\nexport function dup(x: number[]): number[] {\n var i\n buff = Array(x.length)\n copy_(buff, x)\n return buff\n}\n\n/**\n * do x=y on bigInts x and y.\n *\n * x must be an array at least as big as y (not counting the leading zeros in y).\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {void}\n */\nexport function copy_(x: number[], y: number[]): void {\n var i\n var k = x.length < y.length ? x.length : y.length\n for (i = 0; i < k; i++) x[i] = y[i]\n for (i = k; i < x.length; i++) x[i] = 0\n}\n\n/**\n * do x=y on bigInt x and integer y.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function copyInt_(x: number[], n: number): void {\n var i, c\n var len = x.length //TODO .length in for loop have perfomance costs. Bench this\n for (c = n, i = 0; i < len; i++) {\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+n where x is a bigInt and n is an integer.\n *\n * x must be large enough to hold the result.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function addInt_(x: number[], n: number): void {\n var i, k, c, b\n x[0] += n\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i]\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n if (!c) return //stop carrying as soon as the carry is zero\n }\n}\n\n/**\n * right shift bigInt x by n bits.\n *\n * 0 <= n < bpe.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n */\nexport function rightShift_(x: number[], n: number): void {\n var i\n var k = Math.floor(n / bpe)\n if (k) {\n for (\n i = 0;\n i < x.length - k;\n i++ //right shift x by k elements\n )\n x[i] = x[i + k]\n for (; i < x.length; i++) x[i] = 0\n //$off\n n %= bpe\n }\n for (i = 0; i < x.length - 1; i++) {\n x[i] = mask & ((x[i + 1] << (bpe - n)) | (x[i] >> n))\n }\n x[i] >>= n\n}\n\n/**\n * do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement\n *\n * @param {number[]} x\n * @returns {void}\n */\nexport function halve_(x: number[]): void {\n var i\n for (i = 0; i < x.length - 1; i++) {\n x[i] = mask & ((x[i + 1] << (bpe - 1)) | (x[i] >> 1))\n }\n x[i] = (x[i] >> 1) | (x[i] & (radix >> 1)) //most significant bit stays the same\n}\n\n/**\n * left shift bigInt x by n bits\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function leftShift_(x: number[], n: number): void {\n var i\n var k = Math.floor(n / bpe)\n if (k) {\n for (\n i = x.length;\n i >= k;\n i-- //left shift x by k elements\n )\n x[i] = x[i - k]\n for (; i >= 0; i--) x[i] = 0\n //$off\n n %= bpe\n }\n if (!n) return\n for (i = x.length - 1; i > 0; i--) {\n x[i] = mask & ((x[i] << n) | (x[i - 1] >> (bpe - n)))\n }\n x[i] = mask & (x[i] << n)\n}\n\n/**\n * do x=x*n where x is a bigInt and n is an integer.\n *\n * x must be large enough to hold the result.\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function multInt_(x: number[], n: number): void {\n var i, k, c, b\n if (!n) return\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i] * n\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n }\n}\n\n/**\n * do x=floor(x/n) for bigInt x and integer n, and return the remainder\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {number} remainder\n */\nexport function divInt_(x: number[], n: number): number {\n var i,\n r = 0,\n s\n for (i = x.length - 1; i >= 0; i--) {\n s = r * radix + x[i]\n x[i] = Math.floor(s / n)\n r = s % n\n }\n return r\n}\n\n/**\n * do the linear combination x=a*x+b*y for bigInts x and y, and integers a and b.\n *\n * x must be large enough to hold the answer.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} a\n * @param {number} b\n * @returns {void}\n */\nexport function linComb_(x: number[], y: number[], a: number, b: number): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n kk = x.length\n for (c = 0, i = 0; i < k; i++) {\n c += a * x[i] + b * y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; i < kk; i++) {\n c += a * x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do the linear combination x=a*x+b*(y<<(ys*bpe)) for bigInts x and y, and integers a, b and ys.\n *\n * x must be large enough to hold the answer.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} b\n * @param {number} ys\n * @returns {void}\n */\nexport function linCombShift_(\n x: number[],\n y: number[],\n b: number,\n ys: number,\n): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] + b * y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+(y<<(ys*bpe)) for bigInts x and y, and integer ys.\n *\n * x must be large enough to hold the answer.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} ys\n * @return {void}\n */\nexport function addShift_(x: number[], y: number[], ys: number): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] + y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x-(y<<(ys*bpe)) for bigInts x and y, and integer ys\n *\n * x must be large enough to hold the answer\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} ys\n * @return {void}\n */\nexport function subShift_(x: number[], y: number[], ys: number): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] - y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x-y for bigInts x and y\n *\n * x must be large enough to hold the answer\n *\n * negative answers will be 2s complement\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @return {void}\n */\nexport function sub_(x: number[], y: number[]): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n for (c = 0, i = 0; i < k; i++) {\n c += x[i] - y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < x.length; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+y for bigInts x and y\n *\n * x must be large enough to hold the answer\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @return {void}\n */\nexport function add_(x: number[], y: number[]): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n for (c = 0, i = 0; i < k; i++) {\n c += x[i] + y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < x.length; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x*y for bigInts x and y.\n *\n * This is faster when y 0 && !x[kx - 1]; kx--); //ignore leading zeros in x\n k = kx > n.length ? 2 * kx : 2 * n.length //k=# elements in the product, which is twice the elements in the larger of x and n\n if (s0.length != k) s0 = new Array(k)\n copyInt_(s0, 0)\n for (i = 0; i < kx; i++) {\n c = s0[2 * i] + x[i] * x[i]\n s0[2 * i] = c & mask\n c >>= bpe\n for (j = i + 1; j < kx; j++) {\n c = s0[i + j] + 2 * x[i] * x[j] + c\n s0[i + j] = c & mask\n c >>= bpe\n }\n s0[i + kx] = c\n }\n mod_(s0, n)\n copy_(x, s0)\n}\n\n/**\n * return x with exactly k leading zero elements\n *\n * @export\n * @param {number[]} x\n * @param {number} k\n * @returns {number[]}\n */\nexport function trim(x: number[], k: number): number[] {\n var i, y\n for (i = x.length; i > 0 && !x[i - 1]; i--);\n y = new Array(i + k)\n copy_(y, x)\n return y\n}\n\n/**\n * do `x=x**y mod n`, where x,y,n are bigInts and `**` is exponentiation. `0**0=1`.\n *\n * this is faster when n is odd.\n *\n * x usually needs to have as many elements as n.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} n\n * @return {void}\n */\nexport function powMod_(x: number[], y: number[], n: number[]): void {\n var k1, k2, kn, np\n if (s7.length != n.length) s7 = dup(n)\n\n //for even modulus, use a simple square-and-multiply algorithm,\n //rather than using the more complex Montgomery algorithm.\n if ((n[0] & 1) == 0) {\n copy_(s7, x)\n copyInt_(x, 1)\n while (!equalsInt(y, 0)) {\n if (y[0] & 1) multMod_(x, s7, n)\n divInt_(y, 2)\n squareMod_(s7, n)\n }\n return\n }\n\n //calculate np from n for the Montgomery multiplications\n copyInt_(s7, 0)\n for (kn = n.length; kn > 0 && !n[kn - 1]; kn--);\n np = radix - inverseModInt(modInt(n, radix), radix)\n s7[kn] = 1\n multMod_(x, s7, n) // x = x * 2**(kn*bp) mod n\n\n if (s3.length != x.length) s3 = dup(x)\n else copy_(s3, x)\n //$off\n // @ts-ignore\n for (k1 = y.length - 1; (k1 > 0) & !y[k1]; k1--); //k1=first nonzero element of y\n if (y[k1] == 0) {\n //anything to the 0th power is 1\n copyInt_(x, 1)\n return\n }\n for (k2 = 1 << (bpe - 1); k2 && !(y[k1] & k2); k2 >>= 1); //k2=position of first 1 bit in y[k1]\n for (;;) {\n if (!(k2 >>= 1)) {\n //look at next bit of y\n k1--\n if (k1 < 0) {\n mont_(x, one, n, np)\n return\n }\n k2 = 1 << (bpe - 1)\n }\n mont_(x, x, n, np)\n\n if (k2 & y[k1])\n //if next bit is a 1\n mont_(x, s3, n, np)\n }\n}\n\n/**\n * do x=x*y*Ri mod n for bigInts x,y,n,\n * where Ri = 2**(-kn*bpe) mod n, and kn is the\n * number of elements in the n array, not\n * counting leading zeros.\n *\n * x array must have at least as many elemnts as the n array\n * It's OK if x and y are the same variable.\n *\n * must have:\n * * x,y < n\n * * n is odd\n * * np = -(n^(-1)) mod radix\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} n\n * @param {number} np\n * @return {void}\n */\nexport function mont_(x: number[], y: number[], n: number[], np: number): void {\n var i, j, c, ui, t, ks\n var kn = n.length\n var ky = y.length\n\n if (sa.length != kn) sa = new Array(kn)\n\n copyInt_(sa, 0)\n\n for (; kn > 0 && n[kn - 1] == 0; kn--); //ignore leading zeros of n\n for (; ky > 0 && y[ky - 1] == 0; ky--); //ignore leading zeros of y\n ks = sa.length - 1 //sa will never have more than this many nonzero elements.\n\n //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large numbers\n for (i = 0; i < kn; i++) {\n t = sa[0] + x[i] * y[0]\n ui = ((t & mask) * np) & mask //the inner \"& mask\" was needed on Safari (but not MSIE) at one time\n c = (t + ui * n[0]) >> bpe\n t = x[i]\n\n //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe. Loop is unrolled 5-fold for speed\n j = 1\n for (; j < ky - 4; ) {\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < ky; ) {\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < kn - 4; ) {\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < kn; ) {\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < ks; ) {\n c += sa[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n sa[j - 1] = c & mask\n }\n\n if (!greater(n, sa)) sub_(sa, n)\n copy_(x, sa)\n}","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { bufferConcats } from '../../helpers/bytes';\nimport { add_, bigInt2str, cmp, leftShift_, str2bigInt } from '../../vendor/leemon';\n\n \n \n \n\n \n \n \n \n \n \n \n \n \n\nexport function isObject(object: any) {\n return typeof(object) === 'object' && object !== null;\n}\n\n/* export function bigint(num: number) {\n return new BigInteger(num.toString(16), 16);\n} */\n\n/* export function bigStringInt(strNum: string) {\n return new BigInteger(strNum, 10);\n} */\n\n/* export function base64ToBlob(base64str: string, mimeType: string) {\n var sliceSize = 1024;\n var byteCharacters = atob(base64str);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n\n for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n\n var bytes = new Array(end - begin);\n for(var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n\n return blobConstruct(byteArrays, mimeType);\n}\n\nexport function dataUrlToBlob(url: string) {\n // var name = 'b64blob ' + url.length\n // console.time(name)\n var urlParts = url.split(',');\n var base64str = urlParts[1];\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\n var blob = base64ToBlob(base64str, mimeType);\n // console.timeEnd(name)\n return blob;\n} */\n\nexport function intToUint(val: number) {\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\n}\n\n/* export function bytesFromBigInt(bigInt: BigInteger, len?: number) {\n var bytes = bigInt.toByteArray();\n\n if(len && bytes.length < len) {\n var padding = [];\n for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\n padding[i] = 0;\n }\n if(bytes instanceof ArrayBuffer) {\n bytes = bufferConcat(padding, bytes);\n } else {\n bytes = padding.concat(bytes);\n }\n } else {\n while (!bytes[0] && (!len || bytes.length > len)) {\n bytes = bytes.slice(1);\n }\n }\n\n return bytes;\n} */\n\nexport function longFromInts(high: number, low: number): string {\n //let perf = performance.now();\n //let str = bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\n //console.log('longFromInts jsbn', performance.now() - perf);\n high = intToUint(high);\n low = intToUint(low);\n \n //perf = performance.now();\n const bigInt = str2bigInt(high.toString(16), 16, 32);//int2bigInt(high, 64, 64);\n //console.log('longFromInts construct high', bigint(high).toString(10), bigInt2str(bigInt, 10));\n leftShift_(bigInt, 32);\n //console.log('longFromInts shiftLeft', bigint(high).shiftLeft(32).toString(10), bigInt2str(bigInt, 10));\n add_(bigInt, str2bigInt(low.toString(16), 16, 32));\n const _str = bigInt2str(bigInt, 10);\n\n //console.log('longFromInts leemon', performance.now() - perf);\n\n //console.log('longFromInts', high, low, str, _str, str === _str);\n\n return _str;\n}\n\nexport function sortLongsArray(arr: string[]) {\n return arr.map(long => {\n return str2bigInt(long, 10);\n }).sort((a, b) => {\n return cmp(a, b);\n }).map(bigInt => {\n return bigInt2str(bigInt, 10);\n });\n}\n\nexport function addPadding(\n bytes: T, \n blockSize: number = 16, \n zeroes?: boolean, \n blockSizeAsTotalLength = false, \n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n ////console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n padding.randomize();\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type MTProtoConstructor = {\r\n id: number,\r\n predicate: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport type MTProtoMethod = {\r\n id: number,\r\n method: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"API\":{\"constructors\":[{\"id\":-1132882121,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1720552011,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":-994444869,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":1450380236,\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":2134579434,\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":2107670217,\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":396093539,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":-1182234929,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-138301121,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-208488460,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":-181407105,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":-1771768449,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-968723890,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":-1649296275,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":-1160714821,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":-1432995067,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1086091090,\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":8322574,\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-891180321,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1373745011,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1384777335,\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1258941372,\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":537022650,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":-1683826688,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Chat\"},{\"id\":1004149726,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"kicked\",\"type\":\"flags.1?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":120753115,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":-1977734781,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"}],\"type\":\"ChatFull\"},{\"id\":-925415106,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-57668565,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1061556205,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":-1125940270,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":-873313984,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1503425638,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1217033015,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1297179892,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":739712882,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":-855308010,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-543777747,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-1673717362,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1353671392,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"PeerNotifySettings\"},{\"id\":1933519201,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":328899191,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"user\",\"type\":\"User\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"}],\"type\":\"UserFull\"},{\"id\":-116274796,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-805141448,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":-748155807,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector\"},{\"name\":\"popular_invites\",\"type\":\"Vector\"},{\"name\":\"retry_contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548249383,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2033525908,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":469489699,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1489818765,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-1791935732,\"predicate\":\"updateUserPhoto\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"UserProfilePhoto\"},{\"name\":\"previous\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":-84936653,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":290961496,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"int\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":856375399,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1006044124,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1651608194,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":-94974410,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":1248893260,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-364179876,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1851755554,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-1666158377,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":512177195,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-44119819,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1584933265,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-378127636,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-718310409,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-212740181,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-774682074,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-1441998364,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-496024847,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":129960444,\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2011940674,\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-298113238,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1137792208,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":218751099,\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":407582158,\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":320652927,\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-697604407,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-1877932953,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-123988,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1297858060,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-125240806,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1955338397,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":209668535,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1194283041,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":314130811,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1815593308,\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":297109817,\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1662637586,\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":250621158,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":-463889475,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-302170017,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-350980120,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":-981018084,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector\"}],\"type\":\"WebPage\"},{\"id\":-1557277184,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":307276766,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"}],\"type\":\"account.Authorizations\"},{\"id\":408623183,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":1847917725,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":-540871282,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector\"}],\"type\":\"ChatInvite\"},{\"id\":-123931160,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-673242758,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":-1240849242,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSet\"},{\"id\":-1820043071,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1729618630,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"rows\",\"type\":\"Vector\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":2072935910,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-668391402,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-1343524562,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1109531342,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":548253432,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-753232354,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"}],\"type\":\"Chat\"},{\"id\":681420594,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":1418477459,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?int\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?int\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":1682413576,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-352032773,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-1227598250,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":856380452,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1015733815,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1734268085,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":367766557,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":-1557620115,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":1149094475,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-636267638,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-489233354,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-1232070311,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1371385889,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1336546578,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1135492588,\"predicate\":\"updateStickerSets\",\"params\":[],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":772213157,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"gifs\",\"type\":\"Vector\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1803769784,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.BotResults\"},{\"id\":1059076315,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":239663460,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1601666510,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":90744648,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-415938591,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1462213465,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":-459324,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":400266251,\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1995686519,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":-103646630,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":1008755359,\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":863093588,\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-305282981,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":-1419371685,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1122524854,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-75283823,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.TopPeers\"},{\"id\":892193368,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":634833351,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-299124375,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":-40996577,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1230257343,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"},{\"name\":\"unread\",\"type\":\"Vector\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":586395571,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"dates\",\"type\":\"Vector\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1493171408,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1081547008,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":215516896,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector\"}],\"type\":\"Invoice\"},{\"id\":-646342540,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-2074799289,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1080663248,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1928649707,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?PaymentSavedCredentials\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":280319440,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"}],\"type\":\"ShippingOption\"},{\"id\":-523384512,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":1563376297,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-6249322,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":462375633,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":-2014659757,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-1719909046,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-2025673089,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1655957568,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":-859915345,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?int\"},{\"name\":\"promoted_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1352785878,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":995769920,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":-209768682,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1987495099,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1893427255,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1917045962,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1608834311,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"}],\"type\":\"InputSingleMedia\"},{\"id\":-892779534,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1410748418,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":1359533640,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":1648543603,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":-534283678,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector\"},{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"errors\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":-2032041631,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":-1159937629,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":1881892265,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"account.WallPapers\"},{\"id\":-557924733,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"}],\"type\":\"CodeSettings\"},{\"id\":499236004,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":-532532493,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"int\"},{\"name\":\"file_size_max\",\"type\":\"int\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":756118935,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputUser\"},{\"id\":707290417,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputChannel\"},{\"id\":398123750,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":-1667893317,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1569748965,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":1283572154,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-668769361,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":415136107,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1397881200,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":34469328,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":42930452,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?ThemeSettings\"},{\"name\":\"installs_count\",\"type\":\"int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":2137482273,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"themes\",\"type\":\"Vector\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1118798639,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-1676371894,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":938909451,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1567730343,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":909603888,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":244310238,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1949890536,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"},{\"name\":\"exclude_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":-1387279939,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":-1107852396,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":418631927,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":1611985938,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":831924812,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector\"},{\"name\":\"top_admins\",\"type\":\"Vector\"},{\"name\":\"top_inviters\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-1096616924,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":1854571743,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.MessageViews\"},{\"id\":482860628,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?int\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1178116716,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-170029155,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1495959709,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":1093204652,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector\"},{\"name\":\"channel_id\",\"type\":\"flags.0?int\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":1796675352,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2054649973,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1986399595,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1991897370,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":321954198,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1537295973,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":-1441072131,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-206342113,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2146218476,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":133777546,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":507405952,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-539872497,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":1557846647,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1146808775,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":-813823885,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Update\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-2131827673,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1126886015,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":1461180992,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-470837741,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":1754754159,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":813089983,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1430579357,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-902781519,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"UserFull\"},{\"id\":749357634,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1071414113,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1096393392,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-176409329,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1594999949,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-591691168,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":204812012,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":469850889,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":1376532592,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":881978281,\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-637606386,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":913498268,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1013621127,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":998448230,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"messages.ChatFull\"},{\"id\":-599447467,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-900957736,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-106911223,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-986430054,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":164303470,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":630429265,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1926525996,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":-1980559511,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1319462148,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":1099779595,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"reason\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":71126828,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Stickers\"},{\"id\":479598769,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":347716823,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":639215886,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1877938321,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-787622117,\"method\":\"channels.deleteUserHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-32999408,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":306054633,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":1029681423,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1444503762,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":363051235,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":864953444,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2084618926,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-346119674,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":570955184,\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":527021574,\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1056025023,\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":520357240,\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-39416522,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":1224152952,\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-728224331,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1137057461,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":766298703,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1587647177,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":1706608543,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":218777796,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-341307408,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":-1976353651,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-619695760,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":818134173,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":536919235,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":1302676017,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":-914493408,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":567151374,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":1180140658,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1355375294,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":251759059,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1144759543,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-872345397,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"multi_media\",\"type\":\"Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1028140917,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-956147407,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1200903967,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-419267436,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1880182943,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":-323339813,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-262453244,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?int\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1735311088,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-2127811866,\"method\":\"messages.getStatsURL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"params\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-578472351,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1932455680,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-490575781,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2077048289,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":1555261397,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2061776695,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"format\",\"type\":\"flags.1?string\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"}],\"type\":\"Bool\"},{\"id\":-1919060949,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Theme\"},{\"id\":676939512,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.Themes\"},{\"id\":-1313598185,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-241247891,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1707717072,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1608974939,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":615875002,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1445996571,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-265962357,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector\"},{\"name\":\"sources\",\"type\":\"Vector\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-2094760687,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":48562110,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":654013065,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1070962985,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"}]},\"layer\":131} as {\r\n MTProto: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n API: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n layer: number,\r\n};\r\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1),\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n//import sha1 from '@cryptography/sha1';\n//import sha256 from '@cryptography/sha256';\nimport {IGE} from '@cryptography/aes';\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n\nimport {str2bigInt, bpe, equalsInt, greater, \n copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero,\n divide_, one, bigInt2str, powMod, bigInt2bytes, int2bigInt, mod} from '../../vendor/leemon';//from 'leemon';\n\nimport { addPadding } from '../mtproto/bin_utils';\nimport { bytesToWordss, bytesFromWordss, bytesToHex, bytesFromHex, convertToUint8Array } from '../../helpers/bytes';\nimport { nextRandomUint } from '../../helpers/random';\nimport type { RSAPublicKeyHex } from '../mtproto/rsaKeysManager';\n\nconst subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\n\nexport function longToBytes(sLong: string) {\n /* let perf = performance.now();\n for(let i = 0; i < 1000000; ++i) {\n bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\n }\n console.log('longToBytes JSBN', sLong, performance.now() - perf);\n \n //const bytes = bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\n \n perf = performance.now();\n for(let i = 0; i < 1000000; ++i) {\n bigInt2bytes(str2bigInt(sLong, 10));\n }\n console.log('longToBytes LEEMON', sLong, performance.now() - perf); */\n\n const bigIntBytes = new Uint8Array(bigInt2bytes(str2bigInt(sLong, 10), false));\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\n //console.log('longToBytes', bytes, b);\n \n return bytes;\n}\n\nexport function sha1HashSync(bytes: Parameters[0]) {\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then(b => {\n return new Uint8Array(b);\n });\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\n\n const hashBytes: number[] = [];\n\n let hash = sha1(String.fromCharCode.apply(null, \n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\n for(let i = 0; i < hash.length; ++i) {\n hashBytes.push(hash.charCodeAt(i));\n }\n\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\n\n return new Uint8Array(hashBytes); */\n}\n\nexport function sha256HashSync(bytes: Parameters[0]) {\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then(b => {\n //console.log('legacy', performance.now() - perfS);\n return new Uint8Array(b);\n });\n /* //console.log('SHA-256 hash start');\n\n let perfS = performance.now();\n \n\n let perfD = performance.now();\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\n let hash = sha256(words);\n console.log('darutkin', performance.now() - perfD);\n\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\n\n return bytesFromWordss(hash); */\n}\n\nexport function aesEncryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n //console.log(dT(), 'AES encrypt start', bytes, keyBytes, ivBytes);\n // console.log('aes before padding bytes:', bytesToHex(bytes));\n bytes = addPadding(bytes);\n // console.log('aes after padding bytes:', bytesToHex(bytes));\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const encryptedBytes = cipher.encrypt(bytesToWordss(bytes));\n //console.log(dT(), 'AES encrypt finish');\n\n return bytesFromWordss(encryptedBytes);\n}\n\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n //console.log(dT(), 'AES decrypt start', bytes, keyBytes, ivBytes);\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const decryptedBytes = cipher.decrypt(bytesToWordss(bytes));\n\n //console.log(dT(), 'AES decrypt finish');\n\n return bytesFromWordss(decryptedBytes);\n}\n\nexport function rsaEncrypt(bytes: Uint8Array, publicKey: RSAPublicKeyHex) {\n //console.log(dT(), 'RSA encrypt start', publicKey, bytes);\n\n const N = str2bigInt(publicKey.modulus, 16);\n const E = str2bigInt(publicKey.exponent, 16);\n const X = str2bigInt(bytesToHex(bytes), 16);\n\n const encryptedBigInt = powMod(X, E, N);\n const encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16));\n\n //console.log(dT(), 'RSA encrypt finish');\n\n return encryptedBytes;\n}\n\nexport async function hash_pbkdf2(buffer: Parameters[1], salt: HkdfParams['salt'], iterations: number) {\n const importKey = await subtle.importKey(\n 'raw',\n buffer,\n {name: 'PBKDF2'},\n false,\n [/* 'deriveKey', */'deriveBits']\n );\n \n /* await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n {\n name: 'AES-CTR',\n length: 256\n },\n false,\n ['encrypt', 'decrypt']\n ); */\n\n let bits = subtle.deriveBits({\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'},\n },\n importKey,\n 512\n );\n\n return bits.then(buffer => new Uint8Array(buffer));\n}\n\nexport function pqPrimeFactorization(pqBytes: Uint8Array | number[]) {\n let result: ReturnType;\n\n //console.log('PQ start', pqBytes, bytesToHex(pqBytes));\n\n try {\n //console.time('PQ leemon');\n result = pqPrimeLeemon(str2bigInt(bytesToHex(pqBytes), 16, Math.ceil(64 / bpe) + 1));\n //console.timeEnd('PQ leemon');\n } catch(e) {\n console.error('Pq leemon Exception', e);\n }\n\n //console.log('PQ finish', result);\n\n return result;\n}\n\nexport function pqPrimeLeemon(what: number[]): [Uint8Array, Uint8Array, number] {\n var minBits = 64;\n var minLen = Math.ceil(minBits / bpe) + 1;\n var it = 0;\n var i, q;\n var j, lim;\n var P;\n var Q;\n var a = new Array(minLen);\n var b = new Array(minLen);\n var c = new Array(minLen);\n var g = new Array(minLen);\n var z = new Array(minLen);\n var x = new Array(minLen);\n var y = new Array(minLen);\n\n for(i = 0; i < 3; ++i) {\n q = (nextRandomUint(8) & 15) + 17;\n copy_(x, mod(int2bigInt(nextRandomUint(32), 32, 0), what));\n copy_(y, x);\n lim = 1 << (i + 18);\n\n for (j = 1; j < lim; ++j) {\n ++it;\n copy_(a, x);\n copy_(b, x);\n copyInt_(c, q);\n\n while(!isZero(b)) {\n if(b[0] & 1) {\n add_(c, a);\n if(greater(c, what)) {\n sub_(c, what);\n }\n }\n add_(a, a);\n if(greater(a, what)) {\n sub_(a, what);\n }\n rightShift_(b, 1);\n }\n\n copy_(x, c);\n if(greater(x, y)) {\n copy_(z, x);\n sub_(z, y);\n } else {\n copy_(z, y);\n sub_(z, x);\n }\n eGCD_(z, what, g, a, b);\n if(!equalsInt(g, 1)) {\n break;\n }\n if((j & (j - 1)) === 0) {\n copy_(y, x);\n }\n }\n if(greater(g, one)) {\n break;\n }\n }\n\n divide_(what, g, x, y);\n\n if(greater(g, x)) {\n P = x;\n Q = g;\n } else {\n P = g;\n Q = x;\n }\n\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\n\n return [new Uint8Array(bigInt2bytes(P)), new Uint8Array(bigInt2bytes(Q)), it];\n}\n\nexport function bytesModPow(x: number[] | Uint8Array, y: number[] | Uint8Array, m: number[] | Uint8Array) {\n try {\n const xBigInt = str2bigInt(bytesToHex(x), 16);\n const yBigInt = str2bigInt(bytesToHex(y), 16);\n const mBigInt = str2bigInt(bytesToHex(m), 16);\n const resBigInt = powMod(xBigInt, yBigInt, mBigInt);\n\n return bytesFromHex(bigInt2str(resBigInt, 16));\n } catch(e) {\n console.error('mod pow error', e);\n }\n\n //return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256);\n}\n\n//export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n//export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n //console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n //console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { bytesToHex } from '../../helpers/bytes';\nimport { isObject, longFromInts } from './bin_utils';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { str2bigInt, dup, divide_, bigInt2str } from '../../vendor/leemon';\nimport Schema, { MTProtoConstructor } from './schema';\n\n \n// @ts-ignore\nimport { gzipUncompress } from '../crypto/crypto_utils';\n \n\nconst boolFalse = +Schema.API.constructors.find(c => c.predicate === 'boolFalse').id;\nconst boolTrue = +Schema.API.constructors.find(c => c.predicate === 'boolTrue').id;\nconst vector = +Schema.API.constructors.find(c => c.predicate === 'vector').id;\nconst gzipPacked = +Schema.MTProto.constructors.find(c => c.predicate === 'gzip_packed').id;\n\n//console.log('boolFalse', boolFalse === 0xbc799737);\n\nclass TLSerialization {\n private maxLength = 2048; // 2Kb\n private offset = 0; // in bytes\n private mtproto = false;\n private debug = false;//Modes.debug;\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\n this.maxLength = options.startMaxLength || 2048; // 2Kb\n this.mtproto = options.mtproto || false;\n this.createBuffer();\n }\n\n public createBuffer() {\n this.buffer = new ArrayBuffer(this.maxLength);\n this.intView = new Int32Array(this.buffer);\n this.byteView = new Uint8Array(this.buffer);\n }\n\n public getArray() {\n const resultBuffer = new ArrayBuffer(this.offset);\n\n //let perf = performance.now();\n /* const resultUint8: any = new Uint8Array(resultBuffer);\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\n //console.log('perf uint8', performance.now() - perf);\n\n //perf = performance.now();\n const resultInt32 = new Int32Array(resultBuffer);\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\n //console.log('perf int32', performance.now() - perf);\n\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\n console.error(resultUint8, resultInt32);\n } */\n \n return resultInt32;\n }\n\n public getBuffer() {\n return this.getArray().buffer;\n }\n\n public getBytes(typed: true): Uint8Array;\n public getBytes(typed?: false): number[];\n public getBytes(typed: boolean = true): number[] | Uint8Array {\n if(typed) {\n const resultBuffer = new ArrayBuffer(this.offset);\n const resultArray = new Uint8Array(resultBuffer);\n \n resultArray.set(this.byteView.subarray(0, this.offset));\n \n return resultArray;\n }\n \n const bytes: number[] = new Array(this.offset);\n for(let i = 0; i < this.offset; i++) {\n bytes[i] = this.byteView[i];\n }\n return bytes;\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public checkLength(needBytes: number) {\n if(this.offset + needBytes < this.maxLength) {\n return;\n }\n \n //console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\n const previousBuffer = this.buffer;\n //const previousByteView = this.byteView;\n const previousArray = new Int32Array(previousBuffer);\n \n this.createBuffer();\n \n new Int32Array(this.buffer).set(previousArray);\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32), \n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\n }\n\n public writeInt(i: number, field: string) {\n this.debug && console.log('>>>', i.toString(16), i, field);\n \n const offset = this.offset / 4;\n this.checkLength(4);\n this.intView[offset] = i;\n this.offset += 4;\n\n return offset;\n }\n \n public storeInt(i: number, field?: string) {\n return this.writeInt(i, (field || '') + ':int');\n }\n \n public storeBool(i: boolean, field?: string) {\n if(i) {\n this.writeInt(boolTrue, (field || '') + ':bool');\n } else {\n this.writeInt(boolFalse, (field || '') + ':bool');\n }\n }\n \n public storeLongP(iHigh: number, iLow: number, field?: string) {\n this.writeInt(iLow, (field || '') + ':long[low]');\n this.writeInt(iHigh, (field || '') + ':long[high]');\n }\n\n public storeLong(sLong: Array | string | number, field?: string) {\n if(Array.isArray(sLong)) {\n if(sLong.length === 2) {\n return this.storeLongP(sLong[0], sLong[1], field);\n } else {\n return this.storeIntBytes(sLong, 64, field);\n }\n }\n \n if(typeof sLong !== 'string') {\n sLong = sLong ? sLong.toString() : '0';\n }\n\n const R = 0x100000000;\n //const divRem = bigStringInt(sLong).divideAndRemainder(bigint(R));\n\n const a = str2bigInt(sLong, 10, 64);\n const q = dup(a);\n const r = dup(a);\n divide_(a, str2bigInt((R).toString(16), 16, 64), q, r);\n //divInt_(a, R);\n\n const high = +bigInt2str(q, 10);\n let low = +bigInt2str(r, 10);\n\n if(high < low) {\n low -= R; \n }\n\n //console.log('storeLong', sLong, divRem[0].intValue(), divRem[1].intValue(), high, low);\n \n //this.writeInt(divRem[1].intValue(), (field || '') + ':long[low]');\n //this.writeInt(divRem[0].intValue(), (field || '') + ':long[high]');\n this.writeInt(low, (field || '') + ':long[low]');\n this.writeInt(high, (field || '') + ':long[high]');\n }\n \n public storeDouble(f: any, field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n \n doubleView[0] = f;\n \n this.writeInt(intView[0], (field || '') + ':double[low]');\n this.writeInt(intView[1], (field || '') + ':double[high]');\n }\n \n public storeString(s: string, field?: string) {\n this.debug && console.log('>>>', s, (field || '') + ':string');\n \n if(s === undefined) {\n s = '';\n }\n const sUTF8 = unescape(encodeURIComponent(s));\n \n this.checkLength(sUTF8.length + 8);\n \n const len = sUTF8.length;\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n for(let i = 0; i < len; i++) {\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\n }\n \n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n \n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n } else if(bytes === undefined) {\n bytes = [];\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\n \n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\n const len = (bytes as Uint8Array).length;\n this.checkLength(len + 8);\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n \n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n \n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n \n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = (bytes as Uint8Array).length;\n if((bits % 32) || (len * 8) !== bits) {\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\n console.error(error, bytes, field);\n throw error;\n }\n \n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\n this.checkLength(len);\n \n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n }\n \n public storeRawBytes(bytes: ArrayLike, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = bytes.length;\n \n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\n this.checkLength(len);\n \n this.byteView.set(bytes, this.offset);\n this.offset += len;\n }\n \n public storeMethod(methodName: string, params: any) {\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const methodData = schema.methods.find(m => m.method === methodName);\n\n if(!methodData) {\n throw new Error('No method ' + methodName + ' found');\n }\n \n this.storeInt(methodData.id, methodName + '[id]');\n\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\n const flagsOffsets: {[paramName: string]: number} = {};\n //console.log('storeMethod', len, methodData);\n for(const param of methodData.params) {\n let type = param.type;\n\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\n //console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\n params[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n \n //console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\n type = condType[1];\n }\n \n //console.log('storeMethod', methodName, param.name, params[param.name], type);\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\n\n if(type === '#') {\n params[param.name] = params[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(let paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = params[paramName];\n }\n\n return methodData.type;\n }\n \n public storeObject(obj: any, type: string, field?: string) {\n //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\n switch(type) {\n case '#':\n obj = obj || 0;\n case 'int':\n return this.storeInt(obj, field);\n case 'long':\n return this.storeLong(obj, field);\n case 'int128':\n return this.storeIntBytes(obj, 128, field);\n case 'int256':\n return this.storeIntBytes(obj, 256, field);\n case 'int512':\n return this.storeIntBytes(obj, 512, field);\n case 'string':\n return this.storeString(obj, field);\n case 'bytes':\n return this.storeBytes(obj, field);\n case 'double':\n return this.storeDouble(obj, field);\n case 'Bool':\n return this.storeBool(obj, field);\n case 'true':\n return\n }\n \n if(Array.isArray(obj)) {\n if(type.substr(0, 6) === 'Vector') {\n this.writeInt(vector, field + '[id]');\n } else if (type.substr(0, 6) !== 'vector') {\n throw new Error('Invalid vector type ' + type);\n }\n\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n this.writeInt(obj.length, field + '[count]');\n for(let i = 0; i < obj.length; i++) {\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\n }\n\n return true;\n } else if (type.substr(0, 6).toLowerCase() === 'vector') {\n throw new Error('Invalid vector object');\n }\n \n if(!isObject(obj)) {\n throw new Error('Invalid object for type ' + type);\n }\n \n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const predicate = obj['_'];\n let isBare = false;\n const constructorData: MTProtoConstructor = schema.constructors.find(c => c.predicate === predicate);\n \n if(isBare = (type.charAt(0) === '%')) {\n type = type.substr(1);\n }\n\n if(!constructorData) {\n throw new Error('No predicate ' + predicate + ' found');\n }\n \n if(predicate === type) {\n isBare = true;\n }\n \n if(!isBare) {\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\n }\n\n const pFlags = obj.pFlags;\n const flagsOffsets: {[paramName: string]: number} = {};\n //console.log('storeObject', len, constructorData);\n for(const param of constructorData.params) {\n let type = param.type;\n\n //console.log('storeObject', param, type);\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n //console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\n\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\n //console.log('storeObject autocompleting', param.name, obj[param.name], type);\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n type = condType[1];\n }\n //console.log('storeObject', param, type);\n \n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\n\n if(type === '#') {\n obj[param.name] = obj[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(let paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = obj[paramName];\n }\n \n return constructorData.type;\n }\n}\n\nclass TLDeserialization {\n private offset = 0; // in bytes\n private override: {[key: string]: (result: any, field: string) => void};\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n // this.debug = \n private mtproto: boolean = false;\n private debug: boolean;\n\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\n //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\n if(buffer instanceof ArrayBuffer) {\n this.buffer = buffer;\n this.intView = new Int32Array(buffer);\n this.byteView = new Uint8Array(this.buffer);\n } else {\n this.buffer = buffer.buffer;\n this.intView = new Int32Array(buffer.buffer);\n this.byteView = buffer;\n }\n\n //console.log(this.intView);\n\n this.override = 'override' in options ? options.override : {};\n this.mtproto = 'mtproto' in options ? options.mtproto : false;\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\n }\n\n private readInt(field: string) {\n //if(this.offset >= this.intView.length * 4) {\n if((this.byteView.length - this.offset) < 4) {\n console.error(this.byteView, this.offset);\n throw new Error('Nothing to fetch: ' + field);\n }\n \n const i = this.intView[this.offset / 4];\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\n \n this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ \n && console.log('<<<', i.toString(16), i, field, \n this.byteView.slice(this.offset - 16, this.offset + 16), \n this.byteView.slice(this.offset - 16, this.offset + 16).hex);\n \n this.offset += 4;\n \n return i;\n }\n \n public fetchInt(field?: string) {\n return this.readInt((field || '') + ':int');\n }\n \n public fetchDouble(field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n \n intView[0] = this.readInt((field || '') + ':double[low]'),\n intView[1] = this.readInt((field || '') + ':double[high]');\n \n return doubleView[0];\n }\n \n public fetchLong(field?: string): string {\n const iLow = this.readInt((field || '') + ':long[low]');\n const iHigh = this.readInt((field || '') + ':long[high]');\n \n //const longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString();\n const longDec = longFromInts(iHigh, iLow);\n \n return longDec;\n }\n \n public fetchBool(field?: string): boolean {\n const i = this.readInt((field || '') + ':bool');\n if(i === boolTrue) {\n return true;\n } else if(i === boolFalse) {\n return false;\n }\n\n this.offset -= 4;\n return this.fetchObject('Object', field);\n }\n \n public fetchString(field?: string): string {\n let len = this.byteView[this.offset++];\n \n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n \n let sUTF8 = '';\n for(let i = 0; i < len; i++) {\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\n }\n \n // Padding\n while(this.offset % 4) {\n this.offset++;\n }\n \n let s: string;\n try {\n s = decodeURIComponent(escape(sUTF8));\n } catch (e) {\n s = sUTF8;\n }\n \n this.debug && console.log('<<<', s, (field || '') + ':string');\n \n return s;\n }\n \n public fetchBytes(field?: string) {\n let len = this.byteView[this.offset++];\n \n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n \n const bytes = this.byteView.subarray(this.offset, this.offset + len);\n this.offset += len;\n \n // Padding\n while(this.offset % 4) {\n this.offset++;\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\n \n return bytes;\n }\n \n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\n if(bits % 32) {\n throw new Error('Invalid bits: ' + bits);\n }\n \n const len = bits / 8;\n if(typed) {\n const result = this.byteView.subarray(this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n \n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; i++) {\n bytes[i] = this.byteView[this.offset++];\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\n \n return bytes;\n }\n \n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\n if(len === false) {\n len = this.readInt((field || '') + '_length');\n if(len > this.byteView.byteLength) {\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\n }\n }\n \n if(typed) {\n const bytes = new Uint8Array(len);\n bytes.set(this.byteView.subarray(this.offset, this.offset + len));\n this.offset += len;\n return bytes;\n }\n \n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; i++) {\n bytes[i] = this.byteView[this.offset++];\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\n \n return bytes;\n }\n\n private fetchVector(type: string, field?: string) {\n const len = this.readInt(field + '[count]');\n const result: any[] = new Array(len);\n if(len > 0) {\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n for(let i = 0; i < len; ++i) {\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\n }\n }\n \n return result;\n }\n \n public fetchObject(type: string, field?: string): any {\n switch(type) {\n case '#':\n case 'int':\n return this.fetchInt(field);\n case 'long':\n return this.fetchLong(field);\n case 'int128':\n return this.fetchIntBytes(128, true, field);\n case 'int256':\n return this.fetchIntBytes(256, true, field);\n case 'int512':\n return this.fetchIntBytes(512, true, field);\n case 'string':\n return this.fetchString(field);\n case 'bytes':\n return this.fetchBytes(field);\n case 'double':\n return this.fetchDouble(field);\n case 'Bool':\n return this.fetchBool(field);\n case 'true':\n return true;\n }\n \n field = field || type || 'Object';\n \n if(type.charAt(0) === 'v' && type.substr(1, 5) === 'ector') {\n return this.fetchVector(type, field);\n }\n \n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n let constructorData: MTProtoConstructor = null;\n let fallback = false;\n \n if(type.charAt(0) === '%') {\n const checkType = type.substr(1);\n constructorData = schema.constructors.find(c => c.type === checkType);\n if(!constructorData) {\n throw new Error('Constructor not found for type: ' + type);\n }\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\n constructorData = schema.constructors.find(c => c.predicate === type);\n if(!constructorData) {\n throw new Error('Constructor not found for predicate: ' + type);\n }\n } */ else {\n const constructorCmp = this.readInt(field + '[id]');\n \n if(constructorCmp === gzipPacked) { // Gzip packed\n const compressed = this.fetchBytes(field + '[packed_string]');\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\n const newDeserializer = new TLDeserialization(uncompressed);\n \n return newDeserializer.fetchObject(type, field);\n }\n\n if(constructorCmp === vector) {\n return this.fetchVector(type, field);\n }\n \n let index = schema.constructorsIndex;\n if(!index) {\n schema.constructorsIndex = index = {};\n for(let i = 0, len = schema.constructors.length; i < len; i++) {\n index[schema.constructors[i].id] = i;\n }\n }\n\n const i = index[constructorCmp];\n if(i !== undefined) {\n constructorData = schema.constructors[i];\n }\n \n if(!constructorData && this.mtproto) {\n const schemaFallback = Schema.API;\n for(let i = 0, len = schemaFallback.constructors.length; i < len; i++) {\n if(+schemaFallback.constructors[i].id === constructorCmp) {\n constructorData = schemaFallback.constructors[i];\n \n delete this.mtproto;\n fallback = true;\n break;\n }\n }\n }\n\n if(!constructorData) {\n console.error('Constructor not found:', constructorCmp);\n \n let int1: number, int2: number;\n try {\n int1 = this.fetchInt(field);\n int2 = this.fetchInt(field);\n } catch(err) {\n\n }\n\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\n }\n }\n \n const predicate = constructorData.predicate;\n \n const result: any = {'_': predicate};\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\n if(this.override[overrideKey]) {\n this.override[overrideKey](result, field + '[' + predicate + ']');\n } else {\n for(let i = 0, len = constructorData.params.length; i < len; i++) {\n const param = constructorData.params[i];\n let type = param.type;\n\n if(type === '#' && result.pFlags === undefined) {\n result.pFlags = {};\n }\n\n const isCond = (type.indexOf('?') !== -1);\n if(isCond) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\n //console.log('fetchObject bad', constructorData, result[fieldBit[0]], fieldBit);\n continue;\n }\n\n //console.log('fetchObject good', constructorData, result[fieldBit[0]], fieldBit);\n\n type = condType[1];\n }\n \n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\n \n if(isCond && type === 'true') {\n result.pFlags[param.name] = value;\n } else {\n /* if(param.name === 'read_outbox_max_id') {\n console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']');\n } */\n \n result[param.name] = value;\n }\n }\n }\n \n if(fallback) {\n this.mtproto = true;\n }\n \n return result;\n }\n \n public getOffset() {\n return this.offset;\n }\n\n public setOffset(offset: number) {\n this.offset = offset;\n }\n \n /* public fetchEnd() {\n if(this.offset !== this.byteView.length) {\n throw new Error('Fetch end with non-empty buffer');\n }\n\n return true;\n } */\n}\n\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\nexport { TLDeserialization, TLSerialization };\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from \"../config/debug\";\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst _logTimer = Date.now();\nfunction dT() {\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\n}\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false) {\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n function Log(...args: any[]) {\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\n }\n \n Log.warn = function(...args: any[]) {\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\n };\n \n Log.info = function(...args: any[]) {\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\n };\n \n Log.error = function(...args: any[]) {\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\n };\n \n Log.trace = function(...args: any[]) {\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\n };\n\n /* Log.debug = function(...args: any[]) {\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\n }; */\n\n Log.debug = function(...args: any[]) {\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\n };\n\n Log.setPrefix = function(_prefix: string) {\n prefix = '[' + _prefix + ']:';\n };\n\n Log.setPrefix(prefix);\n\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n \n return Log;\n};\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\nimport {str2bigInt, isZero,\r\n bigInt2str, powMod, int2bigInt, mult, mod, sub, bitSize, negative, add, greater} from '../../vendor/leemon';\r\n\r\nimport {logger, LogTypes} from '../logger';\r\nimport { AccountPassword, InputCheckPasswordSRP, PasswordKdfAlgo } from \"../../layer\";\r\nimport { bufferConcats, bytesToHex, bytesFromHex, bytesXor, convertToUint8Array } from \"../../helpers/bytes\";\r\nimport { addPadding } from \"../mtproto/bin_utils\";\r\n//import { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nconst log = logger('SRP', LogTypes.Error);\r\n\r\n//MOUNT_CLASS_TO && Object.assign(MOUNT_CLASS_TO, {str2bigInt, bigInt2str, int2bigInt});\r\n\r\nexport async function makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) {\r\n // ! look into crypto_methods.test.ts\r\n let buffer = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(client_salt, new TextEncoder().encode(password), client_salt));\r\n //log('encoded 1', bytesToHex(new Uint8Array(buffer)));\r\n\r\n buffer = bufferConcats(server_salt, buffer, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', buffer);\r\n //log('encoded 2', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n let hash = await CryptoWorker.invokeCrypto('pbkdf2', new Uint8Array(buffer), client_salt, 100000);\r\n //log('encoded 3', hash, bytesToHex(new Uint8Array(hash)));\r\n\r\n hash = bufferConcats(server_salt, hash, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', hash);\r\n //log('got password hash:', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n return buffer;\r\n}\r\n\r\nexport async function computeSRP(password: string, state: AccountPassword, isNew: boolean) {\r\n const algo = (isNew ? state.new_algo : state.current_algo) as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\r\n //console.log('computeSRP:', password, state, isNew, algo);\r\n\r\n const p = str2bigInt(bytesToHex(algo.p), 16);\r\n const B = str2bigInt(bytesToHex(state.srp_B), 16);\r\n const g = int2bigInt(algo.g, 32, 256);\r\n\r\n //log('p', bigInt2str(p, 16));\r\n //log('B', bigInt2str(B, 16));\r\n\r\n /* if(B.compareTo(BigInteger.ZERO) < 0) {\r\n console.error('srp_B < 0')\r\n }\r\n\r\n if(B.compareTo(p) <= 0) {\r\n console.error('srp_B <= p');\r\n } */\r\n\r\n /* let check_prime_and_good = (bytes: any, g: number) => {\r\n let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\r\n \r\n if(bytesToHex(bytes) === good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\r\n return true;\r\n }\r\n\r\n // TO-DO check_prime_and_good_check\r\n }; */\r\n\r\n //check_prime_and_good(algo.p, g);\r\n\r\n const pw_hash = await makePasswordHash(password, algo.salt1, algo.salt2);\r\n const x = str2bigInt(bytesToHex(pw_hash), 16);\r\n\r\n //log('computed pw_hash:', pw_hash, x, bytesToHex(new Uint8Array(pw_hash)));\r\n\r\n const padArray = function(arr: number[] | Uint8Array, len: number) {\r\n if(!(arr instanceof Uint8Array)) {\r\n arr = convertToUint8Array(arr);\r\n }\r\n\r\n return addPadding(arr, len, true, true, true);\r\n };\r\n\r\n const pForHash = padArray(bytesFromHex(bigInt2str(p, 16)), 256);\r\n const gForHash = padArray(bytesFromHex(bigInt2str(g, 16)), 256); // like uint8array\r\n const b_for_hash = padArray(bytesFromHex(bigInt2str(B, 16)), 256);\r\n\r\n /* log(bytesToHex(pForHash));\r\n log(bytesToHex(gForHash));\r\n log(bytesToHex(b_for_hash)); */\r\n\r\n const v = powMod(g, x, p);\r\n\r\n const flipper = (arr: Uint8Array | number[]) => {\r\n const out = new Uint8Array(arr.length);\r\n for(let i = 0; i < arr.length; i += 4) {\r\n out[i] = arr[i + 3];\r\n out[i + 1] = arr[i + 2];\r\n out[i + 2] = arr[i + 1];\r\n out[i + 3] = arr[i];\r\n }\r\n \r\n return out;\r\n };\r\n\r\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password\r\n if(isNew) {\r\n const bytes = bytesFromHex(bigInt2str(v, 16));\r\n return padArray(/* (isBigEndian ? bytes.reverse() : bytes) */bytes, 256);\r\n }\r\n\r\n //log('g_x', bigInt2str(g_x, 16));\r\n\r\n const kHash = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(pForHash, gForHash));\r\n const k = str2bigInt(bytesToHex(kHash), 16);\r\n\r\n //log('k', bigInt2str(k, 16));\r\n\r\n // kg_x = (k * g_x) % p\r\n const k_v = mod(mult(k, v), p);\r\n\r\n // good\r\n\r\n //log('kg_x', bigInt2str(kg_x, 16));\r\n\r\n const is_good_mod_exp_first = (modexp: any, prime: any) => {\r\n const diff = sub(prime, modexp);\r\n const min_diff_bits_count = 2048 - 64;\r\n const max_mod_exp_size = 256;\r\n if(negative(diff) ||\r\n bitSize(diff) < min_diff_bits_count || \r\n bitSize(modexp) < min_diff_bits_count || \r\n Math.floor((bitSize(modexp) + 7) / 8) > max_mod_exp_size)\r\n return false;\r\n return true;\r\n };\r\n\r\n const generate_and_check_random = async() => {\r\n while(true) {\r\n const a = str2bigInt(bytesToHex(flipper(state.secure_random)), 16);\r\n //const a = str2bigInt('9153faef8f2bb6da91f6e5bc96bc00860a530a572a0f45aac0842b4602d711f8bda8d59fb53705e4ae3e31a3c4f0681955425f224297b8e9efd898fec22046debb7ba8a0bcf2be1ada7b100424ea318fdcef6ccfe6d7ab7d978c0eb76a807d4ab200eb767a22de0d828bc53f42c5a35c2df6e6ceeef9a3487aae8e9ef2271f2f6742e83b8211161fb1a0e037491ab2c2c73ad63c8bd1d739de1b523fe8d461270cedcf240de8da75f31be4933576532955041dc5770c18d3e75d0b357df9da4a5c8726d4fced87d15752400883dc57fa1937ac17608c5446c4774dcd123676d683ce3a1ab9f7e020ca52faafc99969822717c8e07ea383d5fb1a007ba0d170cb', 16);\r\n\r\n //console.log('ITERATION');\r\n\r\n //log('g a p', bigInt2str(g, 16), bigInt2str(a, 16), bigInt2str(p, 16));\r\n\r\n const A = powMod(g, a, p);\r\n //log('A MODPOW', bigInt2str(A, 16));\r\n if(is_good_mod_exp_first(A, p)) {\r\n const a_for_hash = bytesFromHex(bigInt2str(A, 16));\r\n\r\n const s = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(a_for_hash, b_for_hash));\r\n const u = str2bigInt(s.hex, 16);\r\n if(!isZero(u) && !negative(u))\r\n return {a, a_for_hash, u};\r\n } \r\n }\r\n }\r\n \r\n\r\n const {a, a_for_hash, u} = await generate_and_check_random();\r\n\r\n /* log('a', bigInt2str(a, 16));\r\n log('a_for_hash', bytesToHex(a_for_hash));\r\n log('u', bigInt2str(u, 16)); */\r\n\r\n // g_b = (B - kg_x) % p\r\n /* log('B - kg_x', bigInt2str(sub(B, kg_x), 16));\r\n log('subtract', bigInt2str(B, 16), bigInt2str(kg_x, 16));\r\n log('B - kg_x', bigInt2str(sub(B, kg_x), 16)); */\r\n\r\n let g_b: number[];\r\n if(!greater(B, k_v)) {\r\n //log('negative');\r\n g_b = add(B, p);\r\n } else g_b = B;\r\n g_b = mod(sub(g_b, k_v), p);\r\n /* let g_b = sub(B, kg_x);\r\n if(negative(g_b)) g_b = add(g_b, p); */\r\n \r\n //log('g_b', bigInt2str(g_b, 16));\r\n\r\n /* if(!is_good_mod_exp_first(g_b, p))\r\n throw new Error('bad g_b'); */\r\n\r\n const ux = mult(u, x);\r\n //log('u and x multiply', bigInt2str(u, 16), bigInt2str(x, 16), bigInt2str(ux, 16));\r\n const a_ux = add(a, ux);\r\n const S = powMod(g_b, a_ux, p);\r\n\r\n const K = await CryptoWorker.invokeCrypto('sha256-hash', padArray(bytesFromHex(bigInt2str(S, 16)), 256));\r\n\r\n //log('K', bytesToHex(K), new Uint32Array(new Uint8Array(K).buffer));\r\n\r\n let h1 = await CryptoWorker.invokeCrypto('sha256-hash', pForHash);\r\n const h2 = await CryptoWorker.invokeCrypto('sha256-hash', gForHash);\r\n h1 = bytesXor(h1, h2);\r\n\r\n const buff = bufferConcats(h1, \r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt1),\r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt2),\r\n a_for_hash,\r\n b_for_hash,\r\n K\r\n );\r\n\r\n const M1 = await CryptoWorker.invokeCrypto('sha256-hash', buff);\r\n\r\n const out = {\r\n _: 'inputCheckPasswordSRP', \r\n srp_id: state.srp_id, \r\n A: new Uint8Array(a_for_hash), \r\n M1\r\n } as InputCheckPasswordSRP.inputCheckPasswordSRP;\r\n\r\n\r\n //log('out', bytesToHex(out.A), bytesToHex(out.M1));\r\n return out;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n// import { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport CryptoWorkerMethods, { CryptoMethods } from './crypto_methods';\r\n\r\n \r\nimport { aesDecryptSync, aesEncryptSync, bytesModPow, gzipUncompress, hash_pbkdf2, pqPrimeFactorization, rsaEncrypt, sha1HashSync, sha256HashSync } from './crypto_utils';\r\nimport { computeSRP } from './srp';\r\n \r\n\r\ntype Task = {\r\n taskId: number,\r\n task: string,\r\n args: any[]\r\n};\r\n\r\nclass CryptoWorker extends CryptoWorkerMethods {\r\n private webWorker: Worker | boolean = false;\r\n private taskId = 0;\r\n private awaiting: {\r\n [id: number]: {\r\n resolve: any,\r\n reject: any,\r\n taskName: string\r\n }\r\n } = {} as any;\r\n private pending: Array = [];\r\n private debug = false;\r\n\r\n private utils: CryptoMethods;\r\n\r\n constructor() {\r\n super();\r\n console.log('CW constructor');\r\n\r\n \r\n this.utils = {\r\n 'sha1-hash': sha1HashSync,\r\n 'sha256-hash': sha256HashSync,\r\n 'pbkdf2': hash_pbkdf2,\r\n 'aes-encrypt': aesEncryptSync,\r\n 'aes-decrypt': aesDecryptSync,\r\n 'rsa-encrypt': rsaEncrypt,\r\n 'factorize': pqPrimeFactorization,\r\n 'mod-pow': bytesModPow,\r\n 'gzipUncompress': gzipUncompress,\r\n 'computeSRP': computeSRP\r\n };\r\n\r\n // Promise.all([\r\n // import('./crypto_utils').then(utils => {\r\n // Object.assign(this.utils, {\r\n // 'sha1-hash': utils.sha1HashSync,\r\n // 'sha256-hash': utils.sha256HashSync,\r\n // 'pbkdf2': utils.hash_pbkdf2,\r\n // 'aes-encrypt': utils.aesEncryptSync,\r\n // 'aes-decrypt': utils.aesDecryptSync,\r\n // 'rsa-encrypt': utils.rsaEncrypt,\r\n // 'factorize': utils.pqPrimeFactorization,\r\n // 'mod-pow': utils.bytesModPow,\r\n // 'gzipUncompress': utils.gzipUncompress,\r\n // });\r\n // }),\r\n\r\n // import('./srp').then(srp => {\r\n // this.utils.computeSRP = srp.computeSRP;\r\n // })/* ,\r\n\r\n // import('../bin_utils').then(utils => {\r\n // this.utils.unzip = utils.gzipUncompress;\r\n // }) */\r\n // ]);\r\n\r\n return;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public performTaskWorker(task: string, ...args: any[]) {\r\n this.debug && console.log('CW start', task, args);\r\n\r\n \r\n // @ts-ignore\r\n return Promise.resolve(this.utils[task](...args));\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n}\r\n\r\nconst cryptoWorker = new CryptoWorker();\r\n// MOUNT_CLASS_TO.CryptoWorker = cryptoWorker;\r\nexport default cryptoWorker;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Awaited } from \"../../types\";\r\nimport type { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow, hash_pbkdf2, rsaEncrypt, pqPrimeFactorization, gzipUncompress } from \"./crypto_utils\";\r\nimport type { computeSRP } from \"./srp\";\r\n\r\nexport type CryptoMethods = {\r\n 'sha1-hash': typeof sha1HashSync,\r\n 'sha256-hash': typeof sha256HashSync,\r\n 'pbkdf2': typeof hash_pbkdf2,\r\n 'aes-encrypt': typeof aesEncryptSync,\r\n 'aes-decrypt': typeof aesDecryptSync,\r\n 'rsa-encrypt': typeof rsaEncrypt,\r\n 'factorize': typeof pqPrimeFactorization,\r\n 'mod-pow': typeof bytesModPow,\r\n 'gzipUncompress': typeof gzipUncompress,\r\n 'computeSRP': typeof computeSRP\r\n};\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker(task: string, ...args: any[]): Promise;\r\n\r\n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\r\n return this.performTaskWorker>>(method, ...args as any[]);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport sessionStorage from '../sessionStorage';\nimport { longFromInts } from './bin_utils';\nimport { nextRandomUint } from '../../helpers/random';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { WorkerTaskVoidTemplate } from '../../types';\nimport { notifySomeone } from '../../helpers/context';\n\n/*\nlet lol: any = {};\nfor(var i = 0; i < 100; i++) {\n timeManager.generateId();\n}\n*/\n\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\n type: 'applyServerTimeOffset',\n payload: TimeManager['timeOffset']\n};\n\nexport class TimeManager {\n private lastMessageId: [number, number] = [0, 0];\n private timeOffset: number = 0;\n\n constructor() {\n sessionStorage.get('server_time_offset').then((to) => {\n if(to) {\n this.timeOffset = to;\n }\n });\n }\n\n public generateId(): string {\n const timeTicks = Date.now(),\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\n timeMSec = timeTicks % 1000,\n random = nextRandomUint(16);\n\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if(this.lastMessageId[0] > messageId[0] ||\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\n }\n\n this.lastMessageId = messageId;\n\n const ret = longFromInts(messageId[0], messageId[1]);\n\n // if(lol[ret]) {\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\n // }\n // lol[ret] = true;\n\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\n\n return ret\n }\n\n public applyServerTime(serverTime: number, localTime?: number) {\n localTime = (localTime || Date.now()) / 1000 | 0;\n const newTimeOffset = serverTime - localTime;\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n sessionStorage.set({\n server_time_offset: newTimeOffset\n });\n\n this.lastMessageId = [0, 0];\n this.timeOffset = newTimeOffset;\n \n //console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\n\n \n const task: ApplyServerTimeOffsetTask = {\n type: 'applyServerTimeOffset',\n payload: newTimeOffset\n };\n notifySomeone(task);\n \n\n return changed;\n }\n}\n\nconst timeManager = new TimeManager();\nMOUNT_CLASS_TO.timeManager = timeManager;\nexport default timeManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type { DcId } from \"../types\";\n\nexport const MAIN_DOMAIN = 'web.telegram.org';\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n langPackVersion: '0.3.3',\n langPack: 'macos',\n langPackCode: 'en',\n domains: [MAIN_DOMAIN] as string[],\n baseDcId: 2 as DcId,\n isMainDomain: location.hostname === MAIN_DOMAIN,\n suffix: 'K'\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport enum ConnectionStatus {\r\n Connected,\r\n Connecting,\r\n Closed,\r\n TimedOut\r\n};\r\n\r\nexport type ConnectionStatusChange = {\r\n _: 'networkerStatus', \r\n status: ConnectionStatus,\r\n dcId: number,\r\n name: string,\r\n isFileNetworker: boolean,\r\n isFileDownload: boolean,\r\n isFileUpload: boolean,\r\n retryAt?: number\r\n};\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {isObject, sortLongsArray} from './bin_utils';\nimport {TLDeserialization, TLSerialization} from './tl_utils';\nimport CryptoWorker from '../crypto/cryptoworker';\nimport sessionStorage from '../sessionStorage';\nimport Schema from './schema';\nimport timeManager from './timeManager';\nimport networkerFactory from './networkerFactory';\nimport { logger, LogTypes } from '../logger';\nimport { InvokeApiOptions } from '../../types';\nimport { longToBytes } from '../crypto/crypto_utils';\nimport MTTransport from './transports/transport';\nimport { convertToUint8Array, bytesCmp, bytesToHex, bufferConcats } from '../../helpers/bytes';\nimport { nextRandomUint, randomLong } from '../../helpers/random';\nimport App from '../../config/app';\nimport DEBUG from '../../config/debug';\nimport Modes from '../../config/modes';\n\n \n \n \n\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport { bigInt2str, rightShift_, str2bigInt } from '../../vendor/leemon';\nimport { forEachReverse } from '../../helpers/array';\nimport { ConnectionStatus } from './connectionStatus';\n\n//console.error('networker included!', new Error().stack);\n\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\n noResponse: true, // http_wait\n longPoll: true,\n \n notContentRelated: true, // ACK\n noSchedule: true,\n messageId: string,\n}>;\n\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\n msg_id: string,\n seq_no: number,\n body?: Uint8Array | number[],\n isAPI?: boolean,\n // only these four are important\n\n acked?: boolean,\n\n deferred?: {\n resolve: any,\n reject: any\n },\n\n container?: boolean,\n inner?: string[],\n\n // below - options\n\n notContentRelated?: true,\n noSchedule?: true,\n\n resultType?: string,\n\n longPoll?: true,\n noResponse?: true, // only with http (http_wait for longPoll)\n};\n\nconst CONNECTION_TIMEOUT = 5000;\nconst DRAIN_TIMEOUT = 10000;\nlet invokeAfterMsgConstructor: number;\n\nexport default class MTPNetworker {\n private authKeyUint8: Uint8Array;\n\n public isFileNetworker: boolean;\n private isFileUpload: boolean;\n private isFileDownload: boolean;\n\n private lastServerMessages: Array = [];\n\n private sentMessages: {\n [msgId: string]: MTMessage\n } = {};\n\n private pendingMessages: {[msgId: string]: number} = {};\n private pendingAcks: Array = [];\n private pendingResends: Array = [];\n public connectionInited = false;\n\n private nextReqTimeout: number;\n private nextReq: number = 0;\n \n \n \n \n \n \n \n \n \n\n private seqNo: number = 0;\n private prevSessionId: Uint8Array;\n private sessionId: Uint8Array;\n private serverSalt: Uint8Array;\n\n private lastResendReq: {\n req_msg_id: string,\n resend_msg_ids: Array\n } | null = null;\n\n private name: string;\n private log: ReturnType;\n \n public isOnline = false;\n public status: ConnectionStatus = ConnectionStatus.Closed;\n private lastResponseTime = 0;\n\n private debug = DEBUG /* && false */ || Modes.debug;\n\n public activeRequests = 0;\n\n public onDrain: () => void;\n private onDrainTimeout: number;\n\n //private disconnectDelay: number;\n //private pingPromise: CancellablePromise;\n //public onConnectionStatusChange: (online: boolean) => void;\n\n //private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\n\n constructor(public dcId: number, private authKey: Uint8Array, private authKeyId: Uint8Array,\n serverSalt: Uint8Array, public transport: MTTransport, options: InvokeApiOptions = {}) {\n this.authKeyUint8 = convertToUint8Array(this.authKey);\n this.serverSalt = convertToUint8Array(serverSalt);\n\n this.isFileUpload = !!options.fileUpload;\n this.isFileDownload = !!options.fileDownload;\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\n\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\n this.name = 'NET-' + dcId + suffix;\n //this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\n this.log = logger(this.name, LogTypes.Log | /* LogTypes.Debug | */LogTypes.Error | LogTypes.Warn);\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\n\n // Test resend after bad_server_salt\n /* if(this.dcId === 2 && this.upload) {\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\n this.serverSalt[0] = 0;\n } */\n\n this.updateSession();\n\n // if(!NetworkerFactory.offlineInited) {\n // NetworkerFactory.offlineInited = true;\n // /* rootScope.offline = true\n // rootScope.offlineConnecting = true */\n // }\n\n \n \n \n \n \n \n \n \n \n \n \n \n //} else {\n (this.transport as TcpObfuscated).networker = this;\n //}\n \n\n // * handle outcoming dead socket, server will close the connection\n // if((this.transport as TcpObfuscated).networker) {\n // this.disconnectDelay = /* (this.transport as TcpObfuscated).retryTimeout */75;\n // //setInterval(this.sendPingDelayDisconnect, (this.disconnectDelay - 5) * 1000);\n // this.sendPingDelayDisconnect();\n // }\n\n if((this.transport as TcpObfuscated).connected) {\n this.setConnectionStatus(ConnectionStatus.Connected);\n }\n }\n\n private updateSession() {\n this.seqNo = 0;\n this.prevSessionId = this.sessionId;\n this.sessionId = new Uint8Array(8).randomize();\n }\n\n /* private clearContainers() {\n for(const messageId in this.sentMessages) {\n const message = this.sentMessages[messageId];\n if(message.container) {\n delete this.sentMessages[messageId];\n }\n }\n } */\n\n private updateSentMessage(sentMessageId: string) {\n const sentMessage = this.sentMessages[sentMessageId];\n if(!sentMessage) {\n return false;\n }\n\n if(sentMessage.container) {\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\n if(!innerSentMessage) {\n sentMessage.inner.splice(idx, 1);\n } else {\n sentMessage.inner[idx] = innerSentMessage.msg_id;\n }\n });\n }\n \n sentMessage.msg_id = timeManager.generateId();\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\n\n /* if(DEBUG) {\n this.log('updateSentMessage', sentMessage.msg_id, sentMessageId);\n } */\n\n this.sentMessages[sentMessage.msg_id] = sentMessage;\n delete this.sentMessages[sentMessageId];\n \n return sentMessage;\n }\n\n private generateSeqNo(notContentRelated?: boolean) {\n let seqNo = this.seqNo * 2;\n \n if(!notContentRelated) {\n seqNo++;\n this.seqNo++;\n }\n \n return seqNo;\n }\n\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n \n serializer.storeMethod(method, params);\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n \n if(Modes.debug) {\n this.log('MT call', method, params, messageId, seqNo);\n }\n \n return this.pushMessage(message, options);\n }\n \n public wrapMtpMessage(object: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeObject(object, 'Object');\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo(options.notContentRelated);\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n \n if(Modes.debug) {\n this.log('MT message', object, messageId, seqNo);\n }\n \n return this.pushMessage(message, options);\n }\n\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\n const serializer = new TLSerialization(options);\n \n if(!this.connectionInited) { // this will call once for each new session\n ///////this.log('Wrap api call !this.connectionInited');\n\n const invokeWithLayer = Schema.API.methods.find(m => m.method === 'invokeWithLayer');\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\n\n // @ts-ignore\n serializer.storeInt(Schema.layer, 'layer');\n \n const initConnection = Schema.API.methods.find(m => m.method === 'initConnection');\n if(!initConnection) throw new Error('no initConnection!');\n \n serializer.storeInt(+initConnection.id, 'initConnection');\n serializer.storeInt(0x0, 'flags');\n serializer.storeInt(App.id, 'api_id');\n serializer.storeString(networkerFactory.userAgent || 'Unknown UserAgent', 'device_model');\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\n serializer.storeString(App.langPack, 'lang_pack');\n serializer.storeString(networkerFactory.language, 'lang_code');\n //serializer.storeInt(0x0, 'proxy');\n /* serializer.storeMethod('initConnection', {\n 'flags': 0,\n 'api_id': App.id,\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\n 'system_version': navigator.platform || 'Unknown Platform',\n 'app_version': App.version,\n 'system_lang_code': navigator.language || 'en',\n 'lang_pack': '',\n 'lang_code': navigator.language || 'en'\n }); */\n }\n \n if(options.afterMessageId) {\n if(invokeAfterMsgConstructor === undefined) {\n const m = Schema.API.methods.find(m => m.method === 'invokeAfterMsg');\n invokeAfterMsgConstructor = m ? +m.id : 0;\n }\n \n if(invokeAfterMsgConstructor) {\n // if(this.debug) {\n // this.log('invokeApi: store invokeAfterMsg');\n // }\n \n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\n serializer.storeLong(options.afterMessageId, 'msg_id');\n } else {\n this.log.error('no invokeAfterMsg!');\n }\n }\n \n options.resultType = serializer.storeMethod(method, params);\n\n /* if(method === 'account.updateNotifySettings') {\n this.log('api call body:', serializer.getBytes(true));\n } */\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n isAPI: true\n };\n \n if(Modes.debug/* || true */) {\n this.log('Api call', method, message, params, options);\n } else if(this.debug) {\n this.log('Api call', method, params, options);\n }\n \n return this.pushMessage(message, options);\n }\n\n public destroy() {\n //assumeType(this.transport);\n (this.transport as TcpObfuscated).destroy();\n }\n\n public forceReconnectTimeout() {\n if((this.transport as TcpObfuscated).reconnect) {\n (this.transport as TcpObfuscated).reconnect();\n }\n }\n\n public forceReconnect() {\n if((this.transport as TcpObfuscated).forceReconnect) {\n (this.transport as TcpObfuscated).forceReconnect();\n }\n }\n\n // private sendPingDelayDisconnect = () => {\n // if(this.pingPromise || true) return;\n\n // if(!this.isOnline) {\n // if((this.transport as TcpObfuscated).connected) {\n // (this.transport as TcpObfuscated).handleClose();\n // }\n\n // return;\n // }\n\n // this.log('sendPingDelayDisconnect', this.sentPingTimes);\n\n // /* if(this.tt) clearTimeout(this.tt);\n // this.tt = self.setTimeout(() => { \n // (this.transport as any).ws.close(1000);\n // this.tt = 0;\n // }, this.disconnectDelay * 1000); */\n // /* this.wrapMtpCall('ping_delay_disconnect', {\n // ping_id: randomLong(),\n // disconnect_delay: this.disconnectDelay\n // }, {\n // noResponse: true,\n // notContentRelated: true\n // }); */\n // const deferred = this.pingPromise = deferredPromise();\n\n // const timeoutTime = this.disconnectDelay * 1000;\n\n // /* if(!this.sentPingTimes || true) {\n // ++this.sentPingTimes; */\n // const startTime = Date.now();\n // this.wrapMtpCall('ping', {\n // ping_id: randomLong()\n // }, {}).then(pong => {\n // const elapsedTime = Date.now() - startTime;\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\n\n // if(elapsedTime > timeoutTime) {\n // deferred.reject();\n // } else {\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\n // }\n // }, deferred.reject).finally(() => {\n // clearTimeout(rejectTimeout);\n // //--this.sentPingTimes;\n // });\n // //}\n\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\n\n // deferred.catch(() => {\n // (this.transport as Socket).handleClose();\n // });\n\n // deferred.finally(() => {\n // this.pingPromise = null;\n // this.sendPingDelayDisconnect();\n // });\n // };\n\n // private sendPingDelayDisconnect = () => {\n // if(this.pingPromise || true) return;\n\n // /* if(!this.isOnline) {\n // if((this.transport as TcpObfuscated).connected) {\n // (this.transport as TcpObfuscated).connection.close();\n // }\n\n // return;\n // } */\n\n // const deferred = this.pingPromise = deferredPromise();\n\n // const timeoutTime = this.disconnectDelay * 1000;\n\n // const startTime = Date.now();\n // this.wrapMtpCall('ping_delay_disconnect', {\n // ping_id: randomLong(),\n // disconnect_delay: this.disconnectDelay\n // }, {}).then(pong => {\n // const elapsedTime = Date.now() - startTime;\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\n\n // if(elapsedTime > timeoutTime) {\n // deferred.reject();\n // } else {\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\n // }\n // }, deferred.reject).finally(() => {\n // clearTimeout(rejectTimeout);\n // //--this.sentPingTimes;\n // });\n\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\n\n // deferred.catch(() => {\n // this.log.error('sendPingDelayDisconnect: catch, closing connection if exists');\n // (this.transport as TcpObfuscated).connection.close();\n // });\n\n // deferred.finally(() => {\n // this.pingPromise = null;\n // this.sendPingDelayDisconnect();\n // });\n // };\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n // тут можно сделать таймаут и выводить дисконнект\n private pushMessage(message: {\n msg_id: string,\n seq_no: number,\n body: Uint8Array | number[],\n isAPI?: boolean\n }, options: MTMessageOptions) {\n const promise = new Promise((resolve, reject) => {\n this.sentMessages[message.msg_id] = Object.assign(message, options, options.notContentRelated \n ? undefined \n : {\n deferred: {resolve, reject}\n }\n );\n\n //this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\n\n this.pendingMessages[message.msg_id] = 0;\n \n if(!options.noSchedule) {\n this.scheduleRequest();\n }\n\n if(isObject(options)) {\n options.messageId = message.msg_id;\n }\n });\n\n if(!options.notContentRelated && !options.noResponse) {\n const timeout = setTimeout(() => {\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < CONNECTION_TIMEOUT) {\n return;\n }\n\n this.log.error('timeout', message);\n if(this.isOnline) {\n this.setConnectionStatus(ConnectionStatus.TimedOut);\n }\n\n /* this.getEncryptedOutput(message).then(bytes => {\n this.log.error('timeout encrypted', bytes);\n }); */\n }, CONNECTION_TIMEOUT);\n \n promise.finally(() => {\n clearTimeout(timeout);\n this.setConnectionStatus(ConnectionStatus.Connected);\n\n --this.activeRequests;\n this.setDrainTimeout();\n });\n \n ++this.activeRequests;\n if(this.onDrainTimeout !== undefined) {\n clearTimeout(this.onDrainTimeout);\n this.onDrainTimeout = undefined;\n }\n }\n\n return promise;\n }\n\n public setDrainTimeout() {\n if(!this.activeRequests && this.onDrain && this.onDrainTimeout === undefined) {\n this.onDrainTimeout = self.setTimeout(() => {\n this.onDrainTimeout = undefined;\n this.log('drain');\n this.onDrain();\n }, DRAIN_TIMEOUT);\n }\n }\n\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number) {\n const isOnline = status === ConnectionStatus.Connected;\n const willChange = this.status !== status;\n this.isOnline = isOnline;\n this.status = status;\n\n if(willChange) {\n if(networkerFactory.onConnectionStatusChange) {\n networkerFactory.onConnectionStatusChange({\n _: 'networkerStatus',\n status,\n dcId: this.dcId,\n name: this.name,\n isFileNetworker: this.isFileNetworker,\n isFileDownload: this.isFileDownload,\n isFileUpload: this.isFileUpload,\n retryAt\n });\n }\n\n if(this.isOnline) {\n this.scheduleRequest();\n }\n\n // if((this.transport as TcpObfuscated).networker) {\n // this.sendPingDelayDisconnect();\n // }\n /* this.sentPingTimes = 0;\n this.sendPingDelayDisconnect(); */\n }\n /* if(this.onConnectionStatusChange) {\n this.onConnectionStatusChange(this.isOnline);\n } */\n }\n\n private pushResend(messageId: string, delay = 100) {\n const value = delay ? Date.now() + delay : 0;\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage.container) {\n for(const innerMsgId of sentMessage.inner) {\n this.pendingMessages[innerMsgId] = value;\n }\n } else {\n this.pendingMessages[messageId] = value;\n }\n\n if(sentMessage.acked) {\n this.log.error('pushResend: acked message?', sentMessage);\n }\n \n if(this.debug) {\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\n }\n \n this.scheduleRequest(delay);\n }\n\n // * correct, fully checked\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\n const x = isOut ? 0 : 8;\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\n\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256-hash', msgKeyLargePlain);\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\n return msgKey;\n };\n\n // * correct, fully checked\n private getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\n const x = isOut ? 0 : 8;\n const sha2aText = new Uint8Array(52);\n const sha2bText = new Uint8Array(52);\n const promises: Array> = [];\n \n sha2aText.set(msgKey, 0);\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2aText));\n \n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\n sha2bText.set(msgKey, 36);\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2bText));\n\n return Promise.all(promises).then((results) => {\n const aesKey = new Uint8Array(32);\n const aesIv = new Uint8Array(32);\n const sha2a = new Uint8Array(results[0]);\n const sha2b = new Uint8Array(results[1]);\n \n aesKey.set(sha2a.subarray(0, 8));\n aesKey.set(sha2b.subarray(8, 24), 8);\n aesKey.set(sha2a.subarray(24, 32), 24);\n \n aesIv.set(sha2b.subarray(0, 8));\n aesIv.set(sha2a.subarray(8, 24), 8);\n aesIv.set(sha2b.subarray(24, 32), 24);\n \n return [aesKey, aesIv];\n });\n }\n\n public isStopped() {\n return networkerFactory.akStopped && !this.isFileNetworker;\n }\n\n private performScheduledRequest() {\n // this.log('scheduled', this.dcId, this.iii)\n\n if(this.isStopped()) {\n return false;\n }\n\n if(this.pendingAcks.length) {\n const ackMsgIds: Array = this.pendingAcks.slice();\n\n // this.log('acking messages', ackMsgIDs)\n this.wrapMtpMessage({\n _: 'msgs_ack',\n msg_ids: ackMsgIds\n }, {\n notContentRelated: true,\n noSchedule: true\n });\n }\n \n if(this.pendingResends.length) {\n const resendMsgIds: Array = this.pendingResends.slice();\n const resendOpts: MTMessageOptions = {\n noSchedule: true,\n notContentRelated: true,\n messageId: '' // will set in wrapMtpMessage->pushMessage\n };\n\n //this.log('resendReq messages', resendMsgIds);\n this.wrapMtpMessage({\n _: 'msg_resend_req',\n msg_ids: resendMsgIds\n }, resendOpts);\n\n this.lastResendReq = {\n req_msg_id: resendOpts.messageId,\n resend_msg_ids: resendMsgIds\n };\n }\n \n let outMessage: MTPNetworker['sentMessages'][keyof MTPNetworker['sentMessages']];\n const messages: typeof outMessage[] = [];\n \n //const currentTime = Date.now();\n let messagesByteLen = 0;\n\n \n \n \n \n\n let lengthOverflow = false;\n\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\n for(const messageId of keys) {\n //const value = this.pendingMessages[messageId];\n\n //if(!value || value <= currentTime) {\n const message = this.sentMessages[messageId];\n if(message && message.body) {\n /* if(message.fileUpload) {\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\n } */\n\n const messageByteLength = message.body.length + 32;\n\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\n this.log.warn('lengthOverflow', message, messages);\n lengthOverflow = true;\n\n if(outMessage) { // if it's not a first message\n break;\n }\n }\n\n messages.push(message);\n messagesByteLen += messageByteLength;\n\n \n \n \n \n \n \n \n\n outMessage = message;\n } else {\n // this.log(message, messageId)\n }\n\n delete this.pendingMessages[messageId];\n //}\n }\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n if(!messages.length) {\n // this.log('no scheduled messages')\n return;\n }\n \n \n \n \n \n if(messages.length > 1) {\n const container = this.generateContainerMessage(messagesByteLen, messages);\n outMessage = container.messageWithBody;\n \n this.sentMessages[outMessage.msg_id] = container.message;\n } else {\n this.sentMessages[outMessage.msg_id] = outMessage;\n }\n \n this.pendingAcks = [];\n\n const promise = this.sendEncryptedRequest(outMessage);\n \n \n \n \n \n \n \n \n \n this.cleanupSent(); // ! WARNING\n \n \n \n \n \n if(lengthOverflow) {\n this.scheduleRequest();\n }\n }\n\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\n const container = new TLSerialization({\n mtproto: true,\n startMaxLength: messagesByteLen + 64\n });\n\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\n container.storeInt(messages.length, 'CONTAINER[count]');\n\n const innerMessages: string[] = [];\n messages.forEach((message, i) => {\n innerMessages.push(message.msg_id);\n // this.log('Pushing to container:', message.msg_id);\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\n });\n\n const message: MTMessage = {\n msg_id: timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n container: true,\n inner: innerMessages\n };\n\n if(Modes.debug/* || true */) {\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\n }\n\n return {\n message,\n messageWithBody: Object.assign({body: container.getBytes(true)}, message),\n };\n }\n\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\n const msgKey = await this.getMsgKey(dataWithPadding, true);\n const keyIv = await this.getAesKeyIv(msgKey, true);\n // this.log('after msg key iv')\n\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\n // this.log('Finish encrypt')\n\n return {\n bytes: encryptedBytes,\n msgKey\n };\n }\n\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\n // this.log('get decrypted start')\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\n // this.log('after msg key iv')\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\n });\n }\n\n private getEncryptedOutput(message: MTMessage) {\n /* if(DEBUG) {\n this.log.debug('Send encrypted', message, this.authKeyId);\n } */\n /* if(!this.isOnline) {\n this.log('trying to send message when offline:', Object.assign({}, message));\n //debugger;\n } */\n\n const data = new TLSerialization({\n startMaxLength: message.body.length + 2048\n });\n\n data.storeIntBytes(this.serverSalt, 64, 'salt');\n data.storeIntBytes(this.sessionId, 64, 'session_id');\n \n data.storeLong(message.msg_id, 'message_id');\n data.storeInt(message.seq_no, 'seq_no');\n\n data.storeInt(message.body.length, 'message_data_length');\n data.storeRawBytes(message.body, 'message_data');\n\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\n const desSalt = des.fetchLong();\n const desSessionId = des.fetchLong();\n\n if(!this.isOnline) {\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\n } */\n\n /* const messageDataLength = message.body.length;\n let canBeLength = 0; // bytes\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 4;\n canBeLength += 4;\n canBeLength += message.body.length; */\n \n const dataBuffer = data.getBuffer();\n\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\n } */\n\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomUint(8) % 5);\n const padding = /* (message as any).padding || */new Uint8Array(paddingLength).randomize()/* .fill(0) */;\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\n\n //(message as any).padding = padding;\n\n const dataWithPadding = bufferConcats(dataBuffer, padding);\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\n\n /* if(dataWithPadding.byteLength % 16) {\n this.log.error('aaa', dataWithPadding, paddingLength);\n }\n\n if(message.fileUpload) {\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\n } */\n\n // * full next block is correct\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\n /* if(DEBUG) {\n this.log('Got encrypted out message', encryptedResult);\n } */\n\n const request = new TLSerialization({\n startMaxLength: encryptedResult.bytes.length + 256\n });\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\n \n const requestData = request.getBytes(true);\n\n // if(this.isFileNetworker) {\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\n // }\n\n return requestData;\n });\n }\n\n private sendEncryptedRequest(message: MTMessage) {\n return this.getEncryptedOutput(message).then(requestData => {\n this.debug && this.log.debug('sendEncryptedRequest: launching message into space:', message, [message.msg_id].concat(message.inner || []));\n\n const promise: Promise = this.transport.send(requestData) as any;\n \n return promise;\n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n });\n }\n\n public parseResponse(responseBuffer: Uint8Array) {\n //const perf = performance.now();\n /* if(this.debug) {\n this.log.debug('Start parsing response', responseBuffer);\n } */\n\n this.lastResponseTime = Date.now();\n\n const deserializer = new TLDeserialization(responseBuffer);\n \n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\n if(!bytesCmp(authKeyId, this.authKeyId)) {\n throw new Error('[MT] Invalid server auth_key_id: ' + authKeyId.hex);\n }\n\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\n \n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\n // this.log('after decrypt')\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\n if(!bytesCmp(msgKey, calcMsgKey)) {\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\n this.updateSession(); // fix 28.01.2020\n throw new Error('[MT] server msgKey mismatch, updating session');\n }\n // this.log('after msgKey check')\n \n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\n \n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\n const messageId = deserializer.fetchLong('message_id');\n \n if(!bytesCmp(sessionId, this.sessionId) &&\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\n //this.updateSession();\n //this.sessionID = sessionID;\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\n }\n \n const seqNo = deserializer.fetchInt('seq_no');\n \n const totalLength = dataWithPadding.byteLength;\n \n const messageBodyLength = deserializer.fetchInt('message_data[length]');\n let offset = deserializer.getOffset();\n \n if((messageBodyLength % 4) ||\n messageBodyLength > totalLength - offset) {\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\n }\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\n \n offset = deserializer.getOffset();\n const paddingLength = totalLength - offset;\n if(paddingLength < 12 || paddingLength > 1024) {\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\n }\n \n //let buffer = bytesToArrayBuffer(messageBody);\n deserializer = new TLDeserialization(/* buffer */messageBody, {\n mtproto: true, \n override: {\n mt_message: (result: any, field: string) => {\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\n result.seqno = deserializer.fetchInt(field + '[seqno]');\n result.bytes = deserializer.fetchInt(field + '[bytes]');\n \n const offset = deserializer.getOffset();\n \n //self.log('mt_message!!!!!', result, field);\n \n try {\n result.body = deserializer.fetchObject('Object', field + '[body]');\n } catch(e) {\n this.log.error('parse error', (e as Error).message, (e as Error).stack);\n result.body = {\n _: 'parse_error',\n error: e\n };\n }\n\n if(deserializer.getOffset() !== offset + result.bytes) {\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\n // this.log(result)\n deserializer.setOffset(offset + result.bytes);\n }\n // this.log('override message', result)\n },\n mt_rpc_result: (result: any, field: any) => {\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\n \n const sentMessage = this.sentMessages[result.req_msg_id];\n const type = sentMessage && sentMessage.resultType || 'Object';\n \n if(result.req_msg_id && !sentMessage) {\n // console.warn(dT(), 'Result for unknown message', result);\n return;\n }\n \n result.result = deserializer.fetchObject(type, field + '[result]');\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\n }\n }\n });\n\n const response = deserializer.fetchObject('', 'INPUT');\n //this.log.error('Parse response time:', performance.now() - perf);\n return {\n response,\n messageId,\n sessionId,\n seqNo\n };\n });\n });\n }\n\n private applyServerSalt(newServerSalt: string) {\n const serverSalt = longToBytes(newServerSalt);\n \n sessionStorage.set({\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\n });\n \n this.serverSalt = new Uint8Array(serverSalt);\n }\n\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой) \n public scheduleRequest(delay?: number) {\n /* if(!this.isOnline) {\n return;\n } */\n\n \n \n \n \n \n \n \n \n\n const nextReq = Date.now() + (delay || 0);\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\n //this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\n return;\n }\n \n //this.debug && this.log('scheduleRequest: delay', delay);\n\n /* if(this.nextReqTimeout) {\n return;\n } */\n \n //const perf = performance.now();\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n }\n\n const cb = () => {\n //this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\n\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n \n \n \n \n \n \n /* if(!this.isOnline) {\n return;\n } */\n\n this.performScheduledRequest();\n \n };\n\n this.nextReq = nextReq;\n\n if(delay) {\n this.nextReqTimeout = self.setTimeout(cb, delay);\n } else {\n cb();\n }\n }\n\n private ackMessage(msgId: string) {\n // this.log('ack message', msgID)\n this.pendingAcks.push(msgId);\n\n \n \n \n this.scheduleRequest();\n \n }\n \n private reqResendMessage(msgId: string) {\n if(this.debug) {\n this.log.debug('Req resend', msgId);\n }\n\n this.pendingResends.push(msgId);\n this.scheduleRequest(100);\n }\n\n public cleanupSent() {\n let notEmpty = false;\n // this.log('clean start', this.dcId/*, this.sentMessages*/)\n Object.keys(this.sentMessages).forEach((msgId) => {\n const message = this.sentMessages[msgId];\n \n // this.log('clean iter', msgID, message)\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\n // this.log('clean notContentRelated', msgID)\n delete this.sentMessages[msgId];\n } else if(message.container) {\n for(const innerMsgId of message.inner) {\n if(this.sentMessages[innerMsgId] !== undefined) {\n // this.log('clean failed, found', msgID, message.inner[i], this.sentMessages[message.inner[i]].seq_no)\n notEmpty = true;\n return;\n }\n }\n // this.log('clean container', msgID)\n delete this.sentMessages[msgId];\n } else {\n notEmpty = true;\n }\n });\n \n return !notEmpty;\n }\n\n private processMessageAck(messageId: string) {\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage && !sentMessage.acked) {\n //delete sentMessage.body;\n sentMessage.acked = true;\n }\n }\n\n private processError(rawError: {error_message: string, error_code: number}) {\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\n rawError.error_code = rawError.error_code;\n \n return {\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\n type: matches[1] || 'UNKNOWN',\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\n originalError: rawError\n };\n }\n\n /**\n * * только для сокета\n * TODO: consider about containers resend\n */\n public resend() {\n for(const id in this.sentMessages) {\n const msg = this.sentMessages[id];\n if(msg.body || msg.container) {\n this.pushResend(id);\n }\n }\n }\n\n /* public requestMessageStatus() {\n const ids: string[] = [];\n for(const id in this.sentMessages) {\n const message = this.sentMessages[id];\n if(message.isAPI && message.fileUpload) {\n ids.push(message.msg_id);\n }\n }\n\n this.wrapMtpMessage({\n _: 'msgs_state_req',\n msg_ids: ids\n }, {\n notContentRelated: true\n }).then(res => {\n this.log('status', res);\n });\n } */\n\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\n public processMessage(message: any, messageId: string, sessionId: Uint8Array | number[]) {\n if(message._ === 'messageEmpty') {\n this.log.warn('processMessage: messageEmpty', message, messageId);\n return;\n }\n\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\n if(msgidInt % 2) {\n this.log.warn('Server even message id: ', messageId, message);\n return;\n }\n\n /* if(this.debug) {\n this.log('process message', message, messageId, sessionId);\n } */\n\n switch(message._) {\n case 'msg_container': {\n for(const innerMessage of message.messages) {\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\n }\n\n break;\n }\n \n case 'bad_server_salt': {\n this.log('Bad server salt', message);\n\n this.applyServerSalt(message.new_server_salt);\n\n if(this.sentMessages[message.bad_msg_id]) {\n this.pushResend(message.bad_msg_id);\n }\n \n this.ackMessage(messageId);\n \n // simulate disconnect\n /* try {\n this.log('networker state:', this);\n // @ts-ignore\n this.transport.ws.close(1000);\n } catch(err) {\n this.log.error('transport', this.transport, err);\n } */\n\n break;\n }\n \n case 'bad_msg_notification': {\n this.log.error('Bad msg notification', message);\n\n switch(message.error_code) {\n case 16: // * msg_id too low\n case 17: // * msg_id too high\n case 32: // * msg_seqno too low\n case 33: // * msg_seqno too high\n case 64: { // * invalid container\n //const changedOffset = timeManager.applyServerTime(bigStringInt(messageId).shiftRight(32).toString(10));\n const bigInt = str2bigInt(messageId, 10);\n rightShift_(bigInt, 32);\n const changedOffset = timeManager.applyServerTime(+bigInt2str(bigInt, 10));\n if(message.error_code === 17 || changedOffset) {\n this.log('Update session');\n this.updateSession();\n }\n\n const badMessage = this.updateSentMessage(message.bad_msg_id);\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\n //this.ackMessage(messageId);\n }\n\n // * invalid container\n /* case 64: {\n const badMessage = this.sentMessages[message.bad_msg_id];\n if(badMessage) {\n for(const msgId of badMessage.inner) {\n if(this.sentMessages[msgId] !== undefined) {\n this.updateSentMessage\n }\n }\n const inner = badMessage.inner;\n }\n } */\n }\n\n break;\n }\n \n case 'message': {\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\n // console.warn('[MT] Server same messageId: ', messageId)\n this.ackMessage(messageId);\n return;\n }\n\n this.lastServerMessages.push(messageId);\n if(this.lastServerMessages.length > 100) {\n this.lastServerMessages.shift();\n }\n\n this.processMessage(message.body, message.msg_id, sessionId);\n break;\n }\n \n case 'new_session_created': {\n this.ackMessage(messageId);\n\n if(this.debug) {\n this.log.debug('new_session_created', message);\n }\n //this.updateSession();\n \n this.processMessageAck(message.first_msg_id);\n this.applyServerSalt(message.server_salt);\n \n sessionStorage.get('dc').then((baseDcId) => {\n if(baseDcId === this.dcId && !this.isFileNetworker && networkerFactory.updatesProcessor) {\n networkerFactory.updatesProcessor(message);\n }\n });\n break;\n }\n \n case 'msgs_ack': {\n for(const msgId of message.msg_ids) {\n this.processMessageAck(msgId);\n }\n\n break;\n }\n \n case 'msg_detailed_info':\n if(!this.sentMessages[message.msg_id]) {\n this.ackMessage(message.answer_msg_id);\n break;\n }\n case 'msg_new_detailed_info':\n if(this.pendingAcks.indexOf(message.answer_msg_id)) {\n break;\n }\n this.reqResendMessage(message.answer_msg_id);\n break;\n \n case 'msgs_state_info': {\n this.ackMessage(message.answer_msg_id);\n if(this.lastResendReq && \n this.lastResendReq.req_msg_id === message.req_msg_id && \n this.pendingResends.length\n ) {\n for(const badMsgId of this.lastResendReq.resend_msg_ids) {\n const pos = this.pendingResends.indexOf(badMsgId);\n if(pos !== -1) {\n this.pendingResends.splice(pos, 1);\n }\n }\n }\n\n break;\n }\n\n case 'rpc_result': {\n this.ackMessage(messageId);\n \n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n this.processMessageAck(sentMessageId);\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n if(message.result._ === 'rpc_error') {\n const error = this.processError(message.result);\n this.log('Rpc error', error);\n if(deferred) {\n deferred.reject(error);\n }\n } else {\n if(deferred) {\n /* if(DEBUG) {\n this.log.debug('Rpc response', message.result, sentMessage);\n } */\n\n deferred.resolve(message.result);\n }\n\n if(sentMessage.isAPI && !this.connectionInited) {\n this.connectionInited = true;\n ////this.log('Rpc set connectionInited to:', this.connectionInited);\n }\n }\n \n delete this.sentMessages[sentMessageId];\n } else {\n if(this.debug) {\n this.log('Rpc result for unknown message:', sentMessageId, message);\n }\n }\n\n break;\n }\n\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages doesn't require acknowledgments\n if((this.transport as TcpObfuscated).networker) {\n const sentMessageId = message.msg_id;\n const sentMessage = this.sentMessages[sentMessageId]; \n\n if(sentMessage) {\n sentMessage.deferred.resolve(message);\n delete this.sentMessages[sentMessageId];\n }\n }\n\n break;\n }\n \n default:\n this.ackMessage(messageId);\n\n /* if(this.debug) {\n this.log.debug('Update', message);\n } */\n \n if(networkerFactory.updatesProcessor !== null) {\n networkerFactory.updatesProcessor(message);\n }\n break;\n }\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* import { copy } from \"./object\";\r\n\r\nexport function listMergeSorted(list1: any[] = [], list2: any[] = []) {\r\n const result = copy(list1);\r\n\r\n const minId = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF;\r\n for(let i = 0; i < list2.length; i++) {\r\n if(list2[i] < minId) {\r\n result.push(list2[i]);\r\n }\r\n }\r\n\r\n return result;\r\n} */\r\n\r\nexport const accumulate = (arr: number[], initialValue: number) => arr.reduce((acc, value) => acc + value, initialValue);\r\n\r\nexport function findAndSpliceAll(array: Array, verify: (value: T, index: number, arr: typeof array) => boolean) {\r\n const out: typeof array = [];\r\n let idx = -1;\r\n while((idx = array.findIndex(verify)) !== -1) {\r\n out.push(array.splice(idx, 1)[0]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function forEachReverse(array: Array, callback: (value: T, index?: number, array?: Array) => void) {\r\n for(let length = array.length, i = length - 1; i >= 0; --i) {\r\n callback(array[i], i, array);\r\n }\r\n};\r\n\r\nexport function insertInDescendSortedArray(array: Array, element: T, property: K, pos?: number) {\r\n const sortProperty: number = element[property];\r\n\r\n if(pos === undefined) {\r\n pos = array.indexOf(element);\r\n if(pos !== -1) {\r\n const prev = array[pos - 1];\r\n const next = array[pos + 1];\r\n if((!prev || prev[property] >= sortProperty) && (!next || next[property] <= sortProperty)) {\r\n // console.warn('same pos', pos, sortProperty, prev, next);\r\n return pos;\r\n }\r\n \r\n array.splice(pos, 1);\r\n }\r\n }\r\n\r\n const len = array.length;\r\n if(!len || sortProperty <= array[len - 1][property]) {\r\n return array.push(element) - 1;\r\n } else if(sortProperty >= array[0][property]) {\r\n array.unshift(element);\r\n return 0;\r\n } else {\r\n for(let i = 0; i < len; i++) {\r\n if(sortProperty > array[i][property]) {\r\n array.splice(i, 0, element);\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n console.error('wtf', array, element);\r\n return array.indexOf(element);\r\n}\r\n\r\nexport function filterUnique>(arr: T): T {\r\n return [...new Set(arr)] as T;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ConnectionStatusChange } from \"./connectionStatus\";\r\nimport MTPNetworker from \"./networker\";\r\nimport { InvokeApiOptions } from \"../../types\";\r\nimport MTTransport from \"./transports/transport\";\r\nimport App from \"../../config/app\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nexport class NetworkerFactory {\r\n private networkers: MTPNetworker[] = [];\r\n public language = navigator.language || App.langPackCode;\r\n public updatesProcessor: (obj: any) => void = null;\r\n public onConnectionStatusChange: (info: ConnectionStatusChange) => void = null;\r\n public akStopped = false;\r\n public userAgent = navigator.userAgent;\r\n\r\n public removeNetworker(networker: MTPNetworker) {\r\n const idx = this.networkers.indexOf(networker);\r\n if(idx !== -1) {\r\n this.networkers.splice(idx, 1);\r\n }\r\n }\r\n\r\n public setUpdatesProcessor(callback: (obj: any) => void) {\r\n this.updatesProcessor = callback;\r\n }\r\n\r\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, transport: MTTransport, options: InvokeApiOptions) {\r\n //console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\r\n const networker = new MTPNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n this.networkers.push(networker);\r\n return networker;\r\n }\r\n\r\n public startAll() {\r\n if(this.akStopped) {\r\n const stoppedNetworkers = this.networkers.filter(networker => networker.isStopped());\r\n\r\n this.akStopped = false;\r\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\r\n \r\n for(const networker of stoppedNetworkers) {\r\n networker.scheduleRequest();\r\n }\r\n }\r\n }\r\n\r\n public stopAll() {\r\n this.akStopped = true;\r\n }\r\n\r\n public setLanguage(langCode: string) {\r\n this.language = langCode;\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.connectionInited = false;\r\n }\r\n }\r\n }\r\n\r\n public forceReconnectTimeout() {\r\n for(const networker of this.networkers) {\r\n networker.forceReconnectTimeout();\r\n }\r\n }\r\n\r\n public forceReconnect() {\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.forceReconnect();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst networkerFactory = new NetworkerFactory();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.networkerFactory = networkerFactory);\r\nexport default networkerFactory;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import aesjs from 'aes-js';\r\nimport AES from \"@cryptography/aes\";\r\nimport { bytesFromWordss } from \"../../../helpers/bytes\";\r\nimport { Codec } from \"./codec\";\r\n\r\nclass Counter {\r\n _counter: Uint8Array;\r\n\r\n constructor(initialValue: Uint8Array) {\r\n this._counter = initialValue;\r\n }\r\n\r\n increment() {\r\n for(let i = 15; i >= 0; i--) {\r\n if(this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass CTR {\r\n _counter: Counter;\r\n _remainingCounter: Uint8Array = null;\r\n _remainingCounterIndex = 16;\r\n _aes: AES;\r\n\r\n constructor(key: Uint8Array, counter: Uint8Array) {\r\n this._counter = new Counter(counter);\r\n this._aes = new AES(key);\r\n }\r\n\r\n update(payload: Uint8Array) {\r\n const encrypted = payload.slice();\r\n\r\n for(let i = 0; i < encrypted.length; i++) {\r\n if(this._remainingCounterIndex === 16) {\r\n this._remainingCounter = new Uint8Array(bytesFromWordss(this._aes.encrypt(this._counter._counter)));\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n}\r\n\r\n/* \r\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\r\n*/\r\nexport default class Obfuscation {\r\n /* public enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\r\n public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\r\n\r\n public encNew: CTR;\r\n public decNew: CTR;\r\n\r\n public init(codec: Codec) {\r\n const initPayload = new Uint8Array(64);\r\n initPayload.randomize();\r\n \r\n while(true) {\r\n let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]);\r\n let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]);\r\n if(initPayload[0] !== 0xef &&\r\n val !== 0x44414548 &&\r\n val !== 0x54534f50 &&\r\n val !== 0x20544547 &&\r\n val !== 0x4954504f &&\r\n val !== 0xeeeeeeee &&\r\n val !== 0xdddddddd &&\r\n val2 !== 0x00000000) {\r\n //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\r\n break;\r\n }\r\n initPayload.randomize();\r\n }\r\n\r\n ////////////////////////initPayload.subarray(60, 62).hex = dcId;\r\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\r\n console.log('initPayload', initPayload); */\r\n\r\n const reversedPayload = initPayload.slice().reverse();\r\n\r\n const encKey = initPayload.slice(8, 40);\r\n const encIv = initPayload.slice(40, 56);\r\n const decKey = reversedPayload.slice(8, 40);\r\n const decIv = reversedPayload.slice(40, 56);\r\n\r\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\r\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\r\n\r\n // console.log('encKey', encKey.hex, encIv.hex);\r\n // console.log('decKey', decKey.hex, decIv.hex);\r\n\r\n this.encNew = new CTR(encKey, encIv);\r\n this.decNew = new CTR(decKey, decIv);\r\n\r\n initPayload.set(codec.obfuscateTag, 56);\r\n const encrypted = this.encode(initPayload);\r\n\r\n //console.log('encrypted', encrypted);\r\n\r\n initPayload.set(encrypted.slice(56, 64), 56);\r\n\r\n return initPayload;\r\n }\r\n\r\n /* public encode(payload: Uint8Array) {\r\n let startTime = performance.now();\r\n let res = this.enc.encrypt(payload);\r\n let time = performance.now() - startTime;\r\n\r\n try {\r\n startTime = performance.now();\r\n let arr = this.encNew.encrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n let time2 = performance.now() - startTime;\r\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.dec.encrypt(payload);\r\n\r\n try {\r\n let arr = this.decNew.decrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n } */\r\n public encode(payload: Uint8Array) {\r\n return this.encNew.update(payload);\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n return this.decNew.update(payload);\r\n }\r\n /* public encode(payload: Uint8Array) {\r\n let res = this.encNew.encrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.decNew.decrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Codec } from \"./codec\";\r\n\r\nexport class IntermediatePacketCodec implements Codec {\r\n public tag = 0xee;\r\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\r\n\r\n //private lol = 0;\r\n\r\n public encodePacket(data: Uint8Array) {\r\n if((data.length % 4) !== 0) {\r\n console.error('Encode error!', data.length, data);\r\n }\r\n\r\n const len = data.length;\r\n const header = new Uint8Array(new Int32Array([/* ++this.lol >= 25 ? 0x80000001 : */len]).buffer);\r\n\r\n //console.log('got nobody cause im braindead', header, len, /* data, */data.buffer.byteLength === data.length);\r\n return header.concat(data);\r\n }\r\n\r\n public readPacket(data: Uint8Array) {\r\n const length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);\r\n\r\n return data.slice(4, 4 + length);\r\n }\r\n}\r\n\r\nexport default new IntermediatePacketCodec();\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from \"../../../config/modes\";\nimport { logger, LogTypes } from \"../../logger\";\nimport MTPNetworker from \"../networker\";\nimport Obfuscation from \"./obfuscation\";\nimport MTTransport, { MTConnection, MTConnectionConstructable } from \"./transport\";\nimport intermediatePacketCodec from './intermediate';\nimport { ConnectionStatus } from \"../connectionStatus\";\n\nexport default class TcpObfuscated implements MTTransport {\n private codec = intermediatePacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType;\n public connected = false;\n private lastCloseTime: number;\n private connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n\n //private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(private Connection: MTConnectionConstructable, \n private dcId: number, \n private url: string, \n private logSuffix: string, \n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n \n this.connect();\n }\n\n private onOpen = () => {\n this.connected = true;\n\n const initPayload = this.obfuscation.init(this.codec);\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.setConnectionStatus(ConnectionStatus.Connected);\n this.networker.cleanupSent();\n this.networker.resend();\n } else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n }\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = (buffer: ArrayBuffer) => {\n let data = this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n //this.pending = this.pending.filter(p => p.body); // clear pending\n\n this.debug && this.log.debug('redirecting to networker', data.length);\n this.networker.parseResponse(data).then(response => {\n this.debug && this.log.debug('redirecting to networker response:', response);\n\n try {\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\n } catch(err) {\n this.log.error('handleMessage networker processMessage error', err);\n }\n\n //this.releasePending();\n }).catch(err => {\n this.log.error('handleMessage networker parseResponse error', err);\n });\n\n //this.dd();\n return;\n }\n\n //console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', data.hex);\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n \n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n \n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = self.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n \n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n //this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n //this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = this.connected ? this.encodeBody(body) : undefined;\n\n //return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private releasePending(/* tt = false */) {\n if(!this.connected) {\n //this.connect();\n return;\n }\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n //this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n //for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n /* if(this.ws.bufferedAmount) {\n break;\n } */\n\n const pending = this.pending[i];\n const {body, bodySent} = pending;\n let encoded = pending.encoded;\n if(body && !bodySent) {\n\n //this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n /* if(this.ws.bufferedAmount) {\n this.log.error('bufferedAmount:', this.ws.bufferedAmount);\n } */\n\n /* if(this.ws.readyState !== this.ws.OPEN) {\n this.log.error('ws is closed?');\n this.connected = false;\n break;\n } */\n\n if(!encoded) {\n encoded = pending.encoded = this.encodeBody(body);\n }\n\n //this.lol.push(body);\n //setTimeout(() => {\n this.connection.send(encoded);\n //}, 100);\n //this.dd();\n \n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n //delete pending.body;\n }\n }\n }\n}\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport ctx from './ctx';\r\n\r\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\r\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !(ctx as any).MSStream;\r\n\r\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\r\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\r\n\r\nexport const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { notifyAll } from \"../../../helpers/context\";\r\nimport EventListenerBase from \"../../../helpers/eventListenerBase\";\r\nimport { WorkerTaskVoidTemplate } from \"../../../types\";\r\nimport { MTConnection } from \"./transport\";\r\n\r\nlet socketId = 0;\r\nexport interface SocketProxyTask extends WorkerTaskVoidTemplate {\r\n type: 'socketProxy',\r\n payload: SocketProxySetupTask | SocketProxySendTask | SocketProxyCloseTask\r\n};\r\n\r\nexport interface SocketProxySetupTask extends WorkerTaskVoidTemplate {\r\n type: 'setup',\r\n payload: {\r\n dcId: number,\r\n url: string,\r\n logSuffix: string\r\n },\r\n id: number\r\n};\r\n\r\nexport interface SocketProxySendTask extends WorkerTaskVoidTemplate {\r\n type: 'send',\r\n payload: Uint8Array,\r\n id: number\r\n};\r\n\r\nexport interface SocketProxyCloseTask extends WorkerTaskVoidTemplate {\r\n type: 'close',\r\n id: number\r\n};\r\n\r\n \r\nexport default class SocketProxied extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private id: number;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n this.id = ++socketId;\r\n socketsProxied.set(this.id, this);\r\n\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'setup', \r\n payload: {\r\n dcId, \r\n url,\r\n logSuffix\r\n },\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public send(payload: Uint8Array) {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy', \r\n payload: {\r\n type: 'send',\r\n payload,\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public close() {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'close',\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n}\r\n \r\n\r\nexport const socketsProxied: Map = new Map();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTTransport, { MTConnectionConstructable } from './transports/transport';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\n \r\nimport Socket from './transports/websocket';\r\nimport TcpObfuscated from './transports/tcpObfuscated';\r\nimport { IS_SAFARI } from '../../environment/userAgent';\r\nimport { isWebWorker } from '../../helpers/context';\r\nimport SocketProxied from './transports/socketProxied';\r\nimport App from '../../config/app';\r\n \r\n\r\nexport type TransportType = 'websocket' | 'https' | 'http';\r\nexport type ConnectionType = 'client' | 'download' | 'upload';\r\ntype Servers = {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTTransport[]\r\n }\r\n }\r\n};\r\n\r\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\r\n\r\nexport class DcConfigurator {\r\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\r\n\r\n private dcOptions = Modes.test\r\n ? [\r\n {id: 1, host: '149.154.175.10', port: 80},\r\n {id: 2, host: '149.154.167.40', port: 80},\r\n {id: 3, host: '149.154.175.117', port: 80}\r\n ]\r\n : [\r\n {id: 1, host: '149.154.175.50', port: 80},\r\n {id: 2, host: '149.154.167.50', port: 80},\r\n {id: 3, host: '149.154.175.100', port: 80},\r\n {id: 4, host: '149.154.167.91', port: 80},\r\n {id: 5, host: '149.154.171.5', port: 80}\r\n ];\r\n\r\n public chosenServers: Servers = {} as any;\r\n\r\n \r\n private transportSocket = (dcId: number, connectionType: ConnectionType, suffix: string) => {\r\n const path = 'apiws' + TEST_SUFFIX;\r\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\r\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\r\n\r\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\r\n\r\n const oooohLetMeLive: MTConnectionConstructable = (IS_SAFARI && isWebWorker && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\r\n\r\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\r\n };\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public chooseServer(dcId: number, connectionType: ConnectionType = 'client', transportType: TransportType = 'websocket', reuse = true) {\r\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\r\n connectionType = 'client';\r\n } */\r\n\r\n if(!this.chosenServers.hasOwnProperty(transportType)) {\r\n this.chosenServers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const servers = this.chosenServers[transportType][connectionType];\r\n\r\n if(!(dcId in servers)) {\r\n servers[dcId] = [];\r\n }\r\n\r\n const transports = servers[dcId];\r\n\r\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\r\n let transport: MTTransport;\r\n\r\n const suffix = connectionType === 'client' ? '' : '-1';\r\n\r\n \r\n \r\n \r\n transport = this.transportSocket(dcId, connectionType, suffix);\r\n \r\n \r\n \r\n \r\n if(!transport) {\r\n console.error('No chosenServer!', dcId);\r\n return null;\r\n }\r\n \r\n if(reuse) {\r\n transports.push(transport);\r\n }\r\n \r\n return transport;\r\n }\r\n \r\n return transports[0];\r\n }\r\n \r\n public static removeTransport(obj: any, transport: T) {\r\n for(const transportType in obj) {\r\n // @ts-ignore\r\n for(const connectionType in obj[transportType]) {\r\n // @ts-ignore\r\n for(const dcId in obj[transportType][connectionType]) {\r\n // @ts-ignore\r\n const transports: T[] = obj[transportType][connectionType][dcId];\r\n const idx = transports.indexOf(transport);\r\n if(idx !== -1) {\r\n transports.splice(idx, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new DcConfigurator();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization } from \"./tl_utils\";\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport { bytesFromHex, bytesToHex } from \"../../helpers/bytes\";\r\nimport { bigInt2str, str2bigInt } from \"../../vendor/leemon\";\r\nimport Modes from \"../../config/modes\";\r\n\r\nexport type RSAPublicKeyHex = {\r\n modulus: string,\r\n exponent: string\r\n};\r\n\r\nexport class RSAKeysManager {\r\n\r\n /**\r\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\r\n * \r\n * \r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\r\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\r\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\r\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\r\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\r\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\r\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\r\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\r\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\r\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\r\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * Bytes can be got via \r\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\r\n * $ openssl rsa -pubin -in pub.pem -text -noout\r\n */\r\n\r\n /* private publisKeysHex = [{\r\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\r\n exponent: '010001'\r\n }]; */\r\n\r\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\r\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\r\n exponent: '010001'\r\n }];\r\n\r\n private publisKeysHex: RSAPublicKeyHex[] = [{\r\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n exponent: '010001'\r\n }];\r\n\r\n private publicKeysParsed: {\r\n [hex: string]: RSAPublicKeyHex\r\n } = {};\r\n private prepared = false;\r\n private preparePromise: Promise = null;\r\n\r\n constructor() {\r\n if(Modes.test) {\r\n this.publisKeysHex = this.testPublicKeysHex;\r\n }\r\n }\r\n\r\n public prepare(): Promise {\r\n if(this.preparePromise) return this.preparePromise;\r\n else if(this.prepared) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => {\r\n const RSAPublicKey = new TLSerialization();\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\r\n\r\n const buffer = RSAPublicKey.getBuffer();\r\n\r\n return CryptoWorker.invokeCrypto('sha1-hash', buffer).then(bytes => {\r\n const fingerprintBytes = bytes.slice(-8);\r\n fingerprintBytes.reverse();\r\n \r\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\r\n modulus: keyParsed.modulus,\r\n exponent: keyParsed.exponent\r\n };\r\n });\r\n })).then(() => {\r\n this.prepared = true;\r\n\r\n //console.log('[MT] Prepared keys');\r\n this.preparePromise = null;\r\n });\r\n }\r\n\r\n public async select(fingerprints: Array) {\r\n await this.prepare();\r\n\r\n for(let i = 0; i < fingerprints.length; ++i) {\r\n //fingerprintHex = bigStringInt(fingerprints[i]).toString(16);\r\n let fingerprintHex = bigInt2str(str2bigInt(fingerprints[i], 10), 16).toLowerCase();\r\n\r\n if(fingerprintHex.length < 16) {\r\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\r\n }\r\n\r\n //console.log(fingerprintHex, this.publicKeysParsed);\r\n const foundKey = this.publicKeysParsed[fingerprintHex];\r\n if(foundKey) {\r\n return Object.assign({\r\n fingerprint: fingerprints[i]\r\n }, foundKey);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new RSAKeysManager();\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { TLSerialization, TLDeserialization } from \"./tl_utils\";\nimport dcConfigurator from \"./dcConfigurator\";\nimport rsaKeysManager from \"./rsaKeysManager\";\nimport timeManager from \"./timeManager\";\n\nimport CryptoWorker from \"../crypto/cryptoworker\";\n\nimport { logger, LogTypes } from \"../logger\";\nimport { bytesCmp, bytesToHex, bytesFromHex, bytesXor } from \"../../helpers/bytes\";\nimport DEBUG from \"../../config/debug\";\nimport { cmp, int2bigInt, one, pow, str2bigInt, sub } from \"../../vendor/leemon\";\nimport { addPadding } from \"./bin_utils\";\n\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\n\nfNewNonce = false;\nfNonce = false;\nfResult = false; */\n\ntype AuthOptions = {\n dcId: number,\n nonce: Uint8Array,\n \n serverNonce?: Uint8Array,\n pq?: Uint8Array,\n fingerprints?: string[],\n publicKey?: {\n modulus: string,\n exponent: string,\n fingerprint: string\n },\n \n // good\n p?: Uint8Array,\n q?: Uint8Array,\n \n newNonce?: Uint8Array,\n \n retry?: number,\n \n b?: Uint8Array,\n g?: number,\n gA?: Uint8Array,\n dhPrime?: Uint8Array,\n \n tmpAesKey?: Uint8Array,\n tmpAesIv?: Uint8Array,\n \n authKeyId?: Uint8Array,\n authKey?: Uint8Array,\n serverSalt?: Uint8Array,\n\n localTime?: number,\n serverTime?: any,\n\n localTry?: number\n};\n\ntype ResPQ = {\n _: 'resPQ';\n nonce: Uint8Array;\n pq: Uint8Array;\n server_nonce: Uint8Array;\n server_public_key_fingerprints: string[];\n};\n\ntype P_Q_inner_data = {\n _: 'p_q_inner_data_dc';\n pq: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n new_nonce: Uint8Array;\n dc: number;\n};\n\ntype req_DH_params = {\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n public_key_fingerprint: string;\n encrypted_data: Uint8Array;\n};\n\nexport class Authorizer {\n private cached: {\n [dcId: number]: Promise\n } = {};\n \n private log: ReturnType;\n \n constructor() {\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\n }\n \n private sendPlainRequest(dcId: number, requestArray: Uint8Array) {\n const requestLength = requestArray.byteLength;\n \n const header = new TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id');\n header.storeLong(timeManager.generateId(), 'msg_id');\n header.storeInt(requestLength, 'request_length');\n \n const headerArray = header.getBytes(true) as Uint8Array;\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n\n const transport = dcConfigurator.chooseServer(dcId);\n const baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE'\n };\n \n if(DEBUG) {\n this.log('mtpSendPlainRequest: creating requestPromise');\n }\n \n const promise = transport.send(resultArray) as any as Promise;\n return promise.then(result => {\n if(DEBUG) {\n this.log('mtpSendPlainRequest: in good sector', result);\n }\n \n if(!result || !result.byteLength) {\n throw baseError;\n }\n \n try {\n /* result = fResult ? fResult : result;\n fResult = new Uint8Array(0); */\n \n const deserializer = new TLDeserialization(result, {mtproto: true});\n\n if(result.length === 4) {\n const errorCode = deserializer.fetchInt();\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\n throw errorCode;\n }\n\n const auth_key_id = deserializer.fetchLong('auth_key_id');\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\n \n const msg_id = deserializer.fetchLong('msg_id');\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\n \n const msg_len = deserializer.fetchInt('msg_len');\n if(!msg_len) this.log.error('no msg_len', msg_len);\n \n return deserializer;\n } catch(e) {\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\n const error = Object.assign(baseError, {originalError: e});\n throw error;\n }\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n \n throw error;\n });\n }\n \n private async sendReqPQ(auth: AuthOptions) {\n const request = new TLSerialization({mtproto: true});\n \n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\n\n if(DEBUG) {\n this.log('Send req_pq', auth.nonce.hex);\n }\n\n let deserializer: TLDeserialization;\n try {\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\n rsaKeysManager.prepare();\n deserializer = await promise;\n } catch(error) {\n this.log.error('req_pq error', (error as Error).message);\n throw error;\n }\n \n const response: ResPQ = deserializer.fetchObject('ResPQ');\n\n if(response._ !== 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n this.log.error(auth.nonce, response.nonce);\n throw new Error('[MT] resPQ nonce mismatch');\n }\n \n auth.serverNonce = response.server_nonce; // need\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n \n if(DEBUG) {\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\n }\n \n const publicKey = await rsaKeysManager.select(auth.fingerprints);\n if(!publicKey) {\n throw new Error('[MT] No public key found');\n }\n \n auth.publicKey = publicKey;\n \n if(DEBUG) {\n this.log('PQ factorization start', auth.pq);\n }\n \n // let pAndQ: Awaited>;\n try {\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\n } catch(error) {\n this.log.error('worker error factorize', error);\n throw error;\n }\n \n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n \n if(DEBUG) {\n this.log('PQ factorization done', pAndQ);\n }\n \n return this.sendReqDhParams(auth);\n }\n \n private async sendReqDhParams(auth: AuthOptions): Promise {\n auth.newNonce = new Uint8Array(32).randomize();\n\n const p_q_inner_data_dc: P_Q_inner_data = {\n _: 'p_q_inner_data_dc',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce,\n dc: 0\n };\n \n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\n\n const data = pQInnerDataSerialization.getBytes(true);\n if(data.length > 144) {\n throw 'DH_params: data is more than 144 bytes!';\n }\n\n const dataWithPadding = addPadding(data, 192, false, true, false);\n const dataPadReversed = dataWithPadding.slice().reverse();\n\n const getKeyAesEncrypted = async() => {\n for(;;) {\n const tempKey = new Uint8Array(32).randomize();\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256-hash', tempKey.concat(dataWithPadding)));\n if(dataWithHash.length !== 224) {\n throw 'DH_params: dataWithHash !== 224 bytes!';\n }\n \n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256-hash', aesEncrypted));\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\n\n const keyAesEncryptedBigInt = str2bigInt(bytesToHex(keyAesEncrypted), 16);\n const publicKeyModulusBigInt = str2bigInt(auth.publicKey.modulus, 16);\n\n if(cmp(keyAesEncryptedBigInt, publicKeyModulusBigInt) === -1) {\n return keyAesEncrypted;\n }\n }\n };\n \n const keyAesEncrypted = await getKeyAesEncrypted();\n const encryptedData = addPadding(await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey), 256, true, true, true);\n\n const req_DH_params: req_DH_params = {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: encryptedData\n };\n \n const request = new TLSerialization({mtproto: true});\n request.storeMethod('req_DH_params', req_DH_params);\n \n const requestBytes = request.getBytes(true);\n \n if(DEBUG) {\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\n }\n \n let deserializer: TLDeserialization;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\n } catch(error) {\n this.log.error('Send req_DH_params FAIL!', error);\n throw error;\n }\n \n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n \n if(DEBUG) {\n this.log('Sent req_DH_params, response:', response);\n }\n \n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Server_DH_Params nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\n }\n \n if(response._ === 'server_DH_params_fail') {\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce)).slice(-16);\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\n }\n \n throw new Error('[MT] server_DH_params_fail');\n }\n \n // fill auth object\n try {\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\n } catch(e) {\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\n throw e;\n }\n \n //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n \n return this.sendSetClientDhParams(auth);\n }\n \n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\n auth.localTime = Date.now();\n \n // ! can't concat Array with Uint8Array!\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.serverNonce)))\n .concat((await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\n \n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(12)\n .concat(await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\n \n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\n \n const hash = answerWithHash.slice(0, 20);\n const answerWithPadding = answerWithHash.slice(20);\n\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\n const response = deserializer.fetchObject('Server_DH_inner_data');\n \n if(response._ !== 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n \n if(DEBUG) {\n this.log('Done decrypting answer');\n }\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n \n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\n \n const offset = deserializer.getOffset();\n \n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1-hash', answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\n }\n \n timeManager.applyServerTime(auth.serverTime, auth.localTime);\n }\n \n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\n if(DEBUG) {\n this.log('Verifying DH params', g, dhPrime, gA);\n }\n\n const dhPrimeHex = bytesToHex(dhPrime);\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n\n if(DEBUG) {\n this.log('dhPrime cmp OK');\n }\n \n const _gABigInt = str2bigInt(bytesToHex(gA), 16);\n const _dhPrimeBigInt = str2bigInt(dhPrimeHex, 16);\n\n if(cmp(_gABigInt, one) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, one)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n\n if(DEBUG) {\n this.log('1 < gA < dhPrime-1 OK');\n }\n \n const _two = int2bigInt(2, 32, 0);\n const _twoPow = pow(_two, 2048 - 64);\n\n if(cmp(_gABigInt, _twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, _twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n\n if(DEBUG) {\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n }\n \n return true;\n }\n \n private async sendSetClientDhParams(auth: AuthOptions): Promise {\n const gBytes = bytesFromHex(auth.g.toString(16));\n \n auth.b = new Uint8Array(256).randomize();\n //MTProto.secureRandom.nextBytes(auth.b);\n \n // let gB: Awaited>;\n try {\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\n } catch(error) {\n throw error;\n }\n \n const data = new TLSerialization({mtproto: true});\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n \n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1-hash', data.getBuffer())).concat(data.getBytes(true));\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n \n const request = new TLSerialization({mtproto: true});\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n \n if(DEBUG) {\n this.log('Send set_client_DH_params');\n }\n \n let deserializer: TLDeserialization;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\n } catch(err) {\n throw err;\n }\n \n const response = deserializer.fetchObject('Set_client_DH_params_answer');\n \n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\n }\n \n // let authKey: Uint8Array;\n try {\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\n } catch(err) {\n throw authKey;\n }\n \n const authKeyHash = await CryptoWorker.invokeCrypto('sha1-hash', authKey),\n authKeyAux = authKeyHash.slice(0, 8),\n authKeyId = authKeyHash.slice(-8);\n \n if(DEBUG) {\n this.log('Got Set_client_DH_params_answer', response._, authKey);\n }\n switch(response._) {\n case 'dh_gen_ok': {\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([1], authKeyAux))).slice(-16);\n \n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n this.log.error('Set_client_DH_params_answer new_nonce_hash1 mismatch', newNonceHash1, response);\n throw new Error('new_nonce_hash1 mismatch');\n }\n \n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n if(DEBUG) {\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\n }\n \n auth.authKeyId = authKeyId;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n \n return auth;\n }\n \n case 'dh_gen_retry': {\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([2], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\n }\n \n return this.sendSetClientDhParams(auth);\n }\n \n case 'dh_gen_fail': {\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([3], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\n }\n \n throw new Error('[MT] Set_client_DH_params_answer fail');\n }\n }\n }\n \n public async auth(dcId: number): Promise {\n if(dcId in this.cached) {\n return this.cached[dcId];\n }\n \n const nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize();\n /* const nonce = new Array(16);\n MTProto.secureRandom.nextBytes(nonce); */\n \n if(!dcConfigurator.chooseServer(dcId)) {\n throw new Error('[MT] No server found for dc ' + dcId);\n }\n\n // await new Promise((resolve) => setTimeout(resolve, 2e3));\n\n const auth: AuthOptions = {dcId, nonce, localTry: 1};\n \n try {\n const promise = this.sendReqPQ(auth);\n this.cached[dcId] = promise;\n return await promise;\n } catch(err) {\n if(/* err.originalError === -404 && */auth.localTry <= 3) {\n return this.sendReqPQ({\n dcId: auth.dcId, \n nonce: new Uint8Array(16).randomize(),\n localTry: auth.localTry + 1\n });\n }\n\n delete this.cached[dcId];\n throw err;\n }\n }\n}\n\nexport default new Authorizer();\n","export default function noop() {}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => resolve(e.target.result));\r\n reader[method](blob);\r\n });\r\n}\r\n\r\nexport function readBlobAsText(blob: Blob) {\r\n return readBlobAs(blob, 'readAsText');\r\n}\r\n\r\nexport function readBlobAsDataURL(blob: Blob) {\r\n return readBlobAs(blob, 'readAsDataURL');\r\n}\r\n\r\nexport function readBlobAsArrayBuffer(blob: Blob) {\r\n return readBlobAs(blob, 'readAsArrayBuffer');\r\n}\r\n\r\nexport function readBlobAsUint8Array(blob: Blob) {\r\n return readBlobAsArrayBuffer(blob).then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage> {\r\n private static STORAGES: IDBStorage>[] = [];\r\n private openDbPromise: Promise;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: T['stores'][0]['name'];\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases(preserve?: IDBStorage>) {\r\n this.STORAGES.forEach(storage => {\r\n if(preserve && preserve === storage) {\r\n return;\r\n }\r\n\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ! WARNING ! function requires at least one opened connection\r\n */\r\n /* public static clearObjectStores() {\r\n const storage = this.STORAGES[0];\r\n this.closeDatabases(storage);\r\n\r\n const names = Array.from(storage.db.objectStoreNames);\r\n const promises = names.map(name => storage.clear(name));\r\n return Promise.all(promises);\r\n } */\r\n\r\n /* public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n } */\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', (error as Error).message);\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public clear(storeName?: IDBStorage['storeName']) {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get(entryName: string[]): Promise;\r\n public get(entryName: string): Promise;\r\n public get(entryName: string | string[]): Promise | Promise {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string, storeName = this.storeName) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n /* if(mode === 'readwrite') {\r\n return;\r\n } */\r\n\r\n const transaction = db.transaction([storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll(): Promise {\r\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: {[key: string]: any}, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = object instanceof Map ? [...object.keys()] : Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { UserAuth } from './mtproto_config';\r\nimport sessionStorage from '../sessionStorage';\r\nimport MTPNetworker, { MTMessage } from './networker';\r\nimport { isObject } from './bin_utils';\r\nimport networkerFactory from './networkerFactory';\r\n//import { telegramMeWebService } from './mtproto';\r\nimport authorizer from './authorizer';\r\nimport dcConfigurator, { ConnectionType, DcConfigurator, TransportType } from './dcConfigurator';\r\nimport { logger } from '../logger';\r\nimport type { DcAuthKey, DcId, DcServerSalt, InvokeApiOptions } from '../../types';\r\nimport type { MethodDeclMap } from '../../layer';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport { bytesFromHex, bytesToHex } from '../../helpers/bytes';\r\n//import { clamp } from '../../helpers/number';\r\nimport { IS_SAFARI } from '../../environment/userAgent';\r\nimport App from '../../config/app';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport IDBStorage from '../idb';\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\nimport ctx from '../../environment/ctx';\r\n\r\n \r\n \r\n \r\n\r\n/* var networker = apiManager.cachedNetworkers.websocket.upload[2];\r\nnetworker.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: [\"6888292542796810828\"]\r\n}, {\r\n notContentRelated: true\r\n}).then(res => {\r\n console.log('status', res);\r\n}); */\r\n\r\n//console.error('apiManager included!');\r\n// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории\r\n\r\nexport type ApiError = Partial<{\r\n code: number,\r\n type: string,\r\n description: string,\r\n originalError: any,\r\n stack: string,\r\n handled: boolean,\r\n input: string,\r\n message: ApiError\r\n}>;\r\n\r\n/* class RotatableArray {\r\n public array: Array = [];\r\n private lastIndex = -1;\r\n\r\n public get() {\r\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\r\n return this.array[this.lastIndex];\r\n }\r\n} */\r\n\r\nexport class ApiManager {\r\n private cachedNetworkers: {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTPNetworker[]\r\n }\r\n }\r\n } = {} as any;\r\n \r\n private cachedExportPromise: {[x: number]: Promise} = {};\r\n private gettingNetworkers: {[dcIdAndType: string]: Promise} = {};\r\n private baseDcId: DcId = 0 as DcId;\r\n \r\n //public telegramMeNotified = false;\r\n\r\n private log: ReturnType = logger('API');\r\n\r\n private afterMessageTempIds: {\r\n [tempId: string]: {\r\n messageId: string,\r\n promise: Promise\r\n }\r\n } = {};\r\n\r\n //private lol = false;\r\n \r\n // constructor() {\r\n //MtpSingleInstanceService.start();\r\n \r\n /* AppStorage.get('dc').then((dcId) => {\r\n if(dcId) {\r\n this.baseDcId = dcId;\r\n }\r\n }); */\r\n // }\r\n \r\n /* public telegramMeNotify(newValue: boolean) {\r\n if(this.telegramMeNotified !== newValue) {\r\n this.telegramMeNotified = newValue;\r\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\r\n }\r\n } */\r\n\r\n public async getBaseDcId() {\r\n if(this.baseDcId) {\r\n return this.baseDcId;\r\n }\r\n\r\n const baseDcId = await sessionStorage.get('dc');\r\n if(!this.baseDcId) {\r\n if(!baseDcId) {\r\n this.setBaseDcId(App.baseDcId);\r\n } else {\r\n this.baseDcId = baseDcId;\r\n }\r\n }\r\n\r\n return this.baseDcId;\r\n }\r\n \r\n public async setUserAuth(userAuth: UserAuth) {\r\n if(!userAuth.dcID) {\r\n const baseDcId = await this.getBaseDcId();\r\n userAuth.dcID = baseDcId;\r\n }\r\n\r\n sessionStorage.set({\r\n user_auth: userAuth\r\n });\r\n \r\n //this.telegramMeNotify(true);\r\n\r\n \r\n \r\n \r\n }\r\n\r\n public setBaseDcId(dcId: DcId) {\r\n const wasDcId = this.baseDcId;\r\n if(wasDcId) { // if migrated set ondrain\r\n this.getNetworker(wasDcId).then(networker => {\r\n this.setOnDrainIfNeeded(networker);\r\n });\r\n }\r\n\r\n this.baseDcId = dcId;\r\n\r\n sessionStorage.set({\r\n dc: this.baseDcId\r\n });\r\n }\r\n \r\n public async logOut() {\r\n const storageKeys: Array = [];\r\n \r\n const prefix = 'dc';\r\n for(let dcId = 1; dcId <= 5; dcId++) {\r\n storageKeys.push(prefix + dcId + '_auth_key' as any);\r\n }\r\n \r\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\r\n const storageResult = await Promise.all(storageKeys.map(key => sessionStorage.get(key)));\r\n \r\n const logoutPromises: Promise[] = [];\r\n for(let i = 0; i < storageResult.length; i++) {\r\n if(storageResult[i]) {\r\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\r\n }\r\n }\r\n\r\n const clear = () => {\r\n //console.error('apiManager: logOut clear');\r\n \r\n this.baseDcId = undefined;\r\n //this.telegramMeNotify(false);\r\n IDBStorage.closeDatabases();\r\n self.postMessage({type: 'clear'});\r\n };\r\n\r\n setTimeout(clear, 1e3);\r\n\r\n //return;\r\n \r\n return Promise.all(logoutPromises).catch((error) => {\r\n error.handled = true;\r\n }).finally(clear)/* .then(() => {\r\n location.pathname = '/';\r\n }) */;\r\n }\r\n \r\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise {\r\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\r\n //const connectionType: ConnectionType = 'client';\r\n\r\n \r\n \r\n \r\n \r\n \r\n // @ts-ignore\r\n const transportType = 'websocket';\r\n \r\n\r\n if(!this.cachedNetworkers.hasOwnProperty(transportType)) {\r\n this.cachedNetworkers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const cache = this.cachedNetworkers[transportType][connectionType];\r\n if(!(dcId in cache)) {\r\n cache[dcId] = [];\r\n }\r\n \r\n const networkers = cache[dcId];\r\n // @ts-ignore\r\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (connectionType === 'download' ? 3 : 3);\r\n if(networkers.length >= maxNetworkers) {\r\n let i = networkers.length - 1, found = false;\r\n for(; i >= 0; --i) {\r\n if(networkers[i].isOnline) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n \r\n const networker = found ? networkers.splice(i, 1)[0] : networkers.pop();\r\n networkers.unshift(networker);\r\n return Promise.resolve(networker);\r\n }\r\n \r\n const getKey = [dcId, transportType, connectionType].join('-');\r\n if(this.gettingNetworkers[getKey]) {\r\n return this.gettingNetworkers[getKey];\r\n }\r\n\r\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\r\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\r\n \r\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map(key => sessionStorage.get(key)))\r\n .then(async([authKeyHex, serverSaltHex]) => {\r\n const transport = dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client');\r\n let networker: MTPNetworker;\r\n if(authKeyHex && authKeyHex.length === 512) {\r\n if(!serverSaltHex || serverSaltHex.length !== 16) {\r\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\r\n }\r\n \r\n const authKey = bytesFromHex(authKeyHex);\r\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1-hash', authKey)).slice(-8);\r\n const serverSalt = bytesFromHex(serverSaltHex);\r\n \r\n networker = networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n } else {\r\n try { // if no saved state\r\n const auth = await authorizer.auth(dcId);\r\n \r\n const storeObj = {\r\n [ak]: bytesToHex(auth.authKey),\r\n [ss]: bytesToHex(auth.serverSalt)\r\n };\r\n \r\n sessionStorage.set(storeObj);\r\n \r\n networker = networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, transport, options);\r\n } catch(error) {\r\n this.log('Get networker error', error, (error as Error).stack);\r\n delete this.gettingNetworkers[getKey];\r\n throw error;\r\n }\r\n }\r\n\r\n /* networker.onConnectionStatusChange = (online) => {\r\n console.log('status:', online);\r\n }; */\r\n \r\n delete this.gettingNetworkers[getKey];\r\n networkers.unshift(networker);\r\n this.setOnDrainIfNeeded(networker);\r\n return networker;\r\n });\r\n }\r\n\r\n public setOnDrainIfNeeded(networker: MTPNetworker) {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n const checkPromise: Promise = networker.isFileNetworker ? \r\n Promise.resolve(true) : \r\n this.getBaseDcId().then(baseDcId => networker.dcId !== baseDcId);\r\n checkPromise.then(canRelease => {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n if(canRelease) {\r\n networker.onDrain = () => {\r\n this.log('networker drain', networker.dcId);\r\n\r\n networker.onDrain = undefined;\r\n networker.destroy();\r\n networkerFactory.removeNetworker(networker);\r\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\r\n DcConfigurator.removeTransport(dcConfigurator.chosenServers, networker.transport);\r\n };\r\n\r\n networker.setDrainTimeout();\r\n }\r\n });\r\n }\r\n \r\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise {\r\n ///////this.log('Invoke api', method, params, options);\r\n\r\n /* if(!this.lol) {\r\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\r\n this.lol = true;\r\n } */\r\n\r\n const deferred = deferredPromise();\r\n\r\n let {afterMessageId, prepareTempMessageId} = options;\r\n if(prepareTempMessageId) {\r\n deferred.then(() => {\r\n delete this.afterMessageTempIds[prepareTempMessageId];\r\n });\r\n }\r\n\r\n if(MOUNT_CLASS_TO) {\r\n const startTime = Date.now();\r\n const interval = ctx.setInterval(() => {\r\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\r\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\r\n }\r\n //this.cachedUploadNetworkers[2].requestMessageStatus();\r\n }, 5e3);\r\n\r\n deferred.finally(() => {\r\n clearInterval(interval);\r\n });\r\n }\r\n\r\n const rejectPromise = (error: ApiError) => {\r\n if(!error) {\r\n error = {type: 'ERROR_EMPTY'};\r\n } else if(!isObject(error)) {\r\n error = {message: error};\r\n }\r\n \r\n deferred.reject(error);\r\n\r\n if((error.code === 401 && error.type === 'SESSION_REVOKED') || \r\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\r\n this.logOut();\r\n }\r\n\r\n if(options.ignoreErrors) {\r\n return;\r\n }\r\n \r\n if(error.code === 406) {\r\n error.handled = true;\r\n }\r\n \r\n if(!options.noErrorBox) {\r\n error.input = method;\r\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\r\n setTimeout(() => {\r\n if(!error.handled) {\r\n if(error.code === 401) {\r\n this.logOut();\r\n } else {\r\n // ErrorService.show({error: error}); // WARNING\r\n }\r\n \r\n error.handled = true;\r\n }\r\n }, 100);\r\n }\r\n };\r\n \r\n let dcId: DcId;\r\n \r\n let cachedNetworker: MTPNetworker;\r\n let stack = (new Error()).stack || 'empty stack';\r\n const performRequest = (networker: MTPNetworker) => {\r\n if(afterMessageId) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n if(after) {\r\n options.afterMessageId = after.messageId;\r\n }\r\n }\r\n\r\n const promise = (cachedNetworker = networker).wrapApiCall(method, params, options);\r\n\r\n if(prepareTempMessageId) {\r\n this.afterMessageTempIds[prepareTempMessageId] = {\r\n messageId: (options as MTMessage).messageId,\r\n promise: deferred\r\n };\r\n }\r\n\r\n return promise.then(deferred.resolve, (error: ApiError) => {\r\n //if(!options.ignoreErrors) {\r\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\r\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\r\n }\r\n \r\n if(error.code === 401 && this.baseDcId === dcId) {\r\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\r\n sessionStorage.delete('dc')\r\n sessionStorage.delete('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\r\n //this.telegramMeNotify(false);\r\n }\r\n \r\n rejectPromise(error);\r\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\r\n if(this.cachedExportPromise[dcId] === undefined) {\r\n const promise = new Promise((exportResolve, exportReject) => {\r\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\r\n this.invokeApi('auth.importAuthorization', {\r\n id: exportedAuth.id,\r\n bytes: exportedAuth.bytes\r\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\r\n }, exportReject);\r\n });\r\n \r\n this.cachedExportPromise[dcId] = promise;\r\n }\r\n \r\n this.cachedExportPromise[dcId].then(() => {\r\n //(cachedNetworker = networker).wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n this.invokeApi(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else if(error.code === 303) {\r\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\\d+)/)[2] as DcId;\r\n if(newDcId !== dcId) {\r\n if(options.dcId) {\r\n options.dcId = newDcId;\r\n } else {\r\n this.setBaseDcId(newDcId);\r\n }\r\n \r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n }\r\n } else if(error.code === 400 && error.type.indexOf('FILE_MIGRATE') === 0) {\r\n const newDcId = +error.type.match(/^(FILE_MIGRATE_)(\\d+)/)[2] as DcId;\r\n if(newDcId !== dcId) {\r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n } else if(!options.rawError && error.code === 420) {\r\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 1;\r\n \r\n if(waitTime > (options.floodMaxTimeout !== undefined ? options.floodMaxTimeout : 60) && !options.prepareTempMessageId) {\r\n return rejectPromise(error);\r\n }\r\n \r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, waitTime/* (waitTime + 5) */ * 1000); // 03.02.2020\r\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n\r\n afterMessageId = undefined;\r\n delete options.afterMessageId;\r\n\r\n if(after) after.promise.then(() => performRequest(cachedNetworker));\r\n else performRequest(cachedNetworker);\r\n } else if(!options.rawError && error.code === 500) {\r\n const now = Date.now();\r\n if(options.stopTime) {\r\n if(now >= options.stopTime) {\r\n return rejectPromise(error);\r\n }\r\n }\r\n \r\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, options.waitTime * 1000);\r\n } else if(error.type === 'UNKNOWN') {\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, 1000);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n });\r\n }\r\n \r\n if(dcId = (options.dcId || this.baseDcId)) {\r\n this.getNetworker(dcId, options).then(performRequest, rejectPromise);\r\n } else {\r\n this.getBaseDcId().then(baseDcId => {\r\n this.getNetworker(dcId = baseDcId, options).then(performRequest, rejectPromise);\r\n });\r\n }\r\n\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiManager = new ApiManager();\r\nMOUNT_CLASS_TO.apiManager = apiManager;\r\nexport default apiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { blobConstruct, readBlobAsUint8Array } from \"../helpers/blob\";\r\n\r\nexport class FileManager {\r\n public blobSupported = true;\r\n \r\n constructor() {\r\n try {\r\n blobConstruct([], '');\r\n } catch(e) {\r\n this.blobSupported = false;\r\n }\r\n }\r\n \r\n public isAvailable() {\r\n return this.blobSupported;\r\n }\r\n \r\n public write(fileWriter: ReturnType, bytes: Uint8Array | Blob | string): Promise {\r\n if(bytes instanceof Blob) { // is file bytes\r\n return readBlobAsUint8Array(bytes).then(arr => {\r\n return fileWriter.write(arr);\r\n });\r\n } else {\r\n return fileWriter.write(bytes);\r\n }\r\n }\r\n\r\n public getFakeFileWriter(mimeType: string, saveFileCallback?: (blob: Blob) => Promise) {\r\n const blobParts: Array = [];\r\n const fakeFileWriter = {\r\n write: async(part: Uint8Array | string) => {\r\n if(!this.blobSupported) {\r\n throw false;\r\n }\r\n \r\n blobParts.push(part);\r\n },\r\n truncate: () => {\r\n blobParts.length = 0;\r\n },\r\n finalize: (saveToStorage = true) => {\r\n const blob = blobConstruct(blobParts, mimeType);\r\n\r\n if(saveToStorage && saveFileCallback) {\r\n saveFileCallback(blob);\r\n }\r\n \r\n return blob;\r\n }\r\n };\r\n \r\n return fakeFileWriter;\r\n }\r\n}\r\n\r\nexport default new FileManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport FileManager from './filemanager';\r\n//import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';\r\n//import { logger } from './polyfill';\r\n\r\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\r\n\r\nexport default class CacheStorageController {\r\n private static STORAGES: CacheStorageController[] = [];\r\n private openDbPromise: Promise;\r\n\r\n private useStorage = true;\r\n\r\n //private log: ReturnType = logger('CS');\r\n\r\n constructor(private dbName: CacheStorageDbName) {\r\n if(Modes.test) {\r\n this.dbName += '_test';\r\n }\r\n\r\n if(CacheStorageController.STORAGES.length) {\r\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\r\n }\r\n \r\n this.openDatabase();\r\n CacheStorageController.STORAGES.push(this);\r\n }\r\n\r\n private openDatabase(): Promise {\r\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\r\n }\r\n\r\n public delete(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\r\n }\r\n\r\n public deleteAll() {\r\n return caches.delete(this.dbName);\r\n }\r\n\r\n public get(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\r\n }\r\n\r\n public save(entryName: string, response: Response) {\r\n // return new Promise((resolve) => {}); // DEBUG\r\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\r\n }\r\n\r\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\r\n /* if(method === 'blob') {\r\n return Promise.reject();\r\n } */\r\n\r\n // const str = `get fileName: ${fileName}`;\r\n // console.time(str);\r\n return this.get(fileName).then((response) => {\r\n if(!response) {\r\n //console.warn('getFile:', response, fileName);\r\n throw 'NO_ENTRY_FOUND';\r\n }\r\n\r\n const promise = response[method]();\r\n // promise.then(() => {\r\n // console.timeEnd(str);\r\n // });\r\n return promise;\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct(blob) as Blob;\r\n }\r\n\r\n const response = new Response(blob, {\r\n headers: {\r\n 'Content-Length': '' + blob.size\r\n }\r\n });\r\n \r\n return this.save(fileName, response).then(() => blob as Blob);\r\n }\r\n\r\n public timeoutOperation(callback: (cache: Cache) => Promise) {\r\n if(!this.useStorage) {\r\n return Promise.reject('STORAGE_OFFLINE');\r\n }\r\n\r\n return new Promise(async(resolve, reject) => {\r\n let rejected = false;\r\n const timeout = setTimeout(() => {\r\n reject();\r\n //console.warn('CACHESTORAGE TIMEOUT');\r\n rejected = true;\r\n }, 15e3);\r\n\r\n try {\r\n const cache = await this.openDatabase();\r\n if(!cache) {\r\n this.useStorage = false;\r\n this.openDbPromise = undefined;\r\n throw 'no cache?';\r\n }\r\n\r\n const res = await callback(cache);\r\n\r\n if(rejected) return;\r\n resolve(res);\r\n } catch(err) {\r\n reject(err);\r\n }\r\n\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n public getFileWriter(fileName: string, mimeType: string) {\r\n const fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob).catch(() => blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n return storage.deleteAll();\r\n }\r\n }));\r\n }\r\n}\r\n\r\n//const cacheStorage = new CacheStorageController(); \r\n//MOUNT_CLASS_TO.cacheStorage = cacheStorage;\r\n//export default cacheStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ReferenceBytes } from \"./referenceDatabase\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { readBlobAsArrayBuffer } from \"../../helpers/blob\";\r\nimport { CancellablePromise, deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport { notifyAll, notifySomeone } from \"../../helpers/context\";\r\nimport { getFileNameByLocation } from \"../../helpers/fileName\";\r\nimport { randomLong } from \"../../helpers/random\";\r\nimport { InputFile, InputFileLocation, InputWebFileLocation, UploadFile, UploadWebFile } from \"../../layer\";\r\nimport { DcId, WorkerTaskVoidTemplate } from \"../../types\";\r\nimport CacheStorageController from \"../cacheStorage\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport FileManager from \"../filemanager\";\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport apiManager from \"./apiManager\";\r\nimport { isWebpSupported } from \"./mtproto.worker\";\r\nimport { bytesToHex } from \"../../helpers/bytes\";\r\nimport assumeType from \"../../helpers/assumeType\";\r\nimport ctx from \"../../environment/ctx\";\r\n\r\ntype Delayed = {\r\n offset: number, \r\n writeFilePromise: CancellablePromise, \r\n writeFileDeferred: CancellablePromise\r\n};\r\n\r\nexport type DownloadOptions = {\r\n dcId: DcId, \r\n location: InputFileLocation | InputWebFileLocation, \r\n size?: number,\r\n fileName?: string,\r\n mimeType?: string,\r\n limitPart?: number,\r\n queueId?: number,\r\n onlyCache?: boolean,\r\n};\r\n\r\nexport type MyUploadFile = UploadFile.uploadFile | UploadWebFile.uploadWebFile;\r\n\r\nexport interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n};\r\n\r\nexport interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n originalPayload: ReferenceBytes\r\n};\r\n\r\nconst MAX_FILE_SAVE_SIZE = 20e6;\r\n\r\nexport class ApiFileManager {\r\n private cacheStorage = new CacheStorageController('cachedFiles');\r\n\r\n private cachedDownloadPromises: {\r\n [fileName: string]: CancellablePromise\r\n } = {};\r\n\r\n private uploadPromises: {\r\n [fileName: string]: Set>\r\n } = {};\r\n\r\n private downloadPulls: {\r\n [dcId: string]: Array<{\r\n id: number,\r\n queueId: number,\r\n cb: () => Promise,\r\n deferred: {\r\n resolve: (...args: any[]) => void,\r\n reject: (...args: any[]) => void\r\n },\r\n activeDelta: number\r\n }>\r\n } = {};\r\n private downloadActives: {[dcId: string]: number} = {};\r\n\r\n public webpConvertPromises: {[fileName: string]: CancellablePromise} = {};\r\n public refreshReferencePromises: {\r\n [referenceHex: string]: {\r\n deferred: CancellablePromise,\r\n timeout: number\r\n }\r\n } = {};\r\n\r\n private log: ReturnType = logger('AFM', LogTypes.Error | LogTypes.Log);\r\n private tempId = 0;\r\n private queueId = 0;\r\n private debug = Modes.debug;\r\n\r\n constructor() {\r\n setInterval(() => { // clear old promises\r\n for(const hex in this.refreshReferencePromises) {\r\n const {deferred} = this.refreshReferencePromises[hex];\r\n if(deferred.isFulfilled || deferred.isRejected) {\r\n delete this.refreshReferencePromises[hex];\r\n }\r\n }\r\n }, 1800e3);\r\n }\r\n\r\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\r\n private downloadRequest(dcId: number, id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\r\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise, activeDelta: number, queueId: number = 0) {\r\n if(this.downloadPulls[dcId] === undefined) {\r\n this.downloadPulls[dcId] = [];\r\n this.downloadActives[dcId] = 0;\r\n }\r\n\r\n const downloadPull = this.downloadPulls[dcId];\r\n\r\n const promise = new Promise((resolve, reject) => {\r\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\r\n });\r\n\r\n setTimeout(() => {\r\n this.downloadCheck(dcId);\r\n }, 0);\r\n\r\n return promise;\r\n }\r\n\r\n private downloadCheck(dcId: string | number) {\r\n const downloadPull = this.downloadPulls[dcId];\r\n const downloadLimit = dcId === 'upload' ? 24 : 36;\r\n //const downloadLimit = Infinity;\r\n\r\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull || !downloadPull.length) {\r\n return false;\r\n }\r\n\r\n //const data = downloadPull.shift();\r\n const data = downloadPull.findAndSplice(d => d.queueId === 0) || downloadPull.findAndSplice(d => d.queueId === this.queueId) || downloadPull.shift();\r\n const activeDelta = data.activeDelta || 1;\r\n\r\n this.downloadActives[dcId] += activeDelta;\r\n \r\n data.cb()\r\n .then((result) => {\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.resolve(result);\r\n }, (error: Error) => {\r\n // @ts-ignore\r\n if(!error || !error.type || (error.type !== 'DOWNLOAD_CANCELED' && error.type !== 'UPLOAD_CANCELED')) {\r\n this.log.error('downloadCheck error:', error);\r\n }\r\n\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.reject(error);\r\n });\r\n }\r\n\r\n public setQueueId(queueId: number) {\r\n //this.log.error('setQueueId', queueId);\r\n this.queueId = queueId;\r\n }\r\n\r\n private getFileStorage() {\r\n return this.cacheStorage;\r\n }\r\n\r\n public cancelDownload(fileName: string) {\r\n const promises = (this.cachedDownloadPromises[fileName] ? [this.cachedDownloadPromises[fileName]] : undefined) || \r\n (this.uploadPromises[fileName] ? Array.from(this.uploadPromises[fileName]) : []);\r\n let canceled = false;\r\n for(let i = 0, length = promises.length; i < length; ++i) {\r\n const promise = promises[i];\r\n if(promise && !promise.isRejected && !promise.isFulfilled) {\r\n promise.cancel();\r\n canceled = true;\r\n }\r\n }\r\n\r\n return canceled;\r\n }\r\n\r\n public requestWebFilePart(dcId: DcId, location: InputWebFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\r\n checkCancel && checkCancel();\r\n\r\n return apiManager.invokeApi('upload.getWebFile', {\r\n location,\r\n offset,\r\n limit\r\n }, {\r\n dcId,\r\n fileDownload: true\r\n });\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n public requestFilePart(dcId: DcId, location: InputFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\r\n checkCancel && checkCancel();\r\n\r\n const invoke = async(): Promise => {\r\n checkCancel && checkCancel(); // do not remove async, because checkCancel will throw an error\r\n\r\n const promise = apiManager.invokeApi('upload.getFile', {\r\n location,\r\n offset,\r\n limit\r\n }, {\r\n dcId,\r\n fileDownload: true\r\n }) as Promise;\r\n\r\n return promise.catch((err) => {\r\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n\r\n throw err;\r\n });\r\n };\r\n\r\n assumeType(location);\r\n const reference = location.file_reference;\r\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\r\n location.checkedReference = true;\r\n const hex = bytesToHex(reference);\r\n if(this.refreshReferencePromises[hex]) {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n }\r\n\r\n return invoke();\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n /* private convertBlobToBytes(blob: Blob) {\r\n return blob.arrayBuffer().then(buffer => new Uint8Array(buffer));\r\n } */\r\n\r\n private getDelta(bytes: number) {\r\n return bytes / 1024 / 128;\r\n }\r\n\r\n private getLimitPart(size: number): number {\r\n let bytes: number;\r\n\r\n bytes = 512;\r\n /* if(size < 1e6 || !size) bytes = 512;\r\n else if(size < 3e6) bytes = 256;\r\n else bytes = 128; */\r\n\r\n return bytes * 1024;\r\n }\r\n\r\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\r\n //this.log('uncompressTGS', bytes, bytes.slice().buffer);\r\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\r\n return cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, true) as Promise;\r\n };\r\n\r\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\r\n const convertPromise = deferredPromise();\r\n\r\n const task = {type: 'convertWebp', payload: {fileName, bytes}};\r\n notifySomeone(task);\r\n return this.webpConvertPromises[fileName] = convertPromise;\r\n };\r\n\r\n private refreshReference(inputFileLocation: InputFileLocation) {\r\n const reference = (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference;\r\n const hex = bytesToHex(reference);\r\n\r\n let r = this.refreshReferencePromises[hex];\r\n if(!r) {\r\n const deferred = deferredPromise();\r\n\r\n r = this.refreshReferencePromises[hex] = {\r\n deferred,\r\n timeout: ctx.setTimeout(() => {\r\n this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\r\n deferred.reject('REFERENCE_IS_NOT_REFRESHED');\r\n }, 60000)\r\n };\r\n\r\n deferred.finally(() => {\r\n clearTimeout(r.timeout);\r\n });\r\n\r\n const task = {type: 'refreshReference', payload: reference};\r\n notifySomeone(task);\r\n }\r\n\r\n // have to replace file_reference in any way, because location can be different everytime if it's stream\r\n return r.deferred.then(reference => {\r\n if(hex === bytesToHex(reference)) {\r\n throw 'REFERENCE_IS_NOT_REFRESHED';\r\n }\r\n\r\n (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference = reference;\r\n });\r\n }\r\n\r\n public downloadFile(options: DownloadOptions): CancellablePromise {\r\n if(!FileManager.isAvailable()) {\r\n return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'});\r\n }\r\n\r\n const size = options.size ?? 0;\r\n const {dcId, location} = options;\r\n\r\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\r\n\r\n if(options.mimeType === 'image/webp' && !isWebpSupported()) {\r\n process = this.convertWebp;\r\n options.mimeType = 'image/png';\r\n } else if(options.mimeType === 'application/x-tgsticker') {\r\n process = this.uncompressTGS;\r\n options.mimeType = 'application/json';\r\n }\r\n\r\n const fileName = getFileNameByLocation(location, {fileName: options.fileName});\r\n const cachedPromise = this.cachedDownloadPromises[fileName];\r\n const fileStorage = this.getFileStorage();\r\n\r\n this.debug && this.log('downloadFile', fileName, size, location, options.mimeType);\r\n\r\n /* if(options.queueId) {\r\n this.log.error('downloadFile queueId:', fileName, options.queueId);\r\n } */\r\n\r\n if(cachedPromise) {\r\n //this.log('downloadFile cachedPromise');\r\n\r\n if(size) {\r\n return cachedPromise.then((blob: Blob) => {\r\n if(blob.size < size) {\r\n this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\r\n\r\n return this.deleteFile(fileName).then(() => {\r\n return this.downloadFile(options);\r\n }).catch(() => {\r\n return this.downloadFile(options);\r\n });\r\n } else {\r\n return blob;\r\n }\r\n });\r\n } else {\r\n return cachedPromise;\r\n }\r\n }\r\n\r\n const deferred = deferredPromise();\r\n const mimeType = options.mimeType || 'image/jpeg';\r\n\r\n let canceled = false;\r\n let resolved = false;\r\n let cacheFileWriter: ReturnType;\r\n let errorHandler = (error: any) => {\r\n delete this.cachedDownloadPromises[fileName];\r\n deferred.reject(error);\r\n errorHandler = () => {};\r\n\r\n if(cacheFileWriter && (!error || error.type !== 'DOWNLOAD_CANCELED')) {\r\n cacheFileWriter.truncate();\r\n }\r\n };\r\n\r\n const id = this.tempId++;\r\n\r\n fileStorage.getFile(fileName).then(async(blob: Blob) => {\r\n //this.log('maybe cached', fileName);\r\n //throw '';\r\n\r\n if(blob.size < size) {\r\n //this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size);\r\n await this.deleteFile(fileName);\r\n throw false;\r\n }\r\n\r\n deferred.resolve(blob);\r\n }).catch(() => {\r\n //this.log('not cached', fileName);\r\n const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType);\r\n\r\n fileWriterPromise.then((fileWriter) => {\r\n cacheFileWriter = fileWriter;\r\n const limit = options.limitPart || this.getLimitPart(size);\r\n let offset: number;\r\n let startOffset = 0;\r\n let writeFilePromise: CancellablePromise = Promise.resolve(),\r\n writeFileDeferred: CancellablePromise;\r\n //const maxRequests = 13107200 / limit; // * 100 Mb speed\r\n const maxRequests = Infinity;\r\n\r\n //console.error('maxRequests', maxRequests);\r\n\r\n const processDownloaded = async(bytes: Uint8Array, offset: number) => {\r\n if(process) {\r\n //const perf = performance.now();\r\n const processed = await process(bytes, fileName);\r\n //this.log('downloadFile process downloaded time', performance.now() - perf, mimeType, process);\r\n return processed;\r\n }\r\n \r\n return bytes;\r\n };\r\n\r\n const r = location._ === 'inputWebFileLocation' ? this.requestWebFilePart.bind(this) : this.requestFilePart.bind(this);\r\n\r\n const delayed: Delayed[] = [];\r\n offset = startOffset;\r\n do {\r\n ////this.log('offset:', startOffset);\r\n writeFileDeferred = deferredPromise();\r\n delayed.push({offset, writeFilePromise, writeFileDeferred});\r\n writeFilePromise = writeFileDeferred;\r\n offset += limit;\r\n } while(offset < size);\r\n\r\n let done = 0;\r\n const superpuper = async() => {\r\n //if(!delayed.length) return;\r\n\r\n const {offset, writeFilePromise, writeFileDeferred} = delayed.shift();\r\n try {\r\n // @ts-ignore\r\n const result = await r(dcId, location as any, offset, limit, id, options.queueId, checkCancel);\r\n\r\n const bytes = result.bytes;\r\n\r\n if(delayed.length) {\r\n superpuper();\r\n }\r\n\r\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\r\n const isFinal = offset + limit >= size || !bytes.byteLength;\r\n if(bytes.byteLength) {\r\n //done += limit;\r\n done += bytes.byteLength;\r\n\r\n //if(!isFinal) {\r\n ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred);\r\n deferred.notify({done, offset, total: size});\r\n //}\r\n\r\n const processedResult = await processDownloaded(bytes, offset);\r\n checkCancel();\r\n\r\n await writeFilePromise;\r\n checkCancel();\r\n\r\n await FileManager.write(fileWriter, processedResult);\r\n }\r\n\r\n writeFileDeferred.resolve();\r\n\r\n if(isFinal) {\r\n resolved = true;\r\n\r\n deferred.resolve(fileWriter.finalize(size < MAX_FILE_SAVE_SIZE));\r\n }\r\n } catch(err) {\r\n errorHandler(err);\r\n }\r\n };\r\n\r\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\r\n superpuper();\r\n }\r\n }).catch((err) => {\r\n if(!['STORAGE_OFFLINE'].includes(err)) {\r\n this.log.error('saveFile error:', err);\r\n }\r\n });\r\n });\r\n\r\n const checkCancel = () => {\r\n if(canceled) {\r\n const error = new Error('Canceled');\r\n // @ts-ignore\r\n error.type = 'DOWNLOAD_CANCELED';\r\n throw error;\r\n }\r\n };\r\n\r\n deferred.cancel = () => {\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n delete this.cachedDownloadPromises[fileName];\r\n errorHandler({type: 'DOWNLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number, offset: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n this.cachedDownloadPromises[fileName] = deferred;\r\n\r\n deferred.finally(() => {\r\n delete this.cachedDownloadPromises[fileName];\r\n });\r\n\r\n return deferred;\r\n }\r\n\r\n private deleteFile(fileName: string) {\r\n //this.log('will delete file:', fileName);\r\n delete this.cachedDownloadPromises[fileName];\r\n return this.getFileStorage().delete(fileName);\r\n }\r\n\r\n public uploadFile({file, fileName}: {file: Blob | File, fileName: string}) {\r\n const fileSize = file.size, \r\n isBigFile = fileSize >= 10485760;\r\n\r\n let canceled = false,\r\n resolved = false,\r\n doneParts = 0,\r\n partSize = 262144; // 256 Kb\r\n\r\n /* if(fileSize > (524288 * 3000)) {\r\n partSize = 1024 * 1024;\r\n activeDelta = 8;\r\n } else */if(fileSize > 67108864) {\r\n partSize = 524288;\r\n } else if(fileSize < 102400) {\r\n partSize = 32768;\r\n }\r\n\r\n const activeDelta = this.getDelta(partSize);\r\n\r\n const totalParts = Math.ceil(fileSize / partSize);\r\n const fileId = randomLong();\r\n\r\n let _part = 0;\r\n\r\n const resultInputFile: InputFile = {\r\n _: isBigFile ? 'inputFileBig' : 'inputFile',\r\n id: fileId as any,\r\n parts: totalParts,\r\n name: fileName,\r\n md5_checksum: ''\r\n };\r\n\r\n const deferredHelper: {\r\n resolve?: (input: typeof resultInputFile) => void,\r\n reject?: (error: any) => void,\r\n notify?: (details: {done: number, total: number}) => void\r\n } = {\r\n notify: (details: {done: number, total: number}) => {}\r\n };\r\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n if(totalParts > 4000) {\r\n return reject({type: 'FILE_TOO_BIG'});\r\n }\r\n\r\n deferredHelper.resolve = resolve;\r\n deferredHelper.reject = reject;\r\n });\r\n Object.assign(deferred, deferredHelper);\r\n\r\n if(totalParts > 4000) {\r\n return deferred;\r\n }\r\n \r\n let errorHandler = (error: any) => {\r\n if(error?.type !== 'UPLOAD_CANCELED') {\r\n this.log.error('Up Error', error);\r\n }\r\n\r\n deferred.reject(error);\r\n canceled = true;\r\n errorHandler = () => {};\r\n };\r\n\r\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\r\n\r\n const id = this.tempId++;\r\n\r\n /* setInterval(() => {\r\n console.log(file);\r\n }, 1e3); */\r\n\r\n const self = this;\r\n function* generator() {\r\n for(let offset = 0; offset < fileSize; offset += partSize) {\r\n const part = _part++; // 0, 1\r\n yield self.downloadRequest('upload', id, () => {\r\n const blob = file.slice(offset, offset + partSize);\r\n\r\n return readBlobAsArrayBuffer(blob).then(buffer => {\r\n if(canceled) {\r\n throw {type: 'UPLOAD_CANCELED'};\r\n }\r\n\r\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\r\n\r\n /* const u = new Uint8Array(buffer.byteLength);\r\n for(let i = 0; i < u.length; ++i) {\r\n //u[i] = Math.random() * 255 | 0;\r\n u[i] = 0;\r\n }\r\n buffer = u.buffer; */\r\n \r\n /* setTimeout(() => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n\r\n self.log('done part', part, doneParts);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, 1250);\r\n return; */\r\n\r\n return apiManager.invokeApi(method, {\r\n file_id: fileId,\r\n file_part: part,\r\n file_total_parts: totalParts,\r\n bytes: buffer/* new Uint8Array(buffer) */\r\n } as any, {\r\n //startMaxLength: partSize + 256,\r\n fileUpload: true\r\n }).then((result) => {\r\n doneParts++;\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, errorHandler);\r\n });\r\n }, activeDelta).catch(errorHandler);\r\n }\r\n }\r\n\r\n const it = generator();\r\n const process = () => {\r\n if(canceled) return;\r\n const r = it.next();\r\n if(r.done || canceled) return;\r\n (r.value as Promise).then(process);\r\n };\r\n\r\n const maxRequests = Infinity;\r\n //const maxRequests = 10;\r\n /* for(let i = 0; i < 10; ++i) {\r\n process();\r\n } */\r\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\r\n process();\r\n }\r\n\r\n deferred.cancel = () => {\r\n //this.log('cancel upload', canceled, resolved);\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n errorHandler({type: 'UPLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n deferred.finally(() => {\r\n set.delete(deferred);\r\n if(!set.size) {\r\n delete this.uploadPromises[fileName];\r\n }\r\n });\r\n\r\n const set = this.uploadPromises[fileName] ?? (this.uploadPromises[fileName] = new Set());\r\n set.add(deferred);\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiFileManager = new ApiFileManager();\r\nMOUNT_CLASS_TO.apiFileManager = apiFileManager;\r\nexport default apiFileManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { InputFileLocation, InputStickerSet, InputWebFileLocation } from \"../layer\";\r\nimport type { DownloadOptions } from \"../lib/mtproto/apiFileManager\";\r\n\r\nconst FILENAME_JOINER = '_';\r\n\r\nexport function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{\r\n fileName: string\r\n}>) {\r\n const fileName = '';//(options?.fileName || '').split('.');\r\n const ext = fileName[fileName.length - 1] || '';\r\n\r\n let str: string;\r\n switch(location._) {\r\n case 'inputPhotoFileLocation': {\r\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputDocumentFileLocation': {\r\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputPeerPhotoFileLocation':\r\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\r\n break;\r\n \r\n case 'inputStickerSetThumb': {\r\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id || \r\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name || \r\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon || \r\n location.stickerset._;\r\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputFileLocation': {\r\n str = location.volume_id + '_' + location.local_id;\r\n break;\r\n }\r\n\r\n case 'inputWebFileLocation': {\r\n str = ['webFile', location.url].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n default: {\r\n console.error('Unrecognized location:', location);\r\n str = '';\r\n break;\r\n }\r\n }\r\n\r\n return str + (ext ? '.' + ext : ext);\r\n}\r\n\r\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\r\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\r\n //console.log('getFileURL', location);\r\n //const perf = performance.now();\r\n const encoded = encodeURIComponent(JSON.stringify(options));\r\n //console.log('getFileURL encode:', performance.now() - perf, encoded);\r\n\r\n return '/' + type + '/' + encoded;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// just to include\nimport '../polyfill';\n\nimport type { LocalStorageProxyTask } from '../localStorage';\nimport type { WebpConvertTask } from '../webp/webpWorkerController';\nimport type { ToggleStorageTask } from './mtprotoworker';\nimport type { RefreshReferenceTaskResponse } from './apiFileManager';\nimport apiManager from \"./apiManager\";\nimport cryptoWorker from \"../crypto/cryptoworker\";\nimport networkerFactory from \"./networkerFactory\";\nimport apiFileManager from './apiFileManager';\nimport { notifyAll } from '../../helpers/context';\nimport CacheStorageController from '../cacheStorage';\nimport sessionStorage from '../sessionStorage';\nimport { socketsProxied } from './transports/socketProxied';\nimport { bytesToHex } from '../../helpers/bytes';\nimport ctx from '../../environment/ctx';\n\nlet webpSupported = false;\nexport const isWebpSupported = () => {\n return webpSupported;\n};\n\nnetworkerFactory.setUpdatesProcessor((obj) => {\n notifyAll({update: obj});\n});\n\nnetworkerFactory.onConnectionStatusChange = (status) => {\n notifyAll({type: 'connectionStatusChange', payload: status});\n};\n\nconst taskListeners = {\n convertWebp: (task: WebpConvertTask) => {\n const {fileName, bytes} = task.payload;\n const deferred = apiFileManager.webpConvertPromises[fileName];\n if(deferred) {\n deferred.resolve(bytes);\n delete apiFileManager.webpConvertPromises[fileName];\n }\n },\n\n webpSupport: (task: any) => {\n webpSupported = task.payload;\n },\n\n socketProxy: (task: any) => {\n const socketTask = task.payload;\n const id = socketTask.id;\n \n const socketProxied = socketsProxied.get(id);\n if(socketTask.type === 'message') {\n socketProxied.dispatchEvent('message', socketTask.payload);\n } else if(socketTask.type === 'open') {\n socketProxied.dispatchEvent('open');\n } else if(socketTask.type === 'close') {\n socketProxied.dispatchEvent('close');\n socketsProxied.delete(id);\n }\n },\n\n localStorageProxy: (task: LocalStorageProxyTask) => {\n sessionStorage.finishTask(task.id, task.payload);\n },\n\n userAgent: (task: any) => {\n networkerFactory.userAgent = task.payload;\n },\n\n online: () => {\n networkerFactory.forceReconnectTimeout();\n },\n\n forceReconnect: () => {\n networkerFactory.forceReconnect();\n },\n\n toggleStorage: (task: ToggleStorageTask) => {\n const enabled = task.payload;\n // AppStorage.toggleStorage(enabled);\n CacheStorageController.toggleStorage(enabled);\n },\n\n refreshReference: (task: RefreshReferenceTaskResponse) => {\n const hex = bytesToHex(task.originalPayload);\n const r = apiFileManager.refreshReferencePromises[hex];\n const deferred = r?.deferred;\n if(deferred) {\n if(task.error) {\n deferred.reject(task.error);\n } else {\n deferred.resolve(task.payload);\n }\n }\n }\n};\n\nconst onMessage = async(e: any) => {\n try {\n const task: {\n task: string,\n taskId: number,\n args: any[],\n type?: string\n } = e.data;\n const taskId = task.taskId;\n\n // @ts-ignore\n const f = taskListeners[task.type];\n if(f) {\n f(task);\n return;\n }\n\n if(!task.task) {\n return;\n }\n \n switch(task.task) {\n case 'computeSRP':\n case 'gzipUncompress':\n return cryptoWorker.invokeCrypto(task.task, ...task.args as any).then(result => {\n notifyAll({taskId, result});\n });\n \n case 'requestFilePart':\n case 'setQueueId':\n case 'cancelDownload':\n case 'uploadFile':\n case 'downloadFile': {\n try {\n // @ts-ignore\n let result: any = apiFileManager[task.task].apply(apiFileManager, task.args);\n \n if(result instanceof Promise) {\n /* (result as ReturnType).notify = (progress: {done: number, total: number, offset: number}) => {\n notify({progress: {fileName, ...progress}});\n }; */\n result = await result;\n }\n \n notifyAll({taskId, result});\n } catch(error) {\n notifyAll({taskId, error});\n }\n\n break;\n }\n\n case 'getNetworker': {\n // @ts-ignore\n apiManager[task.task].apply(apiManager, task.args).finally(() => {\n notifyAll({taskId, result: null});\n });\n \n break;\n }\n\n case 'setLanguage':\n case 'startAll':\n case 'stopAll': {\n // @ts-ignore\n networkerFactory[task.task].apply(networkerFactory, task.args);\n break;\n }\n \n default: {\n try {\n // @ts-ignore\n let result = apiManager[task.task].apply(apiManager, task.args);\n \n if(result instanceof Promise) {\n result = await result;\n }\n\n //console.log(notifyAll);\n \n notifyAll({taskId, result});\n } catch(error) {\n notifyAll({taskId, error});\n }\n \n //throw new Error('Unknown task: ' + task.task);\n break;\n }\n }\n } catch(err) {\n console.error('worker task error:', err);\n }\n};\n\n//console.log('[WORKER] Will send ready', Date.now() / 1000);\nctx.addEventListener('message', onMessage);\nnotifyAll('ready');\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/pako/dist/pako_inflate.min.js","webpack:///./src/helpers/bytes.ts","webpack:///./src/lib/polyfill.ts","webpack:///./src/config/modes.ts","webpack:///./src/config/debug.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/localStorage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/vendor/leemon.ts","webpack:///./src/lib/mtproto/bin_utils.ts","webpack:///./src/lib/mtproto/schema.ts","webpack:///./node_modules/@cryptography/aes/dist/es/aes.js","webpack:///./src/helpers/random.ts","webpack:///./src/lib/crypto/crypto_utils.ts","webpack:///./src/lib/mtproto/tl_utils.ts","webpack:///./src/lib/logger.ts","webpack:///./src/lib/crypto/srp.ts","webpack:///./src/lib/crypto/cryptoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/lib/mtproto/timeManager.ts","webpack:///./src/config/app.ts","webpack:///./src/lib/mtproto/connectionStatus.ts","webpack:///./src/lib/mtproto/networker.ts","webpack:///./src/helpers/array.ts","webpack:///./src/lib/mtproto/networkerFactory.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/transports/obfuscation.ts","webpack:///./src/lib/mtproto/transports/intermediate.ts","webpack:///./src/lib/mtproto/transports/tcpObfuscated.ts","webpack:///./src/environment/ctx.ts","webpack:///./src/environment/userAgent.ts","webpack:///./src/lib/mtproto/transports/socketProxied.ts","webpack:///./src/lib/mtproto/dcConfigurator.ts","webpack:///./src/lib/mtproto/rsaKeysManager.ts","webpack:///./src/lib/mtproto/authorizer.ts","webpack:///./src/helpers/noop.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/mtproto/apiManager.ts","webpack:///./src/lib/filemanager.ts","webpack:///./src/lib/cacheStorage.ts","webpack:///./src/lib/mtproto/apiFileManager.ts","webpack:///./src/helpers/fileName.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","e","a","Uint32Array","f","h","u","w","b","k","_","g","v","y","x","E","R","A","state","next_in","input","avail_in","next_out","output","avail_out","dmax","wsize","whave","wnext","window","hold","bits","lencode","distcode","lenbits","distbits","msg","sane","Uint16Array","Uint8Array","Z","S","O","U","T","D","I","B","N","C","z","F","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","this","last","wrap","havedict","flags","check","total","head","wbits","length","offset","extra","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","total_in","total_out","adler","Int32Array","set","subarray","L","M","H","j","K","P","Y","G","X","W","done","text","time","xflags","os","extra_len","String","fromCharCode","comment","hcrc","data_type","apply","Array","2","1","0","toString","q","J","Q","V","$","ee","te","ie","ne","options","slice","arguments","shift","TypeError","chunkSize","windowBits","to","raw","err","ended","chunks","strm","Error","header","dictionary","charCodeAt","ae","push","result","onEnd","onData","join","re","se","oe","le","de","fe","Inflate","inflate","inflateRaw","ungzip","constants","default","bytesToHex","bytes","arr","bytesFromHex","hexString","len","Math","ceil","start","parseInt","charAt","substr","bytesCmp","bytes1","bytes2","bytesXor","convertToUint8Array","TextEncoder","encode","bufferConcats","args","reduce","acc","byteLength","tmp","lastLength","forEach","ArrayBuffer","bytesFromWordss","bytesToWordss","words","str","configurable","randomize","crypto","getRandomValues","concat","toJSON","findAndSplice","verify","index","findIndex","splice","undefined","toHHMMSS","leadZero","sec_num","hours","floor","minutes","seconds","Promise","finally","fn","onFinally","callback","resolve","then","reason","reject","test","location","search","indexOf","debug","http","ssl","multipleConnections","asServiceWorker","DEBUG","MOUNT_CLASS_TO","self","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","isWorker","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","listeners","listener","postMessage","notifyWorker","noop","notifySomeone","notifyAll","prefix","cache","useStorage","useCache","localStorage","getItem","JSON","parse","obj","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","keys","delete","enabled","clear","taskId","tasks","STORAGES","storage","id","payload","proxy","sessionStorage","appStorage","radix","bpe","mask","digitsStr","one","int2bigInt","s0","s3","s4","s5","s6","s7","sa","eg_u","eg_A","eg_B","eg_C","eg_D","bitSize","expand","ans","copy_","mod","dup","mod_","trim","mult","copyInt_","linCombShift_","mult_","powMod","powMod_","sub","sub_","add","add_","eGCD_","max","halve_","greater","equalsInt","negative","multInt_","leftShift_","greaterShift","kx","ky","divide_","y1","y2","subShift_","addShift_","rightShift_","modInt","minSize","buff","str2bigInt","base","kk","substring","addInt_","equals","isZero","bigInt2str","divInt_","bigInt2bytes","littleEndian","out","reverse","cmp","ys","multMod_","squareMod_","k1","k2","kn","np","inverseModInt","mont_","ui","ks","isObject","intToUint","val","longFromInts","high","low","bigInt","addPadding","blockSize","zeroes","blockSizeAsTotalLength","prepend","needPadding","padding","buffer","Si","T1","T2","T3","T4","T5","T6","T7","T8","getWords","buf","pos","xor","left","right","x2","x4","tEnc","tDec","xInv","computeTables","AES","_key","encKey","decKey","rcon","encrypt","_message","a2","b2","c2","message","rounds","decrypt","AES_IGE","iv","cipher","cipherText","prevX","prevY","yXOR","counter","incrementCounter","carry","arrays","8","16","32","nextRandomUint","array","subtle","sha1HashSync","digest","sha256HashSync","aesEncryptSync","keyBytes","ivBytes","aesDecryptSync","rsaEncrypt","publicKey","modulus","exponent","hash_pbkdf2","salt","iterations","importKey","deriveBits","hash","pqPrimeFactorization","pqBytes","what","lim","minLen","it","pqPrimeLeemon","console","error","bytesModPow","xBigInt","yBigInt","mBigInt","gzipUncompress","boolFalse","API","constructors","find","predicate","boolTrue","vector","gzipPacked","MTProto","maxLength","mtproto","startMaxLength","createBuffer","intView","byteView","resultBuffer","resultInt32","getArray","typed","resultArray","needBytes","previousBuffer","previousArray","field","log","checkLength","writeInt","iHigh","iLow","sLong","isArray","storeLongP","storeIntBytes","Float64Array","sUTF8","unescape","encodeURIComponent","methodName","params","methodData","methods","method","storeInt","pFlags","flagsOffsets","param","condType","split","fieldBit","storeObject","paramName","storeLong","storeString","storeBytes","storeDouble","storeBool","itemType","toLowerCase","schema","isBare","constructorData","override","hex","readInt","doubleView","fetchObject","decodeURIComponent","escape","fetchInt","fetchLong","fetchIntBytes","fetchString","fetchBytes","fetchDouble","fetchBool","fetchVector","fallback","checkType","constructorCmp","uncompressed","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","TLDeserialization","TLSerialization","LogTypes","LOG_LEVELS","None","Warn","Log","Debug","_logTimer","Date","now","dT","toFixed","logger","ignoreDebugReset","warn","info","trace","setPrefix","_prefix","setLevel","level","computeSRP","password","isNew","algo","new_algo","current_algo","srp_B","client_salt","server_salt","invokeCrypto","makePasswordHash","salt1","salt2","padArray","pForHash","gForHash","b_for_hash","flipper","k_v","is_good_mod_exp_first","modexp","prime","diff","a_for_hash","secure_random","generate_and_check_random","g_b","h1","M1","srp_id","performTaskWorker","super","webWorker","awaiting","pending","utils","task","timeManager","lastMessageId","timeOffset","timeTicks","messageId","serverTime","localTime","newTimeOffset","changed","abs","server_time_offset","App","version","versionFull","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","hostname","suffix","ConnectionStatus","invokeAfterMsgConstructor","dcId","authKey","authKeyId","serverSalt","transport","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResends","connectionInited","nextReq","seqNo","lastResendReq","isOnline","status","Closed","lastResponseTime","activeRequests","authKeyUint8","isFileUpload","fileUpload","isFileDownload","fileDownload","isFileNetworker","updateSession","networker","connected","setConnectionStatus","Connected","prevSessionId","sessionId","sentMessageId","sentMessage","container","forEachReverse","inner","innerSentMessageId","idx","innerSentMessage","updateSentMessage","msg_id","generateId","seq_no","generateSeqNo","notContentRelated","serializer","storeMethod","body","getBytes","pushMessage","invokeWithLayer","layer","initConnection","userAgent","navigator","platform","language","afterMessageId","resultType","isAPI","destroy","reconnect","forceReconnect","promise","assign","deferred","noSchedule","scheduleRequest","noResponse","timeout","setTimeout","TimedOut","clearTimeout","setDrainTimeout","onDrainTimeout","onDrain","retryAt","willChange","onConnectionStatusChange","delay","innerMsgId","acked","dataWithPadding","isOut","msgKeyLargePlain","msgKeyLarge","msgKey","sha2aText","sha2bText","promises","results","aesKey","aesIv","sha2a","sha2b","akStopped","isStopped","ackMsgIds","wrapMtpMessage","msg_ids","resendMsgIds","resendOpts","req_msg_id","resend_msg_ids","outMessage","messages","messagesByteLen","lengthOverflow","map","long","sort","messageByteLength","generateContainerMessage","messageWithBody","sendEncryptedRequest","cleanupSent","innerMessages","storeRawBytes","getMsgKey","keyIv","getAesKeyIv","encryptedData","data","dataBuffer","getBuffer","paddingLength","getOffset","getEncryptedMessage","encryptedResult","request","getEncryptedOutput","requestData","send","responseBuffer","deserializer","fetchRawBytes","getDecryptedMessage","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","stack","setOffset","mt_rpc_result","response","newServerSalt","nextReqTimeout","cb","performScheduledRequest","msgId","notEmpty","rawError","matches","error_message","match","error_code","code","description","originalError","pushResend","innerMessage","processMessage","applyServerSalt","new_server_salt","bad_msg_id","ackMessage","changedOffset","applyServerTime","badMessage","processMessageAck","first_msg_id","updatesProcessor","answer_msg_id","reqResendMessage","badMsgId","processError","networkerFactory","networkers","stoppedNetworkers","filter","langCode","forceReconnectTimeout","EventListenerBase","reuseResults","_constructor","listenerResults","once","pop","addEventListener","removeEventListener","url","logSuffix","handleOpen","dispatchEvent","handleError","close","handleClose","removeListeners","handleMessage","event","ws","logTypes","connect","WebSocket","binaryType","Counter","initialValue","_counter","_remainingCounter","_remainingCounterIndex","_aes","encrypted","increment","Obfuscation","codec","initPayload","val2","reversedPayload","encIv","decIv","encNew","decNew","obfuscateTag","update","tag","Connection","retryTimeout","intermediate","obfuscation","autoReconnect","onOpen","init","connection","resend","encoded","encodeBody","releasePending","onMessage","decode","readPacket","parseResponse","catch","onClose","needTimeout","lastCloseTime","isNaN","reconnectTimeout","Connecting","bodySent","setAutoReconnect","enable","toEncode","encodePacket","USER_AGENT","IS_SAFARI","vendor","maxTouchPoints","MSStream","socketId","socketsProxied","Map","TEST_SUFFIX","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","connectionType","path","chosenServer","transportType","reuse","client","download","upload","servers","transports","testPublicKeysHex","publisKeysHex","publicKeysParsed","prepared","preparePromise","keyParsed","RSAPublicKey","fingerprintBytes","fingerprints","prepare","fingerprintHex","fill","foundKey","fingerprint","cached","requestArray","requestLength","headerArray","dcConfigurator","chooseServer","baseError","errorCode","auth_key_id","msg_len","auth","nonce","sendPlainRequest","rsaKeysManager","serverNonce","server_nonce","pq","server_public_key_fingerprints","select","pAndQ","sendReqDhParams","newNonce","p_q_inner_data_dc","new_nonce","dc","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","getKeyAesEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","new_nonce_hash","decryptServerDhDataAnswer","encrypted_answer","sendSetClientDhParams","encryptedAnswer","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","dhPrime","dh_prime","gA","g_a","server_time","retry","verifyDhParams","dhPrimeHex","_gABigInt","_dhPrimeBigInt","_twoPow","pow","gBytes","gB","retry_id","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","new_nonce_hash2","new_nonce_hash3","localTry","sendReqPQ","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","lastNotify","addNotifyListener","cancel","readBlobAs","blob","reader","FileReader","target","readBlobAsArrayBuffer","blobConstruct","blobParts","mimeType","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","fromObject","safeAssign","openDatabase","preserve","onclose","createNew","openDbPromise","indexedDB","open","finished","onerror","onsuccess","calledNew","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","stores","store","objectStoreNames","contains","createObjectStore","indexes","createIndex","indexName","keyPath","objectParameters","entryName","getObjectStore","objectStore","put","fileName","save","perf","performance","oncomplete","requests","getAll","apiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","afterMessageTempIds","setBaseDcId","userAuth","dcID","getBaseDcId","user_auth","wasDcId","getNetworker","setOnDrainIfNeeded","storageKeys","storageResult","logoutPromises","invokeApi","ignoreErrors","closeDatabases","handled","maxNetworkers","found","unshift","getKey","ak","ss","authKeyHex","serverSaltHex","authorizer","storeObj","canRelease","removeNetworker","removeTransport","prepareTempMessageId","startTime","interval","setInterval","cachedNetworker","clearInterval","rejectPromise","logOut","noErrorBox","performRequest","after","wrapApiCall","exportResolve","exportReject","dc_id","exportedAuth","newDcId","includes","stopTime","waitTime","min","floodMaxTimeout","blobSupported","fileWriter","write","saveFileCallback","part","truncate","finalize","saveToStorage","dbName","caches","timeoutOperation","Response","headers","size","rejected","res","fakeWriter","getFakeFileWriter","saveFile","deleteAll","apiFileManager","cacheStorage","cachedDownloadPromises","uploadPromises","downloadPulls","downloadActives","webpConvertPromises","refreshReferencePromises","tempId","queueId","uncompressTGS","convertWebp","convertPromise","activeDelta","downloadPull","downloadCheck","downloadLimit","from","canceled","limit","checkCancel","downloadRequest","getDelta","invoke","refreshReference","reference","file_reference","checkedReference","inputFileLocation","isAvailable","process","isWebpSupported","ext","thumb_size","Boolean","photo_id","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","getFileNameByLocation","cachedPromise","fileStorage","getFileStorage","deleteFile","downloadFile","cacheFileWriter","resolved","errorHandler","getFile","getFileWriter","limitPart","getLimitPart","writeFileDeferred","writeFilePromise","processDownloaded","requestWebFilePart","requestFilePart","delayed","superpuper","isFinal","processedResult","Infinity","progress","file","fileSize","isBigFile","doneParts","partSize","totalParts","fileId","_part","resultInputFile","parts","md5_checksum","details","file_id","file_part","file_total_parts","generator","Set","webpSupported","setUpdatesProcessor","taskListeners","webpSupport","socketProxy","socketTask","socketProxied","localStorageProxy","finishTask","online","toggleStorage","originalPayload"],"mappings":"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","file":"mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).pako={})}(this,(function(e){\"use strict\";var t=(e,t,i,n)=>{let a=65535&e|0,r=e>>>16&65535|0,s=0;for(;0!==i;){s=i>2e3?2e3:i,i-=s;do{a=a+t[n++]|0,r=r+a|0}while(--s);a%=65521,r%=65521}return a|r<<16|0};const i=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var n=(e,t,n,a)=>{const r=i,s=a+n;e^=-1;for(let i=a;i>>8^r[255&(e^t[i])];return-1^e};var a=function(e,t){let i,n,a,r,s,o,l,d,f,h,c,u,w,b,k,m,_,g,v,p,y,x,E,R;const A=e.state;i=e.next_in,E=e.input,n=i+(e.avail_in-5),a=e.next_out,R=e.output,r=a-(t-e.avail_out),s=a+(e.avail_out-257),o=A.dmax,l=A.wsize,d=A.whave,f=A.wnext,h=A.window,c=A.hold,u=A.bits,w=A.lencode,b=A.distcode,k=(1<>>24,c>>>=g,u-=g,g=_>>>16&255,0===g)R[a++]=65535&_;else{if(!(16&g)){if(0==(64&g)){_=w[(65535&_)+(c&(1<>>=g,u-=g),u<15&&(c+=E[i++]<>>24,c>>>=g,u-=g,g=_>>>16&255,!(16&g)){if(0==(64&g)){_=b[(65535&_)+(c&(1<o){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(c>>>=g,u-=g,g=a-r,p>g){if(g=p-g,g>d&&A.sane){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(y=0,x=h,0===f){if(y+=l-g,g2;)R[a++]=x[y++],R[a++]=x[y++],R[a++]=x[y++],v-=3;v&&(R[a++]=x[y++],v>1&&(R[a++]=x[y++]))}else{y=a-p;do{R[a++]=R[y++],R[a++]=R[y++],R[a++]=R[y++],v-=3}while(v>2);v&&(R[a++]=R[y++],v>1&&(R[a++]=R[y++]))}break}}break}}while(i>3,i-=v,u-=v<<3,c&=(1<{const u=c.bits;let w,b,k,m,_,g,v=0,p=0,y=0,x=0,E=0,R=0,A=0,Z=0,S=0,O=0,U=null,T=0;const D=new Uint16Array(16),I=new Uint16Array(16);let B,N,C,z=null,F=0;for(v=0;v<=r;v++)D[v]=0;for(p=0;p=1&&0===D[x];x--);if(E>x&&(E=x),0===x)return a[f++]=20971520,a[f++]=20971520,c.bits=1,0;for(y=1;y0&&(0===e||1!==x))return-1;for(I[1]=0,v=1;v852||2===e&&S>592)return 1;for(;;){B=v-A,h[p]g?(N=z[F+h[p]],C=U[T+h[p]]):(N=96,C=0),w=1<>A)+b]=B<<24|N<<16|C|0}while(0!==b);for(w=1<>=1;if(0!==w?(O&=w-1,O+=w):O=0,p++,0==--D[v]){if(v===x)break;v=t[i+h[p]]}if(v>E&&(O&m)!==k){for(0===A&&(A=E),_+=y,R=v-A,Z=1<852||2===e&&S>592)return 1;k=O&m,a[k]=E<<24|R<<16|_-f|0}}return 0!==O&&(a[_+O]=v-A<<24|64<<16|0),c.bits=E,0},h={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:c,Z_BLOCK:u,Z_TREES:w,Z_OK:b,Z_STREAM_END:k,Z_NEED_DICT:m,Z_STREAM_ERROR:_,Z_DATA_ERROR:g,Z_MEM_ERROR:v,Z_BUF_ERROR:p,Z_DEFLATED:y}=h,x=12,E=30,R=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function A(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Z=e=>{if(!e||!e.state)return _;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,b},S=e=>{if(!e||!e.state)return _;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Z(e)},O=(e,t)=>{let i;if(!e||!e.state)return _;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,S(e))},U=(e,t)=>{if(!e)return _;const i=new A;e.state=i,i.window=null;const n=O(e,t);return n!==b&&(e.state=null),n};let T,D,I=!0;const B=e=>{if(I){T=new Int32Array(512),D=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(f(1,e.lens,0,288,T,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;f(2,e.lens,0,32,D,0,e.work,{bits:5}),I=!1}e.lencode=T,e.lenbits=9,e.distcode=D,e.distbits=5},N=(e,t,i,n)=>{let a;const r=e.state;return null===r.window&&(r.wsize=1<=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whaveU(e,15),inflateInit2:U,inflate:(e,i)=>{let r,s,o,l,d,h,A,Z,S,O,U,T,D,I,C,z,F,L,M,H,j,K,P=0;const Y=new Uint8Array(4);let G,X;const W=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return _;r=e.state,r.mode===x&&(r.mode=13),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,O=h,U=A,K=b;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,r.check=n(r.check,Y,2,0),Z=0,S=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&Z)<<8)+(Z>>8))%31){e.msg=\"incorrect header check\",r.mode=E;break}if((15&Z)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(Z>>>=4,S-=4,j=8+(15&Z),0===r.wbits)r.wbits=j;else if(j>r.wbits){e.msg=\"invalid window size\",r.mode=E;break}r.dmax=1<>8&1),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=3;case 3:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,Y[2]=Z>>>16&255,Y[3]=Z>>>24&255,r.check=n(r.check,Y,4,0)),Z=0,S=0,r.mode=4;case 4:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>8),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=5;case 5:if(1024&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(T=r.length,T>h&&(T=h),T&&(r.head&&(j=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(s.subarray(l,l+T),j)),512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,r.length-=T),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.name+=String.fromCharCode(j))}while(j&&T>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=x;break;case 10:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>=7&S,S-=7&S,r.mode=27;break}for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<>>=1,S-=1,3&Z){case 0:r.mode=14;break;case 1:if(B(r),r.mode=20,i===w){Z>>>=2,S-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=E}Z>>>=2,S-=2;break;case 14:for(Z>>>=7&S,S-=7&S;S<32;){if(0===h)break e;h--,Z+=s[l++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=E;break}if(r.length=65535&Z,Z=0,S=0,r.mode=15,i===w)break e;case 15:r.mode=16;case 16:if(T=r.length,T){if(T>h&&(T=h),T>A&&(T=A),0===T)break e;o.set(s.subarray(l,l+T),d),h-=T,l+=T,A-=T,d+=T,r.length-=T;break}r.mode=x;break;case 17:for(;S<14;){if(0===h)break e;h--,Z+=s[l++]<>>=5,S-=5,r.ndist=1+(31&Z),Z>>>=5,S-=5,r.ncode=4+(15&Z),Z>>>=4,S-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=E;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,S-=3}for(;r.have<19;)r.lens[W[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,G={bits:r.lenbits},K=f(0,r.lens,0,19,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid code lengths set\",r.mode=E;break}r.have=0,r.mode=19;case 19:for(;r.have>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=C,S-=C,r.lens[r.have++]=F;else{if(16===F){for(X=C+2;S>>=C,S-=C,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=E;break}j=r.lens[r.have-1],T=3+(3&Z),Z>>>=2,S-=2}else if(17===F){for(X=C+3;S>>=C,S-=C,j=0,T=3+(7&Z),Z>>>=3,S-=3}else{for(X=C+7;S>>=C,S-=C,j=0,T=11+(127&Z),Z>>>=7,S-=7}if(r.have+T>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=E;break}for(;T--;)r.lens[r.have++]=j}}if(r.mode===E)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=E;break}if(r.lenbits=9,G={bits:r.lenbits},K=f(1,r.lens,0,r.nlen,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid literal/lengths set\",r.mode=E;break}if(r.distbits=6,r.distcode=r.distdyn,G={bits:r.distbits},K=f(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,G),r.distbits=G.bits,K){e.msg=\"invalid distances set\",r.mode=E;break}if(r.mode=20,i===w)break e;case 20:r.mode=21;case 21:if(h>=6&&A>=258){e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,a(e,U),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,r.mode===x&&(r.back=-1);break}for(r.back=0;P=r.lencode[Z&(1<>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,r.length=F,0===z){r.mode=26;break}if(32&z){r.back=-1,r.mode=x;break}if(64&z){e.msg=\"invalid literal/length code\",r.mode=E;break}r.extra=15&z,r.mode=22;case 22:if(r.extra){for(X=r.extra;S>>=r.extra,S-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[Z&(1<>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,64&z){e.msg=\"invalid distance code\",r.mode=E;break}r.offset=F,r.extra=15&z,r.mode=24;case 24:if(r.extra){for(X=r.extra;S>>=r.extra,S-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=E;break}r.mode=25;case 25:if(0===A)break e;if(T=U-A,r.offset>T){if(T=r.offset-T,T>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=E;break}T>r.wnext?(T-=r.wnext,D=r.wsize-T):D=r.wnext-T,T>r.length&&(T=r.length),I=r.window}else I=o,D=d-r.offset,T=r.length;T>A&&(T=A),A-=T,r.length-=T;do{o[d++]=I[D++]}while(--T);0===r.length&&(r.mode=21);break;case 26:if(0===A)break e;o[d++]=r.length,A--,r.mode=21;break;case 27:if(r.wrap){for(;S<32;){if(0===h)break e;h--,Z|=s[l++]<{if(!e||!e.state)return _;let t=e.state;return t.window&&(t.window=null),e.state=null,b},inflateGetHeader:(e,t)=>{if(!e||!e.state)return _;const i=e.state;return 0==(2&i.wrap)?_:(i.head=t,t.done=!1,b)},inflateSetDictionary:(e,i)=>{const n=i.length;let a,r,s;return e&&e.state?(a=e.state,0!==a.wrap&&11!==a.mode?_:11===a.mode&&(r=1,r=t(r,i,n,0),r!==a.check)?g:(s=N(e,i,n,n),s?(a.mode=31,v):(a.havedict=1,b))):_},inflateInfo:\"pako inflate (from Nodeca project)\"};const z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var F=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)z(i,t)&&(e[t]=i[t])}}return e},L=e=>{let t=0;for(let i=0,n=e.length;i=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;H[254]=H[254]=1;var j=e=>{let t,i,n,a,r,s=e.length,o=0;for(a=0;a>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},K=(e,t)=>{let i,n;const a=t||e.length,r=new Array(2*a);for(n=0,i=0;i4)r[n++]=65533,i+=s-1;else{for(t&=2===s?31:3===s?15:7;s>1&&i1?r[n++]=65533:t<65536?r[n++]=t:(t-=65536,r[n++]=55296|t>>10&1023,r[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&M)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+H[e[i]]>t?i:t},Y={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var G=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var X=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const W=Object.prototype.toString,{Z_NO_FLUSH:q,Z_FINISH:J,Z_OK:Q,Z_STREAM_END:V,Z_NEED_DICT:$,Z_STREAM_ERROR:ee,Z_DATA_ERROR:te,Z_MEM_ERROR:ie}=h;function ne(e){this.options=F({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new G,this.strm.avail_out=0;let i=C.inflateInit2(this.strm,t.windowBits);if(i!==Q)throw new Error(Y[i]);if(this.header=new X,C.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=j(t.dictionary):\"[object ArrayBuffer]\"===W.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=C.inflateSetDictionary(this.strm,t.dictionary),i!==Q)))throw new Error(Y[i])}function ae(e,t){const i=new ne(t);if(i.push(e),i.err)throw i.msg||Y[i.err];return i.result}ne.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,a=this.options.dictionary;let r,s,o;if(this.ended)return!1;for(s=t===~~t?t:!0===t?J:q,\"[object ArrayBuffer]\"===W.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),r=C.inflate(i,s),r===$&&a&&(r=C.inflateSetDictionary(i,a),r===Q?r=C.inflate(i,s):r===te&&(r=$));i.avail_in>0&&r===V&&i.state.wrap>0&&0!==e[i.next_in];)C.inflateReset(i),r=C.inflate(i,s);switch(r){case ee:case te:case $:case ie:return this.onEnd(r),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(0===i.avail_out||r===V))if(\"string\"===this.options.to){let e=P(i.output,i.next_out),t=i.next_out-e,a=K(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(a)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(r!==Q||0!==o){if(r===V)return r=C.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},ne.prototype.onData=function(e){this.chunks.push(e)},ne.prototype.onEnd=function(e){e===Q&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=L(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var re=ne,se=ae,oe=function(e,t){return(t=t||{}).raw=!0,ae(e,t)},le=ae,de=h,fe={Inflate:re,inflate:se,inflateRaw:oe,ungzip:le,constants:de};e.Inflate=re,e.constants=de,e.default=fe,e.inflate=se,e.inflateRaw=oe,e.ungzip=le,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function bytesToHex(bytes: ArrayLike) {\r\n const arr: string[] = new Array(bytes.length);\r\n for(let i = 0; i < bytes.length; ++i) {\r\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\r\n }\r\n return arr.join('');\r\n}\r\n\r\nexport function bytesFromHex(hexString: string) {\r\n const len = hexString.length;\r\n const bytes = new Uint8Array(Math.ceil(len / 2));\r\n let start = 0;\r\n\r\n if(len % 2) { // read 0x581 as 0x0581\r\n bytes[start++] = parseInt(hexString.charAt(0), 16);\r\n }\r\n\r\n for(let i = start; i < len; i += 2) {\r\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\r\n let mod3: number;\r\n let result = '';\r\n\r\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\r\n mod3 = nIdx % 3;\r\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\r\n if(mod3 === 2 || nLen - nIdx === 1) {\r\n result += String.fromCharCode(\r\n uint6ToBase64(nUint24 >>> 18 & 63),\r\n uint6ToBase64(nUint24 >>> 12 & 63),\r\n uint6ToBase64(nUint24 >>> 6 & 63),\r\n uint6ToBase64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return result.replace(/A(?=A$|$)/g, '=');\r\n}\r\n\r\nexport function uint6ToBase64(nUint6: number) {\r\n return nUint6 < 26\r\n ? nUint6 + 65\r\n : nUint6 < 52\r\n ? nUint6 + 71\r\n : nUint6 < 62\r\n ? nUint6 - 4\r\n : nUint6 === 62\r\n ? 43\r\n : nUint6 === 63\r\n ? 47\r\n : 65;\r\n}\r\n\r\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n if(len !== bytes2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < len; ++i) {\r\n if(bytes1[i] !== bytes2[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\r\n const len = bytes1.length;\r\n const bytes = new Uint8Array(len);\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = bytes1[i] ^ bytes2[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\n/* export function bytesToArrayBuffer(b: number[]) {\r\n return (new Uint8Array(b)).buffer;\r\n}\r\n\r\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\r\n // Be careful with converting subarrays!!\r\n if(bytes instanceof ArrayBuffer) {\r\n return bytes;\r\n }\r\n if(bytes.buffer !== undefined &&\r\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\r\n return bytes.buffer;\r\n }\r\n return bytesToArrayBuffer(bytes);\r\n} */\r\n\r\nexport function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\r\n if(bytes instanceof Uint8Array) {\r\n return bytes;\r\n } else if(typeof(bytes) === 'string') {\r\n return new TextEncoder().encode(bytes);\r\n }\r\n\r\n return new Uint8Array(bytes);\r\n}\r\n\r\n/* export function bytesFromArrayBuffer(buffer: ArrayBuffer) {\r\n const len = buffer.byteLength;\r\n const byteView = new Uint8Array(buffer);\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = byteView[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bufferConcat(buffer1: any, buffer2: any) {\r\n const l1 = buffer1.byteLength || buffer1.length;\r\n const l2 = buffer2.byteLength || buffer2.length;\r\n const tmp = new Uint8Array(l1 + l2);\r\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\r\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\r\n\r\n return tmp.buffer;\r\n} */\r\n\r\nexport function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\r\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\r\n\r\n const tmp = new Uint8Array(length);\r\n \r\n let lastLength = 0;\r\n args.forEach(b => {\r\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\r\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\r\n });\r\n\r\n return tmp/* .buffer */;\r\n}\r\n\r\nexport function bytesFromWordss(input: Uint32Array) {\r\n const o = new Uint8Array(input.byteLength);\r\n for(let i = 0, length = input.length * 4; i < length; ++i) {\r\n o[i] = ((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\r\n }\r\n\r\n return o;\r\n}\r\n\r\nexport function bytesToWordss(input: Parameters[0]) {\r\n const bytes = convertToUint8Array(input);\r\n\r\n const words: number[] = [];\r\n for(let i = 0, len = bytes.length; i < len; ++i) {\r\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\r\n }\r\n\r\n return new Uint32Array(words);\r\n}\r\n\r\n// * https://stackoverflow.com/a/52827031\r\n/* export const isBigEndian = (() => {\r\n const array = new Uint8Array(4);\r\n const view = new Uint32Array(array.buffer);\r\n return !((view[0] = 1) & array[0]);\r\n})(); */\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes';\n\nObject.defineProperty(Uint8Array.prototype, 'hex', {\n get: function(): string {\n return bytesToHex(this);\n },\n \n set: function(str: string) {\n this.set(bytesFromHex(str));\n },\n enumerable: true,\n configurable: true\n});\n\nUint8Array.prototype.randomize = function() {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(this);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n \n return this;\n};\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n //return {type: 'bytes', value: [...this]};\n};\n\nArray.prototype.findAndSplice = function(verify: (value: T, index?: number, array?: Array) => boolean) {\n let index = this.findIndex(verify);\n return index !== -1 ? this.splice(index, 1)[0] : undefined;\n};\n\nString.prototype.toHHMMSS = function(leadZero = false) {\n const sec_num = parseInt(this + '', 10);\n const hours = Math.floor(sec_num / 3600);\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\n \n if(hours) leadZero = true;\n if(minutes < 10) minutes = leadZero ? \"0\" + minutes : minutes;\n if(seconds < 10) seconds = \"0\" + seconds;\n return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds;\n};\n\n/* Promise.prototype.finally = Promise.prototype.finally || {\n finally(fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n }\n}.finally; */\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n hex: string;\n randomize: () => Uint8Array,\n concat: (...args: Array) => Uint8Array,\n //toString: () => string,\n toJSON: () => number[],\n //toJSON: () => {type: 'bytes', value: number[]},\n }\n \n interface Array {\n findAndSplice(verify: (value: T, index?: number, array?: Array) => boolean): T;\n }\n \n interface String {\n toHHMMSS(leadZero?: boolean): string;\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nexport const getWindowClients = () => {\r\n return (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' });\r\n};\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { notifySomeone, isWorker } from '../helpers/context';\r\nimport { WorkerTaskTemplate } from '../types';\r\n//import { stringify } from '../helpers/json';\r\n\r\nclass LocalStorage> {\r\n private prefix = '';\r\n private cache: Partial = {};\r\n private useStorage = true;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\r\n if(Modes.test) {\r\n this.prefix = 't_';\r\n }\r\n }\r\n\r\n public get(key: T, useCache = true): Storage[T] {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.cache[key];\r\n } else if(this.useStorage) {\r\n let value: Storage[T];\r\n try {\r\n value = localStorage.getItem(this.prefix + key as string) as any;\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n\r\n if(value !== null) {\r\n try {\r\n value = JSON.parse(value);\r\n } catch(err) {\r\n //console.error(err);\r\n }\r\n } else {\r\n value = undefined;\r\n }\r\n\r\n return value;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public set(obj: Partial, onlyLocal = false) {\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.cache[key] = value;\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n try {\r\n const stringified = JSON.stringify(value);\r\n localStorage.setItem(this.prefix + key, stringified);\r\n } catch(err) {\r\n this.useStorage = false;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n //if(this.useStorage) {\r\n try {\r\n localStorage.removeItem(this.prefix + key);\r\n } catch(err) {\r\n \r\n }\r\n //}\r\n }\r\n\r\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\r\n // if(this.useStorage) {\r\n try {\r\n let obj: Partial = {};\r\n if(preserveKeys) {\r\n preserveKeys.forEach(key => {\r\n const value = this.get(key);\r\n if(value !== undefined) {\r\n obj[key] = value;\r\n }\r\n });\r\n }\r\n \r\n localStorage.clear();\r\n\r\n if(preserveKeys) {\r\n this.set(obj);\r\n }\r\n } catch(err) {\r\n\r\n }\r\n // }\r\n } */\r\n\r\n public clear() {\r\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id'];\r\n for(let i = 1; i <= 5; ++i) {\r\n keys.push(`dc${i}_server_salt`);\r\n keys.push(`dc${i}_auth_key`);\r\n }\r\n\r\n for(let key of keys) {\r\n this.delete(key, true);\r\n }\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n this.useStorage = enabled;\r\n\r\n if(!enabled) {\r\n this.clear();\r\n } else {\r\n return this.set(this.cache);\r\n }\r\n }\r\n}\r\n\r\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\r\n args: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: any\r\n};\r\n\r\nexport default class LocalStorageController> {\r\n private static STORAGES: LocalStorageController[] = [];\r\n private taskId = 0;\r\n private tasks: {[taskID: number]: (result: any) => void} = {};\r\n //private log = (...args: any[]) => console.log('[SW LS]', ...args);\r\n //private log = (...args: any[]) => {};\r\n\r\n private storage: LocalStorage;\r\n\r\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\r\n LocalStorageController.STORAGES.push(this);\r\n\r\n if(!isWorker) {\r\n this.storage = new LocalStorage(/* preserveKeys */);\r\n }\r\n }\r\n\r\n public finishTask(taskId: number, result: any) {\r\n //this.log('finishTask:', taskID, result, Object.keys(this.tasks));\r\n\r\n if(!this.tasks.hasOwnProperty(taskId)) {\r\n //this.log('no such task:', taskID, result);\r\n return;\r\n }\r\n\r\n this.tasks[taskId](result);\r\n delete this.tasks[taskId];\r\n }\r\n\r\n private proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']) {\r\n return new Promise((resolve, reject) => {\r\n if(isWorker) {\r\n const taskId = this.taskId++;\r\n\r\n this.tasks[taskId] = resolve;\r\n const task: LocalStorageProxyTask = {\r\n type: 'localStorageProxy', \r\n id: taskId,\r\n payload: {\r\n type,\r\n args\r\n }\r\n };\r\n\r\n notifySomeone(task);\r\n } else {\r\n args = Array.prototype.slice.call(args);\r\n\r\n // @ts-ignore\r\n const result: any = this.storage[type].apply(this.storage, args as any);\r\n resolve(result);\r\n }\r\n });\r\n }\r\n\r\n public get(key: T, useCache?: boolean) {\r\n return this.proxy('get', key, useCache);\r\n }\r\n\r\n public set(obj: Partial, onlyLocal?: boolean) {\r\n return this.proxy('set', obj, onlyLocal);\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal?: boolean) {\r\n return this.proxy('delete', key, saveLocal);\r\n }\r\n\r\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\r\n return this.proxy('clear'/* , preserveKeys */);\r\n }\r\n\r\n public toggleStorage(enabled: boolean) {\r\n return this.proxy('toggleStorage', enabled);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport type { DcId } from '../types';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport LocalStorageController from './localStorage';\r\n\r\nconst sessionStorage = new LocalStorageController<{\r\n dc: DcId,\r\n user_auth: UserAuth,\r\n state_id: number,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance,\r\n kz_version: 'K' | 'Z',\r\n tgme_sync: {\r\n canRedirect: boolean,\r\n ts: number\r\n }\r\n}>(/* ['kz_version'] */);\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","'use strict'\n//@flow\n\n/** * * * * * * * * * *\n * Big Integer Library *\n * Created 2000 *\n * Leemon Baird *\n * www.leemon.com *\n * * * * * * * * * * * */\n\n////////////////////////////////////////////////////////////////////////////////////////\n// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.\n// For most functions, if it needs a BigInt as a local variable it will actually use\n// a global, and will only allocate to it only when it's not the right size. This ensures\n// that when a function is called repeatedly with same-sized parameters, it only allocates\n// memory on the first call.\n//\n// Note that for cryptographic purposes, the calls to Math.random() must\n// be replaced with calls to a better pseudorandom number generator.\n//\n// In the following, \"bigInt\" means a bigInt with at least one leading zero element,\n// and \"integer\" means a nonnegative integer less than radix. In some cases, integer\n// can be negative. Negative bigInts are 2s complement.\n//\n// The following functions do not modify their inputs.\n// Those returning a bigInt, string, or Array will dynamically allocate memory for that value.\n// Those returning a boolean will return the integer 0 (false) or 1 (true).\n// Those returning boolean or int will not allocate memory except possibly on the first\n// time they're called with a given parameter size.\n//\n// bigInt add(x,y) //return (x+y) for bigInts x and y.\n// bigInt addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.\n// string bigInt2str(x,base) //return a string form of bigInt x in a given base, with 2 <= base <= 95\n// int bitSize(x) //return how many bits long the bigInt x is, not counting leading zeros\n// bigInt dup(x) //return a copy of bigInt x\n// boolean equals(x,y) //is the bigInt x equal to the bigint y?\n// boolean equalsInt(x,y) //is bigint x equal to integer y?\n// bigInt expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed\n// Array findPrimes(n) //return array of all primes less than integer n\n// bigInt GCD(x,y) //return greatest common divisor of bigInts x and y (each with same number of elements).\n// boolean greater(x,y) //is x>y? (x and y are nonnegative bigInts)\n// boolean greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?\n// bigInt int2bigInt(t,n,m) //return a bigInt equal to integer t, with at least n bits and m array elements\n// bigInt inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null\n// int inverseModInt(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse\n// boolean isZero(x) //is the bigInt x equal to zero?\n// boolean millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is bigInt, 1=1). If s=1, then the most significant of those n bits is set to 1.\n// bigInt randTruePrime(k) //return a new, random, k-bit, true prime bigInt using Maurer's algorithm.\n// bigInt randProbPrime(k) //return a new, random, k-bit, probable prime bigInt (probability it's composite less than 2^-80).\n// bigInt str2bigInt(s,b,n,m) //return a bigInt for number represented in string s in base b with at least n bits and m array elements\n// bigInt sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement\n// bigInt trim(x,k) //return a copy of x with exactly k leading zero elements\n//\n//\n// The following functions each have a non-underscored version, which most users should call instead.\n// These functions each write to a single parameter, and the caller is responsible for ensuring the array\n// passed in is large enough to hold the result.\n//\n// void addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer\n// void add_(x,y) //do x=x+y for bigInts x and y\n// void copy_(x,y) //do x=y on bigInts x and y\n// void copyInt_(x,n) //do x=n on bigInt x and integer n\n// void GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). (This never overflows its array).\n// boolean inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist\n// void mod_(x,n) //do x=x mod n for bigInts x and n. (This never overflows its array).\n// void mult_(x,y) //do x=x*y for bigInts x and y.\n// void multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.\n// void powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.\n// void randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.\n// void randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.\n// void sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.\n//\n// The following functions do NOT have a non-underscored version.\n// They each write a bigInt result to one or more parameters. The caller is responsible for\n// ensuring the arrays passed in are large enough to hold the results.\n//\n// void addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))\n// void carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.\n// void divide_(x,y,q,r) //divide x by y giving quotient q and remainder r\n// int divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder. (This never overflows its array).\n// void eGCD_(x,y,d,a,b) //sets a,b,d to positive bigInts such that d = GCD_(x,y) = a*x-b*y\n// void halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement. (This never overflows its array).\n// void leftShift_(x,n) //left shift bigInt x by n bits. n64 multiplier, but not with JavaScript's 32*32->32)\n// - speeding up mont_(x,y,n,np) when x==y by doing a non-modular, non-Montgomery square\n// followed by a Montgomery reduction. The intermediate answer will be twice as long as x, so that\n// method would be slower. This is unfortunate because the code currently spends almost all of its time\n// doing mont_(x,x,...), both for randTruePrime_() and powMod_(). A faster method for Montgomery squaring\n// would have a large impact on the speed of randTruePrime_() and powMod_(). HAC has a couple of poorly-worded\n// sentences that seem to imply it's faster to do a non-modular square followed by a single\n// Montgomery reduction, but that's obviously wrong.\n////////////////////////////////////////////////////////////////////////////////////////\n\nexport type Bool = 1 | 0\n\n//globals\nexport var bpe = 0 //bits stored per array element\nvar mask = 0 //AND this with an array element to chop it down to bpe bits\nvar radix = mask + 1 //equals 2^bpe. A single 1 bit to the left of the last bit of mask.\n\n//the digits for converting to different bases\nvar digitsStr =\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\\\'\"+-'\n\n//initialize the global variables\n\n//bpe=number of bits in the mantissa on this platform\nfor (bpe = 0; 1 << (bpe + 1) > 1 << bpe; bpe++);\nbpe >>= 1 //bpe=number of bits in one element of the array representing the bigInt\nmask = (1 << bpe) - 1 //AND the mask with an integer to get its bpe least significant bits\nradix = mask + 1 //2^bpe. a single 1 bit to the left of the first bit of mask\nexport var one = int2bigInt(1, 1, 1) //constant used in powMod_()\nexport var zero = int2bigInt(0, 1, 1)\n\n//the following global variables are scratchpad memory to\n//reduce dynamic memory allocation in the inner loop\nvar t: number[] | number = new Array(0)\nvar ss = t //used in mult_()\nvar s0 = t //used in multMod_(), squareMod_()\n// var s1=t; //used in powMod_(), multMod_(), squareMod_()\n// var s2=t; //used in powMod_(), multMod_()\nvar s3 = t //used in powMod_()\nvar s4 = t,\n s5 = t //used in mod_()\nvar s6 = t //used in bigInt2str()\nvar s7 = t //used in powMod_()\nvar T = t //used in GCD_()\nvar sa = t //used in mont_()\nvar mr_x1 = t,\n mr_r = t,\n mr_a = t, //used in millerRabin()\n eg_v = t,\n eg_u = t,\n eg_A = t,\n eg_B = t,\n eg_C = t,\n eg_D = t, //used in eGCD_(), inverseMod_()\n //, md_q1=t, md_q2=t, md_q3=t, md_r=t, md_r1=t, md_r2=t, md_tt=t, //used in mod_()\n\n primes = t,\n pows = t,\n s_i = t,\n s_i2 = t,\n s_R = t,\n s_rm = t,\n s_q = t,\n s_n1 = t,\n s_a = t,\n s_r2 = t,\n s_n = t,\n s_b = t,\n s_d = t,\n s_x1 = t,\n s_x2 = t,\n s_aa = t, //used in randTruePrime_()\n rpprb = t //used in randProbPrimeRounds() (which also uses \"primes\")\n\n////////////////////////////////////////////////////////////////////////////////////////\n\nvar k, buff\n\n/**\n * return array of all primes less than integer n\n *\n * @param {number} n\n * @returns {number[]}\n */\nexport function findPrimes(n: number): number[] {\n var i, s, p, ans\n s = new Array(n)\n for (i = 0; i < n; i++) s[i] = 0\n s[0] = 2\n p = 0 //first p elements of s are primes, the rest are a sieve\n for (; s[p] < n; ) {\n //s[p] is the pth prime\n for (\n i = s[p] * s[p];\n i < n;\n i += s[p] //mark multiples of s[p]\n )\n s[i] = 1\n p++\n s[p] = s[p - 1] + 1\n for (; s[p] < n && s[s[p]]; s[p]++); //find next prime (where s[p]==0)\n }\n ans = new Array(p)\n for (i = 0; i < p; i++) ans[i] = s[i]\n return ans\n}\n\n/**\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\n *\n * x is a bigInt, and b is an integer, with b 0; j--);\n for (z = 0, w = x[j]; w; w >>= 1, z++);\n z += bpe * j\n return z\n}\n\n/**\n * return a copy of x with at least n elements, adding leading zeros if needed\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {number[]}\n */\nexport function expand(x: number[], n: number): number[] {\n var ans = int2bigInt(0, (x.length > n ? x.length : n) * bpe, 0)\n copy_(ans, x)\n return ans\n}\n\n/**\n * return a k-bit true random prime using Maurer's algorithm.\n *\n * @export\n * @param {number} k\n * @returns {number[]}\n */\n/* export function randTruePrime(k: number): number[] {\n var ans = int2bigInt(0, k, 0)\n randTruePrime_(ans, k)\n return trim(ans, 1)\n} */\n\n/**\n * return a k-bit random probable prime with probability of error < 2^-80\n *\n * @export\n * @param {number} k\n * @returns {number[]}\n */\n/* export function randProbPrime(k: number): number[] {\n if (k >= 600) return randProbPrimeRounds(k, 2) //numbers from HAC table 4.3\n if (k >= 550) return randProbPrimeRounds(k, 4)\n if (k >= 500) return randProbPrimeRounds(k, 5)\n if (k >= 400) return randProbPrimeRounds(k, 6)\n if (k >= 350) return randProbPrimeRounds(k, 7)\n if (k >= 300) return randProbPrimeRounds(k, 9)\n if (k >= 250) return randProbPrimeRounds(k, 12) //numbers from HAC table 4.4\n if (k >= 200) return randProbPrimeRounds(k, 15)\n if (k >= 150) return randProbPrimeRounds(k, 18)\n if (k >= 100) return randProbPrimeRounds(k, 27)\n return randProbPrimeRounds(k, 40) //number from HAC remark 4.26 (only an estimate)\n} */\n\n/**\n * return a k-bit probable random prime using n rounds of Miller Rabin\n * (after trial division with small primes)\n *\n * @export\n * @param {number} k\n * @param {number} n\n * @returns {number[]}\n */\n/* export function randProbPrimeRounds(k: number, n: number): number[] {\n var ans, i, divisible, B\n B = 30000 //B is largest prime to use in trial division\n ans = int2bigInt(0, k, 0)\n\n //optimization: try larger and smaller B to find the best limit.\n\n if (primes.length === 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\n\n if (rpprb.length !== ans.length) rpprb = dup(ans)\n\n for (;;) {\n //keep trying random values for ans until one appears to be prime\n //optimization: pick a random number times L=2*3*5*...*p, plus a\n // random element of the list of all numbers in [0,L) not divisible by any prime up to p.\n // This can reduce the amount of random number generation.\n\n randBigInt_(ans, k, 0) //ans = a random odd number to check\n ans[0] |= 1\n divisible = 0\n\n //check ans for divisibility by small primes up to B\n for (i = 0; i < primes.length && primes[i] <= B; i++)\n if (modInt(ans, primes[i]) === 0 && !equalsInt(ans, primes[i])) {\n divisible = 1\n break\n }\n\n //optimization: change millerRabin so the base can be bigger than the number being checked, then eliminate the while here.\n\n //do n rounds of Miller Rabin, with random bases less than ans\n for (i = 0; i < n && !divisible; i++) {\n randBigInt_(rpprb, k, 0)\n while (\n !greater(ans, rpprb) //pick a random rpprb that's < ans\n )\n randBigInt_(rpprb, k, 0)\n if (!millerRabin(ans, rpprb)) divisible = 1\n }\n\n if (!divisible) return ans\n }\n} */\n\n/**\n * return a new bigInt equal to (x mod n) for bigInts x and n.\n *\n * @param {number[]} x\n * @param {number[]} n\n * @returns {number[]}\n */\nexport function mod(x: number[], n: number[]): number[] {\n var ans = dup(x)\n mod_(ans, n)\n return trim(ans, 1)\n}\n\n/**\n * return (x+n) where x is a bigInt and n is an integer.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {number[]}\n */\n/* export function addInt(x: number[], n: number): number[] {\n var ans = expand(x, x.length + 1)\n addInt_(ans, n)\n return trim(ans, 1)\n} */\n\n/**\n * return x*y for bigInts x and y. This is faster when y y.length ? x.length + 1 : y.length + 1)\n sub_(ans, y)\n return trim(ans, 1)\n}\n\n/**\n * return (x+y) for bigInts x and y\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {number[]}\n */\nexport function add(x: number[], y: number[]): number[] {\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\n add_(ans, y)\n return trim(ans, 1)\n}\n\n/**\n * return (x**(-1) mod n) for bigInts x and n.\n *\n * If no inverse exists, it returns null\n *\n * @param {number[]} x\n * @param {number[]} n\n * @returns {(number[] | null)}\n */\n/* export function inverseMod(x: number[], n: number[]): number[] | null {\n var ans = expand(x, n.length)\n var s = inverseMod_(ans, n)\n return s ? trim(ans, 1) : null\n} */\n\n/**\n * return (x*y mod n) for bigInts x,y,n.\n *\n * For greater speed, let y= 2\n\n if (s_i2.length != ans.length) {\n s_i2 = dup(ans)\n s_R = dup(ans)\n s_n1 = dup(ans)\n s_r2 = dup(ans)\n s_d = dup(ans)\n s_x1 = dup(ans) //TODO Seems like a bug in eslint, reports as unused\n s_x2 = dup(ans)\n s_b = dup(ans)\n s_n = dup(ans)\n s_i = dup(ans)\n s_rm = dup(ans)\n s_q = dup(ans)\n s_a = dup(ans)\n s_aa = dup(ans)\n }\n\n if (k <= recLimit) {\n //generate small random primes by trial division up to its square root\n pm = (1 << ((k + 2) >> 1)) - 1 //pm is binary number with all ones, just over sqrt(2^k)\n copyInt_(ans, 0)\n for (dd = 1; dd; ) {\n dd = 0\n ans[0] = 1 | (1 << (k - 1)) | Math.floor(Math.random() * (1 << k)) //random, k-bit, odd integer, with msb 1\n for (j = 1; j < primes.length && (primes[j] & pm) == primes[j]; j++) {\n //trial division by all primes 3...sqrt(2^k)\n if (0 == ans[0] % primes[j]) {\n dd = 1\n break\n }\n }\n }\n carry_(ans)\n return\n }\n\n B = c * k * k //try small primes up to B (or all the primes[] array if the largest is less than B).\n if (k > 2 * m)\n //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\n for (r = 1; k - k * r <= m; ) r = pows[Math.floor(Math.random() * 512)] //r=Math.pow(2,Math.random()-1);\n else r = 0.5\n\n //simulation suggests the more complex algorithm using r=.333 is only slightly faster.\n\n recSize = Math.floor(r * k) + 1\n\n randTruePrime_(s_q, recSize)\n copyInt_(s_i2, 0)\n s_i2[Math.floor((k - 2) / bpe)] |= 1 << ((k - 2) % bpe) //s_i2=2^(k-2)\n divide_(s_i2, s_q, s_i, s_rm) //s_i=floor((2^(k-1))/(2q))\n\n z = bitSize(s_i)\n\n for (;;) {\n for (;;) {\n //generate z-bit numbers until one falls in the range [0,s_i-1]\n randBigInt_(s_R, z, 0)\n if (greater(s_i, s_R)) break\n } //now s_R is in the range [0,s_i-1]\n addInt_(s_R, 1) //now s_R is in the range [1,s_i]\n add_(s_R, s_i) //now s_R is in the range [s_i+1,2*s_i]\n\n copy_(s_n, s_q)\n mult_(s_n, s_R)\n multInt_(s_n, 2)\n addInt_(s_n, 1) //s_n=2*s_R*s_q+1\n\n copy_(s_r2, s_R)\n multInt_(s_r2, 2) //s_r2=2*s_R\n\n //check s_n for divisibility by small primes up to B\n for (divisible = 0, j = 0; j < primes.length && primes[j] < B; j++)\n if (modInt(s_n, primes[j]) == 0 && !equalsInt(s_n, primes[j])) {\n divisible = 1\n break\n }\n\n if (!divisible)\n if (!millerRabinInt(s_n, 2))\n //if it passes small primes check, then try a single Miller-Rabin base 2\n //this line represents 75% of the total runtime for randTruePrime_\n divisible = 1\n\n if (!divisible) {\n //if it passes that test, continue checking s_n\n addInt_(s_n, -3)\n for (j = s_n.length - 1; s_n[j] == 0 && j > 0; j--); //strip leading zeros\n for (zz = 0, w = s_n[j]; w; w >>= 1, zz++);\n zz += bpe * j //zz=number of bits in s_n, ignoring leading zeros\n for (;;) {\n //generate z-bit numbers until one falls in the range [0,s_n-1]\n randBigInt_(s_a, zz, 0)\n if (greater(s_n, s_a)) break\n } //now s_a is in the range [0,s_n-1]\n addInt_(s_n, 3) //now s_a is in the range [0,s_n-4]\n addInt_(s_a, 2) //now s_a is in the range [2,s_n-2]\n copy_(s_b, s_a)\n copy_(s_n1, s_n)\n addInt_(s_n1, -1)\n powMod_(s_b, s_n1, s_n) //s_b=s_a^(s_n-1) modulo s_n\n addInt_(s_b, -1)\n if (isZero(s_b)) {\n copy_(s_b, s_a)\n powMod_(s_b, s_r2, s_n)\n addInt_(s_b, -1)\n copy_(s_aa, s_n)\n copy_(s_d, s_b)\n GCD_(s_d, s_n) //if s_b and s_n are relatively prime, then s_n is a prime\n if (equalsInt(s_d, 1)) {\n copy_(ans, s_aa)\n return //if we've made it this far, then s_n is absolutely guaranteed to be prime\n }\n }\n }\n }\n} */\n\n/**\n * Return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\n *\n * @export\n * @param {number} n\n * @param {number} s\n * @returns {number[]}\n */\n/* export function randBigInt(n: number, s: number): number[] {\n var a, b\n a = Math.floor((n - 1) / bpe) + 2 //# array elements to hold the BigInt with a leading 0 element\n b = int2bigInt(0, 0, a)\n randBigInt_(b, n, s)\n return b\n} */\n\n/**\n * Set b to an n-bit random BigInt. If s=1, then the most significant of those n bits is set to 1.\n *\n * Array b must be big enough to hold the result. Must have n>=1\n *\n * @export\n * @param {number[]} b\n * @param {number} n\n * @param {number} s\n * @return {void}\n */\n/* export function randBigInt_(b: number[], n: number, s: number): void {\n var i, a\n for (i = 0; i < b.length; i++) b[i] = 0\n a = Math.floor((n - 1) / bpe) + 1 //# array elements to hold the BigInt\n for (i = 0; i < a; i++) {\n b[i] = Math.floor(Math.random() * (1 << (bpe - 1)))\n }\n b[a - 1] &= (2 << ((n - 1) % bpe)) - 1\n if (s == 1) b[a - 1] |= 1 << ((n - 1) % bpe)\n} */\n\n/**\n * Return the greatest common divisor of bigInts x and y (each with same number of elements).\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {number[]}\n */\nexport function GCD(x: number[], y: number[]): number[] {\n var xc, yc\n xc = dup(x)\n yc = dup(y)\n GCD_(xc, yc)\n return xc\n}\n\n/**\n * set x to the greatest common divisor of bigInts x and y (each with same number of elements).\n *\n * y is destroyed.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n */\nexport function GCD_(x: number[], y: number[]): void {\n var i: number, xp: number, yp: number, A: number, B, C: number, D: number, q, sing\n var qp\n if (T.length !== x.length) T = dup(x)\n\n sing = 1\n while (sing) {\n //while y has nonzero elements other than y[0]\n sing = 0\n for (\n i = 1;\n i < y.length;\n i++ //check if y has nonzero elements other than 0\n )\n if (y[i]) {\n sing = 1\n break\n }\n if (!sing) break //quit when y all zero elements except possibly y[0]\n\n for (i = x.length; !x[i] && i >= 0; i--); //find most significant element of x\n xp = x[i]\n yp = y[i]\n A = 1\n B = 0\n C = 0\n D = 1\n while (yp + C && yp + D) {\n q = Math.floor((xp + A) / (yp + C))\n qp = Math.floor((xp + B) / (yp + D))\n if (q != qp) break\n t = A - q * C\n A = C\n C = t // do (A,B,xp, C,D,yp) = (C,D,yp, A,B,xp) - q*(0,0,0, C,D,yp)\n t = B - q * D\n B = D\n D = t\n t = xp - q * yp\n xp = yp\n yp = t\n }\n if (B) {\n copy_(T, x)\n linComb_(x, y, A, B) //x=A*x+B*y\n linComb_(y, T, D, C) //y=D*y+C*T\n } else {\n mod_(x, y)\n copy_(T, x)\n copy_(x, y)\n copy_(y, T)\n }\n }\n if (y[0] === 0) return\n t = modInt(x, y[0])\n copyInt_(x, y[0])\n y[0] = t\n while (y[0]) {\n x[0] %= y[0]\n t = x[0]\n x[0] = y[0]\n y[0] = t\n }\n}\n\n/**\n * do x=x**(-1) mod n, for bigInts x and n.\n *\n * If no inverse exists, it sets x to zero and returns 0, else it returns 1.\n * The x array must be at least as large as the n array.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} n\n * @returns {(0 | 1)}\n */\n/* export function inverseMod_(x: number[], n: number[]): Bool {\n var k = 1 + 2 * Math.max(x.length, n.length)\n\n if (!(x[0] & 1) && !(n[0] & 1)) {\n //if both inputs are even, then inverse doesn't exist\n copyInt_(x, 0)\n return 0\n }\n\n if (eg_u.length != k) {\n eg_u = new Array(k)\n eg_v = new Array(k)\n eg_A = new Array(k)\n eg_B = new Array(k)\n eg_C = new Array(k)\n eg_D = new Array(k)\n }\n\n copy_(eg_u, x)\n copy_(eg_v, n)\n copyInt_(eg_A, 1)\n copyInt_(eg_B, 0)\n copyInt_(eg_C, 0)\n copyInt_(eg_D, 1)\n for (;;) {\n while (!(eg_u[0] & 1)) {\n //while eg_u is even\n halve_(eg_u)\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\n //if eg_A==eg_B==0 mod 2\n halve_(eg_A)\n halve_(eg_B)\n } else {\n add_(eg_A, n)\n halve_(eg_A)\n sub_(eg_B, x)\n halve_(eg_B)\n }\n }\n\n while (!(eg_v[0] & 1)) {\n //while eg_v is even\n halve_(eg_v)\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\n //if eg_C==eg_D==0 mod 2\n halve_(eg_C)\n halve_(eg_D)\n } else {\n add_(eg_C, n)\n halve_(eg_C)\n sub_(eg_D, x)\n halve_(eg_D)\n }\n }\n\n if (!greater(eg_v, eg_u)) {\n //eg_v <= eg_u\n sub_(eg_u, eg_v)\n sub_(eg_A, eg_C)\n sub_(eg_B, eg_D)\n } else {\n //eg_v > eg_u\n sub_(eg_v, eg_u)\n sub_(eg_C, eg_A)\n sub_(eg_D, eg_B)\n }\n\n if (equalsInt(eg_u, 0)) {\n while (\n negative(eg_C) //make sure answer is nonnegative\n )\n add_(eg_C, n)\n copy_(x, eg_C)\n\n if (!equalsInt(eg_v, 1)) {\n //if GCD_(x,n)!=1, then there is no inverse\n copyInt_(x, 0)\n return 0\n }\n return 1\n }\n }\n} */\n\n/**\n * return x**(-1) mod n, for integers x and n.\n *\n * Return 0 if there is no inverse\n *\n * @param {number} x\n * @param {number} n\n * @returns {number}\n */\nexport function inverseModInt(x: number, n: number): number {\n var a = 1,\n b = 0,\n t\n for (;;) {\n if (x === 1) return a\n if (x === 0) return 0\n b -= a * Math.floor(n / x)\n //$off\n n %= x\n\n if (n === 1) return b //to avoid negatives, change this b to n-b, and each -= to +=\n if (n === 0) return 0\n a -= b * Math.floor(x / n)\n //$off\n x %= n\n }\n /*::\n declare var never: empty\n return never\n */\n}\n\n//this deprecated function is for backward compatibility only.\n/* function inverseModInt_(x: number, n: number) {\n return inverseModInt(x, n)\n} */\n\n/**\n * Given positive bigInts x and y, change the bigints v, a, and b to positive bigInts such that:\n *\n * v = GCD_(x,y) = a*x-b*y\n *\n * The bigInts v, a, b, must have exactly as many elements as the larger of x and y.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} v\n * @param {number[]} a\n * @param {number[]} b\n * @return {void}\n */\nexport function eGCD_(\n x: number[],\n y: number[],\n v: number[],\n a: number[],\n b: number[],\n): void {\n var g = 0\n var k = Math.max(x.length, y.length)\n if (eg_u.length != k) {\n eg_u = new Array(k)\n eg_A = new Array(k)\n eg_B = new Array(k)\n eg_C = new Array(k)\n eg_D = new Array(k)\n }\n while (!(x[0] & 1) && !(y[0] & 1)) {\n //while x and y both even\n halve_(x)\n halve_(y)\n g++\n }\n copy_(eg_u, x)\n copy_(v, y)\n copyInt_(eg_A, 1)\n copyInt_(eg_B, 0)\n copyInt_(eg_C, 0)\n copyInt_(eg_D, 1)\n for (;;) {\n while (!(eg_u[0] & 1)) {\n //while u is even\n halve_(eg_u)\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\n //if A==B==0 mod 2\n halve_(eg_A)\n halve_(eg_B)\n } else {\n add_(eg_A, y)\n halve_(eg_A)\n sub_(eg_B, x)\n halve_(eg_B)\n }\n }\n\n while (!(v[0] & 1)) {\n //while v is even\n halve_(v)\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\n //if C==D==0 mod 2\n halve_(eg_C)\n halve_(eg_D)\n } else {\n add_(eg_C, y)\n halve_(eg_C)\n sub_(eg_D, x)\n halve_(eg_D)\n }\n }\n\n if (!greater(v, eg_u)) {\n //v<=u\n sub_(eg_u, v)\n sub_(eg_A, eg_C)\n sub_(eg_B, eg_D)\n } else {\n //v>u\n sub_(v, eg_u)\n sub_(eg_C, eg_A)\n sub_(eg_D, eg_B)\n }\n if (equalsInt(eg_u, 0)) {\n while (negative(eg_C)) {\n //make sure a (C) is nonnegative\n add_(eg_C, y)\n sub_(eg_D, x)\n }\n multInt_(eg_D, -1) ///make sure b (D) is nonnegative\n copy_(a, eg_C)\n copy_(b, eg_D)\n leftShift_(v, g)\n return\n }\n }\n}\n\n/**\n * is bigInt x negative?\n *\n * @param {number[]} x\n * @returns {(1 | 0)}\n */\nexport function negative(x: number[]) {\n //TODO Flow Bool type inference\n return (x[x.length - 1] >> (bpe - 1)) & 1\n}\n\n/**\n * is (x << (shift*bpe)) > y?\n *\n * x and y are nonnegative bigInts\n * shift is a nonnegative integer\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} shift\n * @returns {(1 | 0)}\n */\nexport function greaterShift(x: number[], y: number[], shift: number): Bool {\n var i,\n kx = x.length,\n ky = y.length\n k = kx + shift < ky ? kx + shift : ky\n for (i = ky - 1 - shift; i < kx && i >= 0; i++) if (x[i] > 0) return 1 //if there are nonzeros in x to the left of the first column of y, then x is bigger\n for (i = kx - 1 + shift; i < ky; i++) if (y[i] > 0) return 0 //if there are nonzeros in y to the left of the first column of x, then x is not bigger\n for (i = k - 1; i >= shift; i--)\n if (x[i - shift] > y[i]) return 1\n else if (x[i - shift] < y[i]) return 0\n return 0\n}\n\n/**\n * is x > y?\n *\n * x and y both nonnegative\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {(1 | 0)}\n */\nexport function greater(x: number[], y: number[]): Bool {\n var i\n var k = x.length < y.length ? x.length : y.length\n\n for (i = x.length; i < y.length; i++) if (y[i]) return 0 //y has more digits\n\n for (i = y.length; i < x.length; i++) if (x[i]) return 1 //x has more digits\n\n for (i = k - 1; i >= 0; i--)\n if (x[i] > y[i]) return 1\n else if (x[i] < y[i]) return 0\n return 0\n}\n\n/**\n * divide x by y giving quotient q and remainder r.\n *\n * q = floor(x/y)\n * r = x mod y\n *\n * All 4 are bigints.\n *\n * * x must have at least one leading zero element.\n * * y must be nonzero.\n * * q and r must be arrays that are exactly the same length as x. (Or q can have more).\n * * Must have x.length >= y.length >= 2.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} q\n * @param {number[]} r\n * @return {void}\n */\nexport function divide_(\n x: number[],\n y: number[],\n q: number[],\n r: number[],\n): void {\n var kx, ky\n var i, j, y1, y2, c, a, b\n copy_(r, x)\n for (ky = y.length; y[ky - 1] === 0; ky--); //ky is number of elements in y, not including leading zeros\n\n //normalize: ensure the most significant element of y has its highest bit set\n b = y[ky - 1]\n for (a = 0; b; a++) b >>= 1\n a = bpe - a //a is how many bits to shift so that the high order bit of y is leftmost in its array element\n leftShift_(y, a) //multiply both by 1< ky; kx--); //kx is number of elements in normalized x, not including leading zeros\n\n copyInt_(q, 0) // q=0\n while (!greaterShift(y, r, kx - ky)) {\n // while (leftShift_(y,kx-ky) <= r) {\n subShift_(r, y, kx - ky) // r=r-leftShift_(y,kx-ky)\n q[kx - ky]++ // q[kx-ky]++;\n } // }\n\n for (i = kx - 1; i >= ky; i--) {\n if (r[i] == y[ky - 1]) q[i - ky] = mask\n else q[i - ky] = Math.floor((r[i] * radix + r[i - 1]) / y[ky - 1])\n\n //The following for(;;) loop is equivalent to the commented while loop,\n //except that the uncommented version avoids overflow.\n //The commented loop comes from HAC, which assumes r[-1]==y[-1]==0\n // while (q[i-ky]*(y[ky-1]*radix+y[ky-2]) > r[i]*radix*radix+r[i-1]*radix+r[i-2])\n // q[i-ky]--;\n for (;;) {\n y2 = (ky > 1 ? y[ky - 2] : 0) * q[i - ky]\n c = y2 >> bpe\n y2 = y2 & mask\n y1 = c + q[i - ky] * y[ky - 1]\n c = y1 >> bpe\n y1 = y1 & mask\n\n if (\n c == r[i]\n ? y1 == r[i - 1] ? y2 > (i > 1 ? r[i - 2] : 0) : y1 > r[i - 1]\n : c > r[i]\n )\n q[i - ky]--\n else break\n }\n\n linCombShift_(r, y, -q[i - ky], i - ky) //r=r-q[i-ky]*leftShift_(y,i-ky)\n if (negative(r)) {\n addShift_(r, y, i - ky) //r=r+leftShift_(y,i-ky)\n q[i - ky]--\n }\n }\n\n rightShift_(y, a) //undo the normalization step\n rightShift_(r, a) //undo the normalization step\n}\n\n/**\n * do carries and borrows so each element of the bigInt x fits in bpe bits.\n *\n * @param {number[]} x\n */\nexport function carry_(x: number[]): void {\n var i, k, c, b\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i]\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n }\n}\n\n/**\n * return x mod n for bigInt x and integer n.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {number}\n */\nexport function modInt(x: number[], n: number): number {\n var i,\n c = 0\n for (i = x.length - 1; i >= 0; i--) c = (c * radix + x[i]) % n\n return c\n}\n\n/**\n * convert the integer t into a bigInt with at least the given number of bits.\n * the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)\n * Pad the array with leading zeros so that it has at least minSize elements.\n *\n * There will always be at least one leading 0 element.\n *\n * @export\n * @param {number} t\n * @param {number} bits\n * @param {number} minSize\n * @returns {number[]}\n */\nexport function int2bigInt(t: number, bits: number, minSize: number): number[] {\n var i, k\n k = Math.ceil(bits / bpe) + 1\n k = minSize > k ? minSize : k\n var buff = new Array(k)\n copyInt_(buff, t)\n return buff\n}\n\n/**\n * return the bigInt given a string representation in a given base.\n * Pad the array with leading zeros so that it has at least minSize elements.\n * If base=-1, then it reads in a space-separated list of array elements in decimal.\n *\n * The array will always have at least one leading zero, unless base=-1.\n *\n * @export\n * @param {string} s\n * @param {number} base\n * @param {number} [minSize]\n * @returns {number[]}\n */\nexport function str2bigInt(\n s: string,\n base: number,\n minSize?: number,\n): number[] {\n var d, i, x, y, kk\n var k = s.length\n if (base === -1) {\n //comma-separated list of array elements in decimal\n x = new Array(0)\n for (;;) {\n y = new Array(x.length + 1)\n for (i = 0; i < x.length; i++) y[i + 1] = x[i]\n y[0] = parseInt(s, 10) //TODO PERF Should we replace that with ~~ (not not)? https://jsperf.com/number-vs-parseint-vs-plus/7\n x = y\n d = s.indexOf(',', 0)\n if (d < 1) break\n //$off\n s = s.substring(d + 1)\n if (s.length == 0) break\n }\n //$off\n if (x.length < minSize) {\n //$off\n y = new Array(minSize)\n copy_(y, x)\n return y\n }\n return x\n }\n\n x = int2bigInt(0, base * k, 0)\n for (i = 0; i < k; i++) {\n d = digitsStr.indexOf(s.substring(i, i + 1), 0)\n if (base <= 36 && d >= 36)\n //convert lowercase to uppercase if base<=36\n d -= 26\n if (d >= base || d < 0) {\n //stop at first illegal character\n break\n }\n multInt_(x, base)\n addInt_(x, d)\n }\n\n for (k = x.length; k > 0 && !x[k - 1]; k--); //strip off leading zeros\n //$off\n k = minSize > k + 1 ? minSize : k + 1\n //$off\n y = new Array(k)\n //$off\n kk = k < x.length ? k : x.length\n //$off\n for (i = 0; i < kk; i++) y[i] = x[i]\n //$off\n for (; i < k; i++) y[i] = 0\n return y\n}\n\n//return the bigInt given a string representation in a given base.\n//Pad the array with leading zeros so that it has at least minSize elements.\n//If base=-1, then it reads in a space-separated list of array elements in decimal.\n//The array will always have at least one leading zero, unless base=-1.\n// function str2bigInt(s,b,minSize) {\n// var d, i, j, base, str, x, y, kk;\n// if (typeof b === 'string') {\n// base = b.length;\n// str = b;\n// } else {\n// base = b;\n// str = digitsStr;\n// }\n// var k=s.length;\n// if (base==-1) { //comma-separated list of array elements in decimal\n// x=new Array(0);\n// for (;;) {\n// y=new Array(x.length+1);\n// for (i=0;i=36) { //convert lowercase to uppercase if base<=36\n// d-=26;\n// }\n// if (d>=base || d<0) { //ignore illegal characters\n// continue;\n// }\n// multInt_(x,base);\n// addInt_(x,d);\n// }\n\n// for (k=x.length;k>0 && !x[k-1];k--); //strip off leading zeros\n// k=minSize>k+1 ? minSize : k+1;\n// y=new Array(k);\n// kk=k y.length) {\n for (; i < x.length; i++) if (x[i]) return 0\n } else {\n for (; i < y.length; i++) if (y[i]) return 0\n }\n return 1\n}\n\n/**\n * is the bigInt x equal to zero?\n *\n * @export\n * @param {number[]} x\n * @returns {(1 | 0)}\n */\nexport function isZero(x: number[]): Bool {\n var i\n for (i = 0; i < x.length; i++) if (x[i]) return 0\n return 1\n}\n\n/**\n * Convert a bigInt into a string in a given base, from base 2 up to base 95.\n *\n * Base -1 prints the contents of the array representing the number.\n *\n * @export\n * @param {number[]} x\n * @param {number} base\n * @returns {string}\n */\nexport function bigInt2str(x: number[], base: number): string {\n var i,\n t,\n s = ''\n\n if (s6.length !== x.length) s6 = dup(x)\n else copy_(s6, x)\n\n if (base === -1) {\n //return the list of array contents\n for (i = x.length - 1; i > 0; i--) s += x[i] + ','\n s += x[0]\n } else {\n //return it in the given base\n while (!isZero(s6)) {\n t = divInt_(s6, base) //t=s6 % base; s6=floor(s6/base);\n s = digitsStr.substring(t, t + 1) + s\n }\n }\n if (s.length === 0) s = '0'\n return s\n}\n\n/**\n * Convert a bigInt into bytes\n * @param x bigInt\n * @param littleEndian byte order by default\n */\nexport function bigInt2bytes(x: number[], littleEndian = true) {\n if(s6.length !== x.length) s6 = dup(x);\n else copy_(s6, x);\n\n const out: number[] = [];\n\n //console.log('bigInt2bytes');\n while(!isZero(s6)) {\n t = divInt_(s6, 256); //t=s6 % base; s6=floor(s6/base);\n out.push(t);\n //console.log('bigInt2bytes', t);\n }\n\n if(littleEndian) {\n out.reverse();\n }\n\n //console.log('bigInt2bytes', out);\n\n return out;\n}\n\n/**\n * Compare two bigInts and return -1 if x is less, 0 if equals, 1 if greater\n * @param x bigInt\n * @param y bigInt\n */\nexport function cmp(x: number[], y: number[]) {\n return greater(x, y) ? 1 : (equals(x, y) ? 0 : -1);\n}\n\n/* Object.assign(self, {\n cmp,\n str2bigInt,\n int2bigInt,\n bigInt2str,\n one,\n divide_,\n divInt_,\n dup,\n negative\n}); */\n\n/**\n * Returns a duplicate of bigInt x\n *\n * @export\n * @param {number[]} x\n * @returns {number[]}\n */\nexport function dup(x: number[]): number[] {\n var i\n buff = Array(x.length)\n copy_(buff, x)\n return buff\n}\n\n/**\n * do x=y on bigInts x and y.\n *\n * x must be an array at least as big as y (not counting the leading zeros in y).\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @returns {void}\n */\nexport function copy_(x: number[], y: number[]): void {\n var i\n var k = x.length < y.length ? x.length : y.length\n for (i = 0; i < k; i++) x[i] = y[i]\n for (i = k; i < x.length; i++) x[i] = 0\n}\n\n/**\n * do x=y on bigInt x and integer y.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function copyInt_(x: number[], n: number): void {\n var i, c\n var len = x.length //TODO .length in for loop have perfomance costs. Bench this\n for (c = n, i = 0; i < len; i++) {\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+n where x is a bigInt and n is an integer.\n *\n * x must be large enough to hold the result.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function addInt_(x: number[], n: number): void {\n var i, k, c, b\n x[0] += n\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i]\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n if (!c) return //stop carrying as soon as the carry is zero\n }\n}\n\n/**\n * right shift bigInt x by n bits.\n *\n * 0 <= n < bpe.\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n */\nexport function rightShift_(x: number[], n: number): void {\n var i\n var k = Math.floor(n / bpe)\n if (k) {\n for (\n i = 0;\n i < x.length - k;\n i++ //right shift x by k elements\n )\n x[i] = x[i + k]\n for (; i < x.length; i++) x[i] = 0\n //$off\n n %= bpe\n }\n for (i = 0; i < x.length - 1; i++) {\n x[i] = mask & ((x[i + 1] << (bpe - n)) | (x[i] >> n))\n }\n x[i] >>= n\n}\n\n/**\n * do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement\n *\n * @param {number[]} x\n * @returns {void}\n */\nexport function halve_(x: number[]): void {\n var i\n for (i = 0; i < x.length - 1; i++) {\n x[i] = mask & ((x[i + 1] << (bpe - 1)) | (x[i] >> 1))\n }\n x[i] = (x[i] >> 1) | (x[i] & (radix >> 1)) //most significant bit stays the same\n}\n\n/**\n * left shift bigInt x by n bits\n *\n * @export\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function leftShift_(x: number[], n: number): void {\n var i\n var k = Math.floor(n / bpe)\n if (k) {\n for (\n i = x.length;\n i >= k;\n i-- //left shift x by k elements\n )\n x[i] = x[i - k]\n for (; i >= 0; i--) x[i] = 0\n //$off\n n %= bpe\n }\n if (!n) return\n for (i = x.length - 1; i > 0; i--) {\n x[i] = mask & ((x[i] << n) | (x[i - 1] >> (bpe - n)))\n }\n x[i] = mask & (x[i] << n)\n}\n\n/**\n * do x=x*n where x is a bigInt and n is an integer.\n *\n * x must be large enough to hold the result.\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {void}\n */\nexport function multInt_(x: number[], n: number): void {\n var i, k, c, b\n if (!n) return\n k = x.length\n c = 0\n for (i = 0; i < k; i++) {\n c += x[i] * n\n b = 0\n if (c < 0) {\n b = -(c >> bpe)\n c += b * radix\n }\n x[i] = c & mask\n c = (c >> bpe) - b\n }\n}\n\n/**\n * do x=floor(x/n) for bigInt x and integer n, and return the remainder\n *\n * @param {number[]} x\n * @param {number} n\n * @returns {number} remainder\n */\nexport function divInt_(x: number[], n: number): number {\n var i,\n r = 0,\n s\n for (i = x.length - 1; i >= 0; i--) {\n s = r * radix + x[i]\n x[i] = Math.floor(s / n)\n r = s % n\n }\n return r\n}\n\n/**\n * do the linear combination x=a*x+b*y for bigInts x and y, and integers a and b.\n *\n * x must be large enough to hold the answer.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} a\n * @param {number} b\n * @returns {void}\n */\nexport function linComb_(x: number[], y: number[], a: number, b: number): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n kk = x.length\n for (c = 0, i = 0; i < k; i++) {\n c += a * x[i] + b * y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; i < kk; i++) {\n c += a * x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do the linear combination x=a*x+b*(y<<(ys*bpe)) for bigInts x and y, and integers a, b and ys.\n *\n * x must be large enough to hold the answer.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} b\n * @param {number} ys\n * @returns {void}\n */\nexport function linCombShift_(\n x: number[],\n y: number[],\n b: number,\n ys: number,\n): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] + b * y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+(y<<(ys*bpe)) for bigInts x and y, and integer ys.\n *\n * x must be large enough to hold the answer.\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} ys\n * @return {void}\n */\nexport function addShift_(x: number[], y: number[], ys: number): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] + y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x-(y<<(ys*bpe)) for bigInts x and y, and integer ys\n *\n * x must be large enough to hold the answer\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number} ys\n * @return {void}\n */\nexport function subShift_(x: number[], y: number[], ys: number): void {\n var i, c, k, kk\n k = x.length < ys + y.length ? x.length : ys + y.length\n kk = x.length\n for (c = 0, i = ys; i < k; i++) {\n c += x[i] - y[i - ys]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < kk; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x-y for bigInts x and y\n *\n * x must be large enough to hold the answer\n *\n * negative answers will be 2s complement\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @return {void}\n */\nexport function sub_(x: number[], y: number[]): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n for (c = 0, i = 0; i < k; i++) {\n c += x[i] - y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < x.length; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x+y for bigInts x and y\n *\n * x must be large enough to hold the answer\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @return {void}\n */\nexport function add_(x: number[], y: number[]): void {\n var i, c, k, kk\n k = x.length < y.length ? x.length : y.length\n for (c = 0, i = 0; i < k; i++) {\n c += x[i] + y[i]\n x[i] = c & mask\n c >>= bpe\n }\n for (i = k; c && i < x.length; i++) {\n c += x[i]\n x[i] = c & mask\n c >>= bpe\n }\n}\n\n/**\n * do x=x*y for bigInts x and y.\n *\n * This is faster when y 0 && !x[kx - 1]; kx--); //ignore leading zeros in x\n k = kx > n.length ? 2 * kx : 2 * n.length //k=# elements in the product, which is twice the elements in the larger of x and n\n if (s0.length != k) s0 = new Array(k)\n copyInt_(s0, 0)\n for (i = 0; i < kx; i++) {\n c = s0[2 * i] + x[i] * x[i]\n s0[2 * i] = c & mask\n c >>= bpe\n for (j = i + 1; j < kx; j++) {\n c = s0[i + j] + 2 * x[i] * x[j] + c\n s0[i + j] = c & mask\n c >>= bpe\n }\n s0[i + kx] = c\n }\n mod_(s0, n)\n copy_(x, s0)\n}\n\n/**\n * return x with exactly k leading zero elements\n *\n * @export\n * @param {number[]} x\n * @param {number} k\n * @returns {number[]}\n */\nexport function trim(x: number[], k: number): number[] {\n var i, y\n for (i = x.length; i > 0 && !x[i - 1]; i--);\n y = new Array(i + k)\n copy_(y, x)\n return y\n}\n\n/**\n * do `x=x**y mod n`, where x,y,n are bigInts and `**` is exponentiation. `0**0=1`.\n *\n * this is faster when n is odd.\n *\n * x usually needs to have as many elements as n.\n *\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} n\n * @return {void}\n */\nexport function powMod_(x: number[], y: number[], n: number[]): void {\n var k1, k2, kn, np\n if (s7.length != n.length) s7 = dup(n)\n\n //for even modulus, use a simple square-and-multiply algorithm,\n //rather than using the more complex Montgomery algorithm.\n if ((n[0] & 1) == 0) {\n copy_(s7, x)\n copyInt_(x, 1)\n while (!equalsInt(y, 0)) {\n if (y[0] & 1) multMod_(x, s7, n)\n divInt_(y, 2)\n squareMod_(s7, n)\n }\n return\n }\n\n //calculate np from n for the Montgomery multiplications\n copyInt_(s7, 0)\n for (kn = n.length; kn > 0 && !n[kn - 1]; kn--);\n np = radix - inverseModInt(modInt(n, radix), radix)\n s7[kn] = 1\n multMod_(x, s7, n) // x = x * 2**(kn*bp) mod n\n\n if (s3.length != x.length) s3 = dup(x)\n else copy_(s3, x)\n //$off\n // @ts-ignore\n for (k1 = y.length - 1; (k1 > 0) & !y[k1]; k1--); //k1=first nonzero element of y\n if (y[k1] == 0) {\n //anything to the 0th power is 1\n copyInt_(x, 1)\n return\n }\n for (k2 = 1 << (bpe - 1); k2 && !(y[k1] & k2); k2 >>= 1); //k2=position of first 1 bit in y[k1]\n for (;;) {\n if (!(k2 >>= 1)) {\n //look at next bit of y\n k1--\n if (k1 < 0) {\n mont_(x, one, n, np)\n return\n }\n k2 = 1 << (bpe - 1)\n }\n mont_(x, x, n, np)\n\n if (k2 & y[k1])\n //if next bit is a 1\n mont_(x, s3, n, np)\n }\n}\n\n/**\n * do x=x*y*Ri mod n for bigInts x,y,n,\n * where Ri = 2**(-kn*bpe) mod n, and kn is the\n * number of elements in the n array, not\n * counting leading zeros.\n *\n * x array must have at least as many elemnts as the n array\n * It's OK if x and y are the same variable.\n *\n * must have:\n * * x,y < n\n * * n is odd\n * * np = -(n^(-1)) mod radix\n *\n * @export\n * @param {number[]} x\n * @param {number[]} y\n * @param {number[]} n\n * @param {number} np\n * @return {void}\n */\nexport function mont_(x: number[], y: number[], n: number[], np: number): void {\n var i, j, c, ui, t, ks\n var kn = n.length\n var ky = y.length\n\n if (sa.length != kn) sa = new Array(kn)\n\n copyInt_(sa, 0)\n\n for (; kn > 0 && n[kn - 1] == 0; kn--); //ignore leading zeros of n\n for (; ky > 0 && y[ky - 1] == 0; ky--); //ignore leading zeros of y\n ks = sa.length - 1 //sa will never have more than this many nonzero elements.\n\n //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large numbers\n for (i = 0; i < kn; i++) {\n t = sa[0] + x[i] * y[0]\n ui = ((t & mask) * np) & mask //the inner \"& mask\" was needed on Safari (but not MSIE) at one time\n c = (t + ui * n[0]) >> bpe\n t = x[i]\n\n //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe. Loop is unrolled 5-fold for speed\n j = 1\n for (; j < ky - 4; ) {\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < ky; ) {\n c += sa[j] + ui * n[j] + t * y[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < kn - 4; ) {\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < kn; ) {\n c += sa[j] + ui * n[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n for (; j < ks; ) {\n c += sa[j]\n sa[j - 1] = c & mask\n c >>= bpe\n j++\n }\n sa[j - 1] = c & mask\n }\n\n if (!greater(n, sa)) sub_(sa, n)\n copy_(x, sa)\n}","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { bufferConcats } from '../../helpers/bytes';\nimport { add_, bigInt2str, cmp, leftShift_, str2bigInt } from '../../vendor/leemon';\n\n \n \n \n\n \n \n \n \n \n \n \n \n \n\nexport function isObject(object: any) {\n return typeof(object) === 'object' && object !== null;\n}\n\n/* export function bigint(num: number) {\n return new BigInteger(num.toString(16), 16);\n} */\n\n/* export function bigStringInt(strNum: string) {\n return new BigInteger(strNum, 10);\n} */\n\n/* export function base64ToBlob(base64str: string, mimeType: string) {\n var sliceSize = 1024;\n var byteCharacters = atob(base64str);\n var bytesLength = byteCharacters.length;\n var slicesCount = Math.ceil(bytesLength / sliceSize);\n var byteArrays = new Array(slicesCount);\n\n for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n var begin = sliceIndex * sliceSize;\n var end = Math.min(begin + sliceSize, bytesLength);\n\n var bytes = new Array(end - begin);\n for(var offset = begin, i = 0; offset < end; ++i, ++offset) {\n bytes[i] = byteCharacters[offset].charCodeAt(0);\n }\n byteArrays[sliceIndex] = new Uint8Array(bytes);\n }\n\n return blobConstruct(byteArrays, mimeType);\n}\n\nexport function dataUrlToBlob(url: string) {\n // var name = 'b64blob ' + url.length\n // console.time(name)\n var urlParts = url.split(',');\n var base64str = urlParts[1];\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\n var blob = base64ToBlob(base64str, mimeType);\n // console.timeEnd(name)\n return blob;\n} */\n\nexport function intToUint(val: number) {\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\n}\n\n/* export function bytesFromBigInt(bigInt: BigInteger, len?: number) {\n var bytes = bigInt.toByteArray();\n\n if(len && bytes.length < len) {\n var padding = [];\n for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\n padding[i] = 0;\n }\n if(bytes instanceof ArrayBuffer) {\n bytes = bufferConcat(padding, bytes);\n } else {\n bytes = padding.concat(bytes);\n }\n } else {\n while (!bytes[0] && (!len || bytes.length > len)) {\n bytes = bytes.slice(1);\n }\n }\n\n return bytes;\n} */\n\nexport function longFromInts(high: number, low: number): string {\n //let perf = performance.now();\n //let str = bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\n //console.log('longFromInts jsbn', performance.now() - perf);\n high = intToUint(high);\n low = intToUint(low);\n \n //perf = performance.now();\n const bigInt = str2bigInt(high.toString(16), 16, 32);//int2bigInt(high, 64, 64);\n //console.log('longFromInts construct high', bigint(high).toString(10), bigInt2str(bigInt, 10));\n leftShift_(bigInt, 32);\n //console.log('longFromInts shiftLeft', bigint(high).shiftLeft(32).toString(10), bigInt2str(bigInt, 10));\n add_(bigInt, str2bigInt(low.toString(16), 16, 32));\n const _str = bigInt2str(bigInt, 10);\n\n //console.log('longFromInts leemon', performance.now() - perf);\n\n //console.log('longFromInts', high, low, str, _str, str === _str);\n\n return _str;\n}\n\nexport function sortLongsArray(arr: string[]) {\n return arr.map(long => {\n return str2bigInt(long, 10);\n }).sort((a, b) => {\n return cmp(a, b);\n }).map(bigInt => {\n return bigInt2str(bigInt, 10);\n });\n}\n\nexport function addPadding(\n bytes: T, \n blockSize: number = 16, \n zeroes?: boolean, \n blockSizeAsTotalLength = false, \n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n ////console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n padding.randomize();\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type MTProtoConstructor = {\r\n id: number,\r\n predicate: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport type MTProtoMethod = {\r\n id: number,\r\n method: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"API\":{\"constructors\":[{\"id\":-1132882121,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1720552011,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":-994444869,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":1450380236,\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":2134579434,\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":2107670217,\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":396093539,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":-1182234929,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-138301121,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-208488460,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":-181407105,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":-1771768449,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-968723890,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":-1649296275,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":-1160714821,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":-1432995067,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1086091090,\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":8322574,\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-891180321,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1373745011,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1384777335,\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1258941372,\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":537022650,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":-1683826688,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Chat\"},{\"id\":1004149726,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"kicked\",\"type\":\"flags.1?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":120753115,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":-1977734781,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"}],\"type\":\"ChatFull\"},{\"id\":-925415106,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-57668565,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1061556205,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":-1125940270,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":-873313984,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1503425638,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1217033015,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1297179892,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":739712882,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":-855308010,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-543777747,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-1673717362,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1353671392,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"PeerNotifySettings\"},{\"id\":1933519201,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":328899191,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"user\",\"type\":\"User\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"}],\"type\":\"UserFull\"},{\"id\":-116274796,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-805141448,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":-748155807,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector\"},{\"name\":\"popular_invites\",\"type\":\"Vector\"},{\"name\":\"retry_contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548249383,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2033525908,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":469489699,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1489818765,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-1791935732,\"predicate\":\"updateUserPhoto\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"UserProfilePhoto\"},{\"name\":\"previous\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":-84936653,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":290961496,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"int\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":856375399,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1006044124,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1651608194,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":-94974410,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":1248893260,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-364179876,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1851755554,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-1666158377,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":512177195,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-44119819,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1584933265,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-378127636,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-718310409,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-212740181,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-774682074,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-1441998364,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-496024847,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":129960444,\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2011940674,\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-298113238,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1137792208,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":218751099,\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":407582158,\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":320652927,\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-697604407,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-1877932953,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-123988,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1297858060,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-125240806,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1955338397,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":209668535,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1194283041,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":314130811,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1815593308,\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":297109817,\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1662637586,\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":250621158,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":-463889475,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-302170017,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-350980120,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":-981018084,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector\"}],\"type\":\"WebPage\"},{\"id\":-1557277184,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":307276766,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"}],\"type\":\"account.Authorizations\"},{\"id\":408623183,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":1847917725,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":-540871282,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector\"}],\"type\":\"ChatInvite\"},{\"id\":-123931160,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-673242758,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":-1240849242,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSet\"},{\"id\":-1820043071,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1729618630,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"rows\",\"type\":\"Vector\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":2072935910,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-668391402,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-1343524562,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1109531342,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":548253432,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-753232354,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"}],\"type\":\"Chat\"},{\"id\":681420594,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":1418477459,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?int\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?int\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":1682413576,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-352032773,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-1227598250,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":856380452,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1015733815,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1734268085,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":367766557,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":-1557620115,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":1149094475,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-636267638,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-489233354,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-1232070311,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1371385889,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1336546578,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1135492588,\"predicate\":\"updateStickerSets\",\"params\":[],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":772213157,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"gifs\",\"type\":\"Vector\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1803769784,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.BotResults\"},{\"id\":1059076315,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":239663460,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1601666510,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":90744648,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-415938591,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1462213465,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":-459324,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":400266251,\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1995686519,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":-103646630,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":1008755359,\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":863093588,\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-305282981,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":-1419371685,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1122524854,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-75283823,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.TopPeers\"},{\"id\":892193368,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":634833351,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-299124375,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":-40996577,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1230257343,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"},{\"name\":\"unread\",\"type\":\"Vector\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":586395571,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"dates\",\"type\":\"Vector\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1493171408,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1081547008,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":215516896,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector\"}],\"type\":\"Invoice\"},{\"id\":-646342540,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-2074799289,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1080663248,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1928649707,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?PaymentSavedCredentials\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":280319440,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"}],\"type\":\"ShippingOption\"},{\"id\":-523384512,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":1563376297,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-6249322,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":462375633,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":-2014659757,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-1719909046,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-2025673089,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1655957568,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":-859915345,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?int\"},{\"name\":\"promoted_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1352785878,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":995769920,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":-209768682,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1987495099,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1893427255,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1917045962,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1608834311,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"}],\"type\":\"InputSingleMedia\"},{\"id\":-892779534,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1410748418,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":1359533640,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":1648543603,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":-534283678,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector\"},{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"errors\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":-2032041631,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":-1159937629,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":1881892265,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"account.WallPapers\"},{\"id\":-557924733,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"}],\"type\":\"CodeSettings\"},{\"id\":499236004,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":-532532493,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"int\"},{\"name\":\"file_size_max\",\"type\":\"int\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":756118935,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputUser\"},{\"id\":707290417,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputChannel\"},{\"id\":398123750,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":-1667893317,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1569748965,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":1283572154,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-668769361,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":415136107,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1397881200,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":34469328,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":42930452,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?ThemeSettings\"},{\"name\":\"installs_count\",\"type\":\"int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":2137482273,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"themes\",\"type\":\"Vector\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1118798639,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-1676371894,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":938909451,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1567730343,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":909603888,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":244310238,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1949890536,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"},{\"name\":\"exclude_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":-1387279939,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":-1107852396,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":418631927,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":1611985938,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":831924812,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector\"},{\"name\":\"top_admins\",\"type\":\"Vector\"},{\"name\":\"top_inviters\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-1096616924,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":1854571743,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.MessageViews\"},{\"id\":482860628,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?int\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1178116716,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-170029155,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1495959709,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":1093204652,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector\"},{\"name\":\"channel_id\",\"type\":\"flags.0?int\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":1796675352,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2054649973,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1986399595,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1991897370,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":321954198,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1537295973,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":-1441072131,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-206342113,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2146218476,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":133777546,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":507405952,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-539872497,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":1557846647,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1146808775,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":-813823885,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Update\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-2131827673,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1126886015,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":1461180992,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-470837741,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":1754754159,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":813089983,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1430579357,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-902781519,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"UserFull\"},{\"id\":749357634,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1071414113,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1096393392,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-176409329,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1594999949,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-591691168,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":204812012,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":469850889,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":1376532592,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":881978281,\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-637606386,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":913498268,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1013621127,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":998448230,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"messages.ChatFull\"},{\"id\":-599447467,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-900957736,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-106911223,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-986430054,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":164303470,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":630429265,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":1926525996,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":-1980559511,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1319462148,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":1099779595,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"reason\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":71126828,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Stickers\"},{\"id\":479598769,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":347716823,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":639215886,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1877938321,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-787622117,\"method\":\"channels.deleteUserHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-32999408,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":306054633,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":1029681423,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1444503762,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":363051235,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":864953444,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2084618926,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-346119674,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":570955184,\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":527021574,\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1056025023,\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":520357240,\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-39416522,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":1224152952,\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-728224331,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1137057461,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":766298703,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1587647177,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":1706608543,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":218777796,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-341307408,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":-1976353651,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-619695760,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":818134173,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":536919235,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":1302676017,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":-914493408,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":567151374,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":1180140658,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1355375294,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":251759059,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1144759543,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-872345397,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"multi_media\",\"type\":\"Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1028140917,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-956147407,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1200903967,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-419267436,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1880182943,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":-323339813,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-262453244,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?int\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1735311088,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-2127811866,\"method\":\"messages.getStatsURL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"params\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-578472351,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1932455680,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-490575781,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":-2077048289,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":1555261397,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2061776695,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"format\",\"type\":\"flags.1?string\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"}],\"type\":\"Bool\"},{\"id\":-1919060949,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Theme\"},{\"id\":676939512,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.Themes\"},{\"id\":-1313598185,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-241247891,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1707717072,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1608974939,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":615875002,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1445996571,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-265962357,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector\"},{\"name\":\"sources\",\"type\":\"Vector\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-2094760687,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":48562110,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":654013065,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-1070962985,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"}]},\"layer\":131} as {\r\n MTProto: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n API: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n layer: number,\r\n};\r\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1),\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n//import sha1 from '@cryptography/sha1';\n//import sha256 from '@cryptography/sha256';\nimport {IGE} from '@cryptography/aes';\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n\nimport {str2bigInt, bpe, equalsInt, greater, \n copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero,\n divide_, one, bigInt2str, powMod, bigInt2bytes, int2bigInt, mod} from '../../vendor/leemon';//from 'leemon';\n\nimport { addPadding } from '../mtproto/bin_utils';\nimport { bytesToWordss, bytesFromWordss, bytesToHex, bytesFromHex, convertToUint8Array } from '../../helpers/bytes';\nimport { nextRandomUint } from '../../helpers/random';\nimport type { RSAPublicKeyHex } from '../mtproto/rsaKeysManager';\n\nconst subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\n\nexport function longToBytes(sLong: string) {\n /* let perf = performance.now();\n for(let i = 0; i < 1000000; ++i) {\n bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\n }\n console.log('longToBytes JSBN', sLong, performance.now() - perf);\n \n //const bytes = bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\n \n perf = performance.now();\n for(let i = 0; i < 1000000; ++i) {\n bigInt2bytes(str2bigInt(sLong, 10));\n }\n console.log('longToBytes LEEMON', sLong, performance.now() - perf); */\n\n const bigIntBytes = new Uint8Array(bigInt2bytes(str2bigInt(sLong, 10), false));\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\n //console.log('longToBytes', bytes, b);\n \n return bytes;\n}\n\nexport function sha1HashSync(bytes: Parameters[0]) {\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then(b => {\n return new Uint8Array(b);\n });\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\n\n const hashBytes: number[] = [];\n\n let hash = sha1(String.fromCharCode.apply(null, \n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\n for(let i = 0; i < hash.length; ++i) {\n hashBytes.push(hash.charCodeAt(i));\n }\n\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\n\n return new Uint8Array(hashBytes); */\n}\n\nexport function sha256HashSync(bytes: Parameters[0]) {\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then(b => {\n //console.log('legacy', performance.now() - perfS);\n return new Uint8Array(b);\n });\n /* //console.log('SHA-256 hash start');\n\n let perfS = performance.now();\n \n\n let perfD = performance.now();\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\n let hash = sha256(words);\n console.log('darutkin', performance.now() - perfD);\n\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\n\n return bytesFromWordss(hash); */\n}\n\nexport function aesEncryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n //console.log(dT(), 'AES encrypt start', bytes, keyBytes, ivBytes);\n // console.log('aes before padding bytes:', bytesToHex(bytes));\n bytes = addPadding(bytes);\n // console.log('aes after padding bytes:', bytesToHex(bytes));\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const encryptedBytes = cipher.encrypt(bytesToWordss(bytes));\n //console.log(dT(), 'AES encrypt finish');\n\n return bytesFromWordss(encryptedBytes);\n}\n\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n //console.log(dT(), 'AES decrypt start', bytes, keyBytes, ivBytes);\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const decryptedBytes = cipher.decrypt(bytesToWordss(bytes));\n\n //console.log(dT(), 'AES decrypt finish');\n\n return bytesFromWordss(decryptedBytes);\n}\n\nexport function rsaEncrypt(bytes: Uint8Array, publicKey: RSAPublicKeyHex) {\n //console.log(dT(), 'RSA encrypt start', publicKey, bytes);\n\n const N = str2bigInt(publicKey.modulus, 16);\n const E = str2bigInt(publicKey.exponent, 16);\n const X = str2bigInt(bytesToHex(bytes), 16);\n\n const encryptedBigInt = powMod(X, E, N);\n const encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16));\n\n //console.log(dT(), 'RSA encrypt finish');\n\n return encryptedBytes;\n}\n\nexport async function hash_pbkdf2(buffer: Parameters[1], salt: HkdfParams['salt'], iterations: number) {\n const importKey = await subtle.importKey(\n 'raw',\n buffer,\n {name: 'PBKDF2'},\n false,\n [/* 'deriveKey', */'deriveBits']\n );\n \n /* await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n {\n name: 'AES-CTR',\n length: 256\n },\n false,\n ['encrypt', 'decrypt']\n ); */\n\n let bits = subtle.deriveBits({\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'},\n },\n importKey,\n 512\n );\n\n return bits.then(buffer => new Uint8Array(buffer));\n}\n\nexport function pqPrimeFactorization(pqBytes: Uint8Array | number[]) {\n let result: ReturnType;\n\n //console.log('PQ start', pqBytes, bytesToHex(pqBytes));\n\n try {\n //console.time('PQ leemon');\n result = pqPrimeLeemon(str2bigInt(bytesToHex(pqBytes), 16, Math.ceil(64 / bpe) + 1));\n //console.timeEnd('PQ leemon');\n } catch(e) {\n console.error('Pq leemon Exception', e);\n }\n\n //console.log('PQ finish', result);\n\n return result;\n}\n\nexport function pqPrimeLeemon(what: number[]): [Uint8Array, Uint8Array, number] {\n var minBits = 64;\n var minLen = Math.ceil(minBits / bpe) + 1;\n var it = 0;\n var i, q;\n var j, lim;\n var P;\n var Q;\n var a = new Array(minLen);\n var b = new Array(minLen);\n var c = new Array(minLen);\n var g = new Array(minLen);\n var z = new Array(minLen);\n var x = new Array(minLen);\n var y = new Array(minLen);\n\n for(i = 0; i < 3; ++i) {\n q = (nextRandomUint(8) & 15) + 17;\n copy_(x, mod(int2bigInt(nextRandomUint(32), 32, 0), what));\n copy_(y, x);\n lim = 1 << (i + 18);\n\n for (j = 1; j < lim; ++j) {\n ++it;\n copy_(a, x);\n copy_(b, x);\n copyInt_(c, q);\n\n while(!isZero(b)) {\n if(b[0] & 1) {\n add_(c, a);\n if(greater(c, what)) {\n sub_(c, what);\n }\n }\n add_(a, a);\n if(greater(a, what)) {\n sub_(a, what);\n }\n rightShift_(b, 1);\n }\n\n copy_(x, c);\n if(greater(x, y)) {\n copy_(z, x);\n sub_(z, y);\n } else {\n copy_(z, y);\n sub_(z, x);\n }\n eGCD_(z, what, g, a, b);\n if(!equalsInt(g, 1)) {\n break;\n }\n if((j & (j - 1)) === 0) {\n copy_(y, x);\n }\n }\n if(greater(g, one)) {\n break;\n }\n }\n\n divide_(what, g, x, y);\n\n if(greater(g, x)) {\n P = x;\n Q = g;\n } else {\n P = g;\n Q = x;\n }\n\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\n\n return [new Uint8Array(bigInt2bytes(P)), new Uint8Array(bigInt2bytes(Q)), it];\n}\n\nexport function bytesModPow(x: number[] | Uint8Array, y: number[] | Uint8Array, m: number[] | Uint8Array) {\n try {\n const xBigInt = str2bigInt(bytesToHex(x), 16);\n const yBigInt = str2bigInt(bytesToHex(y), 16);\n const mBigInt = str2bigInt(bytesToHex(m), 16);\n const resBigInt = powMod(xBigInt, yBigInt, mBigInt);\n\n return bytesFromHex(bigInt2str(resBigInt, 16));\n } catch(e) {\n console.error('mod pow error', e);\n }\n\n //return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256);\n}\n\n//export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n//export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n //console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n //console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { bytesToHex } from '../../helpers/bytes';\nimport { isObject, longFromInts } from './bin_utils';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { str2bigInt, dup, divide_, bigInt2str } from '../../vendor/leemon';\nimport Schema, { MTProtoConstructor } from './schema';\n\n \n// @ts-ignore\nimport { gzipUncompress } from '../crypto/crypto_utils';\n \n\nconst boolFalse = +Schema.API.constructors.find(c => c.predicate === 'boolFalse').id;\nconst boolTrue = +Schema.API.constructors.find(c => c.predicate === 'boolTrue').id;\nconst vector = +Schema.API.constructors.find(c => c.predicate === 'vector').id;\nconst gzipPacked = +Schema.MTProto.constructors.find(c => c.predicate === 'gzip_packed').id;\n\n//console.log('boolFalse', boolFalse === 0xbc799737);\n\nclass TLSerialization {\n private maxLength = 2048; // 2Kb\n private offset = 0; // in bytes\n private mtproto = false;\n private debug = false;//Modes.debug;\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\n this.maxLength = options.startMaxLength || 2048; // 2Kb\n this.mtproto = options.mtproto || false;\n this.createBuffer();\n }\n\n public createBuffer() {\n this.buffer = new ArrayBuffer(this.maxLength);\n this.intView = new Int32Array(this.buffer);\n this.byteView = new Uint8Array(this.buffer);\n }\n\n public getArray() {\n const resultBuffer = new ArrayBuffer(this.offset);\n\n //let perf = performance.now();\n /* const resultUint8: any = new Uint8Array(resultBuffer);\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\n //console.log('perf uint8', performance.now() - perf);\n\n //perf = performance.now();\n const resultInt32 = new Int32Array(resultBuffer);\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\n //console.log('perf int32', performance.now() - perf);\n\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\n console.error(resultUint8, resultInt32);\n } */\n \n return resultInt32;\n }\n\n public getBuffer() {\n return this.getArray().buffer;\n }\n\n public getBytes(typed: true): Uint8Array;\n public getBytes(typed?: false): number[];\n public getBytes(typed: boolean = true): number[] | Uint8Array {\n if(typed) {\n const resultBuffer = new ArrayBuffer(this.offset);\n const resultArray = new Uint8Array(resultBuffer);\n \n resultArray.set(this.byteView.subarray(0, this.offset));\n \n return resultArray;\n }\n \n const bytes: number[] = new Array(this.offset);\n for(let i = 0; i < this.offset; i++) {\n bytes[i] = this.byteView[i];\n }\n return bytes;\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public checkLength(needBytes: number) {\n if(this.offset + needBytes < this.maxLength) {\n return;\n }\n \n //console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\n const previousBuffer = this.buffer;\n //const previousByteView = this.byteView;\n const previousArray = new Int32Array(previousBuffer);\n \n this.createBuffer();\n \n new Int32Array(this.buffer).set(previousArray);\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32), \n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\n }\n\n public writeInt(i: number, field: string) {\n this.debug && console.log('>>>', i.toString(16), i, field);\n \n const offset = this.offset / 4;\n this.checkLength(4);\n this.intView[offset] = i;\n this.offset += 4;\n\n return offset;\n }\n \n public storeInt(i: number, field?: string) {\n return this.writeInt(i, (field || '') + ':int');\n }\n \n public storeBool(i: boolean, field?: string) {\n if(i) {\n this.writeInt(boolTrue, (field || '') + ':bool');\n } else {\n this.writeInt(boolFalse, (field || '') + ':bool');\n }\n }\n \n public storeLongP(iHigh: number, iLow: number, field?: string) {\n this.writeInt(iLow, (field || '') + ':long[low]');\n this.writeInt(iHigh, (field || '') + ':long[high]');\n }\n\n public storeLong(sLong: Array | string | number, field?: string) {\n if(Array.isArray(sLong)) {\n if(sLong.length === 2) {\n return this.storeLongP(sLong[0], sLong[1], field);\n } else {\n return this.storeIntBytes(sLong, 64, field);\n }\n }\n \n if(typeof sLong !== 'string') {\n sLong = sLong ? sLong.toString() : '0';\n }\n\n const R = 0x100000000;\n //const divRem = bigStringInt(sLong).divideAndRemainder(bigint(R));\n\n const a = str2bigInt(sLong, 10, 64);\n const q = dup(a);\n const r = dup(a);\n divide_(a, str2bigInt((R).toString(16), 16, 64), q, r);\n //divInt_(a, R);\n\n const high = +bigInt2str(q, 10);\n let low = +bigInt2str(r, 10);\n\n if(high < low) {\n low -= R; \n }\n\n //console.log('storeLong', sLong, divRem[0].intValue(), divRem[1].intValue(), high, low);\n \n //this.writeInt(divRem[1].intValue(), (field || '') + ':long[low]');\n //this.writeInt(divRem[0].intValue(), (field || '') + ':long[high]');\n this.writeInt(low, (field || '') + ':long[low]');\n this.writeInt(high, (field || '') + ':long[high]');\n }\n \n public storeDouble(f: any, field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n \n doubleView[0] = f;\n \n this.writeInt(intView[0], (field || '') + ':double[low]');\n this.writeInt(intView[1], (field || '') + ':double[high]');\n }\n \n public storeString(s: string, field?: string) {\n this.debug && console.log('>>>', s, (field || '') + ':string');\n \n if(s === undefined) {\n s = '';\n }\n const sUTF8 = unescape(encodeURIComponent(s));\n \n this.checkLength(sUTF8.length + 8);\n \n const len = sUTF8.length;\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n for(let i = 0; i < len; i++) {\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\n }\n \n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n \n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n } else if(bytes === undefined) {\n bytes = [];\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\n \n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\n const len = (bytes as Uint8Array).length;\n this.checkLength(len + 8);\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n \n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n \n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n \n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = (bytes as Uint8Array).length;\n if((bits % 32) || (len * 8) !== bits) {\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\n console.error(error, bytes, field);\n throw error;\n }\n \n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\n this.checkLength(len);\n \n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n }\n \n public storeRawBytes(bytes: ArrayLike, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = bytes.length;\n \n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\n this.checkLength(len);\n \n this.byteView.set(bytes, this.offset);\n this.offset += len;\n }\n \n public storeMethod(methodName: string, params: any) {\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const methodData = schema.methods.find(m => m.method === methodName);\n\n if(!methodData) {\n throw new Error('No method ' + methodName + ' found');\n }\n \n this.storeInt(methodData.id, methodName + '[id]');\n\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\n const flagsOffsets: {[paramName: string]: number} = {};\n //console.log('storeMethod', len, methodData);\n for(const param of methodData.params) {\n let type = param.type;\n\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\n //console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\n params[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n \n //console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\n type = condType[1];\n }\n \n //console.log('storeMethod', methodName, param.name, params[param.name], type);\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\n\n if(type === '#') {\n params[param.name] = params[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(let paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = params[paramName];\n }\n\n return methodData.type;\n }\n \n public storeObject(obj: any, type: string, field?: string) {\n //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\n switch(type) {\n case '#':\n obj = obj || 0;\n case 'int':\n return this.storeInt(obj, field);\n case 'long':\n return this.storeLong(obj, field);\n case 'int128':\n return this.storeIntBytes(obj, 128, field);\n case 'int256':\n return this.storeIntBytes(obj, 256, field);\n case 'int512':\n return this.storeIntBytes(obj, 512, field);\n case 'string':\n return this.storeString(obj, field);\n case 'bytes':\n return this.storeBytes(obj, field);\n case 'double':\n return this.storeDouble(obj, field);\n case 'Bool':\n return this.storeBool(obj, field);\n case 'true':\n return\n }\n \n if(Array.isArray(obj)) {\n if(type.substr(0, 6) === 'Vector') {\n this.writeInt(vector, field + '[id]');\n } else if (type.substr(0, 6) !== 'vector') {\n throw new Error('Invalid vector type ' + type);\n }\n\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n this.writeInt(obj.length, field + '[count]');\n for(let i = 0; i < obj.length; i++) {\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\n }\n\n return true;\n } else if (type.substr(0, 6).toLowerCase() === 'vector') {\n throw new Error('Invalid vector object');\n }\n \n if(!isObject(obj)) {\n throw new Error('Invalid object for type ' + type);\n }\n \n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const predicate = obj['_'];\n let isBare = false;\n const constructorData: MTProtoConstructor = schema.constructors.find(c => c.predicate === predicate);\n \n if(isBare = (type.charAt(0) === '%')) {\n type = type.substr(1);\n }\n\n if(!constructorData) {\n throw new Error('No predicate ' + predicate + ' found');\n }\n \n if(predicate === type) {\n isBare = true;\n }\n \n if(!isBare) {\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\n }\n\n const pFlags = obj.pFlags;\n const flagsOffsets: {[paramName: string]: number} = {};\n //console.log('storeObject', len, constructorData);\n for(const param of constructorData.params) {\n let type = param.type;\n\n //console.log('storeObject', param, type);\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n //console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\n\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\n //console.log('storeObject autocompleting', param.name, obj[param.name], type);\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n type = condType[1];\n }\n //console.log('storeObject', param, type);\n \n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\n\n if(type === '#') {\n obj[param.name] = obj[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(let paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = obj[paramName];\n }\n \n return constructorData.type;\n }\n}\n\nclass TLDeserialization {\n private offset = 0; // in bytes\n private override: {[key: string]: (result: any, field: string) => void};\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n // this.debug = \n private mtproto: boolean = false;\n private debug: boolean;\n\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\n //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\n if(buffer instanceof ArrayBuffer) {\n this.buffer = buffer;\n this.intView = new Int32Array(buffer);\n this.byteView = new Uint8Array(this.buffer);\n } else {\n this.buffer = buffer.buffer;\n this.intView = new Int32Array(buffer.buffer);\n this.byteView = buffer;\n }\n\n //console.log(this.intView);\n\n this.override = 'override' in options ? options.override : {};\n this.mtproto = 'mtproto' in options ? options.mtproto : false;\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\n }\n\n private readInt(field: string) {\n //if(this.offset >= this.intView.length * 4) {\n if((this.byteView.length - this.offset) < 4) {\n console.error(this.byteView, this.offset);\n throw new Error('Nothing to fetch: ' + field);\n }\n \n const i = this.intView[this.offset / 4];\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\n \n this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ \n && console.log('<<<', i.toString(16), i, field, \n this.byteView.slice(this.offset - 16, this.offset + 16), \n this.byteView.slice(this.offset - 16, this.offset + 16).hex);\n \n this.offset += 4;\n \n return i;\n }\n \n public fetchInt(field?: string) {\n return this.readInt((field || '') + ':int');\n }\n \n public fetchDouble(field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n \n intView[0] = this.readInt((field || '') + ':double[low]'),\n intView[1] = this.readInt((field || '') + ':double[high]');\n \n return doubleView[0];\n }\n \n public fetchLong(field?: string): string {\n const iLow = this.readInt((field || '') + ':long[low]');\n const iHigh = this.readInt((field || '') + ':long[high]');\n \n //const longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString();\n const longDec = longFromInts(iHigh, iLow);\n \n return longDec;\n }\n \n public fetchBool(field?: string): boolean {\n const i = this.readInt((field || '') + ':bool');\n if(i === boolTrue) {\n return true;\n } else if(i === boolFalse) {\n return false;\n }\n\n this.offset -= 4;\n return this.fetchObject('Object', field);\n }\n \n public fetchString(field?: string): string {\n let len = this.byteView[this.offset++];\n \n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n \n let sUTF8 = '';\n for(let i = 0; i < len; i++) {\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\n }\n \n // Padding\n while(this.offset % 4) {\n this.offset++;\n }\n \n let s: string;\n try {\n s = decodeURIComponent(escape(sUTF8));\n } catch (e) {\n s = sUTF8;\n }\n \n this.debug && console.log('<<<', s, (field || '') + ':string');\n \n return s;\n }\n \n public fetchBytes(field?: string) {\n let len = this.byteView[this.offset++];\n \n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n \n const bytes = this.byteView.subarray(this.offset, this.offset + len);\n this.offset += len;\n \n // Padding\n while(this.offset % 4) {\n this.offset++;\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\n \n return bytes;\n }\n \n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\n if(bits % 32) {\n throw new Error('Invalid bits: ' + bits);\n }\n \n const len = bits / 8;\n if(typed) {\n const result = this.byteView.subarray(this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n \n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; i++) {\n bytes[i] = this.byteView[this.offset++];\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\n \n return bytes;\n }\n \n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\n if(len === false) {\n len = this.readInt((field || '') + '_length');\n if(len > this.byteView.byteLength) {\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\n }\n }\n \n if(typed) {\n const bytes = new Uint8Array(len);\n bytes.set(this.byteView.subarray(this.offset, this.offset + len));\n this.offset += len;\n return bytes;\n }\n \n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; i++) {\n bytes[i] = this.byteView[this.offset++];\n }\n \n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\n \n return bytes;\n }\n\n private fetchVector(type: string, field?: string) {\n const len = this.readInt(field + '[count]');\n const result: any[] = new Array(len);\n if(len > 0) {\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n for(let i = 0; i < len; ++i) {\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\n }\n }\n \n return result;\n }\n \n public fetchObject(type: string, field?: string): any {\n switch(type) {\n case '#':\n case 'int':\n return this.fetchInt(field);\n case 'long':\n return this.fetchLong(field);\n case 'int128':\n return this.fetchIntBytes(128, true, field);\n case 'int256':\n return this.fetchIntBytes(256, true, field);\n case 'int512':\n return this.fetchIntBytes(512, true, field);\n case 'string':\n return this.fetchString(field);\n case 'bytes':\n return this.fetchBytes(field);\n case 'double':\n return this.fetchDouble(field);\n case 'Bool':\n return this.fetchBool(field);\n case 'true':\n return true;\n }\n \n field = field || type || 'Object';\n \n if(type.charAt(0) === 'v' && type.substr(1, 5) === 'ector') {\n return this.fetchVector(type, field);\n }\n \n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n let constructorData: MTProtoConstructor = null;\n let fallback = false;\n \n if(type.charAt(0) === '%') {\n const checkType = type.substr(1);\n constructorData = schema.constructors.find(c => c.type === checkType);\n if(!constructorData) {\n throw new Error('Constructor not found for type: ' + type);\n }\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\n constructorData = schema.constructors.find(c => c.predicate === type);\n if(!constructorData) {\n throw new Error('Constructor not found for predicate: ' + type);\n }\n } */ else {\n const constructorCmp = this.readInt(field + '[id]');\n \n if(constructorCmp === gzipPacked) { // Gzip packed\n const compressed = this.fetchBytes(field + '[packed_string]');\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\n const newDeserializer = new TLDeserialization(uncompressed);\n \n return newDeserializer.fetchObject(type, field);\n }\n\n if(constructorCmp === vector) {\n return this.fetchVector(type, field);\n }\n \n let index = schema.constructorsIndex;\n if(!index) {\n schema.constructorsIndex = index = {};\n for(let i = 0, len = schema.constructors.length; i < len; i++) {\n index[schema.constructors[i].id] = i;\n }\n }\n\n const i = index[constructorCmp];\n if(i !== undefined) {\n constructorData = schema.constructors[i];\n }\n \n if(!constructorData && this.mtproto) {\n const schemaFallback = Schema.API;\n for(let i = 0, len = schemaFallback.constructors.length; i < len; i++) {\n if(+schemaFallback.constructors[i].id === constructorCmp) {\n constructorData = schemaFallback.constructors[i];\n \n delete this.mtproto;\n fallback = true;\n break;\n }\n }\n }\n\n if(!constructorData) {\n console.error('Constructor not found:', constructorCmp);\n \n let int1: number, int2: number;\n try {\n int1 = this.fetchInt(field);\n int2 = this.fetchInt(field);\n } catch(err) {\n\n }\n\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\n }\n }\n \n const predicate = constructorData.predicate;\n \n const result: any = {'_': predicate};\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\n if(this.override[overrideKey]) {\n this.override[overrideKey](result, field + '[' + predicate + ']');\n } else {\n for(let i = 0, len = constructorData.params.length; i < len; i++) {\n const param = constructorData.params[i];\n let type = param.type;\n\n if(type === '#' && result.pFlags === undefined) {\n result.pFlags = {};\n }\n\n const isCond = (type.indexOf('?') !== -1);\n if(isCond) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\n //console.log('fetchObject bad', constructorData, result[fieldBit[0]], fieldBit);\n continue;\n }\n\n //console.log('fetchObject good', constructorData, result[fieldBit[0]], fieldBit);\n\n type = condType[1];\n }\n \n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\n \n if(isCond && type === 'true') {\n result.pFlags[param.name] = value;\n } else {\n /* if(param.name === 'read_outbox_max_id') {\n console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']');\n } */\n \n result[param.name] = value;\n }\n }\n }\n \n if(fallback) {\n this.mtproto = true;\n }\n \n return result;\n }\n \n public getOffset() {\n return this.offset;\n }\n\n public setOffset(offset: number) {\n this.offset = offset;\n }\n \n /* public fetchEnd() {\n if(this.offset !== this.byteView.length) {\n throw new Error('Fetch end with non-empty buffer');\n }\n\n return true;\n } */\n}\n\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\nexport { TLDeserialization, TLSerialization };\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from \"../config/debug\";\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst _logTimer = Date.now();\nfunction dT() {\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\n}\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false) {\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n function Log(...args: any[]) {\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\n }\n \n Log.warn = function(...args: any[]) {\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\n };\n \n Log.info = function(...args: any[]) {\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\n };\n \n Log.error = function(...args: any[]) {\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\n };\n \n Log.trace = function(...args: any[]) {\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\n };\n\n /* Log.debug = function(...args: any[]) {\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\n }; */\n\n Log.debug = function(...args: any[]) {\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\n };\n\n Log.setPrefix = function(_prefix: string) {\n prefix = '[' + _prefix + ']:';\n };\n\n Log.setPrefix(prefix);\n\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n \n return Log;\n};\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\nimport {str2bigInt, isZero,\r\n bigInt2str, powMod, int2bigInt, mult, mod, sub, bitSize, negative, add, greater} from '../../vendor/leemon';\r\n\r\nimport {logger, LogTypes} from '../logger';\r\nimport { AccountPassword, InputCheckPasswordSRP, PasswordKdfAlgo } from \"../../layer\";\r\nimport { bufferConcats, bytesToHex, bytesFromHex, bytesXor, convertToUint8Array } from \"../../helpers/bytes\";\r\nimport { addPadding } from \"../mtproto/bin_utils\";\r\n//import { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nconst log = logger('SRP', LogTypes.Error);\r\n\r\n//MOUNT_CLASS_TO && Object.assign(MOUNT_CLASS_TO, {str2bigInt, bigInt2str, int2bigInt});\r\n\r\nexport async function makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) {\r\n // ! look into crypto_methods.test.ts\r\n let buffer = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(client_salt, new TextEncoder().encode(password), client_salt));\r\n //log('encoded 1', bytesToHex(new Uint8Array(buffer)));\r\n\r\n buffer = bufferConcats(server_salt, buffer, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', buffer);\r\n //log('encoded 2', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n let hash = await CryptoWorker.invokeCrypto('pbkdf2', new Uint8Array(buffer), client_salt, 100000);\r\n //log('encoded 3', hash, bytesToHex(new Uint8Array(hash)));\r\n\r\n hash = bufferConcats(server_salt, hash, server_salt);\r\n\r\n buffer = await CryptoWorker.invokeCrypto('sha256-hash', hash);\r\n //log('got password hash:', buffer, bytesToHex(new Uint8Array(buffer)));\r\n\r\n return buffer;\r\n}\r\n\r\nexport async function computeSRP(password: string, state: AccountPassword, isNew: boolean) {\r\n const algo = (isNew ? state.new_algo : state.current_algo) as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\r\n //console.log('computeSRP:', password, state, isNew, algo);\r\n\r\n const p = str2bigInt(bytesToHex(algo.p), 16);\r\n const B = str2bigInt(bytesToHex(state.srp_B), 16);\r\n const g = int2bigInt(algo.g, 32, 256);\r\n\r\n //log('p', bigInt2str(p, 16));\r\n //log('B', bigInt2str(B, 16));\r\n\r\n /* if(B.compareTo(BigInteger.ZERO) < 0) {\r\n console.error('srp_B < 0')\r\n }\r\n\r\n if(B.compareTo(p) <= 0) {\r\n console.error('srp_B <= p');\r\n } */\r\n\r\n /* let check_prime_and_good = (bytes: any, g: number) => {\r\n let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\r\n \r\n if(bytesToHex(bytes) === good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\r\n return true;\r\n }\r\n\r\n // TO-DO check_prime_and_good_check\r\n }; */\r\n\r\n //check_prime_and_good(algo.p, g);\r\n\r\n const pw_hash = await makePasswordHash(password, algo.salt1, algo.salt2);\r\n const x = str2bigInt(bytesToHex(pw_hash), 16);\r\n\r\n //log('computed pw_hash:', pw_hash, x, bytesToHex(new Uint8Array(pw_hash)));\r\n\r\n const padArray = function(arr: number[] | Uint8Array, len: number) {\r\n if(!(arr instanceof Uint8Array)) {\r\n arr = convertToUint8Array(arr);\r\n }\r\n\r\n return addPadding(arr, len, true, true, true);\r\n };\r\n\r\n const pForHash = padArray(bytesFromHex(bigInt2str(p, 16)), 256);\r\n const gForHash = padArray(bytesFromHex(bigInt2str(g, 16)), 256); // like uint8array\r\n const b_for_hash = padArray(bytesFromHex(bigInt2str(B, 16)), 256);\r\n\r\n /* log(bytesToHex(pForHash));\r\n log(bytesToHex(gForHash));\r\n log(bytesToHex(b_for_hash)); */\r\n\r\n const v = powMod(g, x, p);\r\n\r\n const flipper = (arr: Uint8Array | number[]) => {\r\n const out = new Uint8Array(arr.length);\r\n for(let i = 0; i < arr.length; i += 4) {\r\n out[i] = arr[i + 3];\r\n out[i + 1] = arr[i + 2];\r\n out[i + 2] = arr[i + 1];\r\n out[i + 3] = arr[i];\r\n }\r\n \r\n return out;\r\n };\r\n\r\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password\r\n if(isNew) {\r\n const bytes = bytesFromHex(bigInt2str(v, 16));\r\n return padArray(/* (isBigEndian ? bytes.reverse() : bytes) */bytes, 256);\r\n }\r\n\r\n //log('g_x', bigInt2str(g_x, 16));\r\n\r\n const kHash = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(pForHash, gForHash));\r\n const k = str2bigInt(bytesToHex(kHash), 16);\r\n\r\n //log('k', bigInt2str(k, 16));\r\n\r\n // kg_x = (k * g_x) % p\r\n const k_v = mod(mult(k, v), p);\r\n\r\n // good\r\n\r\n //log('kg_x', bigInt2str(kg_x, 16));\r\n\r\n const is_good_mod_exp_first = (modexp: any, prime: any) => {\r\n const diff = sub(prime, modexp);\r\n const min_diff_bits_count = 2048 - 64;\r\n const max_mod_exp_size = 256;\r\n if(negative(diff) ||\r\n bitSize(diff) < min_diff_bits_count || \r\n bitSize(modexp) < min_diff_bits_count || \r\n Math.floor((bitSize(modexp) + 7) / 8) > max_mod_exp_size)\r\n return false;\r\n return true;\r\n };\r\n\r\n const generate_and_check_random = async() => {\r\n while(true) {\r\n const a = str2bigInt(bytesToHex(flipper(state.secure_random)), 16);\r\n //const a = str2bigInt('9153faef8f2bb6da91f6e5bc96bc00860a530a572a0f45aac0842b4602d711f8bda8d59fb53705e4ae3e31a3c4f0681955425f224297b8e9efd898fec22046debb7ba8a0bcf2be1ada7b100424ea318fdcef6ccfe6d7ab7d978c0eb76a807d4ab200eb767a22de0d828bc53f42c5a35c2df6e6ceeef9a3487aae8e9ef2271f2f6742e83b8211161fb1a0e037491ab2c2c73ad63c8bd1d739de1b523fe8d461270cedcf240de8da75f31be4933576532955041dc5770c18d3e75d0b357df9da4a5c8726d4fced87d15752400883dc57fa1937ac17608c5446c4774dcd123676d683ce3a1ab9f7e020ca52faafc99969822717c8e07ea383d5fb1a007ba0d170cb', 16);\r\n\r\n //console.log('ITERATION');\r\n\r\n //log('g a p', bigInt2str(g, 16), bigInt2str(a, 16), bigInt2str(p, 16));\r\n\r\n const A = powMod(g, a, p);\r\n //log('A MODPOW', bigInt2str(A, 16));\r\n if(is_good_mod_exp_first(A, p)) {\r\n const a_for_hash = bytesFromHex(bigInt2str(A, 16));\r\n\r\n const s = await CryptoWorker.invokeCrypto('sha256-hash', bufferConcats(a_for_hash, b_for_hash));\r\n const u = str2bigInt(s.hex, 16);\r\n if(!isZero(u) && !negative(u))\r\n return {a, a_for_hash, u};\r\n } \r\n }\r\n }\r\n \r\n\r\n const {a, a_for_hash, u} = await generate_and_check_random();\r\n\r\n /* log('a', bigInt2str(a, 16));\r\n log('a_for_hash', bytesToHex(a_for_hash));\r\n log('u', bigInt2str(u, 16)); */\r\n\r\n // g_b = (B - kg_x) % p\r\n /* log('B - kg_x', bigInt2str(sub(B, kg_x), 16));\r\n log('subtract', bigInt2str(B, 16), bigInt2str(kg_x, 16));\r\n log('B - kg_x', bigInt2str(sub(B, kg_x), 16)); */\r\n\r\n let g_b: number[];\r\n if(!greater(B, k_v)) {\r\n //log('negative');\r\n g_b = add(B, p);\r\n } else g_b = B;\r\n g_b = mod(sub(g_b, k_v), p);\r\n /* let g_b = sub(B, kg_x);\r\n if(negative(g_b)) g_b = add(g_b, p); */\r\n \r\n //log('g_b', bigInt2str(g_b, 16));\r\n\r\n /* if(!is_good_mod_exp_first(g_b, p))\r\n throw new Error('bad g_b'); */\r\n\r\n const ux = mult(u, x);\r\n //log('u and x multiply', bigInt2str(u, 16), bigInt2str(x, 16), bigInt2str(ux, 16));\r\n const a_ux = add(a, ux);\r\n const S = powMod(g_b, a_ux, p);\r\n\r\n const K = await CryptoWorker.invokeCrypto('sha256-hash', padArray(bytesFromHex(bigInt2str(S, 16)), 256));\r\n\r\n //log('K', bytesToHex(K), new Uint32Array(new Uint8Array(K).buffer));\r\n\r\n let h1 = await CryptoWorker.invokeCrypto('sha256-hash', pForHash);\r\n const h2 = await CryptoWorker.invokeCrypto('sha256-hash', gForHash);\r\n h1 = bytesXor(h1, h2);\r\n\r\n const buff = bufferConcats(h1, \r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt1),\r\n await CryptoWorker.invokeCrypto('sha256-hash', algo.salt2),\r\n a_for_hash,\r\n b_for_hash,\r\n K\r\n );\r\n\r\n const M1 = await CryptoWorker.invokeCrypto('sha256-hash', buff);\r\n\r\n const out = {\r\n _: 'inputCheckPasswordSRP', \r\n srp_id: state.srp_id, \r\n A: new Uint8Array(a_for_hash), \r\n M1\r\n } as InputCheckPasswordSRP.inputCheckPasswordSRP;\r\n\r\n\r\n //log('out', bytesToHex(out.A), bytesToHex(out.M1));\r\n return out;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n// import { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport CryptoWorkerMethods, { CryptoMethods } from './crypto_methods';\r\n\r\n \r\nimport { aesDecryptSync, aesEncryptSync, bytesModPow, gzipUncompress, hash_pbkdf2, pqPrimeFactorization, rsaEncrypt, sha1HashSync, sha256HashSync } from './crypto_utils';\r\nimport { computeSRP } from './srp';\r\n \r\n\r\ntype Task = {\r\n taskId: number,\r\n task: string,\r\n args: any[]\r\n};\r\n\r\nclass CryptoWorker extends CryptoWorkerMethods {\r\n private webWorker: Worker | boolean = false;\r\n private taskId = 0;\r\n private awaiting: {\r\n [id: number]: {\r\n resolve: any,\r\n reject: any,\r\n taskName: string\r\n }\r\n } = {} as any;\r\n private pending: Array = [];\r\n private debug = false;\r\n\r\n private utils: CryptoMethods;\r\n\r\n constructor() {\r\n super();\r\n console.log('CW constructor');\r\n\r\n \r\n this.utils = {\r\n 'sha1-hash': sha1HashSync,\r\n 'sha256-hash': sha256HashSync,\r\n 'pbkdf2': hash_pbkdf2,\r\n 'aes-encrypt': aesEncryptSync,\r\n 'aes-decrypt': aesDecryptSync,\r\n 'rsa-encrypt': rsaEncrypt,\r\n 'factorize': pqPrimeFactorization,\r\n 'mod-pow': bytesModPow,\r\n 'gzipUncompress': gzipUncompress,\r\n 'computeSRP': computeSRP\r\n };\r\n\r\n // Promise.all([\r\n // import('./crypto_utils').then(utils => {\r\n // Object.assign(this.utils, {\r\n // 'sha1-hash': utils.sha1HashSync,\r\n // 'sha256-hash': utils.sha256HashSync,\r\n // 'pbkdf2': utils.hash_pbkdf2,\r\n // 'aes-encrypt': utils.aesEncryptSync,\r\n // 'aes-decrypt': utils.aesDecryptSync,\r\n // 'rsa-encrypt': utils.rsaEncrypt,\r\n // 'factorize': utils.pqPrimeFactorization,\r\n // 'mod-pow': utils.bytesModPow,\r\n // 'gzipUncompress': utils.gzipUncompress,\r\n // });\r\n // }),\r\n\r\n // import('./srp').then(srp => {\r\n // this.utils.computeSRP = srp.computeSRP;\r\n // })/* ,\r\n\r\n // import('../bin_utils').then(utils => {\r\n // this.utils.unzip = utils.gzipUncompress;\r\n // }) */\r\n // ]);\r\n\r\n return;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public performTaskWorker(task: string, ...args: any[]) {\r\n this.debug && console.log('CW start', task, args);\r\n\r\n \r\n // @ts-ignore\r\n return Promise.resolve(this.utils[task](...args));\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n}\r\n\r\nconst cryptoWorker = new CryptoWorker();\r\n// MOUNT_CLASS_TO.CryptoWorker = cryptoWorker;\r\nexport default cryptoWorker;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Awaited } from \"../../types\";\r\nimport type { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow, hash_pbkdf2, rsaEncrypt, pqPrimeFactorization, gzipUncompress } from \"./crypto_utils\";\r\nimport type { computeSRP } from \"./srp\";\r\n\r\nexport type CryptoMethods = {\r\n 'sha1-hash': typeof sha1HashSync,\r\n 'sha256-hash': typeof sha256HashSync,\r\n 'pbkdf2': typeof hash_pbkdf2,\r\n 'aes-encrypt': typeof aesEncryptSync,\r\n 'aes-decrypt': typeof aesDecryptSync,\r\n 'rsa-encrypt': typeof rsaEncrypt,\r\n 'factorize': typeof pqPrimeFactorization,\r\n 'mod-pow': typeof bytesModPow,\r\n 'gzipUncompress': typeof gzipUncompress,\r\n 'computeSRP': typeof computeSRP\r\n};\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker(task: string, ...args: any[]): Promise;\r\n\r\n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\r\n return this.performTaskWorker>>(method, ...args as any[]);\r\n }\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport sessionStorage from '../sessionStorage';\nimport { longFromInts } from './bin_utils';\nimport { nextRandomUint } from '../../helpers/random';\nimport { MOUNT_CLASS_TO } from '../../config/debug';\nimport { WorkerTaskVoidTemplate } from '../../types';\nimport { notifySomeone } from '../../helpers/context';\n\n/*\nlet lol: any = {};\nfor(var i = 0; i < 100; i++) {\n timeManager.generateId();\n}\n*/\n\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\n type: 'applyServerTimeOffset',\n payload: TimeManager['timeOffset']\n};\n\nexport class TimeManager {\n private lastMessageId: [number, number] = [0, 0];\n private timeOffset: number = 0;\n\n constructor() {\n sessionStorage.get('server_time_offset').then((to) => {\n if(to) {\n this.timeOffset = to;\n }\n });\n }\n\n public generateId(): string {\n const timeTicks = Date.now(),\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\n timeMSec = timeTicks % 1000,\n random = nextRandomUint(16);\n\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if(this.lastMessageId[0] > messageId[0] ||\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\n }\n\n this.lastMessageId = messageId;\n\n const ret = longFromInts(messageId[0], messageId[1]);\n\n // if(lol[ret]) {\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\n // }\n // lol[ret] = true;\n\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\n\n return ret\n }\n\n public applyServerTime(serverTime: number, localTime?: number) {\n localTime = (localTime || Date.now()) / 1000 | 0;\n const newTimeOffset = serverTime - localTime;\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n sessionStorage.set({\n server_time_offset: newTimeOffset\n });\n\n this.lastMessageId = [0, 0];\n this.timeOffset = newTimeOffset;\n \n //console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\n\n \n const task: ApplyServerTimeOffsetTask = {\n type: 'applyServerTimeOffset',\n payload: newTimeOffset\n };\n notifySomeone(task);\n \n\n return changed;\n }\n}\n\nconst timeManager = new TimeManager();\nMOUNT_CLASS_TO.timeManager = timeManager;\nexport default timeManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type { DcId } from \"../types\";\n\nexport const MAIN_DOMAIN = 'web.telegram.org';\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n langPackVersion: '0.3.3',\n langPack: 'macos',\n langPackCode: 'en',\n domains: [MAIN_DOMAIN] as string[],\n baseDcId: 2 as DcId,\n isMainDomain: location.hostname === MAIN_DOMAIN,\n suffix: 'K'\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport enum ConnectionStatus {\r\n Connected,\r\n Connecting,\r\n Closed,\r\n TimedOut\r\n};\r\n\r\nexport type ConnectionStatusChange = {\r\n _: 'networkerStatus', \r\n status: ConnectionStatus,\r\n dcId: number,\r\n name: string,\r\n isFileNetworker: boolean,\r\n isFileDownload: boolean,\r\n isFileUpload: boolean,\r\n retryAt?: number\r\n};\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {isObject, sortLongsArray} from './bin_utils';\nimport {TLDeserialization, TLSerialization} from './tl_utils';\nimport CryptoWorker from '../crypto/cryptoworker';\nimport sessionStorage from '../sessionStorage';\nimport Schema from './schema';\nimport timeManager from './timeManager';\nimport networkerFactory from './networkerFactory';\nimport { logger, LogTypes } from '../logger';\nimport { InvokeApiOptions } from '../../types';\nimport { longToBytes } from '../crypto/crypto_utils';\nimport MTTransport from './transports/transport';\nimport { convertToUint8Array, bytesCmp, bytesToHex, bufferConcats } from '../../helpers/bytes';\nimport { nextRandomUint, randomLong } from '../../helpers/random';\nimport App from '../../config/app';\nimport DEBUG from '../../config/debug';\nimport Modes from '../../config/modes';\n\n \n \n \n\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport { bigInt2str, rightShift_, str2bigInt } from '../../vendor/leemon';\nimport { forEachReverse } from '../../helpers/array';\nimport { ConnectionStatus } from './connectionStatus';\n\n//console.error('networker included!', new Error().stack);\n\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\n noResponse: true, // http_wait\n longPoll: true,\n \n notContentRelated: true, // ACK\n noSchedule: true,\n messageId: string,\n}>;\n\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\n msg_id: string,\n seq_no: number,\n body?: Uint8Array | number[],\n isAPI?: boolean,\n // only these four are important\n\n acked?: boolean,\n\n deferred?: {\n resolve: any,\n reject: any\n },\n\n container?: boolean,\n inner?: string[],\n\n // below - options\n\n notContentRelated?: true,\n noSchedule?: true,\n\n resultType?: string,\n\n longPoll?: true,\n noResponse?: true, // only with http (http_wait for longPoll)\n};\n\nconst CONNECTION_TIMEOUT = 5000;\nconst DRAIN_TIMEOUT = 10000;\nlet invokeAfterMsgConstructor: number;\n\nexport default class MTPNetworker {\n private authKeyUint8: Uint8Array;\n\n public isFileNetworker: boolean;\n private isFileUpload: boolean;\n private isFileDownload: boolean;\n\n private lastServerMessages: Array = [];\n\n private sentMessages: {\n [msgId: string]: MTMessage\n } = {};\n\n private pendingMessages: {[msgId: string]: number} = {};\n private pendingAcks: Array = [];\n private pendingResends: Array = [];\n public connectionInited = false;\n\n private nextReqTimeout: number;\n private nextReq: number = 0;\n \n \n \n \n \n \n \n \n \n\n private seqNo: number = 0;\n private prevSessionId: Uint8Array;\n private sessionId: Uint8Array;\n private serverSalt: Uint8Array;\n\n private lastResendReq: {\n req_msg_id: string,\n resend_msg_ids: Array\n } | null = null;\n\n private name: string;\n private log: ReturnType;\n \n public isOnline = false;\n public status: ConnectionStatus = ConnectionStatus.Closed;\n private lastResponseTime = 0;\n\n private debug = DEBUG /* && false */ || Modes.debug;\n\n public activeRequests = 0;\n\n public onDrain: () => void;\n private onDrainTimeout: number;\n\n //private disconnectDelay: number;\n //private pingPromise: CancellablePromise;\n //public onConnectionStatusChange: (online: boolean) => void;\n\n //private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\n\n constructor(public dcId: number, private authKey: Uint8Array, private authKeyId: Uint8Array,\n serverSalt: Uint8Array, public transport: MTTransport, options: InvokeApiOptions = {}) {\n this.authKeyUint8 = convertToUint8Array(this.authKey);\n this.serverSalt = convertToUint8Array(serverSalt);\n\n this.isFileUpload = !!options.fileUpload;\n this.isFileDownload = !!options.fileDownload;\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\n\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\n this.name = 'NET-' + dcId + suffix;\n //this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\n this.log = logger(this.name, LogTypes.Log | /* LogTypes.Debug | */LogTypes.Error | LogTypes.Warn);\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\n\n // Test resend after bad_server_salt\n /* if(this.dcId === 2 && this.upload) {\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\n this.serverSalt[0] = 0;\n } */\n\n this.updateSession();\n\n // if(!NetworkerFactory.offlineInited) {\n // NetworkerFactory.offlineInited = true;\n // /* rootScope.offline = true\n // rootScope.offlineConnecting = true */\n // }\n\n \n \n \n \n \n \n \n \n \n \n \n \n //} else {\n (this.transport as TcpObfuscated).networker = this;\n //}\n \n\n // * handle outcoming dead socket, server will close the connection\n // if((this.transport as TcpObfuscated).networker) {\n // this.disconnectDelay = /* (this.transport as TcpObfuscated).retryTimeout */75;\n // //setInterval(this.sendPingDelayDisconnect, (this.disconnectDelay - 5) * 1000);\n // this.sendPingDelayDisconnect();\n // }\n\n if((this.transport as TcpObfuscated).connected) {\n this.setConnectionStatus(ConnectionStatus.Connected);\n }\n }\n\n private updateSession() {\n this.seqNo = 0;\n this.prevSessionId = this.sessionId;\n this.sessionId = new Uint8Array(8).randomize();\n }\n\n /* private clearContainers() {\n for(const messageId in this.sentMessages) {\n const message = this.sentMessages[messageId];\n if(message.container) {\n delete this.sentMessages[messageId];\n }\n }\n } */\n\n private updateSentMessage(sentMessageId: string) {\n const sentMessage = this.sentMessages[sentMessageId];\n if(!sentMessage) {\n return false;\n }\n\n if(sentMessage.container) {\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\n if(!innerSentMessage) {\n sentMessage.inner.splice(idx, 1);\n } else {\n sentMessage.inner[idx] = innerSentMessage.msg_id;\n }\n });\n }\n \n sentMessage.msg_id = timeManager.generateId();\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\n\n /* if(DEBUG) {\n this.log('updateSentMessage', sentMessage.msg_id, sentMessageId);\n } */\n\n this.sentMessages[sentMessage.msg_id] = sentMessage;\n delete this.sentMessages[sentMessageId];\n \n return sentMessage;\n }\n\n private generateSeqNo(notContentRelated?: boolean) {\n let seqNo = this.seqNo * 2;\n \n if(!notContentRelated) {\n seqNo++;\n this.seqNo++;\n }\n \n return seqNo;\n }\n\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n \n serializer.storeMethod(method, params);\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n \n if(Modes.debug) {\n this.log('MT call', method, params, messageId, seqNo);\n }\n \n return this.pushMessage(message, options);\n }\n \n public wrapMtpMessage(object: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeObject(object, 'Object');\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo(options.notContentRelated);\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n \n if(Modes.debug) {\n this.log('MT message', object, messageId, seqNo);\n }\n \n return this.pushMessage(message, options);\n }\n\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\n const serializer = new TLSerialization(options);\n \n if(!this.connectionInited) { // this will call once for each new session\n ///////this.log('Wrap api call !this.connectionInited');\n\n const invokeWithLayer = Schema.API.methods.find(m => m.method === 'invokeWithLayer');\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\n\n // @ts-ignore\n serializer.storeInt(Schema.layer, 'layer');\n \n const initConnection = Schema.API.methods.find(m => m.method === 'initConnection');\n if(!initConnection) throw new Error('no initConnection!');\n \n serializer.storeInt(+initConnection.id, 'initConnection');\n serializer.storeInt(0x0, 'flags');\n serializer.storeInt(App.id, 'api_id');\n serializer.storeString(networkerFactory.userAgent || 'Unknown UserAgent', 'device_model');\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\n serializer.storeString(App.langPack, 'lang_pack');\n serializer.storeString(networkerFactory.language, 'lang_code');\n //serializer.storeInt(0x0, 'proxy');\n /* serializer.storeMethod('initConnection', {\n 'flags': 0,\n 'api_id': App.id,\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\n 'system_version': navigator.platform || 'Unknown Platform',\n 'app_version': App.version,\n 'system_lang_code': navigator.language || 'en',\n 'lang_pack': '',\n 'lang_code': navigator.language || 'en'\n }); */\n }\n \n if(options.afterMessageId) {\n if(invokeAfterMsgConstructor === undefined) {\n const m = Schema.API.methods.find(m => m.method === 'invokeAfterMsg');\n invokeAfterMsgConstructor = m ? +m.id : 0;\n }\n \n if(invokeAfterMsgConstructor) {\n // if(this.debug) {\n // this.log('invokeApi: store invokeAfterMsg');\n // }\n \n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\n serializer.storeLong(options.afterMessageId, 'msg_id');\n } else {\n this.log.error('no invokeAfterMsg!');\n }\n }\n \n options.resultType = serializer.storeMethod(method, params);\n\n /* if(method === 'account.updateNotifySettings') {\n this.log('api call body:', serializer.getBytes(true));\n } */\n \n const messageId = timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n isAPI: true\n };\n \n if(Modes.debug/* || true */) {\n this.log('Api call', method, message, params, options);\n } else if(this.debug) {\n this.log('Api call', method, params, options);\n }\n \n return this.pushMessage(message, options);\n }\n\n public destroy() {\n //assumeType(this.transport);\n (this.transport as TcpObfuscated).destroy();\n }\n\n public forceReconnectTimeout() {\n if((this.transport as TcpObfuscated).reconnect) {\n (this.transport as TcpObfuscated).reconnect();\n }\n }\n\n public forceReconnect() {\n if((this.transport as TcpObfuscated).forceReconnect) {\n (this.transport as TcpObfuscated).forceReconnect();\n }\n }\n\n // private sendPingDelayDisconnect = () => {\n // if(this.pingPromise || true) return;\n\n // if(!this.isOnline) {\n // if((this.transport as TcpObfuscated).connected) {\n // (this.transport as TcpObfuscated).handleClose();\n // }\n\n // return;\n // }\n\n // this.log('sendPingDelayDisconnect', this.sentPingTimes);\n\n // /* if(this.tt) clearTimeout(this.tt);\n // this.tt = self.setTimeout(() => { \n // (this.transport as any).ws.close(1000);\n // this.tt = 0;\n // }, this.disconnectDelay * 1000); */\n // /* this.wrapMtpCall('ping_delay_disconnect', {\n // ping_id: randomLong(),\n // disconnect_delay: this.disconnectDelay\n // }, {\n // noResponse: true,\n // notContentRelated: true\n // }); */\n // const deferred = this.pingPromise = deferredPromise();\n\n // const timeoutTime = this.disconnectDelay * 1000;\n\n // /* if(!this.sentPingTimes || true) {\n // ++this.sentPingTimes; */\n // const startTime = Date.now();\n // this.wrapMtpCall('ping', {\n // ping_id: randomLong()\n // }, {}).then(pong => {\n // const elapsedTime = Date.now() - startTime;\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\n\n // if(elapsedTime > timeoutTime) {\n // deferred.reject();\n // } else {\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\n // }\n // }, deferred.reject).finally(() => {\n // clearTimeout(rejectTimeout);\n // //--this.sentPingTimes;\n // });\n // //}\n\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\n\n // deferred.catch(() => {\n // (this.transport as Socket).handleClose();\n // });\n\n // deferred.finally(() => {\n // this.pingPromise = null;\n // this.sendPingDelayDisconnect();\n // });\n // };\n\n // private sendPingDelayDisconnect = () => {\n // if(this.pingPromise || true) return;\n\n // /* if(!this.isOnline) {\n // if((this.transport as TcpObfuscated).connected) {\n // (this.transport as TcpObfuscated).connection.close();\n // }\n\n // return;\n // } */\n\n // const deferred = this.pingPromise = deferredPromise();\n\n // const timeoutTime = this.disconnectDelay * 1000;\n\n // const startTime = Date.now();\n // this.wrapMtpCall('ping_delay_disconnect', {\n // ping_id: randomLong(),\n // disconnect_delay: this.disconnectDelay\n // }, {}).then(pong => {\n // const elapsedTime = Date.now() - startTime;\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\n\n // if(elapsedTime > timeoutTime) {\n // deferred.reject();\n // } else {\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\n // }\n // }, deferred.reject).finally(() => {\n // clearTimeout(rejectTimeout);\n // //--this.sentPingTimes;\n // });\n\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\n\n // deferred.catch(() => {\n // this.log.error('sendPingDelayDisconnect: catch, closing connection if exists');\n // (this.transport as TcpObfuscated).connection.close();\n // });\n\n // deferred.finally(() => {\n // this.pingPromise = null;\n // this.sendPingDelayDisconnect();\n // });\n // };\n\n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n // тут можно сделать таймаут и выводить дисконнект\n private pushMessage(message: {\n msg_id: string,\n seq_no: number,\n body: Uint8Array | number[],\n isAPI?: boolean\n }, options: MTMessageOptions) {\n const promise = new Promise((resolve, reject) => {\n this.sentMessages[message.msg_id] = Object.assign(message, options, options.notContentRelated \n ? undefined \n : {\n deferred: {resolve, reject}\n }\n );\n\n //this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\n\n this.pendingMessages[message.msg_id] = 0;\n \n if(!options.noSchedule) {\n this.scheduleRequest();\n }\n\n if(isObject(options)) {\n options.messageId = message.msg_id;\n }\n });\n\n if(!options.notContentRelated && !options.noResponse) {\n const timeout = setTimeout(() => {\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < CONNECTION_TIMEOUT) {\n return;\n }\n\n this.log.error('timeout', message);\n if(this.isOnline) {\n this.setConnectionStatus(ConnectionStatus.TimedOut);\n }\n\n /* this.getEncryptedOutput(message).then(bytes => {\n this.log.error('timeout encrypted', bytes);\n }); */\n }, CONNECTION_TIMEOUT);\n \n promise.finally(() => {\n clearTimeout(timeout);\n this.setConnectionStatus(ConnectionStatus.Connected);\n\n --this.activeRequests;\n this.setDrainTimeout();\n });\n \n ++this.activeRequests;\n if(this.onDrainTimeout !== undefined) {\n clearTimeout(this.onDrainTimeout);\n this.onDrainTimeout = undefined;\n }\n }\n\n return promise;\n }\n\n public setDrainTimeout() {\n if(!this.activeRequests && this.onDrain && this.onDrainTimeout === undefined) {\n this.onDrainTimeout = self.setTimeout(() => {\n this.onDrainTimeout = undefined;\n this.log('drain');\n this.onDrain();\n }, DRAIN_TIMEOUT);\n }\n }\n\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number) {\n const isOnline = status === ConnectionStatus.Connected;\n const willChange = this.status !== status;\n this.isOnline = isOnline;\n this.status = status;\n\n if(willChange) {\n if(networkerFactory.onConnectionStatusChange) {\n networkerFactory.onConnectionStatusChange({\n _: 'networkerStatus',\n status,\n dcId: this.dcId,\n name: this.name,\n isFileNetworker: this.isFileNetworker,\n isFileDownload: this.isFileDownload,\n isFileUpload: this.isFileUpload,\n retryAt\n });\n }\n\n if(this.isOnline) {\n this.scheduleRequest();\n }\n\n // if((this.transport as TcpObfuscated).networker) {\n // this.sendPingDelayDisconnect();\n // }\n /* this.sentPingTimes = 0;\n this.sendPingDelayDisconnect(); */\n }\n /* if(this.onConnectionStatusChange) {\n this.onConnectionStatusChange(this.isOnline);\n } */\n }\n\n private pushResend(messageId: string, delay = 100) {\n const value = delay ? Date.now() + delay : 0;\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage.container) {\n for(const innerMsgId of sentMessage.inner) {\n this.pendingMessages[innerMsgId] = value;\n }\n } else {\n this.pendingMessages[messageId] = value;\n }\n\n if(sentMessage.acked) {\n this.log.error('pushResend: acked message?', sentMessage);\n }\n \n if(this.debug) {\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\n }\n \n this.scheduleRequest(delay);\n }\n\n // * correct, fully checked\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\n const x = isOut ? 0 : 8;\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\n\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256-hash', msgKeyLargePlain);\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\n return msgKey;\n };\n\n // * correct, fully checked\n private getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\n const x = isOut ? 0 : 8;\n const sha2aText = new Uint8Array(52);\n const sha2bText = new Uint8Array(52);\n const promises: Array> = [];\n \n sha2aText.set(msgKey, 0);\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2aText));\n \n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\n sha2bText.set(msgKey, 36);\n promises.push(CryptoWorker.invokeCrypto('sha256-hash', sha2bText));\n\n return Promise.all(promises).then((results) => {\n const aesKey = new Uint8Array(32);\n const aesIv = new Uint8Array(32);\n const sha2a = new Uint8Array(results[0]);\n const sha2b = new Uint8Array(results[1]);\n \n aesKey.set(sha2a.subarray(0, 8));\n aesKey.set(sha2b.subarray(8, 24), 8);\n aesKey.set(sha2a.subarray(24, 32), 24);\n \n aesIv.set(sha2b.subarray(0, 8));\n aesIv.set(sha2a.subarray(8, 24), 8);\n aesIv.set(sha2b.subarray(24, 32), 24);\n \n return [aesKey, aesIv];\n });\n }\n\n public isStopped() {\n return networkerFactory.akStopped && !this.isFileNetworker;\n }\n\n private performScheduledRequest() {\n // this.log('scheduled', this.dcId, this.iii)\n\n if(this.isStopped()) {\n return false;\n }\n\n if(this.pendingAcks.length) {\n const ackMsgIds: Array = this.pendingAcks.slice();\n\n // this.log('acking messages', ackMsgIDs)\n this.wrapMtpMessage({\n _: 'msgs_ack',\n msg_ids: ackMsgIds\n }, {\n notContentRelated: true,\n noSchedule: true\n });\n }\n \n if(this.pendingResends.length) {\n const resendMsgIds: Array = this.pendingResends.slice();\n const resendOpts: MTMessageOptions = {\n noSchedule: true,\n notContentRelated: true,\n messageId: '' // will set in wrapMtpMessage->pushMessage\n };\n\n //this.log('resendReq messages', resendMsgIds);\n this.wrapMtpMessage({\n _: 'msg_resend_req',\n msg_ids: resendMsgIds\n }, resendOpts);\n\n this.lastResendReq = {\n req_msg_id: resendOpts.messageId,\n resend_msg_ids: resendMsgIds\n };\n }\n \n let outMessage: MTPNetworker['sentMessages'][keyof MTPNetworker['sentMessages']];\n const messages: typeof outMessage[] = [];\n \n //const currentTime = Date.now();\n let messagesByteLen = 0;\n\n \n \n \n \n\n let lengthOverflow = false;\n\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\n for(const messageId of keys) {\n //const value = this.pendingMessages[messageId];\n\n //if(!value || value <= currentTime) {\n const message = this.sentMessages[messageId];\n if(message && message.body) {\n /* if(message.fileUpload) {\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\n } */\n\n const messageByteLength = message.body.length + 32;\n\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\n this.log.warn('lengthOverflow', message, messages);\n lengthOverflow = true;\n\n if(outMessage) { // if it's not a first message\n break;\n }\n }\n\n messages.push(message);\n messagesByteLen += messageByteLength;\n\n \n \n \n \n \n \n \n\n outMessage = message;\n } else {\n // this.log(message, messageId)\n }\n\n delete this.pendingMessages[messageId];\n //}\n }\n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n if(!messages.length) {\n // this.log('no scheduled messages')\n return;\n }\n \n \n \n \n \n if(messages.length > 1) {\n const container = this.generateContainerMessage(messagesByteLen, messages);\n outMessage = container.messageWithBody;\n \n this.sentMessages[outMessage.msg_id] = container.message;\n } else {\n this.sentMessages[outMessage.msg_id] = outMessage;\n }\n \n this.pendingAcks = [];\n\n const promise = this.sendEncryptedRequest(outMessage);\n \n \n \n \n \n \n \n \n \n this.cleanupSent(); // ! WARNING\n \n \n \n \n \n if(lengthOverflow) {\n this.scheduleRequest();\n }\n }\n\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\n const container = new TLSerialization({\n mtproto: true,\n startMaxLength: messagesByteLen + 64\n });\n\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\n container.storeInt(messages.length, 'CONTAINER[count]');\n\n const innerMessages: string[] = [];\n messages.forEach((message, i) => {\n innerMessages.push(message.msg_id);\n // this.log('Pushing to container:', message.msg_id);\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\n });\n\n const message: MTMessage = {\n msg_id: timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n container: true,\n inner: innerMessages\n };\n\n if(Modes.debug/* || true */) {\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\n }\n\n return {\n message,\n messageWithBody: Object.assign({body: container.getBytes(true)}, message),\n };\n }\n\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\n const msgKey = await this.getMsgKey(dataWithPadding, true);\n const keyIv = await this.getAesKeyIv(msgKey, true);\n // this.log('after msg key iv')\n\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\n // this.log('Finish encrypt')\n\n return {\n bytes: encryptedBytes,\n msgKey\n };\n }\n\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\n // this.log('get decrypted start')\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\n // this.log('after msg key iv')\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\n });\n }\n\n private getEncryptedOutput(message: MTMessage) {\n /* if(DEBUG) {\n this.log.debug('Send encrypted', message, this.authKeyId);\n } */\n /* if(!this.isOnline) {\n this.log('trying to send message when offline:', Object.assign({}, message));\n //debugger;\n } */\n\n const data = new TLSerialization({\n startMaxLength: message.body.length + 2048\n });\n\n data.storeIntBytes(this.serverSalt, 64, 'salt');\n data.storeIntBytes(this.sessionId, 64, 'session_id');\n \n data.storeLong(message.msg_id, 'message_id');\n data.storeInt(message.seq_no, 'seq_no');\n\n data.storeInt(message.body.length, 'message_data_length');\n data.storeRawBytes(message.body, 'message_data');\n\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\n const desSalt = des.fetchLong();\n const desSessionId = des.fetchLong();\n\n if(!this.isOnline) {\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\n } */\n\n /* const messageDataLength = message.body.length;\n let canBeLength = 0; // bytes\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 4;\n canBeLength += 4;\n canBeLength += message.body.length; */\n \n const dataBuffer = data.getBuffer();\n\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\n } */\n\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomUint(8) % 5);\n const padding = /* (message as any).padding || */new Uint8Array(paddingLength).randomize()/* .fill(0) */;\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\n\n //(message as any).padding = padding;\n\n const dataWithPadding = bufferConcats(dataBuffer, padding);\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\n\n /* if(dataWithPadding.byteLength % 16) {\n this.log.error('aaa', dataWithPadding, paddingLength);\n }\n\n if(message.fileUpload) {\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\n } */\n\n // * full next block is correct\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\n /* if(DEBUG) {\n this.log('Got encrypted out message', encryptedResult);\n } */\n\n const request = new TLSerialization({\n startMaxLength: encryptedResult.bytes.length + 256\n });\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\n \n const requestData = request.getBytes(true);\n\n // if(this.isFileNetworker) {\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\n // }\n\n return requestData;\n });\n }\n\n private sendEncryptedRequest(message: MTMessage) {\n return this.getEncryptedOutput(message).then(requestData => {\n this.debug && this.log.debug('sendEncryptedRequest: launching message into space:', message, [message.msg_id].concat(message.inner || []));\n\n const promise: Promise = this.transport.send(requestData) as any;\n \n return promise;\n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n });\n }\n\n public parseResponse(responseBuffer: Uint8Array) {\n //const perf = performance.now();\n /* if(this.debug) {\n this.log.debug('Start parsing response', responseBuffer);\n } */\n\n this.lastResponseTime = Date.now();\n\n const deserializer = new TLDeserialization(responseBuffer);\n \n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\n if(!bytesCmp(authKeyId, this.authKeyId)) {\n throw new Error('[MT] Invalid server auth_key_id: ' + authKeyId.hex);\n }\n\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\n \n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\n // this.log('after decrypt')\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\n if(!bytesCmp(msgKey, calcMsgKey)) {\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\n this.updateSession(); // fix 28.01.2020\n throw new Error('[MT] server msgKey mismatch, updating session');\n }\n // this.log('after msgKey check')\n \n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\n \n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\n const messageId = deserializer.fetchLong('message_id');\n \n if(!bytesCmp(sessionId, this.sessionId) &&\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\n //this.updateSession();\n //this.sessionID = sessionID;\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\n }\n \n const seqNo = deserializer.fetchInt('seq_no');\n \n const totalLength = dataWithPadding.byteLength;\n \n const messageBodyLength = deserializer.fetchInt('message_data[length]');\n let offset = deserializer.getOffset();\n \n if((messageBodyLength % 4) ||\n messageBodyLength > totalLength - offset) {\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\n }\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\n \n offset = deserializer.getOffset();\n const paddingLength = totalLength - offset;\n if(paddingLength < 12 || paddingLength > 1024) {\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\n }\n \n //let buffer = bytesToArrayBuffer(messageBody);\n deserializer = new TLDeserialization(/* buffer */messageBody, {\n mtproto: true, \n override: {\n mt_message: (result: any, field: string) => {\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\n result.seqno = deserializer.fetchInt(field + '[seqno]');\n result.bytes = deserializer.fetchInt(field + '[bytes]');\n \n const offset = deserializer.getOffset();\n \n //self.log('mt_message!!!!!', result, field);\n \n try {\n result.body = deserializer.fetchObject('Object', field + '[body]');\n } catch(e) {\n this.log.error('parse error', (e as Error).message, (e as Error).stack);\n result.body = {\n _: 'parse_error',\n error: e\n };\n }\n\n if(deserializer.getOffset() !== offset + result.bytes) {\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\n // this.log(result)\n deserializer.setOffset(offset + result.bytes);\n }\n // this.log('override message', result)\n },\n mt_rpc_result: (result: any, field: any) => {\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\n \n const sentMessage = this.sentMessages[result.req_msg_id];\n const type = sentMessage && sentMessage.resultType || 'Object';\n \n if(result.req_msg_id && !sentMessage) {\n // console.warn(dT(), 'Result for unknown message', result);\n return;\n }\n \n result.result = deserializer.fetchObject(type, field + '[result]');\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\n }\n }\n });\n\n const response = deserializer.fetchObject('', 'INPUT');\n //this.log.error('Parse response time:', performance.now() - perf);\n return {\n response,\n messageId,\n sessionId,\n seqNo\n };\n });\n });\n }\n\n private applyServerSalt(newServerSalt: string) {\n const serverSalt = longToBytes(newServerSalt);\n \n sessionStorage.set({\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\n });\n \n this.serverSalt = new Uint8Array(serverSalt);\n }\n\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой) \n public scheduleRequest(delay?: number) {\n /* if(!this.isOnline) {\n return;\n } */\n\n \n \n \n \n \n \n \n \n\n const nextReq = Date.now() + (delay || 0);\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\n //this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\n return;\n }\n \n //this.debug && this.log('scheduleRequest: delay', delay);\n\n /* if(this.nextReqTimeout) {\n return;\n } */\n \n //const perf = performance.now();\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n }\n\n const cb = () => {\n //this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\n\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n \n \n \n \n \n \n /* if(!this.isOnline) {\n return;\n } */\n\n this.performScheduledRequest();\n \n };\n\n this.nextReq = nextReq;\n\n if(delay) {\n this.nextReqTimeout = self.setTimeout(cb, delay);\n } else {\n cb();\n }\n }\n\n private ackMessage(msgId: string) {\n // this.log('ack message', msgID)\n this.pendingAcks.push(msgId);\n\n \n \n \n this.scheduleRequest();\n \n }\n \n private reqResendMessage(msgId: string) {\n if(this.debug) {\n this.log.debug('Req resend', msgId);\n }\n\n this.pendingResends.push(msgId);\n this.scheduleRequest(100);\n }\n\n public cleanupSent() {\n let notEmpty = false;\n // this.log('clean start', this.dcId/*, this.sentMessages*/)\n Object.keys(this.sentMessages).forEach((msgId) => {\n const message = this.sentMessages[msgId];\n \n // this.log('clean iter', msgID, message)\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\n // this.log('clean notContentRelated', msgID)\n delete this.sentMessages[msgId];\n } else if(message.container) {\n for(const innerMsgId of message.inner) {\n if(this.sentMessages[innerMsgId] !== undefined) {\n // this.log('clean failed, found', msgID, message.inner[i], this.sentMessages[message.inner[i]].seq_no)\n notEmpty = true;\n return;\n }\n }\n // this.log('clean container', msgID)\n delete this.sentMessages[msgId];\n } else {\n notEmpty = true;\n }\n });\n \n return !notEmpty;\n }\n\n private processMessageAck(messageId: string) {\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage && !sentMessage.acked) {\n //delete sentMessage.body;\n sentMessage.acked = true;\n }\n }\n\n private processError(rawError: {error_message: string, error_code: number}) {\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\n rawError.error_code = rawError.error_code;\n \n return {\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\n type: matches[1] || 'UNKNOWN',\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\n originalError: rawError\n };\n }\n\n /**\n * * только для сокета\n * TODO: consider about containers resend\n */\n public resend() {\n for(const id in this.sentMessages) {\n const msg = this.sentMessages[id];\n if(msg.body || msg.container) {\n this.pushResend(id);\n }\n }\n }\n\n /* public requestMessageStatus() {\n const ids: string[] = [];\n for(const id in this.sentMessages) {\n const message = this.sentMessages[id];\n if(message.isAPI && message.fileUpload) {\n ids.push(message.msg_id);\n }\n }\n\n this.wrapMtpMessage({\n _: 'msgs_state_req',\n msg_ids: ids\n }, {\n notContentRelated: true\n }).then(res => {\n this.log('status', res);\n });\n } */\n\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\n public processMessage(message: any, messageId: string, sessionId: Uint8Array | number[]) {\n if(message._ === 'messageEmpty') {\n this.log.warn('processMessage: messageEmpty', message, messageId);\n return;\n }\n\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\n if(msgidInt % 2) {\n this.log.warn('Server even message id: ', messageId, message);\n return;\n }\n\n /* if(this.debug) {\n this.log('process message', message, messageId, sessionId);\n } */\n\n switch(message._) {\n case 'msg_container': {\n for(const innerMessage of message.messages) {\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\n }\n\n break;\n }\n \n case 'bad_server_salt': {\n this.log('Bad server salt', message);\n\n this.applyServerSalt(message.new_server_salt);\n\n if(this.sentMessages[message.bad_msg_id]) {\n this.pushResend(message.bad_msg_id);\n }\n \n this.ackMessage(messageId);\n \n // simulate disconnect\n /* try {\n this.log('networker state:', this);\n // @ts-ignore\n this.transport.ws.close(1000);\n } catch(err) {\n this.log.error('transport', this.transport, err);\n } */\n\n break;\n }\n \n case 'bad_msg_notification': {\n this.log.error('Bad msg notification', message);\n\n switch(message.error_code) {\n case 16: // * msg_id too low\n case 17: // * msg_id too high\n case 32: // * msg_seqno too low\n case 33: // * msg_seqno too high\n case 64: { // * invalid container\n //const changedOffset = timeManager.applyServerTime(bigStringInt(messageId).shiftRight(32).toString(10));\n const bigInt = str2bigInt(messageId, 10);\n rightShift_(bigInt, 32);\n const changedOffset = timeManager.applyServerTime(+bigInt2str(bigInt, 10));\n if(message.error_code === 17 || changedOffset) {\n this.log('Update session');\n this.updateSession();\n }\n\n const badMessage = this.updateSentMessage(message.bad_msg_id);\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\n //this.ackMessage(messageId);\n }\n\n // * invalid container\n /* case 64: {\n const badMessage = this.sentMessages[message.bad_msg_id];\n if(badMessage) {\n for(const msgId of badMessage.inner) {\n if(this.sentMessages[msgId] !== undefined) {\n this.updateSentMessage\n }\n }\n const inner = badMessage.inner;\n }\n } */\n }\n\n break;\n }\n \n case 'message': {\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\n // console.warn('[MT] Server same messageId: ', messageId)\n this.ackMessage(messageId);\n return;\n }\n\n this.lastServerMessages.push(messageId);\n if(this.lastServerMessages.length > 100) {\n this.lastServerMessages.shift();\n }\n\n this.processMessage(message.body, message.msg_id, sessionId);\n break;\n }\n \n case 'new_session_created': {\n this.ackMessage(messageId);\n\n if(this.debug) {\n this.log.debug('new_session_created', message);\n }\n //this.updateSession();\n \n this.processMessageAck(message.first_msg_id);\n this.applyServerSalt(message.server_salt);\n \n sessionStorage.get('dc').then((baseDcId) => {\n if(baseDcId === this.dcId && !this.isFileNetworker && networkerFactory.updatesProcessor) {\n networkerFactory.updatesProcessor(message);\n }\n });\n break;\n }\n \n case 'msgs_ack': {\n for(const msgId of message.msg_ids) {\n this.processMessageAck(msgId);\n }\n\n break;\n }\n \n case 'msg_detailed_info':\n if(!this.sentMessages[message.msg_id]) {\n this.ackMessage(message.answer_msg_id);\n break;\n }\n case 'msg_new_detailed_info':\n if(this.pendingAcks.indexOf(message.answer_msg_id)) {\n break;\n }\n this.reqResendMessage(message.answer_msg_id);\n break;\n \n case 'msgs_state_info': {\n this.ackMessage(message.answer_msg_id);\n if(this.lastResendReq && \n this.lastResendReq.req_msg_id === message.req_msg_id && \n this.pendingResends.length\n ) {\n for(const badMsgId of this.lastResendReq.resend_msg_ids) {\n const pos = this.pendingResends.indexOf(badMsgId);\n if(pos !== -1) {\n this.pendingResends.splice(pos, 1);\n }\n }\n }\n\n break;\n }\n\n case 'rpc_result': {\n this.ackMessage(messageId);\n \n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n this.processMessageAck(sentMessageId);\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n if(message.result._ === 'rpc_error') {\n const error = this.processError(message.result);\n this.log('Rpc error', error);\n if(deferred) {\n deferred.reject(error);\n }\n } else {\n if(deferred) {\n /* if(DEBUG) {\n this.log.debug('Rpc response', message.result, sentMessage);\n } */\n\n deferred.resolve(message.result);\n }\n\n if(sentMessage.isAPI && !this.connectionInited) {\n this.connectionInited = true;\n ////this.log('Rpc set connectionInited to:', this.connectionInited);\n }\n }\n \n delete this.sentMessages[sentMessageId];\n } else {\n if(this.debug) {\n this.log('Rpc result for unknown message:', sentMessageId, message);\n }\n }\n\n break;\n }\n\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages doesn't require acknowledgments\n if((this.transport as TcpObfuscated).networker) {\n const sentMessageId = message.msg_id;\n const sentMessage = this.sentMessages[sentMessageId]; \n\n if(sentMessage) {\n sentMessage.deferred.resolve(message);\n delete this.sentMessages[sentMessageId];\n }\n }\n\n break;\n }\n \n default:\n this.ackMessage(messageId);\n\n /* if(this.debug) {\n this.log.debug('Update', message);\n } */\n \n if(networkerFactory.updatesProcessor !== null) {\n networkerFactory.updatesProcessor(message);\n }\n break;\n }\n }\n}\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* import { copy } from \"./object\";\r\n\r\nexport function listMergeSorted(list1: any[] = [], list2: any[] = []) {\r\n const result = copy(list1);\r\n\r\n const minId = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF;\r\n for(let i = 0; i < list2.length; i++) {\r\n if(list2[i] < minId) {\r\n result.push(list2[i]);\r\n }\r\n }\r\n\r\n return result;\r\n} */\r\n\r\nexport const accumulate = (arr: number[], initialValue: number) => arr.reduce((acc, value) => acc + value, initialValue);\r\n\r\nexport function findAndSpliceAll(array: Array, verify: (value: T, index: number, arr: typeof array) => boolean) {\r\n const out: typeof array = [];\r\n let idx = -1;\r\n while((idx = array.findIndex(verify)) !== -1) {\r\n out.push(array.splice(idx, 1)[0]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function forEachReverse(array: Array, callback: (value: T, index?: number, array?: Array) => void) {\r\n for(let length = array.length, i = length - 1; i >= 0; --i) {\r\n callback(array[i], i, array);\r\n }\r\n};\r\n\r\nexport function insertInDescendSortedArray(array: Array, element: T, property: K, pos?: number) {\r\n const sortProperty: number = element[property];\r\n\r\n if(pos === undefined) {\r\n pos = array.indexOf(element);\r\n if(pos !== -1) {\r\n const prev = array[pos - 1];\r\n const next = array[pos + 1];\r\n if((!prev || prev[property] >= sortProperty) && (!next || next[property] <= sortProperty)) {\r\n // console.warn('same pos', pos, sortProperty, prev, next);\r\n return pos;\r\n }\r\n \r\n array.splice(pos, 1);\r\n }\r\n }\r\n\r\n const len = array.length;\r\n if(!len || sortProperty <= array[len - 1][property]) {\r\n return array.push(element) - 1;\r\n } else if(sortProperty >= array[0][property]) {\r\n array.unshift(element);\r\n return 0;\r\n } else {\r\n for(let i = 0; i < len; i++) {\r\n if(sortProperty > array[i][property]) {\r\n array.splice(i, 0, element);\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n console.error('wtf', array, element);\r\n return array.indexOf(element);\r\n}\r\n\r\nexport function filterUnique>(arr: T): T {\r\n return [...new Set(arr)] as T;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ConnectionStatusChange } from \"./connectionStatus\";\r\nimport MTPNetworker from \"./networker\";\r\nimport { InvokeApiOptions } from \"../../types\";\r\nimport MTTransport from \"./transports/transport\";\r\nimport App from \"../../config/app\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\n\r\nexport class NetworkerFactory {\r\n private networkers: MTPNetworker[] = [];\r\n public language = navigator.language || App.langPackCode;\r\n public updatesProcessor: (obj: any) => void = null;\r\n public onConnectionStatusChange: (info: ConnectionStatusChange) => void = null;\r\n public akStopped = false;\r\n public userAgent = navigator.userAgent;\r\n\r\n public removeNetworker(networker: MTPNetworker) {\r\n const idx = this.networkers.indexOf(networker);\r\n if(idx !== -1) {\r\n this.networkers.splice(idx, 1);\r\n }\r\n }\r\n\r\n public setUpdatesProcessor(callback: (obj: any) => void) {\r\n this.updatesProcessor = callback;\r\n }\r\n\r\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, transport: MTTransport, options: InvokeApiOptions) {\r\n //console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\r\n const networker = new MTPNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n this.networkers.push(networker);\r\n return networker;\r\n }\r\n\r\n public startAll() {\r\n if(this.akStopped) {\r\n const stoppedNetworkers = this.networkers.filter(networker => networker.isStopped());\r\n\r\n this.akStopped = false;\r\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\r\n \r\n for(const networker of stoppedNetworkers) {\r\n networker.scheduleRequest();\r\n }\r\n }\r\n }\r\n\r\n public stopAll() {\r\n this.akStopped = true;\r\n }\r\n\r\n public setLanguage(langCode: string) {\r\n this.language = langCode;\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.connectionInited = false;\r\n }\r\n }\r\n }\r\n\r\n public forceReconnectTimeout() {\r\n for(const networker of this.networkers) {\r\n networker.forceReconnectTimeout();\r\n }\r\n }\r\n\r\n public forceReconnect() {\r\n for(const networker of this.networkers) {\r\n if(!networker.isFileNetworker) {\r\n networker.forceReconnect();\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst networkerFactory = new NetworkerFactory();\r\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.networkerFactory = networkerFactory);\r\nexport default networkerFactory;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\n\r\n// type EventLitenerCallback = (data: T) => \r\n// export default class EventListenerBase {\r\nexport default class EventListenerBase> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], options: boolean | AddEventListenerOptions}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, options}); // ! add before because if you don't, you won't be able to delete it from callback\r\n\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if((options as AddEventListenerOptions)?.once) {\r\n this.listeners[name].pop();\r\n return;\r\n }\r\n }\r\n \r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: T, callback: Listeners[T], options?: boolean | AddEventListenerOptions) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: T, ...args: ArgumentTypes) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener) => {\r\n const index = listeners.findIndex((l) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if((listener.options as AddEventListenerOptions)?.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import aesjs from 'aes-js';\r\nimport AES from \"@cryptography/aes\";\r\nimport { bytesFromWordss } from \"../../../helpers/bytes\";\r\nimport { Codec } from \"./codec\";\r\n\r\nclass Counter {\r\n _counter: Uint8Array;\r\n\r\n constructor(initialValue: Uint8Array) {\r\n this._counter = initialValue;\r\n }\r\n\r\n increment() {\r\n for(let i = 15; i >= 0; i--) {\r\n if(this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass CTR {\r\n _counter: Counter;\r\n _remainingCounter: Uint8Array = null;\r\n _remainingCounterIndex = 16;\r\n _aes: AES;\r\n\r\n constructor(key: Uint8Array, counter: Uint8Array) {\r\n this._counter = new Counter(counter);\r\n this._aes = new AES(key);\r\n }\r\n\r\n update(payload: Uint8Array) {\r\n const encrypted = payload.slice();\r\n\r\n for(let i = 0; i < encrypted.length; i++) {\r\n if(this._remainingCounterIndex === 16) {\r\n this._remainingCounter = new Uint8Array(bytesFromWordss(this._aes.encrypt(this._counter._counter)));\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n}\r\n\r\n/* \r\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\r\n*/\r\nexport default class Obfuscation {\r\n /* public enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\r\n public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\r\n\r\n public encNew: CTR;\r\n public decNew: CTR;\r\n\r\n public init(codec: Codec) {\r\n const initPayload = new Uint8Array(64);\r\n initPayload.randomize();\r\n \r\n while(true) {\r\n let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]);\r\n let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]);\r\n if(initPayload[0] !== 0xef &&\r\n val !== 0x44414548 &&\r\n val !== 0x54534f50 &&\r\n val !== 0x20544547 &&\r\n val !== 0x4954504f &&\r\n val !== 0xeeeeeeee &&\r\n val !== 0xdddddddd &&\r\n val2 !== 0x00000000) {\r\n //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\r\n break;\r\n }\r\n initPayload.randomize();\r\n }\r\n\r\n ////////////////////////initPayload.subarray(60, 62).hex = dcId;\r\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\r\n console.log('initPayload', initPayload); */\r\n\r\n const reversedPayload = initPayload.slice().reverse();\r\n\r\n const encKey = initPayload.slice(8, 40);\r\n const encIv = initPayload.slice(40, 56);\r\n const decKey = reversedPayload.slice(8, 40);\r\n const decIv = reversedPayload.slice(40, 56);\r\n\r\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\r\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\r\n\r\n // console.log('encKey', encKey.hex, encIv.hex);\r\n // console.log('decKey', decKey.hex, decIv.hex);\r\n\r\n this.encNew = new CTR(encKey, encIv);\r\n this.decNew = new CTR(decKey, decIv);\r\n\r\n initPayload.set(codec.obfuscateTag, 56);\r\n const encrypted = this.encode(initPayload);\r\n\r\n //console.log('encrypted', encrypted);\r\n\r\n initPayload.set(encrypted.slice(56, 64), 56);\r\n\r\n return initPayload;\r\n }\r\n\r\n /* public encode(payload: Uint8Array) {\r\n let startTime = performance.now();\r\n let res = this.enc.encrypt(payload);\r\n let time = performance.now() - startTime;\r\n\r\n try {\r\n startTime = performance.now();\r\n let arr = this.encNew.encrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n let time2 = performance.now() - startTime;\r\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.dec.encrypt(payload);\r\n\r\n try {\r\n let arr = this.decNew.decrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n } */\r\n public encode(payload: Uint8Array) {\r\n return this.encNew.update(payload);\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n return this.decNew.update(payload);\r\n }\r\n /* public encode(payload: Uint8Array) {\r\n let res = this.encNew.encrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.decNew.decrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Codec } from \"./codec\";\r\n\r\nexport class IntermediatePacketCodec implements Codec {\r\n public tag = 0xee;\r\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\r\n\r\n //private lol = 0;\r\n\r\n public encodePacket(data: Uint8Array) {\r\n if((data.length % 4) !== 0) {\r\n console.error('Encode error!', data.length, data);\r\n }\r\n\r\n const len = data.length;\r\n const header = new Uint8Array(new Int32Array([/* ++this.lol >= 25 ? 0x80000001 : */len]).buffer);\r\n\r\n //console.log('got nobody cause im braindead', header, len, /* data, */data.buffer.byteLength === data.length);\r\n return header.concat(data);\r\n }\r\n\r\n public readPacket(data: Uint8Array) {\r\n const length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);\r\n\r\n return data.slice(4, 4 + length);\r\n }\r\n}\r\n\r\nexport default new IntermediatePacketCodec();\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from \"../../../config/modes\";\nimport { logger, LogTypes } from \"../../logger\";\nimport MTPNetworker from \"../networker\";\nimport Obfuscation from \"./obfuscation\";\nimport MTTransport, { MTConnection, MTConnectionConstructable } from \"./transport\";\nimport intermediatePacketCodec from './intermediate';\nimport { ConnectionStatus } from \"../connectionStatus\";\n\nexport default class TcpObfuscated implements MTTransport {\n private codec = intermediatePacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType;\n public connected = false;\n private lastCloseTime: number;\n private connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n\n //private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(private Connection: MTConnectionConstructable, \n private dcId: number, \n private url: string, \n private logSuffix: string, \n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n \n this.connect();\n }\n\n private onOpen = () => {\n this.connected = true;\n\n const initPayload = this.obfuscation.init(this.codec);\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.setConnectionStatus(ConnectionStatus.Connected);\n this.networker.cleanupSent();\n this.networker.resend();\n } else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n }\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = (buffer: ArrayBuffer) => {\n let data = this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n //this.pending = this.pending.filter(p => p.body); // clear pending\n\n this.debug && this.log.debug('redirecting to networker', data.length);\n this.networker.parseResponse(data).then(response => {\n this.debug && this.log.debug('redirecting to networker response:', response);\n\n try {\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\n } catch(err) {\n this.log.error('handleMessage networker processMessage error', err);\n }\n\n //this.releasePending();\n }).catch(err => {\n this.log.error('handleMessage networker parseResponse error', err);\n });\n\n //this.dd();\n return;\n }\n\n //console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', data.hex);\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n \n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n \n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = self.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n \n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n //this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n //this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = this.connected ? this.encodeBody(body) : undefined;\n\n //return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private releasePending(/* tt = false */) {\n if(!this.connected) {\n //this.connect();\n return;\n }\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n //this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n //for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n /* if(this.ws.bufferedAmount) {\n break;\n } */\n\n const pending = this.pending[i];\n const {body, bodySent} = pending;\n let encoded = pending.encoded;\n if(body && !bodySent) {\n\n //this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n /* if(this.ws.bufferedAmount) {\n this.log.error('bufferedAmount:', this.ws.bufferedAmount);\n } */\n\n /* if(this.ws.readyState !== this.ws.OPEN) {\n this.log.error('ws is closed?');\n this.connected = false;\n break;\n } */\n\n if(!encoded) {\n encoded = pending.encoded = this.encodeBody(body);\n }\n\n //this.lol.push(body);\n //setTimeout(() => {\n this.connection.send(encoded);\n //}, 100);\n //this.dd();\n \n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n //delete pending.body;\n }\n }\n }\n}\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport ctx from './ctx';\r\n\r\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\r\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !(ctx as any).MSStream;\r\n\r\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\r\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\r\n\r\nexport const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { notifyAll } from \"../../../helpers/context\";\r\nimport EventListenerBase from \"../../../helpers/eventListenerBase\";\r\nimport { WorkerTaskVoidTemplate } from \"../../../types\";\r\nimport { MTConnection } from \"./transport\";\r\n\r\nlet socketId = 0;\r\nexport interface SocketProxyTask extends WorkerTaskVoidTemplate {\r\n type: 'socketProxy',\r\n payload: SocketProxySetupTask | SocketProxySendTask | SocketProxyCloseTask\r\n};\r\n\r\nexport interface SocketProxySetupTask extends WorkerTaskVoidTemplate {\r\n type: 'setup',\r\n payload: {\r\n dcId: number,\r\n url: string,\r\n logSuffix: string\r\n },\r\n id: number\r\n};\r\n\r\nexport interface SocketProxySendTask extends WorkerTaskVoidTemplate {\r\n type: 'send',\r\n payload: Uint8Array,\r\n id: number\r\n};\r\n\r\nexport interface SocketProxyCloseTask extends WorkerTaskVoidTemplate {\r\n type: 'close',\r\n id: number\r\n};\r\n\r\n \r\nexport default class SocketProxied extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private id: number;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n this.id = ++socketId;\r\n socketsProxied.set(this.id, this);\r\n\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'setup', \r\n payload: {\r\n dcId, \r\n url,\r\n logSuffix\r\n },\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public send(payload: Uint8Array) {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy', \r\n payload: {\r\n type: 'send',\r\n payload,\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public close() {\r\n const task: SocketProxyTask = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'close',\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n}\r\n \r\n\r\nexport const socketsProxied: Map = new Map();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTTransport, { MTConnectionConstructable } from './transports/transport';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\n \r\nimport Socket from './transports/websocket';\r\nimport TcpObfuscated from './transports/tcpObfuscated';\r\nimport { IS_SAFARI } from '../../environment/userAgent';\r\nimport { isWebWorker } from '../../helpers/context';\r\nimport SocketProxied from './transports/socketProxied';\r\nimport App from '../../config/app';\r\n \r\n\r\nexport type TransportType = 'websocket' | 'https' | 'http';\r\nexport type ConnectionType = 'client' | 'download' | 'upload';\r\ntype Servers = {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTTransport[]\r\n }\r\n }\r\n};\r\n\r\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\r\n\r\nexport class DcConfigurator {\r\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\r\n\r\n private dcOptions = Modes.test\r\n ? [\r\n {id: 1, host: '149.154.175.10', port: 80},\r\n {id: 2, host: '149.154.167.40', port: 80},\r\n {id: 3, host: '149.154.175.117', port: 80}\r\n ]\r\n : [\r\n {id: 1, host: '149.154.175.50', port: 80},\r\n {id: 2, host: '149.154.167.50', port: 80},\r\n {id: 3, host: '149.154.175.100', port: 80},\r\n {id: 4, host: '149.154.167.91', port: 80},\r\n {id: 5, host: '149.154.171.5', port: 80}\r\n ];\r\n\r\n public chosenServers: Servers = {} as any;\r\n\r\n \r\n private transportSocket = (dcId: number, connectionType: ConnectionType, suffix: string) => {\r\n const path = 'apiws' + TEST_SUFFIX;\r\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\r\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\r\n\r\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\r\n\r\n const oooohLetMeLive: MTConnectionConstructable = (IS_SAFARI && isWebWorker && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\r\n\r\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\r\n };\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public chooseServer(dcId: number, connectionType: ConnectionType = 'client', transportType: TransportType = 'websocket', reuse = true) {\r\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\r\n connectionType = 'client';\r\n } */\r\n\r\n if(!this.chosenServers.hasOwnProperty(transportType)) {\r\n this.chosenServers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const servers = this.chosenServers[transportType][connectionType];\r\n\r\n if(!(dcId in servers)) {\r\n servers[dcId] = [];\r\n }\r\n\r\n const transports = servers[dcId];\r\n\r\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\r\n let transport: MTTransport;\r\n\r\n const suffix = connectionType === 'client' ? '' : '-1';\r\n\r\n \r\n \r\n \r\n transport = this.transportSocket(dcId, connectionType, suffix);\r\n \r\n \r\n \r\n \r\n if(!transport) {\r\n console.error('No chosenServer!', dcId);\r\n return null;\r\n }\r\n \r\n if(reuse) {\r\n transports.push(transport);\r\n }\r\n \r\n return transport;\r\n }\r\n \r\n return transports[0];\r\n }\r\n \r\n public static removeTransport(obj: any, transport: T) {\r\n for(const transportType in obj) {\r\n // @ts-ignore\r\n for(const connectionType in obj[transportType]) {\r\n // @ts-ignore\r\n for(const dcId in obj[transportType][connectionType]) {\r\n // @ts-ignore\r\n const transports: T[] = obj[transportType][connectionType][dcId];\r\n const idx = transports.indexOf(transport);\r\n if(idx !== -1) {\r\n transports.splice(idx, 1);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new DcConfigurator();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization } from \"./tl_utils\";\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport { bytesFromHex, bytesToHex } from \"../../helpers/bytes\";\r\nimport { bigInt2str, str2bigInt } from \"../../vendor/leemon\";\r\nimport Modes from \"../../config/modes\";\r\n\r\nexport type RSAPublicKeyHex = {\r\n modulus: string,\r\n exponent: string\r\n};\r\n\r\nexport class RSAKeysManager {\r\n\r\n /**\r\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\r\n * \r\n * \r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\r\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\r\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\r\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\r\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\r\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\r\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\r\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\r\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\r\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\r\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n *\r\n * Bytes can be got via \r\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\r\n * $ openssl rsa -pubin -in pub.pem -text -noout\r\n */\r\n\r\n /* private publisKeysHex = [{\r\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\r\n exponent: '010001'\r\n }]; */\r\n\r\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\r\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\r\n exponent: '010001'\r\n }];\r\n\r\n private publisKeysHex: RSAPublicKeyHex[] = [{\r\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\r\n exponent: '010001'\r\n }];\r\n\r\n private publicKeysParsed: {\r\n [hex: string]: RSAPublicKeyHex\r\n } = {};\r\n private prepared = false;\r\n private preparePromise: Promise = null;\r\n\r\n constructor() {\r\n if(Modes.test) {\r\n this.publisKeysHex = this.testPublicKeysHex;\r\n }\r\n }\r\n\r\n public prepare(): Promise {\r\n if(this.preparePromise) return this.preparePromise;\r\n else if(this.prepared) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => {\r\n const RSAPublicKey = new TLSerialization();\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\r\n\r\n const buffer = RSAPublicKey.getBuffer();\r\n\r\n return CryptoWorker.invokeCrypto('sha1-hash', buffer).then(bytes => {\r\n const fingerprintBytes = bytes.slice(-8);\r\n fingerprintBytes.reverse();\r\n \r\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\r\n modulus: keyParsed.modulus,\r\n exponent: keyParsed.exponent\r\n };\r\n });\r\n })).then(() => {\r\n this.prepared = true;\r\n\r\n //console.log('[MT] Prepared keys');\r\n this.preparePromise = null;\r\n });\r\n }\r\n\r\n public async select(fingerprints: Array) {\r\n await this.prepare();\r\n\r\n for(let i = 0; i < fingerprints.length; ++i) {\r\n //fingerprintHex = bigStringInt(fingerprints[i]).toString(16);\r\n let fingerprintHex = bigInt2str(str2bigInt(fingerprints[i], 10), 16).toLowerCase();\r\n\r\n if(fingerprintHex.length < 16) {\r\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\r\n }\r\n\r\n //console.log(fingerprintHex, this.publicKeysParsed);\r\n const foundKey = this.publicKeysParsed[fingerprintHex];\r\n if(foundKey) {\r\n return Object.assign({\r\n fingerprint: fingerprints[i]\r\n }, foundKey);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default new RSAKeysManager();\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n * \n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport { TLSerialization, TLDeserialization } from \"./tl_utils\";\nimport dcConfigurator from \"./dcConfigurator\";\nimport rsaKeysManager from \"./rsaKeysManager\";\nimport timeManager from \"./timeManager\";\n\nimport CryptoWorker from \"../crypto/cryptoworker\";\n\nimport { logger, LogTypes } from \"../logger\";\nimport { bytesCmp, bytesToHex, bytesFromHex, bytesXor } from \"../../helpers/bytes\";\nimport DEBUG from \"../../config/debug\";\nimport { cmp, int2bigInt, one, pow, str2bigInt, sub } from \"../../vendor/leemon\";\nimport { addPadding } from \"./bin_utils\";\n\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\n\nfNewNonce = false;\nfNonce = false;\nfResult = false; */\n\ntype AuthOptions = {\n dcId: number,\n nonce: Uint8Array,\n \n serverNonce?: Uint8Array,\n pq?: Uint8Array,\n fingerprints?: string[],\n publicKey?: {\n modulus: string,\n exponent: string,\n fingerprint: string\n },\n \n // good\n p?: Uint8Array,\n q?: Uint8Array,\n \n newNonce?: Uint8Array,\n \n retry?: number,\n \n b?: Uint8Array,\n g?: number,\n gA?: Uint8Array,\n dhPrime?: Uint8Array,\n \n tmpAesKey?: Uint8Array,\n tmpAesIv?: Uint8Array,\n \n authKeyId?: Uint8Array,\n authKey?: Uint8Array,\n serverSalt?: Uint8Array,\n\n localTime?: number,\n serverTime?: any,\n\n localTry?: number\n};\n\ntype ResPQ = {\n _: 'resPQ';\n nonce: Uint8Array;\n pq: Uint8Array;\n server_nonce: Uint8Array;\n server_public_key_fingerprints: string[];\n};\n\ntype P_Q_inner_data = {\n _: 'p_q_inner_data_dc';\n pq: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n new_nonce: Uint8Array;\n dc: number;\n};\n\ntype req_DH_params = {\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n public_key_fingerprint: string;\n encrypted_data: Uint8Array;\n};\n\nexport class Authorizer {\n private cached: {\n [dcId: number]: Promise\n } = {};\n \n private log: ReturnType;\n \n constructor() {\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\n }\n \n private sendPlainRequest(dcId: number, requestArray: Uint8Array) {\n const requestLength = requestArray.byteLength;\n \n const header = new TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id');\n header.storeLong(timeManager.generateId(), 'msg_id');\n header.storeInt(requestLength, 'request_length');\n \n const headerArray = header.getBytes(true) as Uint8Array;\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n\n const transport = dcConfigurator.chooseServer(dcId);\n const baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE'\n };\n \n if(DEBUG) {\n this.log('mtpSendPlainRequest: creating requestPromise');\n }\n \n const promise = transport.send(resultArray) as any as Promise;\n return promise.then(result => {\n if(DEBUG) {\n this.log('mtpSendPlainRequest: in good sector', result);\n }\n \n if(!result || !result.byteLength) {\n throw baseError;\n }\n \n try {\n /* result = fResult ? fResult : result;\n fResult = new Uint8Array(0); */\n \n const deserializer = new TLDeserialization(result, {mtproto: true});\n\n if(result.length === 4) {\n const errorCode = deserializer.fetchInt();\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\n throw errorCode;\n }\n\n const auth_key_id = deserializer.fetchLong('auth_key_id');\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\n \n const msg_id = deserializer.fetchLong('msg_id');\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\n \n const msg_len = deserializer.fetchInt('msg_len');\n if(!msg_len) this.log.error('no msg_len', msg_len);\n \n return deserializer;\n } catch(e) {\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\n const error = Object.assign(baseError, {originalError: e});\n throw error;\n }\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n \n throw error;\n });\n }\n \n private async sendReqPQ(auth: AuthOptions) {\n const request = new TLSerialization({mtproto: true});\n \n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\n\n if(DEBUG) {\n this.log('Send req_pq', auth.nonce.hex);\n }\n\n let deserializer: TLDeserialization;\n try {\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\n rsaKeysManager.prepare();\n deserializer = await promise;\n } catch(error) {\n this.log.error('req_pq error', (error as Error).message);\n throw error;\n }\n \n const response: ResPQ = deserializer.fetchObject('ResPQ');\n\n if(response._ !== 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n this.log.error(auth.nonce, response.nonce);\n throw new Error('[MT] resPQ nonce mismatch');\n }\n \n auth.serverNonce = response.server_nonce; // need\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n \n if(DEBUG) {\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\n }\n \n const publicKey = await rsaKeysManager.select(auth.fingerprints);\n if(!publicKey) {\n throw new Error('[MT] No public key found');\n }\n \n auth.publicKey = publicKey;\n \n if(DEBUG) {\n this.log('PQ factorization start', auth.pq);\n }\n \n // let pAndQ: Awaited>;\n try {\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\n } catch(error) {\n this.log.error('worker error factorize', error);\n throw error;\n }\n \n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n \n if(DEBUG) {\n this.log('PQ factorization done', pAndQ);\n }\n \n return this.sendReqDhParams(auth);\n }\n \n private async sendReqDhParams(auth: AuthOptions): Promise {\n auth.newNonce = new Uint8Array(32).randomize();\n\n const p_q_inner_data_dc: P_Q_inner_data = {\n _: 'p_q_inner_data_dc',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce,\n dc: 0\n };\n \n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\n\n const data = pQInnerDataSerialization.getBytes(true);\n if(data.length > 144) {\n throw 'DH_params: data is more than 144 bytes!';\n }\n\n const dataWithPadding = addPadding(data, 192, false, true, false);\n const dataPadReversed = dataWithPadding.slice().reverse();\n\n const getKeyAesEncrypted = async() => {\n for(;;) {\n const tempKey = new Uint8Array(32).randomize();\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256-hash', tempKey.concat(dataWithPadding)));\n if(dataWithHash.length !== 224) {\n throw 'DH_params: dataWithHash !== 224 bytes!';\n }\n \n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256-hash', aesEncrypted));\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\n\n const keyAesEncryptedBigInt = str2bigInt(bytesToHex(keyAesEncrypted), 16);\n const publicKeyModulusBigInt = str2bigInt(auth.publicKey.modulus, 16);\n\n if(cmp(keyAesEncryptedBigInt, publicKeyModulusBigInt) === -1) {\n return keyAesEncrypted;\n }\n }\n };\n \n const keyAesEncrypted = await getKeyAesEncrypted();\n const encryptedData = addPadding(await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey), 256, true, true, true);\n\n const req_DH_params: req_DH_params = {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: encryptedData\n };\n \n const request = new TLSerialization({mtproto: true});\n request.storeMethod('req_DH_params', req_DH_params);\n \n const requestBytes = request.getBytes(true);\n \n if(DEBUG) {\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\n }\n \n let deserializer: TLDeserialization;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\n } catch(error) {\n this.log.error('Send req_DH_params FAIL!', error);\n throw error;\n }\n \n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n \n if(DEBUG) {\n this.log('Sent req_DH_params, response:', response);\n }\n \n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Server_DH_Params nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\n }\n \n if(response._ === 'server_DH_params_fail') {\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce)).slice(-16);\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\n }\n \n throw new Error('[MT] server_DH_params_fail');\n }\n \n // fill auth object\n try {\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\n } catch(e) {\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\n throw e;\n }\n \n //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n \n return this.sendSetClientDhParams(auth);\n }\n \n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\n auth.localTime = Date.now();\n \n // ! can't concat Array with Uint8Array!\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.serverNonce)))\n .concat((await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\n \n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1-hash', auth.serverNonce.concat(auth.newNonce))).slice(12)\n .concat(await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\n \n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\n \n const hash = answerWithHash.slice(0, 20);\n const answerWithPadding = answerWithHash.slice(20);\n\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\n const response = deserializer.fetchObject('Server_DH_inner_data');\n \n if(response._ !== 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n \n if(DEBUG) {\n this.log('Done decrypting answer');\n }\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n \n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\n \n const offset = deserializer.getOffset();\n \n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1-hash', answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\n }\n \n timeManager.applyServerTime(auth.serverTime, auth.localTime);\n }\n \n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\n if(DEBUG) {\n this.log('Verifying DH params', g, dhPrime, gA);\n }\n\n const dhPrimeHex = bytesToHex(dhPrime);\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n\n if(DEBUG) {\n this.log('dhPrime cmp OK');\n }\n \n const _gABigInt = str2bigInt(bytesToHex(gA), 16);\n const _dhPrimeBigInt = str2bigInt(dhPrimeHex, 16);\n\n if(cmp(_gABigInt, one) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, one)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n\n if(DEBUG) {\n this.log('1 < gA < dhPrime-1 OK');\n }\n \n const _two = int2bigInt(2, 32, 0);\n const _twoPow = pow(_two, 2048 - 64);\n\n if(cmp(_gABigInt, _twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, _twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n\n if(DEBUG) {\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n }\n \n return true;\n }\n \n private async sendSetClientDhParams(auth: AuthOptions): Promise {\n const gBytes = bytesFromHex(auth.g.toString(16));\n \n auth.b = new Uint8Array(256).randomize();\n //MTProto.secureRandom.nextBytes(auth.b);\n \n // let gB: Awaited>;\n try {\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\n } catch(error) {\n throw error;\n }\n \n const data = new TLSerialization({mtproto: true});\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n \n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1-hash', data.getBuffer())).concat(data.getBytes(true));\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n \n const request = new TLSerialization({mtproto: true});\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n \n if(DEBUG) {\n this.log('Send set_client_DH_params');\n }\n \n let deserializer: TLDeserialization;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\n } catch(err) {\n throw err;\n }\n \n const response = deserializer.fetchObject('Set_client_DH_params_answer');\n \n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\n }\n \n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\n }\n \n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\n }\n \n // let authKey: Uint8Array;\n try {\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\n } catch(err) {\n throw authKey;\n }\n \n const authKeyHash = await CryptoWorker.invokeCrypto('sha1-hash', authKey),\n authKeyAux = authKeyHash.slice(0, 8),\n authKeyId = authKeyHash.slice(-8);\n \n if(DEBUG) {\n this.log('Got Set_client_DH_params_answer', response._, authKey);\n }\n switch(response._) {\n case 'dh_gen_ok': {\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([1], authKeyAux))).slice(-16);\n \n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n this.log.error('Set_client_DH_params_answer new_nonce_hash1 mismatch', newNonceHash1, response);\n throw new Error('new_nonce_hash1 mismatch');\n }\n \n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n if(DEBUG) {\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\n }\n \n auth.authKeyId = authKeyId;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n \n return auth;\n }\n \n case 'dh_gen_retry': {\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([2], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\n }\n \n return this.sendSetClientDhParams(auth);\n }\n \n case 'dh_gen_fail': {\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1-hash', auth.newNonce.concat([3], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\n }\n \n throw new Error('[MT] Set_client_DH_params_answer fail');\n }\n }\n }\n \n public async auth(dcId: number): Promise {\n if(dcId in this.cached) {\n return this.cached[dcId];\n }\n \n const nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize();\n /* const nonce = new Array(16);\n MTProto.secureRandom.nextBytes(nonce); */\n \n if(!dcConfigurator.chooseServer(dcId)) {\n throw new Error('[MT] No server found for dc ' + dcId);\n }\n\n // await new Promise((resolve) => setTimeout(resolve, 2e3));\n\n const auth: AuthOptions = {dcId, nonce, localTry: 1};\n \n try {\n const promise = this.sendReqPQ(auth);\n this.cached[dcId] = promise;\n return await promise;\n } catch(err) {\n if(/* err.originalError === -404 && */auth.localTry <= 3) {\n return this.sendReqPQ({\n dcId: auth.dcId, \n nonce: new Uint8Array(16).randomize(),\n localTry: auth.localTry + 1\n });\n }\n\n delete this.cached[dcId];\n throw err;\n }\n }\n}\n\nexport default new Authorizer();\n","export default function noop() {}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport noop from \"./noop\";\r\n\r\nexport interface CancellablePromise extends Promise {\r\n resolve?: (value: T) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled || deferred.isRejected) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected || deferred.isFulfilled) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise>();\r\n \r\n }; */\r\n\r\n deferred.catch(noop).finally(() => {\r\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\r\n deferred.listeners.length = 0;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\r\nexport function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => resolve(e.target.result));\r\n reader[method](blob);\r\n });\r\n}\r\n\r\nexport function readBlobAsText(blob: Blob) {\r\n return readBlobAs(blob, 'readAsText');\r\n}\r\n\r\nexport function readBlobAsDataURL(blob: Blob) {\r\n return readBlobAs(blob, 'readAsDataURL');\r\n}\r\n\r\nexport function readBlobAsArrayBuffer(blob: Blob) {\r\n return readBlobAs(blob, 'readAsArrayBuffer');\r\n}\r\n\r\nexport function readBlobAsUint8Array(blob: Blob) {\r\n return readBlobAsArrayBuffer(blob).then(buffer => new Uint8Array(buffer));\r\n}\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage> {\r\n private static STORAGES: IDBStorage>[] = [];\r\n private openDbPromise: Promise;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: T['stores'][0]['name'];\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases(preserve?: IDBStorage>) {\r\n this.STORAGES.forEach(storage => {\r\n if(preserve && preserve === storage) {\r\n return;\r\n }\r\n\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * ! WARNING ! function requires at least one opened connection\r\n */\r\n /* public static clearObjectStores() {\r\n const storage = this.STORAGES[0];\r\n this.closeDatabases(storage);\r\n\r\n const names = Array.from(storage.db.objectStoreNames);\r\n const promises = names.map(name => storage.clear(name));\r\n return Promise.all(promises);\r\n } */\r\n\r\n /* public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n } */\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', (error as Error).message);\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public clear(storeName?: IDBStorage['storeName']) {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get(entryName: string[]): Promise;\r\n public get(entryName: string): Promise;\r\n public get(entryName: string | string[]): Promise | Promise {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string, storeName = this.storeName) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise((resolve, reject) => {\r\n /* if(mode === 'readwrite') {\r\n return;\r\n } */\r\n\r\n const transaction = db.transaction([storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll(): Promise {\r\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: {[key: string]: any}, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = object instanceof Map ? [...object.keys()] : Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { UserAuth } from './mtproto_config';\r\nimport sessionStorage from '../sessionStorage';\r\nimport MTPNetworker, { MTMessage } from './networker';\r\nimport { isObject } from './bin_utils';\r\nimport networkerFactory from './networkerFactory';\r\n//import { telegramMeWebService } from './mtproto';\r\nimport authorizer from './authorizer';\r\nimport dcConfigurator, { ConnectionType, DcConfigurator, TransportType } from './dcConfigurator';\r\nimport { logger } from '../logger';\r\nimport type { DcAuthKey, DcId, DcServerSalt, InvokeApiOptions } from '../../types';\r\nimport type { MethodDeclMap } from '../../layer';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport { bytesFromHex, bytesToHex } from '../../helpers/bytes';\r\n//import { clamp } from '../../helpers/number';\r\nimport { IS_SAFARI } from '../../environment/userAgent';\r\nimport App from '../../config/app';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport IDBStorage from '../idb';\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\nimport ctx from '../../environment/ctx';\r\n\r\n \r\n \r\n \r\n\r\n/* var networker = apiManager.cachedNetworkers.websocket.upload[2];\r\nnetworker.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: [\"6888292542796810828\"]\r\n}, {\r\n notContentRelated: true\r\n}).then(res => {\r\n console.log('status', res);\r\n}); */\r\n\r\n//console.error('apiManager included!');\r\n// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории\r\n\r\nexport type ApiError = Partial<{\r\n code: number,\r\n type: string,\r\n description: string,\r\n originalError: any,\r\n stack: string,\r\n handled: boolean,\r\n input: string,\r\n message: ApiError\r\n}>;\r\n\r\n/* class RotatableArray {\r\n public array: Array = [];\r\n private lastIndex = -1;\r\n\r\n public get() {\r\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\r\n return this.array[this.lastIndex];\r\n }\r\n} */\r\n\r\nexport class ApiManager {\r\n private cachedNetworkers: {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTPNetworker[]\r\n }\r\n }\r\n } = {} as any;\r\n \r\n private cachedExportPromise: {[x: number]: Promise} = {};\r\n private gettingNetworkers: {[dcIdAndType: string]: Promise} = {};\r\n private baseDcId: DcId = 0 as DcId;\r\n \r\n //public telegramMeNotified = false;\r\n\r\n private log: ReturnType = logger('API');\r\n\r\n private afterMessageTempIds: {\r\n [tempId: string]: {\r\n messageId: string,\r\n promise: Promise\r\n }\r\n } = {};\r\n\r\n //private lol = false;\r\n \r\n // constructor() {\r\n //MtpSingleInstanceService.start();\r\n \r\n /* AppStorage.get('dc').then((dcId) => {\r\n if(dcId) {\r\n this.baseDcId = dcId;\r\n }\r\n }); */\r\n // }\r\n \r\n /* public telegramMeNotify(newValue: boolean) {\r\n if(this.telegramMeNotified !== newValue) {\r\n this.telegramMeNotified = newValue;\r\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\r\n }\r\n } */\r\n\r\n public async getBaseDcId() {\r\n if(this.baseDcId) {\r\n return this.baseDcId;\r\n }\r\n\r\n const baseDcId = await sessionStorage.get('dc');\r\n if(!this.baseDcId) {\r\n if(!baseDcId) {\r\n this.setBaseDcId(App.baseDcId);\r\n } else {\r\n this.baseDcId = baseDcId;\r\n }\r\n }\r\n\r\n return this.baseDcId;\r\n }\r\n \r\n public async setUserAuth(userAuth: UserAuth) {\r\n if(!userAuth.dcID) {\r\n const baseDcId = await this.getBaseDcId();\r\n userAuth.dcID = baseDcId;\r\n }\r\n\r\n sessionStorage.set({\r\n user_auth: userAuth\r\n });\r\n \r\n //this.telegramMeNotify(true);\r\n\r\n \r\n \r\n \r\n }\r\n\r\n public setBaseDcId(dcId: DcId) {\r\n const wasDcId = this.baseDcId;\r\n if(wasDcId) { // if migrated set ondrain\r\n this.getNetworker(wasDcId).then(networker => {\r\n this.setOnDrainIfNeeded(networker);\r\n });\r\n }\r\n\r\n this.baseDcId = dcId;\r\n\r\n sessionStorage.set({\r\n dc: this.baseDcId\r\n });\r\n }\r\n \r\n public async logOut() {\r\n const storageKeys: Array = [];\r\n \r\n const prefix = 'dc';\r\n for(let dcId = 1; dcId <= 5; dcId++) {\r\n storageKeys.push(prefix + dcId + '_auth_key' as any);\r\n }\r\n \r\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\r\n const storageResult = await Promise.all(storageKeys.map(key => sessionStorage.get(key)));\r\n \r\n const logoutPromises: Promise[] = [];\r\n for(let i = 0; i < storageResult.length; i++) {\r\n if(storageResult[i]) {\r\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\r\n }\r\n }\r\n\r\n const clear = () => {\r\n //console.error('apiManager: logOut clear');\r\n \r\n this.baseDcId = undefined;\r\n //this.telegramMeNotify(false);\r\n IDBStorage.closeDatabases();\r\n self.postMessage({type: 'clear'});\r\n };\r\n\r\n setTimeout(clear, 1e3);\r\n\r\n //return;\r\n \r\n return Promise.all(logoutPromises).catch((error) => {\r\n error.handled = true;\r\n }).finally(clear)/* .then(() => {\r\n location.pathname = '/';\r\n }) */;\r\n }\r\n \r\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise {\r\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\r\n //const connectionType: ConnectionType = 'client';\r\n\r\n \r\n \r\n \r\n \r\n \r\n // @ts-ignore\r\n const transportType = 'websocket';\r\n \r\n\r\n if(!this.cachedNetworkers.hasOwnProperty(transportType)) {\r\n this.cachedNetworkers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const cache = this.cachedNetworkers[transportType][connectionType];\r\n if(!(dcId in cache)) {\r\n cache[dcId] = [];\r\n }\r\n \r\n const networkers = cache[dcId];\r\n // @ts-ignore\r\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (connectionType === 'download' ? 3 : 3);\r\n if(networkers.length >= maxNetworkers) {\r\n let i = networkers.length - 1, found = false;\r\n for(; i >= 0; --i) {\r\n if(networkers[i].isOnline) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n \r\n const networker = found ? networkers.splice(i, 1)[0] : networkers.pop();\r\n networkers.unshift(networker);\r\n return Promise.resolve(networker);\r\n }\r\n \r\n const getKey = [dcId, transportType, connectionType].join('-');\r\n if(this.gettingNetworkers[getKey]) {\r\n return this.gettingNetworkers[getKey];\r\n }\r\n\r\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\r\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\r\n \r\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map(key => sessionStorage.get(key)))\r\n .then(async([authKeyHex, serverSaltHex]) => {\r\n const transport = dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client');\r\n let networker: MTPNetworker;\r\n if(authKeyHex && authKeyHex.length === 512) {\r\n if(!serverSaltHex || serverSaltHex.length !== 16) {\r\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\r\n }\r\n \r\n const authKey = bytesFromHex(authKeyHex);\r\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1-hash', authKey)).slice(-8);\r\n const serverSalt = bytesFromHex(serverSaltHex);\r\n \r\n networker = networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n } else {\r\n try { // if no saved state\r\n const auth = await authorizer.auth(dcId);\r\n \r\n const storeObj = {\r\n [ak]: bytesToHex(auth.authKey),\r\n [ss]: bytesToHex(auth.serverSalt)\r\n };\r\n \r\n sessionStorage.set(storeObj);\r\n \r\n networker = networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, transport, options);\r\n } catch(error) {\r\n this.log('Get networker error', error, (error as Error).stack);\r\n delete this.gettingNetworkers[getKey];\r\n throw error;\r\n }\r\n }\r\n\r\n /* networker.onConnectionStatusChange = (online) => {\r\n console.log('status:', online);\r\n }; */\r\n \r\n delete this.gettingNetworkers[getKey];\r\n networkers.unshift(networker);\r\n this.setOnDrainIfNeeded(networker);\r\n return networker;\r\n });\r\n }\r\n\r\n public setOnDrainIfNeeded(networker: MTPNetworker) {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n const checkPromise: Promise = networker.isFileNetworker ? \r\n Promise.resolve(true) : \r\n this.getBaseDcId().then(baseDcId => networker.dcId !== baseDcId);\r\n checkPromise.then(canRelease => {\r\n if(networker.onDrain) {\r\n return;\r\n }\r\n \r\n if(canRelease) {\r\n networker.onDrain = () => {\r\n this.log('networker drain', networker.dcId);\r\n\r\n networker.onDrain = undefined;\r\n networker.destroy();\r\n networkerFactory.removeNetworker(networker);\r\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\r\n DcConfigurator.removeTransport(dcConfigurator.chosenServers, networker.transport);\r\n };\r\n\r\n networker.setDrainTimeout();\r\n }\r\n });\r\n }\r\n \r\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise {\r\n ///////this.log('Invoke api', method, params, options);\r\n\r\n /* if(!this.lol) {\r\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\r\n this.lol = true;\r\n } */\r\n\r\n const deferred = deferredPromise();\r\n\r\n let {afterMessageId, prepareTempMessageId} = options;\r\n if(prepareTempMessageId) {\r\n deferred.then(() => {\r\n delete this.afterMessageTempIds[prepareTempMessageId];\r\n });\r\n }\r\n\r\n if(MOUNT_CLASS_TO) {\r\n const startTime = Date.now();\r\n const interval = ctx.setInterval(() => {\r\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\r\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\r\n }\r\n //this.cachedUploadNetworkers[2].requestMessageStatus();\r\n }, 5e3);\r\n\r\n deferred.finally(() => {\r\n clearInterval(interval);\r\n });\r\n }\r\n\r\n const rejectPromise = (error: ApiError) => {\r\n if(!error) {\r\n error = {type: 'ERROR_EMPTY'};\r\n } else if(!isObject(error)) {\r\n error = {message: error};\r\n }\r\n \r\n deferred.reject(error);\r\n\r\n if((error.code === 401 && error.type === 'SESSION_REVOKED') || \r\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\r\n this.logOut();\r\n }\r\n\r\n if(options.ignoreErrors) {\r\n return;\r\n }\r\n \r\n if(error.code === 406) {\r\n error.handled = true;\r\n }\r\n \r\n if(!options.noErrorBox) {\r\n error.input = method;\r\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\r\n setTimeout(() => {\r\n if(!error.handled) {\r\n if(error.code === 401) {\r\n this.logOut();\r\n } else {\r\n // ErrorService.show({error: error}); // WARNING\r\n }\r\n \r\n error.handled = true;\r\n }\r\n }, 100);\r\n }\r\n };\r\n \r\n let dcId: DcId;\r\n \r\n let cachedNetworker: MTPNetworker;\r\n let stack = (new Error()).stack || 'empty stack';\r\n const performRequest = (networker: MTPNetworker) => {\r\n if(afterMessageId) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n if(after) {\r\n options.afterMessageId = after.messageId;\r\n }\r\n }\r\n\r\n const promise = (cachedNetworker = networker).wrapApiCall(method, params, options);\r\n\r\n if(prepareTempMessageId) {\r\n this.afterMessageTempIds[prepareTempMessageId] = {\r\n messageId: (options as MTMessage).messageId,\r\n promise: deferred\r\n };\r\n }\r\n\r\n return promise.then(deferred.resolve, (error: ApiError) => {\r\n //if(!options.ignoreErrors) {\r\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\r\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\r\n }\r\n \r\n if(error.code === 401 && this.baseDcId === dcId) {\r\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\r\n sessionStorage.delete('dc')\r\n sessionStorage.delete('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\r\n //this.telegramMeNotify(false);\r\n }\r\n \r\n rejectPromise(error);\r\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\r\n if(this.cachedExportPromise[dcId] === undefined) {\r\n const promise = new Promise((exportResolve, exportReject) => {\r\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\r\n this.invokeApi('auth.importAuthorization', {\r\n id: exportedAuth.id,\r\n bytes: exportedAuth.bytes\r\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\r\n }, exportReject);\r\n });\r\n \r\n this.cachedExportPromise[dcId] = promise;\r\n }\r\n \r\n this.cachedExportPromise[dcId].then(() => {\r\n //(cachedNetworker = networker).wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n this.invokeApi(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else if(error.code === 303) {\r\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\\d+)/)[2] as DcId;\r\n if(newDcId !== dcId) {\r\n if(options.dcId) {\r\n options.dcId = newDcId;\r\n } else {\r\n this.setBaseDcId(newDcId);\r\n }\r\n \r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n }\r\n } else if(error.code === 400 && error.type.indexOf('FILE_MIGRATE') === 0) {\r\n const newDcId = +error.type.match(/^(FILE_MIGRATE_)(\\d+)/)[2] as DcId;\r\n if(newDcId !== dcId) {\r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n } else if(!options.rawError && error.code === 420) {\r\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 1;\r\n \r\n if(waitTime > (options.floodMaxTimeout !== undefined ? options.floodMaxTimeout : 60) && !options.prepareTempMessageId) {\r\n return rejectPromise(error);\r\n }\r\n \r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, waitTime/* (waitTime + 5) */ * 1000); // 03.02.2020\r\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\r\n const after = this.afterMessageTempIds[afterMessageId];\r\n\r\n afterMessageId = undefined;\r\n delete options.afterMessageId;\r\n\r\n if(after) after.promise.then(() => performRequest(cachedNetworker));\r\n else performRequest(cachedNetworker);\r\n } else if(!options.rawError && error.code === 500) {\r\n const now = Date.now();\r\n if(options.stopTime) {\r\n if(now >= options.stopTime) {\r\n return rejectPromise(error);\r\n }\r\n }\r\n \r\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, options.waitTime * 1000);\r\n } else if(error.type === 'UNKNOWN') {\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, 1000);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n });\r\n }\r\n \r\n if(dcId = (options.dcId || this.baseDcId)) {\r\n this.getNetworker(dcId, options).then(performRequest, rejectPromise);\r\n } else {\r\n this.getBaseDcId().then(baseDcId => {\r\n this.getNetworker(dcId = baseDcId, options).then(performRequest, rejectPromise);\r\n });\r\n }\r\n\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiManager = new ApiManager();\r\nMOUNT_CLASS_TO.apiManager = apiManager;\r\nexport default apiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { blobConstruct, readBlobAsUint8Array } from \"../helpers/blob\";\r\n\r\nexport class FileManager {\r\n public blobSupported = true;\r\n \r\n constructor() {\r\n try {\r\n blobConstruct([], '');\r\n } catch(e) {\r\n this.blobSupported = false;\r\n }\r\n }\r\n \r\n public isAvailable() {\r\n return this.blobSupported;\r\n }\r\n \r\n public write(fileWriter: ReturnType, bytes: Uint8Array | Blob | string): Promise {\r\n if(bytes instanceof Blob) { // is file bytes\r\n return readBlobAsUint8Array(bytes).then(arr => {\r\n return fileWriter.write(arr);\r\n });\r\n } else {\r\n return fileWriter.write(bytes);\r\n }\r\n }\r\n\r\n public getFakeFileWriter(mimeType: string, saveFileCallback?: (blob: Blob) => Promise) {\r\n const blobParts: Array = [];\r\n const fakeFileWriter = {\r\n write: async(part: Uint8Array | string) => {\r\n if(!this.blobSupported) {\r\n throw false;\r\n }\r\n \r\n blobParts.push(part);\r\n },\r\n truncate: () => {\r\n blobParts.length = 0;\r\n },\r\n finalize: (saveToStorage = true) => {\r\n const blob = blobConstruct(blobParts, mimeType);\r\n\r\n if(saveToStorage && saveFileCallback) {\r\n saveFileCallback(blob);\r\n }\r\n \r\n return blob;\r\n }\r\n };\r\n \r\n return fakeFileWriter;\r\n }\r\n}\r\n\r\nexport default new FileManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport FileManager from './filemanager';\r\n//import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';\r\n//import { logger } from './polyfill';\r\n\r\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\r\n\r\nexport default class CacheStorageController {\r\n private static STORAGES: CacheStorageController[] = [];\r\n private openDbPromise: Promise;\r\n\r\n private useStorage = true;\r\n\r\n //private log: ReturnType = logger('CS');\r\n\r\n constructor(private dbName: CacheStorageDbName) {\r\n if(Modes.test) {\r\n this.dbName += '_test';\r\n }\r\n\r\n if(CacheStorageController.STORAGES.length) {\r\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\r\n }\r\n \r\n this.openDatabase();\r\n CacheStorageController.STORAGES.push(this);\r\n }\r\n\r\n private openDatabase(): Promise {\r\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\r\n }\r\n\r\n public delete(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\r\n }\r\n\r\n public deleteAll() {\r\n return caches.delete(this.dbName);\r\n }\r\n\r\n public get(entryName: string) {\r\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\r\n }\r\n\r\n public save(entryName: string, response: Response) {\r\n // return new Promise((resolve) => {}); // DEBUG\r\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\r\n }\r\n\r\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\r\n /* if(method === 'blob') {\r\n return Promise.reject();\r\n } */\r\n\r\n // const str = `get fileName: ${fileName}`;\r\n // console.time(str);\r\n return this.get(fileName).then((response) => {\r\n if(!response) {\r\n //console.warn('getFile:', response, fileName);\r\n throw 'NO_ENTRY_FOUND';\r\n }\r\n\r\n const promise = response[method]();\r\n // promise.then(() => {\r\n // console.timeEnd(str);\r\n // });\r\n return promise;\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct(blob) as Blob;\r\n }\r\n\r\n const response = new Response(blob, {\r\n headers: {\r\n 'Content-Length': '' + blob.size\r\n }\r\n });\r\n \r\n return this.save(fileName, response).then(() => blob as Blob);\r\n }\r\n\r\n public timeoutOperation(callback: (cache: Cache) => Promise) {\r\n if(!this.useStorage) {\r\n return Promise.reject('STORAGE_OFFLINE');\r\n }\r\n\r\n return new Promise(async(resolve, reject) => {\r\n let rejected = false;\r\n const timeout = setTimeout(() => {\r\n reject();\r\n //console.warn('CACHESTORAGE TIMEOUT');\r\n rejected = true;\r\n }, 15e3);\r\n\r\n try {\r\n const cache = await this.openDatabase();\r\n if(!cache) {\r\n this.useStorage = false;\r\n this.openDbPromise = undefined;\r\n throw 'no cache?';\r\n }\r\n\r\n const res = await callback(cache);\r\n\r\n if(rejected) return;\r\n resolve(res);\r\n } catch(err) {\r\n reject(err);\r\n }\r\n\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n public getFileWriter(fileName: string, mimeType: string) {\r\n const fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob).catch(() => blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n return storage.deleteAll();\r\n }\r\n }));\r\n }\r\n}\r\n\r\n//const cacheStorage = new CacheStorageController(); \r\n//MOUNT_CLASS_TO.cacheStorage = cacheStorage;\r\n//export default cacheStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov \r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { ReferenceBytes } from \"./referenceDatabase\";\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { readBlobAsArrayBuffer } from \"../../helpers/blob\";\r\nimport { CancellablePromise, deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport { notifyAll, notifySomeone } from \"../../helpers/context\";\r\nimport { getFileNameByLocation } from \"../../helpers/fileName\";\r\nimport { randomLong } from \"../../helpers/random\";\r\nimport { InputFile, InputFileLocation, InputWebFileLocation, UploadFile, UploadWebFile } from \"../../layer\";\r\nimport { DcId, WorkerTaskVoidTemplate } from \"../../types\";\r\nimport CacheStorageController from \"../cacheStorage\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport FileManager from \"../filemanager\";\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport apiManager from \"./apiManager\";\r\nimport { isWebpSupported } from \"./mtproto.worker\";\r\nimport { bytesToHex } from \"../../helpers/bytes\";\r\nimport assumeType from \"../../helpers/assumeType\";\r\nimport ctx from \"../../environment/ctx\";\r\n\r\ntype Delayed = {\r\n offset: number, \r\n writeFilePromise: CancellablePromise, \r\n writeFileDeferred: CancellablePromise\r\n};\r\n\r\nexport type DownloadOptions = {\r\n dcId: DcId, \r\n location: InputFileLocation | InputWebFileLocation, \r\n size?: number,\r\n fileName?: string,\r\n mimeType?: string,\r\n limitPart?: number,\r\n queueId?: number,\r\n onlyCache?: boolean,\r\n};\r\n\r\nexport type MyUploadFile = UploadFile.uploadFile | UploadWebFile.uploadWebFile;\r\n\r\nexport interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n};\r\n\r\nexport interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\r\n type: 'refreshReference',\r\n payload: ReferenceBytes,\r\n originalPayload: ReferenceBytes\r\n};\r\n\r\nconst MAX_FILE_SAVE_SIZE = 20e6;\r\n\r\nexport class ApiFileManager {\r\n private cacheStorage = new CacheStorageController('cachedFiles');\r\n\r\n private cachedDownloadPromises: {\r\n [fileName: string]: CancellablePromise\r\n } = {};\r\n\r\n private uploadPromises: {\r\n [fileName: string]: Set>\r\n } = {};\r\n\r\n private downloadPulls: {\r\n [dcId: string]: Array<{\r\n id: number,\r\n queueId: number,\r\n cb: () => Promise,\r\n deferred: {\r\n resolve: (...args: any[]) => void,\r\n reject: (...args: any[]) => void\r\n },\r\n activeDelta: number\r\n }>\r\n } = {};\r\n private downloadActives: {[dcId: string]: number} = {};\r\n\r\n public webpConvertPromises: {[fileName: string]: CancellablePromise} = {};\r\n public refreshReferencePromises: {\r\n [referenceHex: string]: {\r\n deferred: CancellablePromise,\r\n timeout: number\r\n }\r\n } = {};\r\n\r\n private log: ReturnType = logger('AFM', LogTypes.Error | LogTypes.Log);\r\n private tempId = 0;\r\n private queueId = 0;\r\n private debug = Modes.debug;\r\n\r\n constructor() {\r\n setInterval(() => { // clear old promises\r\n for(const hex in this.refreshReferencePromises) {\r\n const {deferred} = this.refreshReferencePromises[hex];\r\n if(deferred.isFulfilled || deferred.isRejected) {\r\n delete this.refreshReferencePromises[hex];\r\n }\r\n }\r\n }, 1800e3);\r\n }\r\n\r\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\r\n private downloadRequest(dcId: number, id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\r\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise, activeDelta: number, queueId: number = 0) {\r\n if(this.downloadPulls[dcId] === undefined) {\r\n this.downloadPulls[dcId] = [];\r\n this.downloadActives[dcId] = 0;\r\n }\r\n\r\n const downloadPull = this.downloadPulls[dcId];\r\n\r\n const promise = new Promise((resolve, reject) => {\r\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\r\n });\r\n\r\n setTimeout(() => {\r\n this.downloadCheck(dcId);\r\n }, 0);\r\n\r\n return promise;\r\n }\r\n\r\n private downloadCheck(dcId: string | number) {\r\n const downloadPull = this.downloadPulls[dcId];\r\n const downloadLimit = dcId === 'upload' ? 24 : 36;\r\n //const downloadLimit = Infinity;\r\n\r\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull || !downloadPull.length) {\r\n return false;\r\n }\r\n\r\n //const data = downloadPull.shift();\r\n const data = downloadPull.findAndSplice(d => d.queueId === 0) || downloadPull.findAndSplice(d => d.queueId === this.queueId) || downloadPull.shift();\r\n const activeDelta = data.activeDelta || 1;\r\n\r\n this.downloadActives[dcId] += activeDelta;\r\n \r\n data.cb()\r\n .then((result) => {\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.resolve(result);\r\n }, (error: Error) => {\r\n // @ts-ignore\r\n if(!error || !error.type || (error.type !== 'DOWNLOAD_CANCELED' && error.type !== 'UPLOAD_CANCELED')) {\r\n this.log.error('downloadCheck error:', error);\r\n }\r\n\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.reject(error);\r\n });\r\n }\r\n\r\n public setQueueId(queueId: number) {\r\n //this.log.error('setQueueId', queueId);\r\n this.queueId = queueId;\r\n }\r\n\r\n private getFileStorage() {\r\n return this.cacheStorage;\r\n }\r\n\r\n public cancelDownload(fileName: string) {\r\n const promises = (this.cachedDownloadPromises[fileName] ? [this.cachedDownloadPromises[fileName]] : undefined) || \r\n (this.uploadPromises[fileName] ? Array.from(this.uploadPromises[fileName]) : []);\r\n let canceled = false;\r\n for(let i = 0, length = promises.length; i < length; ++i) {\r\n const promise = promises[i];\r\n if(promise && !promise.isRejected && !promise.isFulfilled) {\r\n promise.cancel();\r\n canceled = true;\r\n }\r\n }\r\n\r\n return canceled;\r\n }\r\n\r\n public requestWebFilePart(dcId: DcId, location: InputWebFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\r\n checkCancel && checkCancel();\r\n\r\n return apiManager.invokeApi('upload.getWebFile', {\r\n location,\r\n offset,\r\n limit\r\n }, {\r\n dcId,\r\n fileDownload: true\r\n });\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n public requestFilePart(dcId: DcId, location: InputFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\r\n checkCancel && checkCancel();\r\n\r\n const invoke = async(): Promise => {\r\n checkCancel && checkCancel(); // do not remove async, because checkCancel will throw an error\r\n\r\n const promise = apiManager.invokeApi('upload.getFile', {\r\n location,\r\n offset,\r\n limit\r\n }, {\r\n dcId,\r\n fileDownload: true\r\n }) as Promise;\r\n\r\n return promise.catch((err) => {\r\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n\r\n throw err;\r\n });\r\n };\r\n\r\n assumeType(location);\r\n const reference = location.file_reference;\r\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\r\n location.checkedReference = true;\r\n const hex = bytesToHex(reference);\r\n if(this.refreshReferencePromises[hex]) {\r\n return this.refreshReference(location).then(invoke);\r\n }\r\n }\r\n\r\n return invoke();\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n /* private convertBlobToBytes(blob: Blob) {\r\n return blob.arrayBuffer().then(buffer => new Uint8Array(buffer));\r\n } */\r\n\r\n private getDelta(bytes: number) {\r\n return bytes / 1024 / 128;\r\n }\r\n\r\n private getLimitPart(size: number): number {\r\n let bytes: number;\r\n\r\n bytes = 512;\r\n /* if(size < 1e6 || !size) bytes = 512;\r\n else if(size < 3e6) bytes = 256;\r\n else bytes = 128; */\r\n\r\n return bytes * 1024;\r\n }\r\n\r\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\r\n //this.log('uncompressTGS', bytes, bytes.slice().buffer);\r\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\r\n return cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, true) as Promise;\r\n };\r\n\r\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\r\n const convertPromise = deferredPromise();\r\n\r\n const task = {type: 'convertWebp', payload: {fileName, bytes}};\r\n notifySomeone(task);\r\n return this.webpConvertPromises[fileName] = convertPromise;\r\n };\r\n\r\n private refreshReference(inputFileLocation: InputFileLocation) {\r\n const reference = (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference;\r\n const hex = bytesToHex(reference);\r\n\r\n let r = this.refreshReferencePromises[hex];\r\n if(!r) {\r\n const deferred = deferredPromise();\r\n\r\n r = this.refreshReferencePromises[hex] = {\r\n deferred,\r\n timeout: ctx.setTimeout(() => {\r\n this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\r\n deferred.reject('REFERENCE_IS_NOT_REFRESHED');\r\n }, 60000)\r\n };\r\n\r\n deferred.finally(() => {\r\n clearTimeout(r.timeout);\r\n });\r\n\r\n const task = {type: 'refreshReference', payload: reference};\r\n notifySomeone(task);\r\n }\r\n\r\n // have to replace file_reference in any way, because location can be different everytime if it's stream\r\n return r.deferred.then(reference => {\r\n if(hex === bytesToHex(reference)) {\r\n throw 'REFERENCE_IS_NOT_REFRESHED';\r\n }\r\n\r\n (inputFileLocation as InputFileLocation.inputDocumentFileLocation).file_reference = reference;\r\n });\r\n }\r\n\r\n public downloadFile(options: DownloadOptions): CancellablePromise {\r\n if(!FileManager.isAvailable()) {\r\n return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'});\r\n }\r\n\r\n const size = options.size ?? 0;\r\n const {dcId, location} = options;\r\n\r\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\r\n\r\n if(options.mimeType === 'image/webp' && !isWebpSupported()) {\r\n process = this.convertWebp;\r\n options.mimeType = 'image/png';\r\n } else if(options.mimeType === 'application/x-tgsticker') {\r\n process = this.uncompressTGS;\r\n options.mimeType = 'application/json';\r\n }\r\n\r\n const fileName = getFileNameByLocation(location, {fileName: options.fileName});\r\n const cachedPromise = this.cachedDownloadPromises[fileName];\r\n const fileStorage = this.getFileStorage();\r\n\r\n this.debug && this.log('downloadFile', fileName, size, location, options.mimeType);\r\n\r\n /* if(options.queueId) {\r\n this.log.error('downloadFile queueId:', fileName, options.queueId);\r\n } */\r\n\r\n if(cachedPromise) {\r\n //this.log('downloadFile cachedPromise');\r\n\r\n if(size) {\r\n return cachedPromise.then((blob: Blob) => {\r\n if(blob.size < size) {\r\n this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\r\n\r\n return this.deleteFile(fileName).then(() => {\r\n return this.downloadFile(options);\r\n }).catch(() => {\r\n return this.downloadFile(options);\r\n });\r\n } else {\r\n return blob;\r\n }\r\n });\r\n } else {\r\n return cachedPromise;\r\n }\r\n }\r\n\r\n const deferred = deferredPromise();\r\n const mimeType = options.mimeType || 'image/jpeg';\r\n\r\n let canceled = false;\r\n let resolved = false;\r\n let cacheFileWriter: ReturnType;\r\n let errorHandler = (error: any) => {\r\n delete this.cachedDownloadPromises[fileName];\r\n deferred.reject(error);\r\n errorHandler = () => {};\r\n\r\n if(cacheFileWriter && (!error || error.type !== 'DOWNLOAD_CANCELED')) {\r\n cacheFileWriter.truncate();\r\n }\r\n };\r\n\r\n const id = this.tempId++;\r\n\r\n fileStorage.getFile(fileName).then(async(blob: Blob) => {\r\n //this.log('maybe cached', fileName);\r\n //throw '';\r\n\r\n if(blob.size < size) {\r\n //this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size);\r\n await this.deleteFile(fileName);\r\n throw false;\r\n }\r\n\r\n deferred.resolve(blob);\r\n }).catch(() => {\r\n //this.log('not cached', fileName);\r\n const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType);\r\n\r\n fileWriterPromise.then((fileWriter) => {\r\n cacheFileWriter = fileWriter;\r\n const limit = options.limitPart || this.getLimitPart(size);\r\n let offset: number;\r\n let startOffset = 0;\r\n let writeFilePromise: CancellablePromise = Promise.resolve(),\r\n writeFileDeferred: CancellablePromise;\r\n //const maxRequests = 13107200 / limit; // * 100 Mb speed\r\n const maxRequests = Infinity;\r\n\r\n //console.error('maxRequests', maxRequests);\r\n\r\n const processDownloaded = async(bytes: Uint8Array, offset: number) => {\r\n if(process) {\r\n //const perf = performance.now();\r\n const processed = await process(bytes, fileName);\r\n //this.log('downloadFile process downloaded time', performance.now() - perf, mimeType, process);\r\n return processed;\r\n }\r\n \r\n return bytes;\r\n };\r\n\r\n const r = location._ === 'inputWebFileLocation' ? this.requestWebFilePart.bind(this) : this.requestFilePart.bind(this);\r\n\r\n const delayed: Delayed[] = [];\r\n offset = startOffset;\r\n do {\r\n ////this.log('offset:', startOffset);\r\n writeFileDeferred = deferredPromise();\r\n delayed.push({offset, writeFilePromise, writeFileDeferred});\r\n writeFilePromise = writeFileDeferred;\r\n offset += limit;\r\n } while(offset < size);\r\n\r\n let done = 0;\r\n const superpuper = async() => {\r\n //if(!delayed.length) return;\r\n\r\n const {offset, writeFilePromise, writeFileDeferred} = delayed.shift();\r\n try {\r\n // @ts-ignore\r\n const result = await r(dcId, location as any, offset, limit, id, options.queueId, checkCancel);\r\n\r\n const bytes = result.bytes;\r\n\r\n if(delayed.length) {\r\n superpuper();\r\n }\r\n\r\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\r\n const isFinal = offset + limit >= size || !bytes.byteLength;\r\n if(bytes.byteLength) {\r\n //done += limit;\r\n done += bytes.byteLength;\r\n\r\n //if(!isFinal) {\r\n ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred);\r\n deferred.notify({done, offset, total: size});\r\n //}\r\n\r\n const processedResult = await processDownloaded(bytes, offset);\r\n checkCancel();\r\n\r\n await writeFilePromise;\r\n checkCancel();\r\n\r\n await FileManager.write(fileWriter, processedResult);\r\n }\r\n\r\n writeFileDeferred.resolve();\r\n\r\n if(isFinal) {\r\n resolved = true;\r\n\r\n deferred.resolve(fileWriter.finalize(size < MAX_FILE_SAVE_SIZE));\r\n }\r\n } catch(err) {\r\n errorHandler(err);\r\n }\r\n };\r\n\r\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\r\n superpuper();\r\n }\r\n }).catch((err) => {\r\n if(!['STORAGE_OFFLINE'].includes(err)) {\r\n this.log.error('saveFile error:', err);\r\n }\r\n });\r\n });\r\n\r\n const checkCancel = () => {\r\n if(canceled) {\r\n const error = new Error('Canceled');\r\n // @ts-ignore\r\n error.type = 'DOWNLOAD_CANCELED';\r\n throw error;\r\n }\r\n };\r\n\r\n deferred.cancel = () => {\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n delete this.cachedDownloadPromises[fileName];\r\n errorHandler({type: 'DOWNLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number, offset: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n this.cachedDownloadPromises[fileName] = deferred;\r\n\r\n deferred.finally(() => {\r\n delete this.cachedDownloadPromises[fileName];\r\n });\r\n\r\n return deferred;\r\n }\r\n\r\n private deleteFile(fileName: string) {\r\n //this.log('will delete file:', fileName);\r\n delete this.cachedDownloadPromises[fileName];\r\n return this.getFileStorage().delete(fileName);\r\n }\r\n\r\n public uploadFile({file, fileName}: {file: Blob | File, fileName: string}) {\r\n const fileSize = file.size, \r\n isBigFile = fileSize >= 10485760;\r\n\r\n let canceled = false,\r\n resolved = false,\r\n doneParts = 0,\r\n partSize = 262144; // 256 Kb\r\n\r\n /* if(fileSize > (524288 * 3000)) {\r\n partSize = 1024 * 1024;\r\n activeDelta = 8;\r\n } else */if(fileSize > 67108864) {\r\n partSize = 524288;\r\n } else if(fileSize < 102400) {\r\n partSize = 32768;\r\n }\r\n\r\n const activeDelta = this.getDelta(partSize);\r\n\r\n const totalParts = Math.ceil(fileSize / partSize);\r\n const fileId = randomLong();\r\n\r\n let _part = 0;\r\n\r\n const resultInputFile: InputFile = {\r\n _: isBigFile ? 'inputFileBig' : 'inputFile',\r\n id: fileId as any,\r\n parts: totalParts,\r\n name: fileName,\r\n md5_checksum: ''\r\n };\r\n\r\n const deferredHelper: {\r\n resolve?: (input: typeof resultInputFile) => void,\r\n reject?: (error: any) => void,\r\n notify?: (details: {done: number, total: number}) => void\r\n } = {\r\n notify: (details: {done: number, total: number}) => {}\r\n };\r\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\r\n if(totalParts > 4000) {\r\n return reject({type: 'FILE_TOO_BIG'});\r\n }\r\n\r\n deferredHelper.resolve = resolve;\r\n deferredHelper.reject = reject;\r\n });\r\n Object.assign(deferred, deferredHelper);\r\n\r\n if(totalParts > 4000) {\r\n return deferred;\r\n }\r\n \r\n let errorHandler = (error: any) => {\r\n if(error?.type !== 'UPLOAD_CANCELED') {\r\n this.log.error('Up Error', error);\r\n }\r\n\r\n deferred.reject(error);\r\n canceled = true;\r\n errorHandler = () => {};\r\n };\r\n\r\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\r\n\r\n const id = this.tempId++;\r\n\r\n /* setInterval(() => {\r\n console.log(file);\r\n }, 1e3); */\r\n\r\n const self = this;\r\n function* generator() {\r\n for(let offset = 0; offset < fileSize; offset += partSize) {\r\n const part = _part++; // 0, 1\r\n yield self.downloadRequest('upload', id, () => {\r\n const blob = file.slice(offset, offset + partSize);\r\n\r\n return readBlobAsArrayBuffer(blob).then(buffer => {\r\n if(canceled) {\r\n throw {type: 'UPLOAD_CANCELED'};\r\n }\r\n\r\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\r\n\r\n /* const u = new Uint8Array(buffer.byteLength);\r\n for(let i = 0; i < u.length; ++i) {\r\n //u[i] = Math.random() * 255 | 0;\r\n u[i] = 0;\r\n }\r\n buffer = u.buffer; */\r\n \r\n /* setTimeout(() => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n\r\n self.log('done part', part, doneParts);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, 1250);\r\n return; */\r\n\r\n return apiManager.invokeApi(method, {\r\n file_id: fileId,\r\n file_part: part,\r\n file_total_parts: totalParts,\r\n bytes: buffer/* new Uint8Array(buffer) */\r\n } as any, {\r\n //startMaxLength: partSize + 256,\r\n fileUpload: true\r\n }).then((result) => {\r\n doneParts++;\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, errorHandler);\r\n });\r\n }, activeDelta).catch(errorHandler);\r\n }\r\n }\r\n\r\n const it = generator();\r\n const process = () => {\r\n if(canceled) return;\r\n const r = it.next();\r\n if(r.done || canceled) return;\r\n (r.value as Promise).then(process);\r\n };\r\n\r\n const maxRequests = Infinity;\r\n //const maxRequests = 10;\r\n /* for(let i = 0; i < 10; ++i) {\r\n process();\r\n } */\r\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\r\n process();\r\n }\r\n\r\n deferred.cancel = () => {\r\n //this.log('cancel upload', canceled, resolved);\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n errorHandler({type: 'UPLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n deferred.finally(() => {\r\n set.delete(deferred);\r\n if(!set.size) {\r\n delete this.uploadPromises[fileName];\r\n }\r\n });\r\n\r\n const set = this.uploadPromises[fileName] ?? (this.uploadPromises[fileName] = new Set());\r\n set.add(deferred);\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiFileManager = new ApiFileManager();\r\nMOUNT_CLASS_TO.apiFileManager = apiFileManager;\r\nexport default apiFileManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { InputFileLocation, InputStickerSet, InputWebFileLocation } from \"../layer\";\r\nimport type { DownloadOptions } from \"../lib/mtproto/apiFileManager\";\r\n\r\nconst FILENAME_JOINER = '_';\r\n\r\nexport function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{\r\n fileName: string\r\n}>) {\r\n const fileName = '';//(options?.fileName || '').split('.');\r\n const ext = fileName[fileName.length - 1] || '';\r\n\r\n let str: string;\r\n switch(location._) {\r\n case 'inputPhotoFileLocation': {\r\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputDocumentFileLocation': {\r\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputPeerPhotoFileLocation':\r\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\r\n break;\r\n \r\n case 'inputStickerSetThumb': {\r\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id || \r\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name || \r\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon || \r\n location.stickerset._;\r\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputFileLocation': {\r\n str = location.volume_id + '_' + location.local_id;\r\n break;\r\n }\r\n\r\n case 'inputWebFileLocation': {\r\n str = ['webFile', location.url].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n default: {\r\n console.error('Unrecognized location:', location);\r\n str = '';\r\n break;\r\n }\r\n }\r\n\r\n return str + (ext ? '.' + ext : ext);\r\n}\r\n\r\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\r\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\r\n //console.log('getFileURL', location);\r\n //const perf = performance.now();\r\n const encoded = encodeURIComponent(JSON.stringify(options));\r\n //console.log('getFileURL encode:', performance.now() - perf, encoded);\r\n\r\n return '/' + type + '/' + encoded;\r\n}\r\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// just to include\nimport '../polyfill';\n\nimport type { LocalStorageProxyTask } from '../localStorage';\nimport type { WebpConvertTask } from '../webp/webpWorkerController';\nimport type { ToggleStorageTask } from './mtprotoworker';\nimport type { RefreshReferenceTaskResponse } from './apiFileManager';\nimport apiManager from \"./apiManager\";\nimport cryptoWorker from \"../crypto/cryptoworker\";\nimport networkerFactory from \"./networkerFactory\";\nimport apiFileManager from './apiFileManager';\nimport { notifyAll } from '../../helpers/context';\nimport CacheStorageController from '../cacheStorage';\nimport sessionStorage from '../sessionStorage';\nimport { socketsProxied } from './transports/socketProxied';\nimport { bytesToHex } from '../../helpers/bytes';\nimport ctx from '../../environment/ctx';\n\nlet webpSupported = false;\nexport const isWebpSupported = () => {\n return webpSupported;\n};\n\nnetworkerFactory.setUpdatesProcessor((obj) => {\n notifyAll({update: obj});\n});\n\nnetworkerFactory.onConnectionStatusChange = (status) => {\n notifyAll({type: 'connectionStatusChange', payload: status});\n};\n\nconst taskListeners = {\n convertWebp: (task: WebpConvertTask) => {\n const {fileName, bytes} = task.payload;\n const deferred = apiFileManager.webpConvertPromises[fileName];\n if(deferred) {\n deferred.resolve(bytes);\n delete apiFileManager.webpConvertPromises[fileName];\n }\n },\n\n webpSupport: (task: any) => {\n webpSupported = task.payload;\n },\n\n socketProxy: (task: any) => {\n const socketTask = task.payload;\n const id = socketTask.id;\n \n const socketProxied = socketsProxied.get(id);\n if(socketTask.type === 'message') {\n socketProxied.dispatchEvent('message', socketTask.payload);\n } else if(socketTask.type === 'open') {\n socketProxied.dispatchEvent('open');\n } else if(socketTask.type === 'close') {\n socketProxied.dispatchEvent('close');\n socketsProxied.delete(id);\n }\n },\n\n localStorageProxy: (task: LocalStorageProxyTask) => {\n sessionStorage.finishTask(task.id, task.payload);\n },\n\n userAgent: (task: any) => {\n networkerFactory.userAgent = task.payload;\n },\n\n online: () => {\n networkerFactory.forceReconnectTimeout();\n },\n\n forceReconnect: () => {\n networkerFactory.forceReconnect();\n },\n\n toggleStorage: (task: ToggleStorageTask) => {\n const enabled = task.payload;\n // AppStorage.toggleStorage(enabled);\n CacheStorageController.toggleStorage(enabled);\n },\n\n refreshReference: (task: RefreshReferenceTaskResponse) => {\n const hex = bytesToHex(task.originalPayload);\n const r = apiFileManager.refreshReferencePromises[hex];\n const deferred = r?.deferred;\n if(deferred) {\n if(task.error) {\n deferred.reject(task.error);\n } else {\n deferred.resolve(task.payload);\n }\n }\n }\n};\n\nconst onMessage = async(e: any) => {\n try {\n const task: {\n task: string,\n taskId: number,\n args: any[],\n type?: string\n } = e.data;\n const taskId = task.taskId;\n\n // @ts-ignore\n const f = taskListeners[task.type];\n if(f) {\n f(task);\n return;\n }\n\n if(!task.task) {\n return;\n }\n \n switch(task.task) {\n case 'computeSRP':\n case 'gzipUncompress':\n return cryptoWorker.invokeCrypto(task.task, ...task.args as any).then(result => {\n notifyAll({taskId, result});\n });\n \n case 'requestFilePart':\n case 'setQueueId':\n case 'cancelDownload':\n case 'uploadFile':\n case 'downloadFile': {\n try {\n // @ts-ignore\n let result: any = apiFileManager[task.task].apply(apiFileManager, task.args);\n \n if(result instanceof Promise) {\n /* (result as ReturnType).notify = (progress: {done: number, total: number, offset: number}) => {\n notify({progress: {fileName, ...progress}});\n }; */\n result = await result;\n }\n \n notifyAll({taskId, result});\n } catch(error) {\n notifyAll({taskId, error});\n }\n\n break;\n }\n\n case 'getNetworker': {\n // @ts-ignore\n apiManager[task.task].apply(apiManager, task.args).finally(() => {\n notifyAll({taskId, result: null});\n });\n \n break;\n }\n\n case 'setLanguage':\n case 'startAll':\n case 'stopAll': {\n // @ts-ignore\n networkerFactory[task.task].apply(networkerFactory, task.args);\n break;\n }\n \n default: {\n try {\n // @ts-ignore\n let result = apiManager[task.task].apply(apiManager, task.args);\n \n if(result instanceof Promise) {\n result = await result;\n }\n\n //console.log(notifyAll);\n \n notifyAll({taskId, result});\n } catch(error) {\n notifyAll({taskId, error});\n }\n \n //throw new Error('Unknown task: ' + task.task);\n break;\n }\n }\n } catch(err) {\n console.error('worker task error:', err);\n }\n};\n\n//console.log('[WORKER] Will send ready', Date.now() / 1000);\nctx.addEventListener('message', onMessage);\nnotifyAll('ready');\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/sw.js b/public/sw.js index 1df2a72b..39feee5a 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1,4 +1,4 @@ -var serviceWorkerOption = {"assets":["/0.acb684dc35d9188bd6be.chunk.js","/1.90adb57fb90001b6aa19.chunk.js","/12.287fcbd640751db5e44c.chunk.js","/13.c0ce6dfb89e386f370a8.chunk.js","/14.f1740ad881f9dd808262.chunk.js","/15.04217e6c6e21ea0189db.chunk.js","/16.b3f22524b150bb5fac27.chunk.js","/17.6eeae36d1ceb661e97fa.chunk.js","/18.2ffaa556b58a70d80bd8.chunk.js","/19.804c41f1066e7188e13a.chunk.js","/2.8e2ae984d68e67fdf8a4.chunk.js","/20.be4f633cc12b0fd8e5a2.chunk.js","/21.0d6505cd9495fe305ff6.chunk.js","/22.2635711e4f30bee63506.chunk.js","/23.605f4acbc5d2d512692f.chunk.js","/24.92df5f1db24f05b27e64.chunk.js","/25.f3627972e99fbfd11062.chunk.js","/26.b22c8de7fb72959da42f.chunk.js","/27.d828877399fdc766a0f1.chunk.js","/28.54c1be0be6cd63675640.chunk.js","/29.2d84e7e951c2722718bc.chunk.js","/3.ecfbd0f9b839f0b7d92f.chunk.js","/30.db25542edbf0f0900275.chunk.js","/31.8c3b6a0d1d8bf16646eb.chunk.js","/4.bf32a9fbeca385c5c9e9.chunk.js","/5.30d45c9c9fc91ab968c5.chunk.js","/6.848a1b33f7636a89b087.chunk.js","/7.83a2dfdd0ee504f81f0b.chunk.js","/8.f362ee1d655a5699d64f.chunk.js","/9.3edc09b4dc478113ee21.chunk.js","/main.8169b7c35af184a7ec21.bundle.js","/main.fa15c9301492b32a19f6.css","/mtproto.worker.08024df6e720e6031331.bundle.worker.js","/npm.qr-code-styling.868f37c7ef08036b894a.chunk.js","/rlottie.worker.6777ef401e7048467332.bundle.worker.js","/style-desktop.9d7b485ed526720a3aad.css","/webp.worker.bd598dc02a03fd59d71a.bundle.worker.js"]}; +var serviceWorkerOption = {"assets":["/0.acb684dc35d9188bd6be.chunk.js","/1.8ebe82cad4450b8187c1.chunk.js","/12.287fcbd640751db5e44c.chunk.js","/13.c0ce6dfb89e386f370a8.chunk.js","/14.f1740ad881f9dd808262.chunk.js","/15.1a3e11966cccf1381885.chunk.js","/16.b3f22524b150bb5fac27.chunk.js","/17.6eeae36d1ceb661e97fa.chunk.js","/18.2ffaa556b58a70d80bd8.chunk.js","/19.804c41f1066e7188e13a.chunk.js","/2.8e2ae984d68e67fdf8a4.chunk.js","/20.be4f633cc12b0fd8e5a2.chunk.js","/21.0d6505cd9495fe305ff6.chunk.js","/22.2635711e4f30bee63506.chunk.js","/23.605f4acbc5d2d512692f.chunk.js","/24.92df5f1db24f05b27e64.chunk.js","/25.f3627972e99fbfd11062.chunk.js","/26.b22c8de7fb72959da42f.chunk.js","/27.d828877399fdc766a0f1.chunk.js","/28.54c1be0be6cd63675640.chunk.js","/29.2d84e7e951c2722718bc.chunk.js","/3.ecfbd0f9b839f0b7d92f.chunk.js","/30.db25542edbf0f0900275.chunk.js","/31.8c3b6a0d1d8bf16646eb.chunk.js","/4.bf32a9fbeca385c5c9e9.chunk.js","/5.30d45c9c9fc91ab968c5.chunk.js","/6.848a1b33f7636a89b087.chunk.js","/7.83a2dfdd0ee504f81f0b.chunk.js","/8.f362ee1d655a5699d64f.chunk.js","/9.3edc09b4dc478113ee21.chunk.js","/main.3f7a70559679af85e450.bundle.js","/main.fa15c9301492b32a19f6.css","/mtproto.worker.ba792293d0a9e46f72b3.bundle.worker.js","/npm.qr-code-styling.868f37c7ef08036b894a.chunk.js","/rlottie.worker.6777ef401e7048467332.bundle.worker.js","/style-desktop.9d7b485ed526720a3aad.css","/webp.worker.bd598dc02a03fd59d71a.bundle.worker.js"]}; !function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";n.r(t),n.d(t,"log",(function(){return H})),n.d(t,"deferredPromises",(function(){return Q}));var o={test:location.search.indexOf("test=1")>0,debug:location.search.indexOf("debug=1")>0,http:!1,ssl:!0,multipleConnections:!0,asServiceWorker:!1};const r=o.debug;"undefined"!=typeof window?window:self;var i,s=r;!function(e){e[e.None=0]="None",e[e.Error=1]="Error",e[e.Warn=2]="Warn",e[e.Log=4]="Log",e[e.Debug=8]="Debug"}(i||(i={}));const a=[i.None,i.Error,i.Warn,i.Log,i.Debug],c=Date.now();function l(){return"["+((Date.now()-c)/1e3).toFixed(3)+"]"}function u(e,t=i.Log|i.Warn|i.Error,n=!1){function o(...n){return t&i.Log&&console.log(l(),e,...n)}return s||n||(t=i.Error),o.warn=function(...n){return t&i.Warn&&console.warn(l(),e,...n)},o.info=function(...n){return t&i.Log&&console.info(l(),e,...n)},o.error=function(...n){return t&i.Error&&console.error(l(),e,...n)},o.trace=function(...n){return t&i.Log&&console.trace(l(),e,...n)},o.debug=function(...n){return t&i.Debug&&console.debug(l(),e,...n)},o.setPrefix=function(t){e="["+t+"]:"},o.setPrefix(e),o.setLevel=function(e){t=a.slice(0,e+1).reduce((e,t)=>e|t,0)},o}var h=function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))};const d=self;function f(e){return e.ok&&200===e.status}function g(e){return Promise.race([e,(t=1e4,new Promise(e=>{setTimeout(e,t)})).then(()=>Promise.reject())]);var t}function p(e,t){return new Promise(n=>{const o=new FileReader;o.addEventListener("loadend",e=>n(e.target.result)),o[t](e)})}function m(e){return function(e){return p(e,"readAsArrayBuffer")}(e).then(e=>new Uint8Array(e))}function v(e,t=""){let n;const o=function(e){if(-1===["image/jpeg","image/png","image/gif","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","application/json","application/pdf"].indexOf(e))return"application/octet-stream";return e}(t);try{n=new Blob(e,{type:o})}catch(t){let r=new BlobBuilder;e.forEach(e=>{r.append(e)}),n=r.getBlob(o)}return n}function w(){}const y="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,b="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,S=()=>self.clients.matchAll({includeUncontrolled:!1,type:"window"}),P=(e,...t)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then(n=>{n.length&&n.slice(e?0:-1).forEach(e=>{e.postMessage(...t)})})},A=(...e)=>{self.postMessage(...e)},O=()=>{};b&&P.bind(null,!1),b&&P.bind(null,!0);var _=function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))};var T=new class{constructor(){this.blobSupported=!0;try{v([],"")}catch(e){this.blobSupported=!1}}isAvailable(){return this.blobSupported}write(e,t){return t instanceof Blob?m(t).then(t=>e.write(t)):e.write(t)}getFakeFileWriter(e,t){const n=[];return{write:e=>_(this,void 0,void 0,(function*(){if(!this.blobSupported)throw!1;n.push(e)})),truncate:()=>{n.length=0},finalize:(o=!0)=>{const r=v(n,e);return o&&t&&t(r),r}}}},x=function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))};class j{constructor(e){this.dbName=e,this.useStorage=!0,o.test&&(this.dbName+="_test"),j.STORAGES.length&&(this.useStorage=j.STORAGES[0].useStorage),this.openDatabase(),j.STORAGES.push(this)}openDatabase(){var e;return null!==(e=this.openDbPromise)&&void 0!==e?e:this.openDbPromise=caches.open(this.dbName)}delete(e){return this.timeoutOperation(t=>t.delete("/"+e))}deleteAll(){return caches.delete(this.dbName)}get(e){return this.timeoutOperation(t=>t.match("/"+e))}save(e,t){return this.timeoutOperation(n=>n.put("/"+e,t))}getFile(e,t="blob"){return this.get(e).then(e=>{if(!e)throw"NO_ENTRY_FOUND";return e[t]()})}saveFile(e,t){t instanceof Blob||(t=v(t));const n=new Response(t,{headers:{"Content-Length":""+t.size}});return this.save(e,n).then(()=>t)}timeoutOperation(e){return this.useStorage?new Promise((t,n)=>x(this,void 0,void 0,(function*(){let o=!1;const r=setTimeout(()=>{n(),o=!0},15e3);try{const n=yield this.openDatabase();if(!n)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const r=yield e(n);if(o)return;t(r)}catch(e){n(e)}clearTimeout(r)}))):Promise.reject("STORAGE_OFFLINE")}getFileWriter(e,t){const n=T.getFakeFileWriter(t,t=>this.saveFile(e,t).catch(()=>t));return Promise.resolve(n)}static toggleStorage(e){return Promise.all(this.STORAGES.map(t=>{if(t.useStorage=e,!e)return t.deleteAll()}))}}j.STORAGES=[];var E=function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))};const C=new j("cachedStreamChunks");setInterval(()=>C.timeoutOperation(e=>e.keys().then(t=>{const n=new Map,o=Date.now()/1e3|0;for(const e of t){const t=e.url.match(/\/(\d+?)\?/);t&&!n.has(t[1])&&n.set(t[1],e)}const r=[];for(const[t,i]of n){const n=e.match(i).then(n=>{if(+n.headers.get("Time-Cached")+86400<=o)return H("will delete stream chunk:",t),e.delete(i,{ignoreSearch:!0,ignoreVary:!0})});r.push(n)}return Promise.all(r)})),18e5),setInterval(()=>{S().then(e=>{for(const[t,n]of Q)if(!e.find(e=>e.id===t)){for(const e in n){n[e].reject()}Q.delete(t)}})},12e4);const D=new Map;class k{constructor(e){this.info=e,this.loadedOffsets=new Set,this.destroy=()=>{D.delete(this.id)},this.id=k.getId(e),D.set(this.id,this),this.limitPart=e.size>78643200?R:F,this.destroyDebounced=function(e,t,n=!0,o=!0){let r,i,s,a,c=!1;return(...l)=>(i||(i=new Promise((e,t)=>(s=e,a=t))),r?(clearTimeout(r),c=!0,a(),i=new Promise((e,t)=>(s=e,a=t))):n&&(s(e(...l)),c=!1),r=setTimeout(()=>{!o||n&&!c||s(e(...l)),r=i=s=a=void 0,c=!1},t),i.catch(()=>{}),i)}(this.destroy,15e4,!1,!0)}requestFilePartFromWorker(e,t,n=!1){return E(this,void 0,void 0,(function*(){const o={type:"requestFilePart",payload:[this.info.dcId,this.info.location,e,t]},r=JSON.stringify(o);o.id=r;const i=yield S().then(e=>{if(e.length)return e.find(e=>Q.has(e.id))||e[0]});if(!i)throw new Error("no window");let s=Q.get(i.id);s||Q.set(i.id,s={});let a=s[r];if(a)return a.then(e=>e.bytes);i.postMessage(o),this.loadedOffsets.add(e),a=s[r]=function(){let e={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...t)=>{e.lastNotify=t,e.listeners.forEach(e=>e(...t))},listeners:[],addNotifyListener:t=>{e.lastNotify&&t(...e.lastNotify),e.listeners.push(t)}},t=new Promise((n,o)=>{e.resolve=e=>{t.isFulfilled||t.isRejected||(t.isFulfilled=!0,n(e))},e.reject=(...e)=>{t.isRejected||t.isFulfilled||(t.isRejected=!0,o(...e))}});return t.catch(w).finally(()=>{t.notify=t.notifyAll=t.lastNotify=null,t.listeners.length=0,t.cancel&&(t.cancel=()=>{})}),Object.assign(t,e),t}();const c=a.then(e=>e.bytes);return this.saveChunkToCache(c,e,t),!n&&this.preloadChunks(e,e+15*this.limitPart),c}))}requestFilePartFromCache(e,t,n){const o=this.getChunkKey(e,t);return C.getFile(o).then(e=>n?new Uint8Array:m(e),e=>{})}requestFilePart(e,t,n){return this.requestFilePartFromCache(e,t,n).then(o=>o||this.requestFilePartFromWorker(e,t,n))}saveChunkToCache(e,t,n){return e.then(e=>{const o=this.getChunkKey(t,n),r=new Response(e,{headers:{"Content-Length":""+e.length,"Content-Type":"application/octet-stream","Time-Cached":""+(Date.now()/1e3|0)}});return C.save(o,r)})}preloadChunk(e){this.loadedOffsets.has(e)||(this.loadedOffsets.add(e),this.requestFilePart(e,this.limitPart,!0))}preloadChunks(e,t){if(t>this.info.size&&(t=this.info.size),e)for(;e{n===i&&o===i+r||(e=e.slice(n-i,o-i+1));const t={"Accept-Ranges":"bytes","Content-Range":`bytes ${n}-${n+e.byteLength-1}/${this.info.size||"*"}`,"Content-Length":""+e.byteLength};return this.info.mimeType&&(t["Content-Type"]=this.info.mimeType),new Response(e,{status:206,statusText:"Partial Content",headers:t})})}getChunkKey(e,t){return this.id+"?offset="+e+"&limit="+t}static get(e){var t;return null!==(t=D.get(this.getId(e)))&&void 0!==t?t:new k(e)}static getId(e){return e.location.id}}const F=524288,R=1048576;function N(e,t=2048){return e-e%t}var L={name:"tweb",version:7,stores:[{name:"session"},{name:"stickerSets"},{name:"users"},{name:"chats"},{name:"dialogs"},{name:"messages"}]};var M="undefined"!=typeof window?window:self;const W=navigator?navigator.userAgent:null,I=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&M.MSStream,!!("safari"in M)||(!W||(/\b(iPad|iPhone|iPod)\b/.test(W)||W.match("Safari")&&W.match("Chrome"))),navigator.userAgent.toLowerCase().indexOf("firefox")>-1);navigator.maxTouchPoints>0&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i);class q{constructor(e,t){this.storageIsAvailable=!0,function(e,t){if(t)for(let n in t)void 0!==t[n]&&(e[n]=t[n])}(this,e),o.test&&(this.name+="_test"),this.storeName=t,this.log=u("IDB-"+this.storeName),this.openDatabase(!0),q.STORAGES.push(this)}static closeDatabases(e){this.STORAGES.forEach(t=>{if(e&&e===t)return;const n=t.db;n&&(n.onclose=()=>{},n.close())})}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;try{var t=indexedDB.open(this.name,this.version);if(!t)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let n=!1;return setTimeout(()=>{n||t.onerror({type:"IDB_CREATE_TIMEOUT"})},3e3),this.openDbPromise=new Promise((e,o)=>{t.onsuccess=r=>{n=!0;const i=t.result;let s=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),o(e)},i.onclose=e=>{this.log.error("closed:",e),!s&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(s=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},t.onerror=e=>{n=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),o(e)},t.onupgradeneeded=e=>{n=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);var t=e.target.result;this.stores.forEach(e=>{t.objectStoreNames.contains(e.name)||((e,t)=>{var n;const o=e.createObjectStore(t.name);if(null===(n=t.indexes)||void 0===n?void 0:n.length)for(const e of t.indexes)o.createIndex(e.indexName,e.keyPath,e.objectParameters)})(t,e)})}})}delete(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readwrite",t=>e.map(e=>t.delete(e)),"")}clear(e){return this.getObjectStore("readwrite",e=>e.clear(),"",e)}save(e,t){return Array.isArray(e)||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",n=>e.map((e,o)=>n.put(t[o],e)),"")}saveFile(e,t){return t instanceof Blob||(t=v([t])),this.save(e,t)}get(e){return Array.isArray(e)||(e=[].concat(e)),this.getObjectStore("readonly",t=>e.map(e=>t.get(e)),"")}getObjectStore(e,t,n,o=this.storeName){let r;return n&&(r=performance.now(),this.log(n+": start")),this.openDatabase().then(i=>new Promise((s,a)=>{const c=i.transaction([o],e);c.onerror=e=>{clearTimeout(l),a(c.error)},c.oncomplete=e=>{clearTimeout(l),n&&this.log(n+": end",performance.now()-r);const t=d.map(e=>e.result);s(h?t:t[0])};const l=setTimeout(()=>{this.log.error("transaction not finished",c)},1e4),u=t(c.objectStore(o)),h=Array.isArray(u),d=h?u:[].concat(u)}))}getAll(){return this.getObjectStore("readonly",e=>e.getAll(),"")}}q.STORAGES=[];var B=function(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))};const G=self,U=location.protocol+"//"+location.hostname+location.pathname.split("/").slice(0,-1).join("/")+"/";const z=new class{constructor(e,t,n){this.defaults=n,this.cache={},this.storage=new q(e,t)}get(e){return B(this,void 0,void 0,(function*(){if(void 0!==this.cache[e])return this.cache[e];let t;try{t=yield this.storage.get(e)}catch(e){}if(void 0!==this.cache[e])return this.cache[e];if(void 0===t){const n=this.defaults[e];t="function"==typeof n?n():n}return this.cache[e]=t}))}set(e,t){return B(this,void 0,void 0,(function*(){this.cache[e]=t;try{this.storage.save(e,t)}catch(e){}}))}}(L,"session",{push_mute_until:0,push_last_alive:0,push_lang:{},push_settings:{}});G.addEventListener("push",e=>{const t=e.data.json();H("push",t);let n=!1;const o=Promise.all([z.get("push_mute_until"),z.get("push_last_alive"),G.clients.matchAll({type:"window"})]).then(e=>{const[o,r,i]=e;if(H("matched clients",i),n=i.length>0,n)throw"Supress notification because some instance is alive";const s=Date.now();if(Y()&&o&&s{H(e)});const r=o.then(()=>Promise.all([z.get("push_settings"),z.get("push_lang")])).then(e=>function(e,t,n){const o="assets/img/logo_filled_rounded.png";let r,i=e.title||"Telegram",s=e.description||"";e.custom&&(r=e.custom.channel_id?-e.custom.channel_id:e.custom.chat_id?-e.custom.chat_id:+e.custom.from_id||0);e.custom.peerId=""+r;let a="peer"+r;t&&t.nopreview&&(i="Telegram",s=n.push_message_nopreview||"You have a new message",a="unknown_peer");H("show notify",i,s,o,e);const c=[{action:"mute1d",title:n.push_action_mute1d||"Mute for 24H"}];return G.registration.showNotification(i,{body:s,icon:o,tag:a,data:e,actions:c}).then(e=>{var t;e&&e.notification&&(t=e.notification,V.has(t)||(V.add(t),t.onclose=J))}).catch(e=>{H.error("Show notification promise",e)})}(t,e[0],e[1])).catch(()=>(H("Closing all notifications on push",n),Y()||n?K():G.registration.showNotification("Telegram",{tag:"unknown_peer"}).then(()=>{if(n)return K();setTimeout(()=>K(),n?0:100)}).catch(e=>{H.error("Show notification error",e)})));e.waitUntil(r)}),G.addEventListener("notificationclick",e=>{const t=e.notification;H("On notification click: ",t.tag),t.close();const n=e.action;if("mute1d"===n&&Y())return H("[SW] mute for 1d"),void z.set("push_mute_until",Date.now()+864e5);const o=t.data;if(!o)return;const r=G.clients.matchAll({type:"window"}).then(e=>{o.action=n,$={type:"push_click",payload:o};for(let t=0;tG.clients.openWindow(e.baseUrl||U))}).catch(e=>{H.error("Clients.matchAll error",e)});e.waitUntil(r)}),G.addEventListener("notificationclose",J);let $,V=new Set;function J(e){var t;t=e.notification,V.delete(t)}function K(){for(const e of V)try{e.close()}catch(e){}let e;return e="getNotifications"in G.registration?G.registration.getNotifications({}).then(e=>{for(let t=0,n=e.length;t{H.error("Offline register SW error",e)}):Promise.resolve(),V.clear(),e}function Y(){return I}const H=u("SW",i.Error|i.Debug|i.Log|i.Warn),X=self,Q=new Map,Z={notifications_clear:()=>{K()},ping:(e,t)=>{!function(e,t){const n=t.ports&&t.ports[0]||t.source,o=e.payload;o.localNotifications&&z.set("push_last_alive",Date.now()),$&&n&&"postMessage"in n&&(n.postMessage($,[]),$=void 0),o.lang&&z.set("push_lang",o.lang),o.settings&&z.set("push_settings",o.settings)}(e,t)},requestFilePart:(e,t)=>{const n=t.source,o=Q.get(n.id);if(!o)return;const r=o[e.id];r&&(e.error?r.reject(e.error):r.resolve(e.payload),delete o[e.id])},toggleStorage:e=>{j.toggleStorage(e.payload)}};X.addEventListener("message",e=>{const t=e.data,n=Z[t.type];n&&n(t,e)});const ee=e=>{if(0===e.request.url.indexOf(location.origin+"/")&&e.request.url.match(/\.(js|css|jpe?g|json|wasm|png|mp3|svg|tgs|ico|woff2?|ttf|webmanifest?)(?:\?.*)?$/))return e.respondWith(function(e){return h(this,void 0,void 0,(function*(){try{const t=yield g(d.caches.open("cachedAssets")),n=yield g(t.match(e.request,{ignoreVary:!0}));if(n&&f(n))return n;const o={Vary:"*"};let r=yield fetch(e.request,{headers:o});if(f(r))t.put(e.request,r.clone());else if(304===r.status){const n=e.request.url.replace(/\?.+$/,"")+"?"+(1e5*Math.random()|0);r=yield fetch(n,{headers:o}),f(r)&&t.put(e.request,r.clone())}return r}catch(t){return fetch(e.request)}}))}(e));try{const[,t,n,o]=/http[:s]+\/\/.*?(\/(.*?)(?:$|\/(.*)$))/.exec(e.request.url)||[];switch(n){case"stream":!function(e,t){const n=function(e){if(!e)return[0,0];const[,t]=e.split("="),n=t.split(", "),[o,r]=n[0].split("-");return[+o,+r||0]}(e.request.headers.get("Range")),o=JSON.parse(decodeURIComponent(t)),r=k.get(o);var i;e.respondWith(Promise.race([(i=45e3,new Promise(e=>{setTimeout(()=>{e(new Response("",{status:408,statusText:"Request timed out."}))},i)})),r.requestRange(n)]))}(e,o)}}catch(t){e.respondWith(new Response("",{status:500,statusText:"Internal Server Error"}))}},te=()=>{X.onfetch=ee};X.addEventListener("install",e=>{H("installing"),e.waitUntil(X.skipWaiting())}),X.addEventListener("activate",e=>{H("activating",X),e.waitUntil(X.caches.delete("cachedAssets")),e.waitUntil(X.clients.claim())}),X.onerror=e=>{H.error("error:",e)},X.onunhandledrejection=e=>{H.error("onunhandledrejection:",e)},X.onoffline=X.ononline=te,te()}]); //# sourceMappingURL=sw.js.map \ No newline at end of file